diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-08-06 08:45:26 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-11-12 06:40:21 -0500 |
commit | 7b71c410b2417acba49648ceaa6de38b00b05c88 (patch) | |
tree | 4d30568ae930c4f7f5fc7a6c850a0171619ea67b /drivers/video | |
parent | 1a7f4bf186e6e629d8cb3226be4b9fbb48c812b8 (diff) |
OMAPDSS: DSI: separate LP clock info from dsi_clock_info
struct dsi_clock_info represents the clocks handled by the DSI, mostly
PLL related clocks. In an effort to create common PLL code, we need to
remove all the non-PLL items from dsi_clock_info.
This patch removes LP clock related fields from dsi_clock_info, and
creates a new struct dsi_lp_clock_info for holding clock info for the LP
clock.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/fbdev/omap2/dss/dsi.c | 30 | ||||
-rw-r--r-- | drivers/video/fbdev/omap2/dss/dss.h | 2 |
2 files changed, 19 insertions, 13 deletions
diff --git a/drivers/video/fbdev/omap2/dss/dsi.c b/drivers/video/fbdev/omap2/dss/dsi.c index 0083f6500949..1c5a15581669 100644 --- a/drivers/video/fbdev/omap2/dss/dsi.c +++ b/drivers/video/fbdev/omap2/dss/dsi.c | |||
@@ -287,6 +287,11 @@ struct dsi_clk_calc_ctx { | |||
287 | struct omap_dss_dsi_videomode_timings dsi_vm; | 287 | struct omap_dss_dsi_videomode_timings dsi_vm; |
288 | }; | 288 | }; |
289 | 289 | ||
290 | struct dsi_lp_clock_info { | ||
291 | unsigned long lp_clk; | ||
292 | u16 lp_clk_div; | ||
293 | }; | ||
294 | |||
290 | struct dsi_data { | 295 | struct dsi_data { |
291 | struct platform_device *pdev; | 296 | struct platform_device *pdev; |
292 | void __iomem *proto_base; | 297 | void __iomem *proto_base; |
@@ -307,6 +312,9 @@ struct dsi_data { | |||
307 | 312 | ||
308 | struct dsi_clock_info current_cinfo; | 313 | struct dsi_clock_info current_cinfo; |
309 | 314 | ||
315 | struct dsi_lp_clock_info user_lp_cinfo; | ||
316 | struct dsi_lp_clock_info current_lp_cinfo; | ||
317 | |||
310 | bool vdds_dsi_enabled; | 318 | bool vdds_dsi_enabled; |
311 | struct regulator *vdds_dsi_reg; | 319 | struct regulator *vdds_dsi_reg; |
312 | 320 | ||
@@ -1293,10 +1301,10 @@ static unsigned long dsi_fclk_rate(struct platform_device *dsidev) | |||
1293 | return r; | 1301 | return r; |
1294 | } | 1302 | } |
1295 | 1303 | ||
1296 | static int dsi_lp_clock_calc(struct dsi_clock_info *cinfo, | 1304 | static int dsi_lp_clock_calc(unsigned long dsi_fclk, |
1297 | unsigned long lp_clk_min, unsigned long lp_clk_max) | 1305 | unsigned long lp_clk_min, unsigned long lp_clk_max, |
1306 | struct dsi_lp_clock_info *lp_cinfo) | ||
1298 | { | 1307 | { |
1299 | unsigned long dsi_fclk = cinfo->dsi_pll_hsdiv_dsi_clk; | ||
1300 | unsigned lp_clk_div; | 1308 | unsigned lp_clk_div; |
1301 | unsigned long lp_clk; | 1309 | unsigned long lp_clk; |
1302 | 1310 | ||
@@ -1306,8 +1314,8 @@ static int dsi_lp_clock_calc(struct dsi_clock_info *cinfo, | |||
1306 | if (lp_clk < lp_clk_min || lp_clk > lp_clk_max) | 1314 | if (lp_clk < lp_clk_min || lp_clk > lp_clk_max) |
1307 | return -EINVAL; | 1315 | return -EINVAL; |
1308 | 1316 | ||
1309 | cinfo->lp_clk_div = lp_clk_div; | 1317 | lp_cinfo->lp_clk_div = lp_clk_div; |
1310 | cinfo->lp_clk = lp_clk; | 1318 | lp_cinfo->lp_clk = lp_clk; |
1311 | 1319 | ||
1312 | return 0; | 1320 | return 0; |
1313 | } | 1321 | } |
@@ -1319,7 +1327,7 @@ static int dsi_set_lp_clk_divisor(struct platform_device *dsidev) | |||
1319 | unsigned lp_clk_div; | 1327 | unsigned lp_clk_div; |
1320 | unsigned long lp_clk; | 1328 | unsigned long lp_clk; |
1321 | 1329 | ||
1322 | lp_clk_div = dsi->user_dsi_cinfo.lp_clk_div; | 1330 | lp_clk_div = dsi->user_lp_cinfo.lp_clk_div; |
1323 | 1331 | ||
1324 | if (lp_clk_div == 0 || lp_clk_div > dsi->lpdiv_max) | 1332 | if (lp_clk_div == 0 || lp_clk_div > dsi->lpdiv_max) |
1325 | return -EINVAL; | 1333 | return -EINVAL; |
@@ -1329,8 +1337,8 @@ static int dsi_set_lp_clk_divisor(struct platform_device *dsidev) | |||
1329 | lp_clk = dsi_fclk / 2 / lp_clk_div; | 1337 | lp_clk = dsi_fclk / 2 / lp_clk_div; |
1330 | 1338 | ||
1331 | DSSDBG("LP_CLK_DIV %u, LP_CLK %lu\n", lp_clk_div, lp_clk); | 1339 | DSSDBG("LP_CLK_DIV %u, LP_CLK %lu\n", lp_clk_div, lp_clk); |
1332 | dsi->current_cinfo.lp_clk = lp_clk; | 1340 | dsi->current_lp_cinfo.lp_clk = lp_clk; |
1333 | dsi->current_cinfo.lp_clk_div = lp_clk_div; | 1341 | dsi->current_lp_cinfo.lp_clk_div = lp_clk_div; |
1334 | 1342 | ||
1335 | /* LP_CLK_DIVISOR */ | 1343 | /* LP_CLK_DIVISOR */ |
1336 | REG_FLD_MOD(dsidev, DSI_CLK_CTRL, lp_clk_div, 12, 0); | 1344 | REG_FLD_MOD(dsidev, DSI_CLK_CTRL, lp_clk_div, 12, 0); |
@@ -1801,7 +1809,7 @@ static void dsi_dump_dsidev_clocks(struct platform_device *dsidev, | |||
1801 | 1809 | ||
1802 | seq_printf(s, "TxByteClkHS\t%lu\n", dsi_get_txbyteclkhs(dsidev)); | 1810 | seq_printf(s, "TxByteClkHS\t%lu\n", dsi_get_txbyteclkhs(dsidev)); |
1803 | 1811 | ||
1804 | seq_printf(s, "LP_CLK\t\t%lu\n", cinfo->lp_clk); | 1812 | seq_printf(s, "LP_CLK\t\t%lu\n", dsi->current_lp_cinfo.lp_clk); |
1805 | 1813 | ||
1806 | dsi_runtime_put(dsidev); | 1814 | dsi_runtime_put(dsidev); |
1807 | } | 1815 | } |
@@ -5110,8 +5118,8 @@ static int dsi_set_config(struct omap_dss_device *dssdev, | |||
5110 | 5118 | ||
5111 | dsi_pll_calc_dsi_fck(&ctx.dsi_cinfo); | 5119 | dsi_pll_calc_dsi_fck(&ctx.dsi_cinfo); |
5112 | 5120 | ||
5113 | r = dsi_lp_clock_calc(&ctx.dsi_cinfo, config->lp_clk_min, | 5121 | r = dsi_lp_clock_calc(ctx.dsi_cinfo.dsi_pll_hsdiv_dsi_clk, |
5114 | config->lp_clk_max); | 5122 | config->lp_clk_min, config->lp_clk_max, &dsi->user_lp_cinfo); |
5115 | if (r) { | 5123 | if (r) { |
5116 | DSSERR("failed to find suitable DSI LP clock settings\n"); | 5124 | DSSERR("failed to find suitable DSI LP clock settings\n"); |
5117 | goto err; | 5125 | goto err; |
diff --git a/drivers/video/fbdev/omap2/dss/dss.h b/drivers/video/fbdev/omap2/dss/dss.h index 2defcaedbef5..712592d2e5f7 100644 --- a/drivers/video/fbdev/omap2/dss/dss.h +++ b/drivers/video/fbdev/omap2/dss/dss.h | |||
@@ -119,7 +119,6 @@ struct dsi_clock_info { | |||
119 | * OMAP4: PLLx_CLK1 */ | 119 | * OMAP4: PLLx_CLK1 */ |
120 | unsigned long dsi_pll_hsdiv_dsi_clk; /* OMAP3: DSI2_PLL_CLK | 120 | unsigned long dsi_pll_hsdiv_dsi_clk; /* OMAP3: DSI2_PLL_CLK |
121 | * OMAP4: PLLx_CLK2 */ | 121 | * OMAP4: PLLx_CLK2 */ |
122 | unsigned long lp_clk; | ||
123 | 122 | ||
124 | /* dividers */ | 123 | /* dividers */ |
125 | u16 regn; | 124 | u16 regn; |
@@ -128,7 +127,6 @@ struct dsi_clock_info { | |||
128 | * OMAP4: REGM4 */ | 127 | * OMAP4: REGM4 */ |
129 | u16 regm_dsi; /* OMAP3: REGM4 | 128 | u16 regm_dsi; /* OMAP3: REGM4 |
130 | * OMAP4: REGM5 */ | 129 | * OMAP4: REGM5 */ |
131 | u16 lp_clk_div; | ||
132 | }; | 130 | }; |
133 | 131 | ||
134 | struct dss_lcd_mgr_config { | 132 | struct dss_lcd_mgr_config { |