Skip to content

Commit 0acf659

Browse files
committed
OMAP: DSS2: Clean up for dpll4_m4_ck handling
OMAP2 does not have dpll4_m4_ck source clock for dss functional clock, but later OMAPs do. Currently we check for cpu type in multiple places to find out if dpll4_m4_ck is available. This patch cleans up dss.c by using the fact that dss.dpll4_m4_ck pointer is NULL on OMAP2. This allows us to remove many of the cpu checks. Signed-off-by: Tomi Valkeinen <[email protected]>
1 parent 17c84ef commit 0acf659

File tree

1 file changed

+59
-34
lines changed
  • drivers/video/omap2/dss

1 file changed

+59
-34
lines changed

drivers/video/omap2/dss/dss.c

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -239,30 +239,40 @@ void dss_dump_clocks(struct seq_file *s)
239239
{
240240
unsigned long dpll4_ck_rate;
241241
unsigned long dpll4_m4_ck_rate;
242+
const char *fclk_name, *fclk_real_name;
243+
unsigned long fclk_rate;
242244

243245
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
244246

245-
dpll4_ck_rate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
246-
dpll4_m4_ck_rate = clk_get_rate(dss.dpll4_m4_ck);
247-
248247
seq_printf(s, "- DSS -\n");
249248

250-
seq_printf(s, "dpll4_ck %lu\n", dpll4_ck_rate);
249+
fclk_name = dss_get_generic_clk_source_name(DSS_CLK_SRC_FCK);
250+
fclk_real_name = dss_feat_get_clk_source_name(DSS_CLK_SRC_FCK);
251+
fclk_rate = dss_clk_get_rate(DSS_CLK_FCK);
251252

252-
if (cpu_is_omap3630())
253-
seq_printf(s, "%s (%s) = %lu / %lu = %lu\n",
254-
dss_get_generic_clk_source_name(DSS_CLK_SRC_FCK),
255-
dss_feat_get_clk_source_name(DSS_CLK_SRC_FCK),
256-
dpll4_ck_rate,
257-
dpll4_ck_rate / dpll4_m4_ck_rate,
258-
dss_clk_get_rate(DSS_CLK_FCK));
259-
else
260-
seq_printf(s, "%s (%s) = %lu / %lu * 2 = %lu\n",
261-
dss_get_generic_clk_source_name(DSS_CLK_SRC_FCK),
262-
dss_feat_get_clk_source_name(DSS_CLK_SRC_FCK),
263-
dpll4_ck_rate,
264-
dpll4_ck_rate / dpll4_m4_ck_rate,
265-
dss_clk_get_rate(DSS_CLK_FCK));
253+
if (dss.dpll4_m4_ck) {
254+
dpll4_ck_rate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
255+
dpll4_m4_ck_rate = clk_get_rate(dss.dpll4_m4_ck);
256+
257+
seq_printf(s, "dpll4_ck %lu\n", dpll4_ck_rate);
258+
259+
if (cpu_is_omap3630())
260+
seq_printf(s, "%s (%s) = %lu / %lu = %lu\n",
261+
fclk_name, fclk_real_name,
262+
dpll4_ck_rate,
263+
dpll4_ck_rate / dpll4_m4_ck_rate,
264+
fclk_rate);
265+
else
266+
seq_printf(s, "%s (%s) = %lu / %lu * 2 = %lu\n",
267+
fclk_name, fclk_real_name,
268+
dpll4_ck_rate,
269+
dpll4_ck_rate / dpll4_m4_ck_rate,
270+
fclk_rate);
271+
} else {
272+
seq_printf(s, "%s (%s) = %lu\n",
273+
fclk_name, fclk_real_name,
274+
fclk_rate);
275+
}
266276

267277
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
268278
}
@@ -382,31 +392,40 @@ enum dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel)
382392
/* calculate clock rates using dividers in cinfo */
383393
int dss_calc_clock_rates(struct dss_clock_info *cinfo)
384394
{
385-
unsigned long prate;
395+
if (dss.dpll4_m4_ck) {
396+
unsigned long prate;
386397

387-
if (cinfo->fck_div > (cpu_is_omap3630() ? 32 : 16) ||
388-
cinfo->fck_div == 0)
389-
return -EINVAL;
398+
if (cinfo->fck_div > (cpu_is_omap3630() ? 32 : 16) ||
399+
cinfo->fck_div == 0)
400+
return -EINVAL;
390401

391-
prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
402+
prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
392403

393-
cinfo->fck = prate / cinfo->fck_div;
404+
cinfo->fck = prate / cinfo->fck_div;
405+
} else {
406+
if (cinfo->fck_div != 0)
407+
return -EINVAL;
408+
cinfo->fck = dss_clk_get_rate(DSS_CLK_FCK);
409+
}
394410

395411
return 0;
396412
}
397413

398414
int dss_set_clock_div(struct dss_clock_info *cinfo)
399415
{
400-
unsigned long prate;
401-
int r;
416+
if (dss.dpll4_m4_ck) {
417+
unsigned long prate;
418+
int r;
402419

403-
if (cpu_is_omap34xx()) {
404420
prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
405421
DSSDBG("dpll4_m4 = %ld\n", prate);
406422

407423
r = clk_set_rate(dss.dpll4_m4_ck, prate / cinfo->fck_div);
408424
if (r)
409425
return r;
426+
} else {
427+
if (cinfo->fck_div != 0)
428+
return -EINVAL;
410429
}
411430

412431
DSSDBG("fck = %ld (%d)\n", cinfo->fck, cinfo->fck_div);
@@ -418,9 +437,11 @@ int dss_get_clock_div(struct dss_clock_info *cinfo)
418437
{
419438
cinfo->fck = dss_clk_get_rate(DSS_CLK_FCK);
420439

421-
if (cpu_is_omap34xx()) {
440+
if (dss.dpll4_m4_ck) {
422441
unsigned long prate;
442+
423443
prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
444+
424445
if (cpu_is_omap3630())
425446
cinfo->fck_div = prate / (cinfo->fck);
426447
else
@@ -434,7 +455,7 @@ int dss_get_clock_div(struct dss_clock_info *cinfo)
434455

435456
unsigned long dss_get_dpll4_rate(void)
436457
{
437-
if (cpu_is_omap34xx())
458+
if (dss.dpll4_m4_ck)
438459
return clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
439460
else
440461
return 0;
@@ -615,6 +636,7 @@ static int dss_init(void)
615636
int r;
616637
u32 rev;
617638
struct resource *dss_mem;
639+
struct clk *dpll4_m4_ck;
618640

619641
dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
620642
if (!dss_mem) {
@@ -655,16 +677,19 @@ static int dss_init(void)
655677
REG_FLD_MOD(DSS_CONTROL, 1, 3, 3); /* venc clock 4x enable */
656678
REG_FLD_MOD(DSS_CONTROL, 0, 2, 2); /* venc clock mode = normal */
657679
#endif
658-
659680
if (cpu_is_omap34xx()) {
660-
dss.dpll4_m4_ck = clk_get(NULL, "dpll4_m4_ck");
661-
if (IS_ERR(dss.dpll4_m4_ck)) {
681+
dpll4_m4_ck = clk_get(NULL, "dpll4_m4_ck");
682+
if (IS_ERR(dpll4_m4_ck)) {
662683
DSSERR("Failed to get dpll4_m4_ck\n");
663-
r = PTR_ERR(dss.dpll4_m4_ck);
684+
r = PTR_ERR(dpll4_m4_ck);
664685
goto fail1;
665686
}
687+
} else { /* omap24xx */
688+
dpll4_m4_ck = NULL;
666689
}
667690

691+
dss.dpll4_m4_ck = dpll4_m4_ck;
692+
668693
dss.dsi_clk_source = DSS_CLK_SRC_FCK;
669694
dss.dispc_clk_source = DSS_CLK_SRC_FCK;
670695
dss.lcd_clk_source[0] = DSS_CLK_SRC_FCK;
@@ -686,7 +711,7 @@ static int dss_init(void)
686711

687712
static void dss_exit(void)
688713
{
689-
if (cpu_is_omap34xx())
714+
if (dss.dpll4_m4_ck)
690715
clk_put(dss.dpll4_m4_ck);
691716

692717
iounmap(dss.base);

0 commit comments

Comments
 (0)