OMAPDSS: DSI: fix dsi_get_dsidev_from_id()
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 15 Oct 2012 09:48:11 +0000 (12:48 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 18 Oct 2012 10:11:10 +0000 (13:11 +0300)
If dsi_get_dsidev_from_id() is called with a DSI module id that does not
exist on the board, the function will crash as omap_dss_get_output()
will return NULL.

This happens on omap3 boards when dumping DSI clocks, as the dumping
code will try to get the dsidev for DSI modules 0 and 1, but omap3 only
has DSI module 0.

Also clean up the id -> output mapping, so that if the function is
called with invalid module ID it will return NULL.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Archit Taneja <archit@ti.com>
drivers/video/omap2/dss/dsi.c

index af07ec6a83bd29387e9cf64fb83395e6dfe9f0f0..7d0db2bf2fc64d30c94cafb18159783f39eb545c 100644 (file)
@@ -364,11 +364,20 @@ struct platform_device *dsi_get_dsidev_from_id(int module)
        struct omap_dss_output *out;
        enum omap_dss_output_id id;
 
-       id = module == 0 ? OMAP_DSS_OUTPUT_DSI1 : OMAP_DSS_OUTPUT_DSI2;
+       switch (module) {
+       case 0:
+               id = OMAP_DSS_OUTPUT_DSI1;
+               break;
+       case 1:
+               id = OMAP_DSS_OUTPUT_DSI2;
+               break;
+       default:
+               return NULL;
+       }
 
        out = omap_dss_get_output(id);
 
-       return out->pdev;
+       return out ? out->pdev : NULL;
 }
 
 static inline void dsi_write_reg(struct platform_device *dsidev,