Skip to content

Commit 4d6da82

Browse files
andy-shevbebarino
authored andcommitted
clk: mmp: Switch to use struct u32_fract instead of custom one
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 <[email protected]> Tested-by: Duje Mihanović <[email protected]> Reviewed-by: Linus Walleij <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Signed-off-by: Duje Mihanović <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent 9852d85 commit 4d6da82

File tree

6 files changed

+51
-56
lines changed

6 files changed

+51
-56
lines changed

drivers/clk/mmp/clk-frac.c

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ static long clk_factor_round_rate(struct clk_hw *hw, unsigned long drate,
2626
{
2727
struct mmp_clk_factor *factor = to_clk_factor(hw);
2828
u64 rate = 0, prev_rate;
29+
struct u32_fract *d;
2930
int i;
3031

3132
for (i = 0; i < factor->ftbl_cnt; i++) {
32-
prev_rate = rate;
33-
rate = *prate;
34-
rate *= factor->ftbl[i].den;
35-
do_div(rate, factor->ftbl[i].num * factor->masks->factor);
33+
d = &factor->ftbl[i];
3634

35+
prev_rate = rate;
36+
rate = (u64)(*prate) * d->denominator;
37+
do_div(rate, d->numerator * factor->masks->factor);
3738
if (rate > drate)
3839
break;
3940
}
@@ -52,23 +53,22 @@ static unsigned long clk_factor_recalc_rate(struct clk_hw *hw,
5253
{
5354
struct mmp_clk_factor *factor = to_clk_factor(hw);
5455
struct mmp_clk_factor_masks *masks = factor->masks;
55-
unsigned int val, num, den;
56+
struct u32_fract d;
57+
unsigned int val;
5658
u64 rate;
5759

5860
val = readl_relaxed(factor->base);
5961

6062
/* calculate numerator */
61-
num = (val >> masks->num_shift) & masks->num_mask;
63+
d.numerator = (val >> masks->num_shift) & masks->num_mask;
6264

6365
/* calculate denominator */
64-
den = (val >> masks->den_shift) & masks->den_mask;
65-
66-
if (!den)
66+
d.denominator = (val >> masks->den_shift) & masks->den_mask;
67+
if (!d.denominator)
6768
return 0;
6869

69-
rate = parent_rate;
70-
rate *= den;
71-
do_div(rate, num * factor->masks->factor);
70+
rate = (u64)parent_rate * d.denominator;
71+
do_div(rate, d.numerator * factor->masks->factor);
7272

7373
return rate;
7474
}
@@ -82,29 +82,29 @@ static int clk_factor_set_rate(struct clk_hw *hw, unsigned long drate,
8282
int i;
8383
unsigned long val;
8484
unsigned long flags = 0;
85+
struct u32_fract *d;
8586
u64 rate = 0;
8687

8788
for (i = 0; i < factor->ftbl_cnt; i++) {
88-
rate = prate;
89-
rate *= factor->ftbl[i].den;
90-
do_div(rate, factor->ftbl[i].num * factor->masks->factor);
89+
d = &factor->ftbl[i];
9190

91+
rate = (u64)prate * d->denominator;
92+
do_div(rate, d->numerator * factor->masks->factor);
9293
if (rate > drate)
9394
break;
9495
}
95-
if (i > 0)
96-
i--;
96+
d = i ? &factor->ftbl[i - 1] : &factor->ftbl[0];
9797

9898
if (factor->lock)
9999
spin_lock_irqsave(factor->lock, flags);
100100

101101
val = readl_relaxed(factor->base);
102102

103103
val &= ~(masks->num_mask << masks->num_shift);
104-
val |= (factor->ftbl[i].num & masks->num_mask) << masks->num_shift;
104+
val |= (d->numerator & masks->num_mask) << masks->num_shift;
105105

106106
val &= ~(masks->den_mask << masks->den_shift);
107-
val |= (factor->ftbl[i].den & masks->den_mask) << masks->den_shift;
107+
val |= (d->denominator & masks->den_mask) << masks->den_shift;
108108

109109
writel_relaxed(val, factor->base);
110110

@@ -118,7 +118,8 @@ static int clk_factor_init(struct clk_hw *hw)
118118
{
119119
struct mmp_clk_factor *factor = to_clk_factor(hw);
120120
struct mmp_clk_factor_masks *masks = factor->masks;
121-
u32 val, num, den;
121+
struct u32_fract d;
122+
u32 val;
122123
int i;
123124
unsigned long flags = 0;
124125

@@ -128,23 +129,22 @@ static int clk_factor_init(struct clk_hw *hw)
128129
val = readl(factor->base);
129130

130131
/* calculate numerator */
131-
num = (val >> masks->num_shift) & masks->num_mask;
132+
d.numerator = (val >> masks->num_shift) & masks->num_mask;
132133

133134
/* calculate denominator */
134-
den = (val >> masks->den_shift) & masks->den_mask;
135+
d.denominator = (val >> masks->den_shift) & masks->den_mask;
135136

136137
for (i = 0; i < factor->ftbl_cnt; i++)
137-
if (den == factor->ftbl[i].den && num == factor->ftbl[i].num)
138+
if (d.denominator == factor->ftbl[i].denominator &&
139+
d.numerator == factor->ftbl[i].numerator)
138140
break;
139141

140142
if (i >= factor->ftbl_cnt) {
141143
val &= ~(masks->num_mask << masks->num_shift);
142-
val |= (factor->ftbl[0].num & masks->num_mask) <<
143-
masks->num_shift;
144+
val |= (factor->ftbl[0].numerator & masks->num_mask) << masks->num_shift;
144145

145146
val &= ~(masks->den_mask << masks->den_shift);
146-
val |= (factor->ftbl[0].den & masks->den_mask) <<
147-
masks->den_shift;
147+
val |= (factor->ftbl[0].denominator & masks->den_mask) << masks->den_shift;
148148
}
149149

150150
if (!(val & masks->enable_mask) || i >= factor->ftbl_cnt) {
@@ -168,8 +168,7 @@ static const struct clk_ops clk_factor_ops = {
168168
struct clk *mmp_clk_register_factor(const char *name, const char *parent_name,
169169
unsigned long flags, void __iomem *base,
170170
struct mmp_clk_factor_masks *masks,
171-
struct mmp_clk_factor_tbl *ftbl,
172-
unsigned int ftbl_cnt, spinlock_t *lock)
171+
struct u32_fract *ftbl, unsigned int ftbl_cnt, spinlock_t *lock)
173172
{
174173
struct mmp_clk_factor *factor;
175174
struct clk_init_data init;

drivers/clk/mmp/clk-of-mmp2.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
143143
.den_shift = 0,
144144
};
145145

146-
static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
147-
{.num = 8125, .den = 1536}, /*14.745MHZ */
148-
{.num = 3521, .den = 689}, /*19.23MHZ */
146+
static struct u32_fract uart_factor_tbl[] = {
147+
{ .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */
148+
{ .numerator = 3521, .denominator = 689 }, /* 19.23MHZ */
149149
};
150150

151151
static struct mmp_clk_factor_masks i2s_factor_masks = {
@@ -157,16 +157,16 @@ static struct mmp_clk_factor_masks i2s_factor_masks = {
157157
.enable_mask = 0xd0000000,
158158
};
159159

160-
static struct mmp_clk_factor_tbl i2s_factor_tbl[] = {
161-
{.num = 24868, .den = 511}, /* 2.0480 MHz */
162-
{.num = 28003, .den = 793}, /* 2.8224 MHz */
163-
{.num = 24941, .den = 1025}, /* 4.0960 MHz */
164-
{.num = 28003, .den = 1586}, /* 5.6448 MHz */
165-
{.num = 31158, .den = 2561}, /* 8.1920 MHz */
166-
{.num = 16288, .den = 1845}, /* 11.2896 MHz */
167-
{.num = 20772, .den = 2561}, /* 12.2880 MHz */
168-
{.num = 8144, .den = 1845}, /* 22.5792 MHz */
169-
{.num = 10386, .den = 2561}, /* 24.5760 MHz */
160+
static struct u32_fract i2s_factor_tbl[] = {
161+
{ .numerator = 24868, .denominator = 511 }, /* 2.0480 MHz */
162+
{ .numerator = 28003, .denominator = 793 }, /* 2.8224 MHz */
163+
{ .numerator = 24941, .denominator = 1025 }, /* 4.0960 MHz */
164+
{ .numerator = 28003, .denominator = 1586 }, /* 5.6448 MHz */
165+
{ .numerator = 31158, .denominator = 2561 }, /* 8.1920 MHz */
166+
{ .numerator = 16288, .denominator = 1845 }, /* 11.2896 MHz */
167+
{ .numerator = 20772, .denominator = 2561 }, /* 12.2880 MHz */
168+
{ .numerator = 8144, .denominator = 1845 }, /* 22.5792 MHz */
169+
{ .numerator = 10386, .denominator = 2561 }, /* 24.5760 MHz */
170170
};
171171

172172
static DEFINE_SPINLOCK(acgr_lock);

drivers/clk/mmp/clk-of-pxa168.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
106106
.den_shift = 0,
107107
};
108108

109-
static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
110-
{.num = 8125, .den = 1536}, /*14.745MHZ */
109+
static struct u32_fract uart_factor_tbl[] = {
110+
{ .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */
111111
};
112112

113113
static void pxa168_pll_init(struct pxa168_clk_unit *pxa_unit)

drivers/clk/mmp/clk-of-pxa1928.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
6161
.den_shift = 0,
6262
};
6363

64-
static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
65-
{.num = 832, .den = 234}, /*58.5MHZ */
66-
{.num = 1, .den = 1}, /*26MHZ */
64+
static struct u32_fract uart_factor_tbl[] = {
65+
{ .numerator = 832, .denominator = 234 }, /* 58.5MHZ */
66+
{ .numerator = 1, .denominator = 1 }, /* 26MHZ */
6767
};
6868

6969
static void pxa1928_pll_init(struct pxa1928_clk_unit *pxa_unit)

drivers/clk/mmp/clk-of-pxa910.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ static struct mmp_clk_factor_masks uart_factor_masks = {
8686
.den_shift = 0,
8787
};
8888

89-
static struct mmp_clk_factor_tbl uart_factor_tbl[] = {
90-
{.num = 8125, .den = 1536}, /*14.745MHZ */
89+
static struct u32_fract uart_factor_tbl[] = {
90+
{ .numerator = 8125, .denominator = 1536 }, /* 14.745MHZ */
9191
};
9292

9393
static void pxa910_pll_init(struct pxa910_clk_unit *pxa_unit)

drivers/clk/mmp/clk.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#define __MACH_MMP_CLK_H
44

55
#include <linux/clk-provider.h>
6+
#include <linux/math.h>
67
#include <linux/pm_domain.h>
78
#include <linux/clkdev.h>
89

@@ -20,24 +21,19 @@ struct mmp_clk_factor_masks {
2021
unsigned int enable_mask;
2122
};
2223

23-
struct mmp_clk_factor_tbl {
24-
unsigned int num;
25-
unsigned int den;
26-
};
27-
2824
struct mmp_clk_factor {
2925
struct clk_hw hw;
3026
void __iomem *base;
3127
struct mmp_clk_factor_masks *masks;
32-
struct mmp_clk_factor_tbl *ftbl;
28+
struct u32_fract *ftbl;
3329
unsigned int ftbl_cnt;
3430
spinlock_t *lock;
3531
};
3632

3733
extern struct clk *mmp_clk_register_factor(const char *name,
3834
const char *parent_name, unsigned long flags,
3935
void __iomem *base, struct mmp_clk_factor_masks *masks,
40-
struct mmp_clk_factor_tbl *ftbl, unsigned int ftbl_cnt,
36+
struct u32_fract *ftbl, unsigned int ftbl_cnt,
4137
spinlock_t *lock);
4238

4339
/* Clock type "mix" */

0 commit comments

Comments
 (0)