[PATCH v2] i2c: spacemit: configure ILCR for accurate SCL frequency

Yixun Lan dlan at gentoo.org
Sun Sep 28 04:13:21 PDT 2025


Hi Jesse,

On 23:37 Thu 17 Jul     , Jesse T wrote:
> On Thu, Jul 17, 2025 at 9:08 PM Troy Mitchell
> <troy.mitchell at linux.spacemit.com> wrote:
> >
> > The SpacemiT I2C controller's SCL (Serial Clock Line) frequency for
> > master mode operations is determined by the ILCR (I2C Load Count Register).
> > Previously, the driver relied on the hardware's reset default
> > values for this register.
> >
> > The hardware's default ILCR values (SLV=0x156, FLV=0x5d) yield SCL
> > frequencies lower than intended. For example, with the default
> > 31.5 MHz input clock, these default settings result in an SCL
> > frequency of approximately 93 kHz (standard mode) when targeting 100 kHz,
> > and approximately 338 kHz (fast mode) when targeting 400 kHz.
> > These frequencies are below the 100 kHz/400 kHz nominal speeds.
> >
> > This patch integrates the SCL frequency management into
> > the Common Clock Framework (CCF). Specifically, the ILCR register,
> > which acts as a frequency divider for the SCL clock, is now registered
> > as a managed clock (scl_clk) within the CCF.
> >
> > This patch also cleans up unnecessary whitespace
> > in the included header files.
> >
> > Signed-off-by: Troy Mitchell <troy.mitchell at linux.spacemit.com>
> > ---

..[snip]
> >
> > +static struct clk *spacemit_i2c_register_scl_clk(struct spacemit_i2c_dev *i2c,
> > +                                                struct clk *parent)
> > +{
> > +       struct clk_init_data init;
> > +       char name[32];
> > +
> > +       snprintf(name, sizeof(name), "%s_scl_clk", dev_name(i2c->dev));
> > +
> > +       init.name = name;
> > +       init.ops = &spacemit_i2c_clk_ops;
> > +       init.parent_data = (struct clk_parent_data[]) {
> > +               { .fw_name = "func" },
> 
> Is "func" a placeholder? Can we name it i2c_scl_clk?
> 
no, it's the parent clk of scl that need to request, which correspond to
the DT node 

      clocks = <&syscon_apbc CLK_TWSI8>,
                ..
      clock-names = "func", ..

-- 
Yixun Lan (dlan)



More information about the linux-riscv mailing list