diff options
| author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2011-11-21 06:42:58 -0500 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2011-12-02 01:54:54 -0500 |
| commit | 33ca237f80555cde41c17682991a2b58d2f14da5 (patch) | |
| tree | 7d6bf28ff53dd00bb37cfa71471d5384837ebc4d | |
| parent | 2a4ee7ee685f3bf996461ed0d148857ce85a00e2 (diff) | |
OMAPDSS: check the return value of dss_mgr_enable()
Now that dss_mgr_enable returns an error value, check it in all the
places dss_mgr_enable is used, and bail out properly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
| -rw-r--r-- | drivers/video/omap2/dss/dpi.c | 5 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dsi.c | 11 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 9 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/sdi.c | 6 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/venc.c | 26 |
5 files changed, 50 insertions, 7 deletions
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c index 79c4df3c9a88..395d658a94fc 100644 --- a/drivers/video/omap2/dss/dpi.c +++ b/drivers/video/omap2/dss/dpi.c | |||
| @@ -223,10 +223,13 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev) | |||
| 223 | 223 | ||
| 224 | mdelay(2); | 224 | mdelay(2); |
| 225 | 225 | ||
| 226 | dss_mgr_enable(dssdev->manager); | 226 | r = dss_mgr_enable(dssdev->manager); |
| 227 | if (r) | ||
| 228 | goto err_mgr_enable; | ||
| 227 | 229 | ||
| 228 | return 0; | 230 | return 0; |
| 229 | 231 | ||
| 232 | err_mgr_enable: | ||
| 230 | err_set_mode: | 233 | err_set_mode: |
| 231 | if (dpi_use_dsi_pll(dssdev)) | 234 | if (dpi_use_dsi_pll(dssdev)) |
| 232 | dsi_pll_uninit(dpi.dsidev, true); | 235 | dsi_pll_uninit(dpi.dsidev, true); |
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c index 9cb2e827c001..4dc98b692267 100644 --- a/drivers/video/omap2/dss/dsi.c +++ b/drivers/video/omap2/dss/dsi.c | |||
| @@ -3979,6 +3979,7 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel) | |||
| 3979 | int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt); | 3979 | int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt); |
| 3980 | u8 data_type; | 3980 | u8 data_type; |
| 3981 | u16 word_count; | 3981 | u16 word_count; |
| 3982 | int r; | ||
| 3982 | 3983 | ||
| 3983 | if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) { | 3984 | if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) { |
| 3984 | switch (dssdev->panel.dsi_pix_fmt) { | 3985 | switch (dssdev->panel.dsi_pix_fmt) { |
| @@ -4013,7 +4014,15 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel) | |||
| 4013 | dsi_if_enable(dsidev, true); | 4014 | dsi_if_enable(dsidev, true); |
| 4014 | } | 4015 | } |
| 4015 | 4016 | ||
| 4016 | dss_mgr_enable(dssdev->manager); | 4017 | r = dss_mgr_enable(dssdev->manager); |
| 4018 | if (r) { | ||
| 4019 | if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) { | ||
| 4020 | dsi_if_enable(dsidev, false); | ||
| 4021 | dsi_vc_enable(dsidev, channel, false); | ||
| 4022 | } | ||
| 4023 | |||
| 4024 | return r; | ||
| 4025 | } | ||
| 4017 | 4026 | ||
| 4018 | return 0; | 4027 | return 0; |
| 4019 | } | 4028 | } |
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index e245a2bbba9d..b064762b6994 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c | |||
| @@ -387,9 +387,16 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) | |||
| 387 | 387 | ||
| 388 | hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1); | 388 | hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1); |
| 389 | 389 | ||
| 390 | dss_mgr_enable(dssdev->manager); | 390 | r = dss_mgr_enable(dssdev->manager); |
| 391 | if (r) | ||
| 392 | goto err_mgr_enable; | ||
| 391 | 393 | ||
| 392 | return 0; | 394 | return 0; |
| 395 | |||
| 396 | err_mgr_enable: | ||
| 397 | hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 0); | ||
| 398 | hdmi.ip_data.ops->phy_disable(&hdmi.ip_data); | ||
| 399 | hdmi.ip_data.ops->pll_disable(&hdmi.ip_data); | ||
| 393 | err: | 400 | err: |
| 394 | hdmi_runtime_put(); | 401 | hdmi_runtime_put(); |
| 395 | return -EIO; | 402 | return -EIO; |
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c index 02da8beb7304..8266ca0d666b 100644 --- a/drivers/video/omap2/dss/sdi.c +++ b/drivers/video/omap2/dss/sdi.c | |||
| @@ -123,10 +123,14 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev) | |||
| 123 | goto err_sdi_enable; | 123 | goto err_sdi_enable; |
| 124 | mdelay(2); | 124 | mdelay(2); |
| 125 | 125 | ||
| 126 | dss_mgr_enable(dssdev->manager); | 126 | r = dss_mgr_enable(dssdev->manager); |
| 127 | if (r) | ||
| 128 | goto err_mgr_enable; | ||
| 127 | 129 | ||
| 128 | return 0; | 130 | return 0; |
| 129 | 131 | ||
| 132 | err_mgr_enable: | ||
| 133 | dss_sdi_disable(); | ||
| 130 | err_sdi_enable: | 134 | err_sdi_enable: |
| 131 | err_set_dispc_clock_div: | 135 | err_set_dispc_clock_div: |
| 132 | err_set_dss_clock_div: | 136 | err_set_dss_clock_div: |
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c index 101fcd77a50d..b3e9f9091581 100644 --- a/drivers/video/omap2/dss/venc.c +++ b/drivers/video/omap2/dss/venc.c | |||
| @@ -417,9 +417,10 @@ static const struct venc_config *venc_timings_to_config( | |||
| 417 | BUG(); | 417 | BUG(); |
| 418 | } | 418 | } |
| 419 | 419 | ||
| 420 | static void venc_power_on(struct omap_dss_device *dssdev) | 420 | static int venc_power_on(struct omap_dss_device *dssdev) |
| 421 | { | 421 | { |
| 422 | u32 l; | 422 | u32 l; |
| 423 | int r; | ||
| 423 | 424 | ||
| 424 | venc_reset(); | 425 | venc_reset(); |
| 425 | venc_write_config(venc_timings_to_config(&dssdev->panel.timings)); | 426 | venc_write_config(venc_timings_to_config(&dssdev->panel.timings)); |
| @@ -447,7 +448,22 @@ static void venc_power_on(struct omap_dss_device *dssdev) | |||
| 447 | if (dssdev->platform_enable) | 448 | if (dssdev->platform_enable) |
| 448 | dssdev->platform_enable(dssdev); | 449 | dssdev->platform_enable(dssdev); |
| 449 | 450 | ||
| 450 | dss_mgr_enable(dssdev->manager); | 451 | r = dss_mgr_enable(dssdev->manager); |
| 452 | if (r) | ||
| 453 | goto err; | ||
| 454 | |||
| 455 | return 0; | ||
| 456 | |||
| 457 | err: | ||
| 458 | venc_write_reg(VENC_OUTPUT_CONTROL, 0); | ||
| 459 | dss_set_dac_pwrdn_bgz(0); | ||
| 460 | |||
| 461 | if (dssdev->platform_disable) | ||
| 462 | dssdev->platform_disable(dssdev); | ||
| 463 | |||
| 464 | regulator_disable(venc.vdda_dac_reg); | ||
| 465 | |||
| 466 | return r; | ||
| 451 | } | 467 | } |
| 452 | 468 | ||
| 453 | static void venc_power_off(struct omap_dss_device *dssdev) | 469 | static void venc_power_off(struct omap_dss_device *dssdev) |
| @@ -504,7 +520,9 @@ static int venc_panel_enable(struct omap_dss_device *dssdev) | |||
| 504 | if (r) | 520 | if (r) |
| 505 | goto err1; | 521 | goto err1; |
| 506 | 522 | ||
| 507 | venc_power_on(dssdev); | 523 | r = venc_power_on(dssdev); |
| 524 | if (r) | ||
| 525 | goto err2; | ||
| 508 | 526 | ||
| 509 | venc.wss_data = 0; | 527 | venc.wss_data = 0; |
| 510 | 528 | ||
| @@ -512,6 +530,8 @@ static int venc_panel_enable(struct omap_dss_device *dssdev) | |||
| 512 | 530 | ||
| 513 | mutex_unlock(&venc.venc_lock); | 531 | mutex_unlock(&venc.venc_lock); |
| 514 | return 0; | 532 | return 0; |
| 533 | err2: | ||
| 534 | venc_runtime_put(); | ||
| 515 | err1: | 535 | err1: |
| 516 | omap_dss_stop_device(dssdev); | 536 | omap_dss_stop_device(dssdev); |
| 517 | err0: | 537 | err0: |
