diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2013-12-01 19:52:20 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-12-17 20:04:40 -0500 |
commit | c0c72a85c6c656218a894d4d64485f7bb54820f8 (patch) | |
tree | 4e2d93992ad00ff9220977d6d0e990896702b40f /drivers/gpu/drm/shmobile | |
parent | 66ee52e284a6cb387a7b28e29e8282da253efc97 (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.c | 18 |
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 | ||
40 | static void shmob_drm_clk_on(struct shmob_drm_device *sdev) | 40 | static 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 | ||
50 | static void shmob_drm_clk_off(struct shmob_drm_device *sdev) | 57 | static 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); |