drm/rockchip: rgb: Fix pinctrl handling

Change-Id: I473f51993b97b3f597d906044d4d61e1af2cf5a7
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
Wyon Bi
2018-08-02 10:21:36 +08:00
committed by Tao Huang
parent 7c519d6367
commit 9f63cec05b
2 changed files with 8 additions and 26 deletions

View File

@@ -9,8 +9,9 @@ Required properties:
- "rockchip,rk3308-rgb";
Optional properties:
- pinctrl-names: must contain a "lcdc" entry.
- pinctrl-0: pin control group to be used for this interface.
- pinctrl-names: the pin control state names; should contain "default"
- pinctrl-0: the default pinctrl state (active)
- pinctrl-1: the "sleep" pinctrl state
The rgb has two video ports described by:
Documentation/devicetree/bindings/media/video-interfaces.txt
@@ -45,7 +46,7 @@ For Rockchip RV1108:
rgb: rgb {
compatible = "rockchip,rv1108-rgb";
pinctrl-names = "lcdc";
pinctrl-names = "default";
pinctrl-0 = <&lcdc_ctl>;
ports {

View File

@@ -44,7 +44,6 @@ struct rockchip_rgb {
struct drm_bridge *bridge;
struct drm_connector connector;
struct drm_encoder encoder;
struct dev_pin_info *pins;
int output_mode;
struct regmap *grf;
};
@@ -112,6 +111,8 @@ static void rockchip_rgb_encoder_enable(struct drm_encoder *encoder)
{
struct rockchip_rgb *rgb = encoder_to_rgb(encoder);
pinctrl_pm_select_default_state(rgb->dev);
if (rgb->grf) {
int pipe = drm_of_encoder_active_endpoint_id(rgb->dev->of_node,
encoder);
@@ -122,10 +123,6 @@ static void rockchip_rgb_encoder_enable(struct drm_encoder *encoder)
}
drm_panel_prepare(rgb->panel);
/* iomux to LCD data/sync mode */
if (rgb->pins && !IS_ERR(rgb->pins->default_state))
pinctrl_select_state(rgb->pins->p, rgb->pins->default_state);
drm_panel_enable(rgb->panel);
}
@@ -135,6 +132,8 @@ static void rockchip_rgb_encoder_disable(struct drm_encoder *encoder)
drm_panel_disable(rgb->panel);
drm_panel_unprepare(rgb->panel);
pinctrl_pm_select_sleep_state(rgb->dev);
}
static int
@@ -366,24 +365,6 @@ static int rockchip_rgb_probe(struct platform_device *pdev)
}
}
rgb->pins = devm_kzalloc(rgb->dev, sizeof(*rgb->pins), GFP_KERNEL);
if (!rgb->pins)
return -ENOMEM;
rgb->pins->p = devm_pinctrl_get(rgb->dev);
if (IS_ERR(rgb->pins->p)) {
DRM_DEV_ERROR(dev, "no pinctrl handle\n");
devm_kfree(rgb->dev, rgb->pins);
rgb->pins = NULL;
} else {
rgb->pins->default_state =
pinctrl_lookup_state(rgb->pins->p, "lcdc");
if (IS_ERR(rgb->pins->default_state)) {
DRM_DEV_ERROR(dev, "no default pinctrl state\n");
devm_kfree(rgb->dev, rgb->pins);
rgb->pins = NULL;
}
}
dev_set_drvdata(dev, rgb);
ret = component_add(&pdev->dev, &rockchip_rgb_component_ops);
if (ret < 0)