aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2011-06-15 08:21:12 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-09-30 09:16:17 -0400
commit5bc416cba15f43c799fc02727c6d6887f3e35a4e (patch)
treec53e4104537b3189d54c9f7254936e277ab096a5
parent4e6a0ab0f9d4c8062bd84f3fc95b175001d46ebf (diff)
OMAP: DSS2: DSI: Improve dsi_mux_pads parameters
dsi_mux_pads() needs to know about the DSI HW module and the DSI lanes used. Split the function into two, enable and disable, which take necessary arguments, and add empty implementations for both. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--arch/arm/mach-omap2/display.c14
-rw-r--r--drivers/video/omap2/dss/dsi.c42
-rw-r--r--include/video/omapdss.h3
3 files changed, 47 insertions, 12 deletions
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index c42df111c9d2..7c6011df80a8 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -74,6 +74,15 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
74 { "dss_hdmi", "omapdss_hdmi", -1 }, 74 { "dss_hdmi", "omapdss_hdmi", -1 },
75}; 75};
76 76
77static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
78{
79 return 0;
80}
81
82static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)
83{
84}
85
77int __init omap_display_init(struct omap_dss_board_info *board_data) 86int __init omap_display_init(struct omap_dss_board_info *board_data)
78{ 87{
79 int r = 0; 88 int r = 0;
@@ -96,6 +105,11 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
96 oh_count = ARRAY_SIZE(omap4_dss_hwmod_data); 105 oh_count = ARRAY_SIZE(omap4_dss_hwmod_data);
97 } 106 }
98 107
108 if (board_data->dsi_enable_pads == NULL)
109 board_data->dsi_enable_pads = omap_dsi_enable_pads;
110 if (board_data->dsi_disable_pads == NULL)
111 board_data->dsi_disable_pads = omap_dsi_disable_pads;
112
99 pdata.board_data = board_data; 113 pdata.board_data = board_data;
100 pdata.board_data->get_context_loss_count = 114 pdata.board_data->get_context_loss_count =
101 omap_pm_get_dev_context_loss_count; 115 omap_pm_get_dev_context_loss_count;
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 713e1d9ac0ec..ae6bf1d46c97 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -274,7 +274,8 @@ struct dsi_data {
274 struct clk *dss_clk; 274 struct clk *dss_clk;
275 struct clk *sys_clk; 275 struct clk *sys_clk;
276 276
277 void (*dsi_mux_pads)(bool enable); 277 int (*enable_pads)(int dsi_id, unsigned lane_mask);
278 void (*disable_pads)(int dsi_id, unsigned lane_mask);
278 279
279 struct dsi_clock_info current_cinfo; 280 struct dsi_clock_info current_cinfo;
280 281
@@ -2355,6 +2356,24 @@ static int dsi_cio_wait_tx_clk_esc_reset(struct omap_dss_device *dssdev)
2355 return 0; 2356 return 0;
2356} 2357}
2357 2358
2359static unsigned dsi_get_lane_mask(struct omap_dss_device *dssdev)
2360{
2361 unsigned lanes = 0;
2362
2363 if (dssdev->phy.dsi.clk_lane != 0)
2364 lanes |= 1 << (dssdev->phy.dsi.clk_lane - 1);
2365 if (dssdev->phy.dsi.data1_lane != 0)
2366 lanes |= 1 << (dssdev->phy.dsi.data1_lane - 1);
2367 if (dssdev->phy.dsi.data2_lane != 0)
2368 lanes |= 1 << (dssdev->phy.dsi.data2_lane - 1);
2369 if (dssdev->phy.dsi.data3_lane != 0)
2370 lanes |= 1 << (dssdev->phy.dsi.data3_lane - 1);
2371 if (dssdev->phy.dsi.data4_lane != 0)
2372 lanes |= 1 << (dssdev->phy.dsi.data4_lane - 1);
2373
2374 return lanes;
2375}
2376
2358static int dsi_cio_init(struct omap_dss_device *dssdev) 2377static int dsi_cio_init(struct omap_dss_device *dssdev)
2359{ 2378{
2360 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 2379 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
@@ -2365,8 +2384,9 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
2365 2384
2366 DSSDBGF(); 2385 DSSDBGF();
2367 2386
2368 if (dsi->dsi_mux_pads) 2387 r = dsi->enable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
2369 dsi->dsi_mux_pads(true); 2388 if (r)
2389 return r;
2370 2390
2371 dsi_enable_scp_clk(dsidev); 2391 dsi_enable_scp_clk(dsidev);
2372 2392
@@ -2462,19 +2482,18 @@ err_cio_pwr:
2462 dsi_cio_disable_lane_override(dsidev); 2482 dsi_cio_disable_lane_override(dsidev);
2463err_scp_clk_dom: 2483err_scp_clk_dom:
2464 dsi_disable_scp_clk(dsidev); 2484 dsi_disable_scp_clk(dsidev);
2465 if (dsi->dsi_mux_pads) 2485 dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
2466 dsi->dsi_mux_pads(false);
2467 return r; 2486 return r;
2468} 2487}
2469 2488
2470static void dsi_cio_uninit(struct platform_device *dsidev) 2489static void dsi_cio_uninit(struct omap_dss_device *dssdev)
2471{ 2490{
2491 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
2472 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 2492 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
2473 2493
2474 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF); 2494 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF);
2475 dsi_disable_scp_clk(dsidev); 2495 dsi_disable_scp_clk(dsidev);
2476 if (dsi->dsi_mux_pads) 2496 dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
2477 dsi->dsi_mux_pads(false);
2478} 2497}
2479 2498
2480static void dsi_config_tx_fifo(struct platform_device *dsidev, 2499static void dsi_config_tx_fifo(struct platform_device *dsidev,
@@ -4161,7 +4180,7 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
4161 4180
4162 return 0; 4181 return 0;
4163err3: 4182err3:
4164 dsi_cio_uninit(dsidev); 4183 dsi_cio_uninit(dssdev);
4165err2: 4184err2:
4166 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK); 4185 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
4167 dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK); 4186 dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
@@ -4190,7 +4209,7 @@ static void dsi_display_uninit_dsi(struct omap_dss_device *dssdev,
4190 4209
4191 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK); 4210 dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);
4192 dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK); 4211 dss_select_dsi_clk_source(dsi_module, OMAP_DSS_CLK_SRC_FCK);
4193 dsi_cio_uninit(dsidev); 4212 dsi_cio_uninit(dssdev);
4194 dsi_pll_uninit(dsidev, disconnect_lanes); 4213 dsi_pll_uninit(dsidev, disconnect_lanes);
4195} 4214}
4196 4215
@@ -4481,7 +4500,8 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
4481 4500
4482 dss_plat_data = dsidev->dev.platform_data; 4501 dss_plat_data = dsidev->dev.platform_data;
4483 board_info = dss_plat_data->board_data; 4502 board_info = dss_plat_data->board_data;
4484 dsi->dsi_mux_pads = board_info->dsi_mux_pads; 4503 dsi->enable_pads = board_info->dsi_enable_pads;
4504 dsi->disable_pads = board_info->dsi_disable_pads;
4485 4505
4486 spin_lock_init(&dsi->irq_lock); 4506 spin_lock_init(&dsi->irq_lock);
4487 spin_lock_init(&dsi->errors_lock); 4507 spin_lock_init(&dsi->errors_lock);
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 3b55ef22f8db..c4d1d4ed909f 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -242,7 +242,8 @@ struct omap_dss_board_info {
242 int num_devices; 242 int num_devices;
243 struct omap_dss_device **devices; 243 struct omap_dss_device **devices;
244 struct omap_dss_device *default_device; 244 struct omap_dss_device *default_device;
245 void (*dsi_mux_pads)(bool enable); 245 int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask);
246 void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask);
246}; 247};
247 248
248#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS) 249#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)