]> git.dujemihanovic.xyz Git - linux.git/commitdiff
clk: mmp: Switch to use struct u32_fract instead of custom one
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 24 Jul 2023 09:48:38 +0000 (12:48 +0300)
committerKarel Balej <balejk@matfyz.cz>
Sat, 28 Oct 2023 18:04:50 +0000 (20:04 +0200)
The struct mmp_clk_factor_tbl repeats the generic struct u32_fract.
Kill the custom one and use the generic one instead.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Duje Mihanović <duje.mihanovic@skole.hr>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Duje Mihanović <duje.mihanovic@skole.hr>
drivers/clk/mmp/clk-frac.c
drivers/clk/mmp/clk-of-mmp2.c
drivers/clk/mmp/clk-of-pxa168.c
drivers/clk/mmp/clk-of-pxa1928.c
drivers/clk/mmp/clk-of-pxa910.c
drivers/clk/mmp/clk.h

index 1b90867b60c4b5b2582cc92b0050221330a3c003..6556f6ada2e830178b9525462f684bad683db454 100644 (file)
@@ -26,14 +26,15 @@ static long clk_factor_round_rate(struct clk_hw *hw, unsigned long drate,
 {
        struct mmp_clk_factor *factor = to_clk_factor(hw);
        u64 rate = 0, prev_rate;
+       struct u32_fract *d;
        int i;
 
        for (i = 0; i < factor->ftbl_cnt; i++) {
-               prev_rate = rate;
-               rate = *prate;
-               rate *= factor->ftbl[i].den;
-               do_div(rate, factor->ftbl[i].num * factor->masks->factor);
+               d = &factor->ftbl[i];
 
+               prev_rate = rate;
+               rate = (u64)(*prate) * d->denominator;
+               do_div(rate, d->numerator * factor->masks->factor);
                if (rate > drate)
                        break;
        }
@@ -52,23 +53,22 @@ static unsigned long clk_factor_recalc_rate(struct clk_hw *hw,
 {
        struct mmp_clk_factor *factor = to_clk_factor(hw);
        struct mmp_clk_factor_masks *masks = factor->masks;
-       unsigned int val, num, den;
+       struct u32_fract d;
+       unsigned int val;
        u64 rate;
 
        val = readl_relaxed(factor->base);
 
        /* calculate numerator */
-       num = (val >> masks->num_shift) & masks->num_mask;
+       d.numerator = (val >> masks->num_shift) & masks->num_mask;
 
        /* calculate denominator */
-       den = (val >> masks->den_shift) & masks->den_mask;
-
-       if (!den)
+       d.denominator = (val >> masks->den_shift) & masks->den_mask;
+       if (!d.denominator)
                return 0;
 
-       rate = parent_rate;
-       rate *= den;
-       do_div(rate, num * factor->masks->factor);
+       rate = (u64)parent_rate * d.denominator;
+       do_div(rate, d.numerator * factor->masks->factor);
 
        return rate;
 }
@@ -82,18 +82,18 @@ static int clk_factor_set_rate(struct clk_hw *hw, unsigned long drate,
        int i;
        unsigned long val;
        unsigned long flags = 0;
+       struct u32_fract *d;
        u64 rate = 0;
 
        for (i = 0; i < factor->ftbl_cnt; i++) {
-               rate = prate;
-               rate *= factor->ftbl[i].den;
-               do_div(rate, factor->ftbl[i].num * factor->masks->factor);
+               d = &factor->ftbl[i];
 
+               rate = (u64)prate * d->denominator;
+               do_div(rate, d->numerator * factor->masks->factor);
                if (rate > drate)
                        break;
        }
-       if (i > 0)
-               i--;
+       d = i ? &factor->ftbl[i - 1] : &factor->ftbl[0];
 
        if (factor->lock)
                spin_lock_irqsave(factor->lock, flags);
@@ -101,10 +101,10 @@ static int clk_factor_set_rate(struct clk_hw *hw, unsigned long drate,
        val = readl_relaxed(factor->base);
 
        val &= ~(masks->num_mask << masks->num_shift);
-       val |= (factor->ftbl[i].num & masks->num_mask) << masks->num_shift;
+       val |= (d->numerator & masks->num_mask) << masks->num_shift;
 
        val &= ~(masks->den_mask << masks->den_shift);
-       val |= (factor->ftbl[i].den & masks->den_mask) << masks->den_shift;
+       val |= (d->denominator & masks->den_mask) << masks->den_shift;
 
        writel_relaxed(val, factor->base);
 
@@ -118,7 +118,8 @@ static int clk_factor_init(struct clk_hw *hw)
 {
        struct mmp_clk_factor *factor = to_clk_factor(hw);
        struct mmp_clk_factor_masks *masks = factor->masks;
-       u32 val, num, den;
+       struct u32_fract d;
+       u32 val;
        int i;
        unsigned long flags = 0;
 
@@ -128,23 +129,22 @@ static int clk_factor_init(struct clk_hw *hw)
        val = readl(factor->base);
 
        /* calculate numerator */
-       num = (val >> masks->num_shift) & masks->num_mask;
+       d.numerator = (val >> masks->num_shift) & masks->num_mask;
 
        /* calculate denominator */
-       den = (val >> masks->den_shift) & masks->den_mask;
+       d.denominator = (val >> masks->den_shift) & masks->den_mask;
 
        for (i = 0; i < factor->ftbl_cnt; i++)
-               if (den == factor->ftbl[i].den && num == factor->ftbl[i].num)
+               if (d.denominator == factor->ftbl[i].denominator &&
+                   d.numerator == factor->ftbl[i].numerator)
                        break;
 
        if (i >= factor->ftbl_cnt) {
                val &= ~(masks->num_mask << masks->num_shift);
-               val |= (factor->ftbl[0].num & masks->num_mask) <<
-                       masks->num_shift;
+               val |= (factor->ftbl[0].numerator & masks->num_mask) << masks->num_shift;
 
                val &= ~(masks->den_mask << masks->den_shift);
-               val |= (factor->ftbl[0].den & masks->den_mask) <<
-                       masks->den_shift;
+               val |= (factor->ftbl[0].denominator & masks->den_mask) << masks->den_shift;
        }
 
        if (!(val & masks->enable_mask) || i >= factor->ftbl_cnt) {
@@ -168,8 +168,7 @@ static const struct clk_ops clk_factor_ops = {
 struct clk *mmp_clk_register_factor(const char *name, const char *parent_name,
                unsigned long flags, void __iomem *base,
                struct mmp_clk_factor_masks *masks,
-               struct mmp_clk_factor_tbl *ftbl,
-               unsigned int ftbl_cnt, spinlock_t *lock)
+               struct u32_fract *ftbl, unsigned int ftbl_cnt, spinlock_t *lock)
 {
        struct mmp_clk_factor *factor;
        struct clk_init_data init;
index eaad36ee323d14ff3d0f61c917d57d1501359db1..a4f15cee630ee65bcedba3975cf337ff765d3b2d 100644 (file)
@@ -143,9 +143,9 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
        .den_shift = 0,
 };
 
-static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
-       {.num = 8125, .den = 1536},     /*14.745MHZ */
-       {.num = 3521, .den = 689},      /*19.23MHZ */
+static struct u32_fract uart_factor_tbl[] = {
+       { .numerator = 8125, .denominator = 1536 },     /* 14.745MHZ */
+       { .numerator = 3521, .denominator =  689 },     /* 19.23MHZ */
 };
 
 static struct mmp_clk_factor_masks i2s_factor_masks = {
@@ -157,16 +157,16 @@ static struct mmp_clk_factor_masks i2s_factor_masks = {
        .enable_mask = 0xd0000000,
 };
 
-static struct mmp_clk_factor_tbl i2s_factor_tbl[] = {
-       {.num = 24868, .den =  511},    /*  2.0480 MHz */
-       {.num = 28003, .den =  793},    /*  2.8224 MHz */
-       {.num = 24941, .den = 1025},    /*  4.0960 MHz */
-       {.num = 28003, .den = 1586},    /*  5.6448 MHz */
-       {.num = 31158, .den = 2561},    /*  8.1920 MHz */
-       {.num = 16288, .den = 1845},    /* 11.2896 MHz */
-       {.num = 20772, .den = 2561},    /* 12.2880 MHz */
-       {.num =  8144, .den = 1845},    /* 22.5792 MHz */
-       {.num = 10386, .den = 2561},    /* 24.5760 MHz */
+static struct u32_fract i2s_factor_tbl[] = {
+       { .numerator = 24868, .denominator =  511 },    /*  2.0480 MHz */
+       { .numerator = 28003, .denominator =  793 },    /*  2.8224 MHz */
+       { .numerator = 24941, .denominator = 1025 },    /*  4.0960 MHz */
+       { .numerator = 28003, .denominator = 1586 },    /*  5.6448 MHz */
+       { .numerator = 31158, .denominator = 2561 },    /*  8.1920 MHz */
+       { .numerator = 16288, .denominator = 1845 },    /* 11.2896 MHz */
+       { .numerator = 20772, .denominator = 2561 },    /* 12.2880 MHz */
+       { .numerator =  8144, .denominator = 1845 },    /* 22.5792 MHz */
+       { .numerator = 10386, .denominator = 2561 },    /* 24.5760 MHz */
 };
 
 static DEFINE_SPINLOCK(acgr_lock);
index fb0df64cf053c441dda1a7efef66c63edfa40ff7..ab5f83e773057cc6eae042f6309439f03b3f7307 100644 (file)
@@ -106,8 +106,8 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
        .den_shift = 0,
 };
 
-static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
-       {.num = 8125, .den = 1536},     /*14.745MHZ */
+static struct u32_fract uart_factor_tbl[] = {
+       { .numerator = 8125, .denominator = 1536 },     /* 14.745MHZ */
 };
 
 static void pxa168_pll_init(struct pxa168_clk_unit *pxa_unit)
index 9def4b5f10e910b18065647dcde2a44c43b8185d..ebb6e278eda33c551abce893051bf52e97f898c4 100644 (file)
@@ -61,9 +61,9 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
        .den_shift = 0,
 };
 
-static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
-       {.num = 832, .den = 234},       /*58.5MHZ */
-       {.num = 1, .den = 1},           /*26MHZ */
+static struct u32_fract uart_factor_tbl[] = {
+       { .numerator = 832, .denominator = 234 },       /* 58.5MHZ */
+       { .numerator =   1, .denominator =   1 },       /* 26MHZ */
 };
 
 static void pxa1928_pll_init(struct pxa1928_clk_unit *pxa_unit)
index 7a38c424782e619347c44b75edb1938cb7a27dc9..fe65e7bdb411fe9be93e8dd5d571e1c62b12909f 100644 (file)
@@ -86,8 +86,8 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
        .den_shift = 0,
 };
 
-static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
-       {.num = 8125, .den = 1536},     /*14.745MHZ */
+static struct u32_fract uart_factor_tbl[] = {
+       { .numerator = 8125, .denominator = 1536 },     /* 14.745MHZ */
 };
 
 static void pxa910_pll_init(struct pxa910_clk_unit *pxa_unit)
index 55ac053797819e791d62e5f950779c56a957c994..c83cec169ddc5e3fcd0561cf857f248178c25b68 100644 (file)
@@ -3,6 +3,7 @@
 #define __MACH_MMP_CLK_H
 
 #include <linux/clk-provider.h>
+#include <linux/math.h>
 #include <linux/pm_domain.h>
 #include <linux/clkdev.h>
 
@@ -20,16 +21,11 @@ struct mmp_clk_factor_masks {
        unsigned int enable_mask;
 };
 
-struct mmp_clk_factor_tbl {
-       unsigned int num;
-       unsigned int den;
-};
-
 struct mmp_clk_factor {
        struct clk_hw hw;
        void __iomem *base;
        struct mmp_clk_factor_masks *masks;
-       struct mmp_clk_factor_tbl *ftbl;
+       struct u32_fract *ftbl;
        unsigned int ftbl_cnt;
        spinlock_t *lock;
 };
@@ -37,7 +33,7 @@ struct mmp_clk_factor {
 extern struct clk *mmp_clk_register_factor(const char *name,
                const char *parent_name, unsigned long flags,
                void __iomem *base, struct mmp_clk_factor_masks *masks,
-               struct mmp_clk_factor_tbl *ftbl, unsigned int ftbl_cnt,
+               struct u32_fract *ftbl, unsigned int ftbl_cnt,
                spinlock_t *lock);
 
 /* Clock type "mix" */