diff options
-rw-r--r-- | drivers/video/omap2/dss/dss.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index 08c58ebe219c..9a145da35ad3 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c | |||
@@ -446,12 +446,20 @@ bool dss_div_calc(unsigned long pck, unsigned long fck_min, | |||
446 | unsigned long prate; | 446 | unsigned long prate; |
447 | unsigned m; | 447 | unsigned m; |
448 | 448 | ||
449 | fck_hw_max = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK); | ||
450 | |||
449 | if (dss.parent_clk == NULL) { | 451 | if (dss.parent_clk == NULL) { |
450 | fck = clk_get_rate(dss.dss_clk); | 452 | unsigned pckd; |
453 | |||
454 | pckd = fck_hw_max / pck; | ||
455 | |||
456 | fck = pck * pckd; | ||
457 | |||
458 | fck = clk_round_rate(dss.dss_clk, fck); | ||
459 | |||
451 | return func(fck, data); | 460 | return func(fck, data); |
452 | } | 461 | } |
453 | 462 | ||
454 | fck_hw_max = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK); | ||
455 | fckd_hw_max = dss.feat->fck_div_max; | 463 | fckd_hw_max = dss.feat->fck_div_max; |
456 | 464 | ||
457 | m = dss.feat->dss_fck_multiplier; | 465 | m = dss.feat->dss_fck_multiplier; |
@@ -503,16 +511,17 @@ static int dss_setup_default_clock(void) | |||
503 | unsigned fck_div; | 511 | unsigned fck_div; |
504 | int r; | 512 | int r; |
505 | 513 | ||
506 | if (dss.parent_clk == NULL) | ||
507 | return 0; | ||
508 | |||
509 | max_dss_fck = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK); | 514 | max_dss_fck = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK); |
510 | 515 | ||
511 | prate = clk_get_rate(dss.parent_clk); | 516 | if (dss.parent_clk == NULL) { |
517 | fck = clk_round_rate(dss.dss_clk, max_dss_fck); | ||
518 | } else { | ||
519 | prate = clk_get_rate(dss.parent_clk); | ||
512 | 520 | ||
513 | fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier, | 521 | fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier, |
514 | max_dss_fck); | 522 | max_dss_fck); |
515 | fck = prate / fck_div * dss.feat->dss_fck_multiplier; | 523 | fck = prate / fck_div * dss.feat->dss_fck_multiplier; |
524 | } | ||
516 | 525 | ||
517 | r = dss_set_fck_rate(fck); | 526 | r = dss_set_fck_rate(fck); |
518 | if (r) | 527 | if (r) |