aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/dsi.c47
-rw-r--r--include/video/omapdss.h21
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)
4679static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev) 4686static 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;