aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2014-08-06 08:45:26 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2014-11-12 06:40:21 -0500
commit7b71c410b2417acba49648ceaa6de38b00b05c88 (patch)
tree4d30568ae930c4f7f5fc7a6c850a0171619ea67b /drivers/video
parent1a7f4bf186e6e629d8cb3226be4b9fbb48c812b8 (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.c30
-rw-r--r--drivers/video/fbdev/omap2/dss/dss.h2
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
290struct dsi_lp_clock_info {
291 unsigned long lp_clk;
292 u16 lp_clk_div;
293};
294
290struct dsi_data { 295struct 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
1296static int dsi_lp_clock_calc(struct dsi_clock_info *cinfo, 1304static 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
134struct dss_lcd_mgr_config { 132struct dss_lcd_mgr_config {