diff options
-rw-r--r-- | Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 23 |
2 files changed, 26 insertions, 3 deletions
diff --git a/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt index 726c94502a2a..0b39256c00ae 100644 --- a/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt +++ b/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt | |||
@@ -28,6 +28,12 @@ Required properties: | |||
28 | Port 0: contained 2 endpoints, connecting to the output of vop. | 28 | Port 0: contained 2 endpoints, connecting to the output of vop. |
29 | Port 1: contained 1 endpoint, connecting to the input of panel. | 29 | Port 1: contained 1 endpoint, connecting to the input of panel. |
30 | 30 | ||
31 | Optional property for different chips: | ||
32 | - clocks: from common clock binding: handle to grf_vio clock. | ||
33 | |||
34 | - clock-names: from common clock binding: | ||
35 | Required elements: "grf" | ||
36 | |||
31 | For the below properties, please refer to Analogix DP binding document: | 37 | For the below properties, please refer to Analogix DP binding document: |
32 | * Documentation/devicetree/bindings/drm/bridge/analogix_dp.txt | 38 | * Documentation/devicetree/bindings/drm/bridge/analogix_dp.txt |
33 | - phys (required) | 39 | - phys (required) |
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 850edc4d99c8..e81e19a660ad 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | |||
@@ -64,6 +64,7 @@ struct rockchip_dp_device { | |||
64 | struct drm_display_mode mode; | 64 | struct drm_display_mode mode; |
65 | 65 | ||
66 | struct clk *pclk; | 66 | struct clk *pclk; |
67 | struct clk *grfclk; | ||
67 | struct regmap *grf; | 68 | struct regmap *grf; |
68 | struct reset_control *rst; | 69 | struct reset_control *rst; |
69 | 70 | ||
@@ -160,11 +161,17 @@ static void rockchip_dp_drm_encoder_enable(struct drm_encoder *encoder) | |||
160 | 161 | ||
161 | dev_dbg(dp->dev, "vop %s output to dp\n", (ret) ? "LIT" : "BIG"); | 162 | dev_dbg(dp->dev, "vop %s output to dp\n", (ret) ? "LIT" : "BIG"); |
162 | 163 | ||
163 | ret = regmap_write(dp->grf, dp->data->lcdsel_grf_reg, val); | 164 | ret = clk_prepare_enable(dp->grfclk); |
164 | if (ret != 0) { | 165 | if (ret < 0) { |
165 | dev_err(dp->dev, "Could not write to GRF: %d\n", ret); | 166 | dev_err(dp->dev, "failed to enable grfclk %d\n", ret); |
166 | return; | 167 | return; |
167 | } | 168 | } |
169 | |||
170 | ret = regmap_write(dp->grf, dp->data->lcdsel_grf_reg, val); | ||
171 | if (ret != 0) | ||
172 | dev_err(dp->dev, "Could not write to GRF: %d\n", ret); | ||
173 | |||
174 | clk_disable_unprepare(dp->grfclk); | ||
168 | } | 175 | } |
169 | 176 | ||
170 | static void rockchip_dp_drm_encoder_nop(struct drm_encoder *encoder) | 177 | static void rockchip_dp_drm_encoder_nop(struct drm_encoder *encoder) |
@@ -234,6 +241,16 @@ static int rockchip_dp_init(struct rockchip_dp_device *dp) | |||
234 | return PTR_ERR(dp->grf); | 241 | return PTR_ERR(dp->grf); |
235 | } | 242 | } |
236 | 243 | ||
244 | dp->grfclk = devm_clk_get(dev, "grf"); | ||
245 | if (PTR_ERR(dp->grfclk) == -ENOENT) { | ||
246 | dp->grfclk = NULL; | ||
247 | } else if (PTR_ERR(dp->grfclk) == -EPROBE_DEFER) { | ||
248 | return -EPROBE_DEFER; | ||
249 | } else if (IS_ERR(dp->grfclk)) { | ||
250 | dev_err(dev, "failed to get grf clock\n"); | ||
251 | return PTR_ERR(dp->grfclk); | ||
252 | } | ||
253 | |||
237 | dp->pclk = devm_clk_get(dev, "pclk"); | 254 | dp->pclk = devm_clk_get(dev, "pclk"); |
238 | if (IS_ERR(dp->pclk)) { | 255 | if (IS_ERR(dp->pclk)) { |
239 | dev_err(dev, "failed to get pclk property\n"); | 256 | dev_err(dev, "failed to get pclk property\n"); |