aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/dpi.c
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2011-05-12 07:56:26 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-05-12 12:30:26 -0400
commita72b64b99918ee801a3a6abf5391e356752bcad0 (patch)
tree7e3c19fe6b77bf6187b503b5dec2b0e1e80e99d9 /drivers/video/omap2/dss/dpi.c
parent41e03d15977978cdf8a5936f30ceb6088dda157a (diff)
OMAP: DSS2: Pass platform_device as an argument in dsi functions
The DSI interface is represented as a platform device, using the DSI platform driver(dsi.c). The current DSI driver design is capable of running only one instance of a DSI device. On OMAP4, there are 2 very similar DSI modules which can be represented as instances of "omapdss_dsi" platform device. Add member "module" in "dssdev.phy.dsi" that tells us which DSI module's lanes the panel is connected to. Modify dsi.c functions to take the device's platform_device struct pointer, provide functions dsi_get_dsidev_from_dssdev() and dsi_get_dsidev_from_id() take the panel's omap_dss_device and module number respectively, and return the platform_device pointer. Currently, the dsi struct is declared globally and is accessed when dsi data is needed. The new pdev argument will be used later to provide the platform device's dsi related data. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss/dpi.c')
-rw-r--r--drivers/video/omap2/dss/dpi.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 3c988b65ca1..4d661a949b8 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -37,8 +37,18 @@
37 37
38static struct { 38static struct {
39 struct regulator *vdds_dsi_reg; 39 struct regulator *vdds_dsi_reg;
40 struct platform_device *dsidev;
40} dpi; 41} dpi;
41 42
43static struct platform_device *dpi_get_dsidev(enum omap_dss_clk_source clk)
44{
45 int dsi_module;
46
47 dsi_module = clk == OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC ? 0 : 1;
48
49 return dsi_get_dsidev_from_id(dsi_module);
50}
51
42static bool dpi_use_dsi_pll(struct omap_dss_device *dssdev) 52static bool dpi_use_dsi_pll(struct omap_dss_device *dssdev)
43{ 53{
44 if (dssdev->clocks.dispc.dispc_fclk_src == 54 if (dssdev->clocks.dispc.dispc_fclk_src ==
@@ -58,12 +68,12 @@ static int dpi_set_dsi_clk(struct omap_dss_device *dssdev, bool is_tft,
58 struct dispc_clock_info dispc_cinfo; 68 struct dispc_clock_info dispc_cinfo;
59 int r; 69 int r;
60 70
61 r = dsi_pll_calc_clock_div_pck(is_tft, pck_req, &dsi_cinfo, 71 r = dsi_pll_calc_clock_div_pck(dpi.dsidev, is_tft, pck_req,
62 &dispc_cinfo); 72 &dsi_cinfo, &dispc_cinfo);
63 if (r) 73 if (r)
64 return r; 74 return r;
65 75
66 r = dsi_pll_set_clock_div(&dsi_cinfo); 76 r = dsi_pll_set_clock_div(dpi.dsidev, &dsi_cinfo);
67 if (r) 77 if (r)
68 return r; 78 return r;
69 79
@@ -189,7 +199,7 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
189 199
190 if (dpi_use_dsi_pll(dssdev)) { 200 if (dpi_use_dsi_pll(dssdev)) {
191 dss_clk_enable(DSS_CLK_SYSCK); 201 dss_clk_enable(DSS_CLK_SYSCK);
192 r = dsi_pll_init(0, 1); 202 r = dsi_pll_init(dpi.dsidev, 0, 1);
193 if (r) 203 if (r)
194 goto err3; 204 goto err3;
195 } 205 }
@@ -206,7 +216,7 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
206 216
207err4: 217err4:
208 if (dpi_use_dsi_pll(dssdev)) 218 if (dpi_use_dsi_pll(dssdev))
209 dsi_pll_uninit(true); 219 dsi_pll_uninit(dpi.dsidev, true);
210err3: 220err3:
211 if (dpi_use_dsi_pll(dssdev)) 221 if (dpi_use_dsi_pll(dssdev))
212 dss_clk_disable(DSS_CLK_SYSCK); 222 dss_clk_disable(DSS_CLK_SYSCK);
@@ -227,7 +237,7 @@ void omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
227 237
228 if (dpi_use_dsi_pll(dssdev)) { 238 if (dpi_use_dsi_pll(dssdev)) {
229 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK); 239 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
230 dsi_pll_uninit(true); 240 dsi_pll_uninit(dpi.dsidev, true);
231 dss_clk_disable(DSS_CLK_SYSCK); 241 dss_clk_disable(DSS_CLK_SYSCK);
232 } 242 }
233 243
@@ -272,7 +282,7 @@ int dpi_check_timings(struct omap_dss_device *dssdev,
272 282
273 if (dpi_use_dsi_pll(dssdev)) { 283 if (dpi_use_dsi_pll(dssdev)) {
274 struct dsi_clock_info dsi_cinfo; 284 struct dsi_clock_info dsi_cinfo;
275 r = dsi_pll_calc_clock_div_pck(is_tft, 285 r = dsi_pll_calc_clock_div_pck(dpi.dsidev, is_tft,
276 timings->pixel_clock * 1000, 286 timings->pixel_clock * 1000,
277 &dsi_cinfo, &dispc_cinfo); 287 &dsi_cinfo, &dispc_cinfo);
278 288
@@ -319,6 +329,12 @@ int dpi_init_display(struct omap_dss_device *dssdev)
319 dpi.vdds_dsi_reg = vdds_dsi; 329 dpi.vdds_dsi_reg = vdds_dsi;
320 } 330 }
321 331
332 if (dpi_use_dsi_pll(dssdev)) {
333 enum omap_dss_clk_source dispc_fclk_src =
334 dssdev->clocks.dispc.dispc_fclk_src;
335 dpi.dsidev = dpi_get_dsidev(dispc_fclk_src);
336 }
337
322 return 0; 338 return 0;
323} 339}
324 340