From 9f63cec05b0fa4d9a741a2d51aadde49f2cfd05f Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Thu, 2 Aug 2018 10:21:36 +0800 Subject: [PATCH] drm/rockchip: rgb: Fix pinctrl handling Change-Id: I473f51993b97b3f597d906044d4d61e1af2cf5a7 Signed-off-by: Wyon Bi --- .../display/rockchip/rockchip-rgb.txt | 7 ++--- drivers/gpu/drm/rockchip/rockchip_rgb.c | 27 +++---------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/Documentation/devicetree/bindings/display/rockchip/rockchip-rgb.txt b/Documentation/devicetree/bindings/display/rockchip/rockchip-rgb.txt index a53b1f6dea89..cb3e490a43f2 100644 --- a/Documentation/devicetree/bindings/display/rockchip/rockchip-rgb.txt +++ b/Documentation/devicetree/bindings/display/rockchip/rockchip-rgb.txt @@ -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 { diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c index 26ac585ba666..0ff696be4342 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c @@ -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)