aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-11-27 10:05:54 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-04-03 08:19:00 -0400
commita0d269ec0bfab89f7b025bf6e1e596e9a6f9d999 (patch)
tree847111a958768a937883d5ca224e772672061b42
parent07961ac7c0ee8b546658717034fe692fd12eefa9 (diff)
OMAPDSS: DSI: remove DSI & DISPC clk divisors from dssdev
struct omap_dss_device contains DSS clock divisors. The idea is that the board file can pass precalculated divisors to the display driver. However, these divsors are no longer needed, as the omapdss driver can calculate the divisors during runtime. This patch removes the divisors from omap_dss_device, and their uses from the dsi driver. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Reviewed-by: Archit Taneja <archit@ti.com>
-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;