mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
drm/rockchip: rgb: Fix pinctrl handling
Change-Id: I473f51993b97b3f597d906044d4d61e1af2cf5a7 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user