Re: [PATCH 6/9] clk: meson: Support fractional fixed-factor clocks
Neil Armstrong <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot,io.groups.u-boot-amlogic |
|---|---|
| Organization | Linaro |
| Message-ID | <[email protected]> |
On 8/17/26 19:15, Sean Anderson wrote: > One of the s4 clocks has a non-integer divisor (2.5). Add support for > this. > > Signed-off-by: Sean Anderson <[email protected]> > --- > > drivers/clk/meson/clk_meson.c | 3 ++- > drivers/clk/meson/clk_meson.h | 12 +++++++++--- > 2 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/clk/meson/clk_meson.c b/drivers/clk/meson/clk_meson.c > index de5aa5ae3c9..29615fdae77 100644 > --- a/drivers/clk/meson/clk_meson.c > +++ b/drivers/clk/meson/clk_meson.c > @@ -153,7 +153,8 @@ ulong meson_clk_get_rate(struct clk *clk) > case MESON_CLK_FIXED_DIV: > parent.dev = clk->dev; > parent.id = meson_clk_get_parent(clk); > - return meson_clk_get_rate(&parent) / info->div; > + return mult_frac(meson_clk_get_rate(&parent), info->mult, > + info->div); > case MESON_CLK_EXTERNAL: { > int ret; > struct clk external_clk; > diff --git a/drivers/clk/meson/clk_meson.h b/drivers/clk/meson/clk_meson.h > index 990e9434126..86b272985ab 100644 > --- a/drivers/clk/meson/clk_meson.h > +++ b/drivers/clk/meson/clk_meson.h > @@ -61,7 +61,7 @@ struct meson_clk { > * @MESON_CLK_GATE: This clock is a gate > * @MESON_CLK_MUX: This clock is a multiplexer > * @MESON_CLK_DIV: This clock is a configurable divider > - * @MESON_CLK_FIXED_DIV: This clock is a configurable divider > + * @MESON_CLK_FIXED_DIV: This clock is a (fractional) fixed-factor clock > * @MESON_CLK_EXTERNAL: This is an external clock from different clock provider > * @MESON_CLK_PLL: This is a PLL > */ > @@ -87,7 +87,10 @@ struct meson_clk_info { > const char *name; > union { > const struct parm *parm; > - u8 div; > + struct { > + u8 mult; > + u8 div; > + }; > }; > const unsigned int *parents; > const enum meson_clk_type type; > @@ -133,13 +136,16 @@ struct meson_clk_data { > }) > > /* A fixed divider */ > -#define CLK_DIV_FIXED(_name, _div, _parent) \ > +#define CLK_DIV_FIXED_FULL(_name, _mult, _div, _parent) \ > (&(struct meson_clk_info){ \ > .parents = (const unsigned int[]) { (_parent) }, \ > + .mult = (_mult), \ > .div = (_div), \ > .name = (_name), \ > .type = MESON_CLK_FIXED_DIV, \ > }) > +#define CLK_DIV_FIXED(name, div, parent) \ > + CLK_DIV_FIXED_FULL(name, 1, div, parent) > > /* An external clock */ > #define CLK_EXTERNAL(_name) \ Reviewed-by: Neil Armstrong <[email protected]> Thanks, Neil