aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/shmobile
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2013-12-01 19:52:20 -0500
committerDave Airlie <airlied@redhat.com>2013-12-17 20:04:40 -0500
commitc0c72a85c6c656218a894d4d64485f7bb54820f8 (patch)
tree4e2d93992ad00ff9220977d6d0e990896702b40f /drivers/gpu/drm/shmobile
parent66ee52e284a6cb387a7b28e29e8282da253efc97 (diff)
drm: shmob_drm: Check clk_prepare_enable() return value
The clk_prepare_enable() call can fail. Check it's return value. We can't propagate it all the way to the user as the KMS operations in which the clock is enabled return a void. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/shmobile')
-rw-r--r--drivers/gpu/drm/shmobile/shmob_drm_crtc.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
index 562f9a401cf6..0428076f1ce8 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
@@ -37,14 +37,21 @@
37 * Clock management 37 * Clock management
38 */ 38 */
39 39
40static void shmob_drm_clk_on(struct shmob_drm_device *sdev) 40static int shmob_drm_clk_on(struct shmob_drm_device *sdev)
41{ 41{
42 if (sdev->clock) 42 int ret;
43 clk_prepare_enable(sdev->clock); 43
44 if (sdev->clock) {
45 ret = clk_prepare_enable(sdev->clock);
46 if (ret < 0)
47 return ret;
48 }
44#if 0 49#if 0
45 if (sdev->meram_dev && sdev->meram_dev->pdev) 50 if (sdev->meram_dev && sdev->meram_dev->pdev)
46 pm_runtime_get_sync(&sdev->meram_dev->pdev->dev); 51 pm_runtime_get_sync(&sdev->meram_dev->pdev->dev);
47#endif 52#endif
53
54 return 0;
48} 55}
49 56
50static void shmob_drm_clk_off(struct shmob_drm_device *sdev) 57static void shmob_drm_clk_off(struct shmob_drm_device *sdev)
@@ -161,6 +168,7 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
161 struct drm_device *dev = sdev->ddev; 168 struct drm_device *dev = sdev->ddev;
162 struct drm_plane *plane; 169 struct drm_plane *plane;
163 u32 value; 170 u32 value;
171 int ret;
164 172
165 if (scrtc->started) 173 if (scrtc->started)
166 return; 174 return;
@@ -170,7 +178,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
170 return; 178 return;
171 179
172 /* Enable clocks before accessing the hardware. */ 180 /* Enable clocks before accessing the hardware. */
173 shmob_drm_clk_on(sdev); 181 ret = shmob_drm_clk_on(sdev);
182 if (ret < 0)
183 return;
174 184
175 /* Reset and enable the LCDC. */ 185 /* Reset and enable the LCDC. */
176 lcdc_write(sdev, LDCNT2R, lcdc_read(sdev, LDCNT2R) | LDCNT2R_BR); 186 lcdc_write(sdev, LDCNT2R, lcdc_read(sdev, LDCNT2R) | LDCNT2R_BR);