OSDN Git Service

media: ccs-pll: End search if there are no better values available
authorSakari Ailus <sakari.ailus@linux.intel.com>
Tue, 1 Sep 2020 11:11:11 +0000 (13:11 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 7 Dec 2020 14:37:25 +0000 (15:37 +0100)
The VT divisor search can be ended if we've already found the value that
corresponds exactly the total divisor, as there are no better (lower)
values available.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ccs-pll.c

index ea0f84f..22e2912 100644 (file)
@@ -352,6 +352,7 @@ __ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *lim,
                     sys_div <= max_sys_div;
                     sys_div += 2 - (sys_div & 1)) {
                        uint16_t pix_div = DIV_ROUND_UP(vt_div, sys_div);
+                       uint16_t rounded_div;
 
                        if (pix_div < lim->vt_bk.min_pix_clk_div
                            || pix_div > lim->vt_bk.max_pix_clk_div) {
@@ -363,10 +364,15 @@ __ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *lim,
                                continue;
                        }
 
+                       rounded_div = roundup(vt_div, best_pix_div);
+
                        /* Check if this one is better. */
-                       if (pix_div * sys_div
-                           <= roundup(vt_div, best_pix_div))
+                       if (pix_div * sys_div <= rounded_div)
                                best_pix_div = pix_div;
+
+                       /* Bail out if we've already found the best value. */
+                       if (vt_div == rounded_div)
+                               break;
                }
                if (best_pix_div < INT_MAX >> 1)
                        break;