diff options
-rw-r--r-- | drivers/video/omap2/dss/dsi.c | 47 | ||||
-rw-r--r-- | include/video/omapdss.h | 21 |
2 files changed, 26 insertions, 42 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c index 28d41d16b7be..9eb78455b7df 100644 --- a/drivers/video/omap2/dss/dsi.c +++ b/drivers/video/omap2/dss/dsi.c | |||
@@ -261,6 +261,13 @@ struct dsi_data { | |||
261 | struct clk *dss_clk; | 261 | struct clk *dss_clk; |
262 | struct clk *sys_clk; | 262 | struct clk *sys_clk; |
263 | 263 | ||
264 | struct dispc_clock_info user_dispc_cinfo; | ||
265 | struct dsi_clock_info user_dsi_cinfo; | ||
266 | |||
267 | enum omap_dss_clk_source user_dispc_fclk_src; | ||
268 | enum omap_dss_clk_source user_lcd_clk_src; | ||
269 | enum omap_dss_clk_source user_dsi_fclk_src; | ||
270 | |||
264 | struct dsi_clock_info current_cinfo; | 271 | struct dsi_clock_info current_cinfo; |
265 | 272 | ||
266 | bool vdds_dsi_enabled; | 273 | bool vdds_dsi_enabled; |
@@ -1200,7 +1207,7 @@ static int dsi_set_lp_clk_divisor(struct omap_dss_device *dssdev) | |||
1200 | unsigned lp_clk_div; | 1207 | unsigned lp_clk_div; |
1201 | unsigned long lp_clk; | 1208 | unsigned long lp_clk; |
1202 | 1209 | ||
1203 | lp_clk_div = dssdev->clocks.dsi.lp_clk_div; | 1210 | lp_clk_div = dsi->user_dsi_cinfo.lp_clk_div; |
1204 | 1211 | ||
1205 | if (lp_clk_div == 0 || lp_clk_div > dsi->lpdiv_max) | 1212 | if (lp_clk_div == 0 || lp_clk_div > dsi->lpdiv_max) |
1206 | return -EINVAL; | 1213 | return -EINVAL; |
@@ -3910,7 +3917,7 @@ static void dsi_config_cmd_mode_interleaving(struct omap_dss_device *dssdev) | |||
3910 | struct omap_video_timings *timings = &dsi->timings; | 3917 | struct omap_video_timings *timings = &dsi->timings; |
3911 | int bpp = dsi_get_pixel_size(dsi->pix_fmt); | 3918 | int bpp = dsi_get_pixel_size(dsi->pix_fmt); |
3912 | int ndl = dsi->num_lanes_used - 1; | 3919 | int ndl = dsi->num_lanes_used - 1; |
3913 | int dsi_fclk_hsdiv = dssdev->clocks.dsi.regm_dsi + 1; | 3920 | int dsi_fclk_hsdiv = dsi->user_dsi_cinfo.regm_dsi + 1; |
3914 | int hsa_interleave_hs = 0, hsa_interleave_lp = 0; | 3921 | int hsa_interleave_hs = 0, hsa_interleave_lp = 0; |
3915 | int hfp_interleave_hs = 0, hfp_interleave_lp = 0; | 3922 | int hfp_interleave_hs = 0, hfp_interleave_lp = 0; |
3916 | int hbp_interleave_hs = 0, hbp_interleave_lp = 0; | 3923 | int hbp_interleave_hs = 0, hbp_interleave_lp = 0; |
@@ -4302,24 +4309,24 @@ int omapdss_dsi_set_clocks(struct omap_dss_device *dssdev, | |||
4302 | dsi_fclk = cinfo.dsi_pll_hsdiv_dsi_clk; | 4309 | dsi_fclk = cinfo.dsi_pll_hsdiv_dsi_clk; |
4303 | lp_clk_div = DIV_ROUND_UP(dsi_fclk, lp_clk * 2); | 4310 | lp_clk_div = DIV_ROUND_UP(dsi_fclk, lp_clk * 2); |
4304 | 4311 | ||
4305 | dssdev->clocks.dsi.regn = cinfo.regn; | 4312 | dsi->user_dsi_cinfo.regn = cinfo.regn; |
4306 | dssdev->clocks.dsi.regm = cinfo.regm; | 4313 | dsi->user_dsi_cinfo.regm = cinfo.regm; |
4307 | dssdev->clocks.dsi.regm_dispc = cinfo.regm_dispc; | 4314 | dsi->user_dsi_cinfo.regm_dispc = cinfo.regm_dispc; |
4308 | dssdev->clocks.dsi.regm_dsi = cinfo.regm_dsi; | 4315 | dsi->user_dsi_cinfo.regm_dsi = cinfo.regm_dsi; |
4309 | 4316 | ||
4310 | dssdev->clocks.dsi.lp_clk_div = lp_clk_div; | 4317 | dsi->user_dsi_cinfo.lp_clk_div = lp_clk_div; |
4311 | 4318 | ||
4312 | dssdev->clocks.dispc.channel.lck_div = dispc_cinfo.lck_div; | 4319 | dsi->user_dispc_cinfo.lck_div = dispc_cinfo.lck_div; |
4313 | dssdev->clocks.dispc.channel.pck_div = dispc_cinfo.pck_div; | 4320 | dsi->user_dispc_cinfo.pck_div = dispc_cinfo.pck_div; |
4314 | 4321 | ||
4315 | dssdev->clocks.dispc.dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK; | 4322 | dsi->user_dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK; |
4316 | 4323 | ||
4317 | dssdev->clocks.dispc.channel.lcd_clk_src = | 4324 | dsi->user_lcd_clk_src = |
4318 | dsi->module_id == 0 ? | 4325 | dsi->module_id == 0 ? |
4319 | OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC : | 4326 | OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC : |
4320 | OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC; | 4327 | OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC; |
4321 | 4328 | ||
4322 | dssdev->clocks.dsi.dsi_fclk_src = | 4329 | dsi->user_dsi_fclk_src = |
4323 | dsi->module_id == 0 ? | 4330 | dsi->module_id == 0 ? |
4324 | OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI : | 4331 | OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI : |
4325 | OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI; | 4332 | OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI; |
@@ -4589,8 +4596,8 @@ static int dsi_configure_dispc_clocks(struct omap_dss_device *dssdev) | |||
4589 | 4596 | ||
4590 | fck = dsi_get_pll_hsdiv_dispc_rate(dsidev); | 4597 | fck = dsi_get_pll_hsdiv_dispc_rate(dsidev); |
4591 | 4598 | ||
4592 | dispc_cinfo.lck_div = dssdev->clocks.dispc.channel.lck_div; | 4599 | dispc_cinfo.lck_div = dsi->user_dispc_cinfo.lck_div; |
4593 | dispc_cinfo.pck_div = dssdev->clocks.dispc.channel.pck_div; | 4600 | dispc_cinfo.pck_div = dsi->user_dispc_cinfo.pck_div; |
4594 | 4601 | ||
4595 | r = dispc_calc_clock_rates(fck, &dispc_cinfo); | 4602 | r = dispc_calc_clock_rates(fck, &dispc_cinfo); |
4596 | if (r) { | 4603 | if (r) { |
@@ -4679,13 +4686,12 @@ static void dsi_display_uninit_dispc(struct omap_dss_device *dssdev) | |||
4679 | static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev) | 4686 | static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev) |
4680 | { | 4687 | { |
4681 | struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); | 4688 | struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); |
4689 | struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); | ||
4682 | struct dsi_clock_info cinfo; | 4690 | struct dsi_clock_info cinfo; |
4683 | int r; | 4691 | int r; |
4684 | 4692 | ||
4685 | cinfo.regn = dssdev->clocks.dsi.regn; | 4693 | cinfo = dsi->user_dsi_cinfo; |
4686 | cinfo.regm = dssdev->clocks.dsi.regm; | 4694 | |
4687 | cinfo.regm_dispc = dssdev->clocks.dsi.regm_dispc; | ||
4688 | cinfo.regm_dsi = dssdev->clocks.dsi.regm_dsi; | ||
4689 | r = dsi_calc_clock_rates(dsidev, &cinfo); | 4695 | r = dsi_calc_clock_rates(dsidev, &cinfo); |
4690 | if (r) { | 4696 | if (r) { |
4691 | DSSERR("Failed to calc dsi clocks\n"); | 4697 | DSSERR("Failed to calc dsi clocks\n"); |
@@ -4716,9 +4722,8 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev) | |||
4716 | if (r) | 4722 | if (r) |
4717 | goto err1; | 4723 | goto err1; |
4718 | 4724 | ||
4719 | dss_select_dsi_clk_source(dsi->module_id, dssdev->clocks.dsi.dsi_fclk_src); | 4725 | dss_select_dsi_clk_source(dsi->module_id, dsi->user_dsi_fclk_src); |
4720 | dss_select_lcd_clk_source(mgr->id, | 4726 | dss_select_lcd_clk_source(mgr->id, dsi->user_lcd_clk_src); |
4721 | dssdev->clocks.dispc.channel.lcd_clk_src); | ||
4722 | 4727 | ||
4723 | DSSDBG("PLL OK\n"); | 4728 | DSSDBG("PLL OK\n"); |
4724 | 4729 | ||
diff --git a/include/video/omapdss.h b/include/video/omapdss.h index caefa093337d..255bcf558f89 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h | |||
@@ -592,27 +592,6 @@ struct omap_dss_device { | |||
592 | 592 | ||
593 | struct { | 593 | struct { |
594 | struct { | 594 | struct { |
595 | struct { | ||
596 | u16 lck_div; | ||
597 | u16 pck_div; | ||
598 | enum omap_dss_clk_source lcd_clk_src; | ||
599 | } channel; | ||
600 | |||
601 | enum omap_dss_clk_source dispc_fclk_src; | ||
602 | } dispc; | ||
603 | |||
604 | struct { | ||
605 | /* regn is one greater than TRM's REGN value */ | ||
606 | u16 regn; | ||
607 | u16 regm; | ||
608 | u16 regm_dispc; | ||
609 | u16 regm_dsi; | ||
610 | |||
611 | u16 lp_clk_div; | ||
612 | enum omap_dss_clk_source dsi_fclk_src; | ||
613 | } dsi; | ||
614 | |||
615 | struct { | ||
616 | /* regn is one greater than TRM's REGN value */ | 595 | /* regn is one greater than TRM's REGN value */ |
617 | u16 regn; | 596 | u16 regn; |
618 | u16 regm2; | 597 | u16 regm2; |