Hi, On 1 March 2017 at 14:34, Philipp Tomsich <philipp.toms...@theobroma-systems.com> wrote: > The I2C block in sunxi (Allwinner SoCs) is based on Designware and uses > the same driver as the Marvell Orion 5x and Kirkwood families. > > This change adds a compatible id matching the binding for sunxi > devices, supports configuring the clocks and to release the module > reset on sunxi platforms as directed by the device tree. > > As we enable DT control of this driver, we need to make sure the > common config header (sunxi-common.h) does try to turn on support for > the legacy I2C support. > > Signed-off-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com> > --- > drivers/i2c/mvtwsi.c | 42 > ++++++++++++++++++++++++++++++++++++++++++ > include/configs/sunxi-common.h | 9 ++++++--- > 2 files changed, 48 insertions(+), 3 deletions(-)
Instead of the #ifdefs can you just rely on the header files doing the right thing? > > diff --git a/drivers/i2c/mvtwsi.c b/drivers/i2c/mvtwsi.c > index 648a96e..475131b 100644 > --- a/drivers/i2c/mvtwsi.c > +++ b/drivers/i2c/mvtwsi.c > @@ -16,6 +16,12 @@ > #ifdef CONFIG_DM_I2C > #include <dm.h> > #endif Please don't put #ifdefs around header file inclusions. > +#if defined(CONFIG_CLK) > +#include <clk.h> > +#endif > +#if defined(CONFIG_DM_RESET) > +#include <reset.h> > +#endif > > DECLARE_GLOBAL_DATA_PTR; > > @@ -36,6 +42,12 @@ DECLARE_GLOBAL_DATA_PTR; > #endif > #endif /* CONFIG_DM_I2C */ > > +/* On SUNXI, we get CONFIG_SYS_TCLK from this include, so we want to > + always have it. */ > +#if defined(CONFIG_DM_I2C) && defined(CONFIG_ARCH_SUNXI) > +#include <asm/arch/i2c.h> > +#endif > + > /* > * TWSI register structure > */ > @@ -81,6 +93,14 @@ struct mvtwsi_i2c_dev { > uint speed; > /* The current length of a clock period (depending on speed) */ > uint tick; > +#if defined(CONFIG_DM_RESET) > + bool reset_valid; > + struct reset_ctl reset; > +#endif > +#if defined(CONFIG_CLK) > + bool clk_gate_valid; > + struct clk clk_gate; > +#endif > }; > #endif /* CONFIG_DM_I2C */ > > @@ -781,6 +801,14 @@ static int mvtwsi_i2c_ofdata_to_platdata(struct udevice > *bus) > "u-boot,i2c-slave-addr", 0x0); > dev->speed = fdtdec_get_int(gd->fdt_blob, dev_of_offset(bus), > "clock-frequency", 100000); > +#if defined(CONFIG_DM_RESET) > + if (reset_get_by_index(bus, 0, &dev->reset) == 0) > + dev->reset_valid = true; > +#endif > +#if defined(CONFIG_CLK) > + if (clk_get_by_index(bus, 0, &dev->clk_gate) == 0) > + dev->clk_gate_valid = true; > +#endif > return 0; > } > > @@ -789,6 +817,17 @@ static int mvtwsi_i2c_probe(struct udevice *bus) > struct mvtwsi_i2c_dev *dev = dev_get_priv(bus); > uint actual_speed; > > +#if defined(CONFIG_DM_RESET) > + /* Enable the controller */ > + if (dev->reset_valid) > + reset_deassert(&dev->reset); > +#endif > +#if defined(CONFIG_CLK) > + /* Open the clock-gate */ > + if (dev->clk_gate_valid) > + clk_enable(&dev->clk_gate); > +#endif > + > __twsi_i2c_init(dev->base, dev->speed, dev->slaveadd, &actual_speed); > dev->speed = actual_speed; > dev->tick = calc_tick(dev->speed); > @@ -831,6 +870,9 @@ static const struct dm_i2c_ops mvtwsi_i2c_ops = { > static const struct udevice_id mvtwsi_i2c_ids[] = { > { .compatible = "marvell,mv64xxx-i2c", }, > { .compatible = "marvell,mv78230-i2c", }, > +#if defined(CONFIG_ARCH_SUNXI) > + { .compatible = "allwinner,sun6i-a31-i2c", }, > +#endif > { /* sentinel */ } > }; > > diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h > index 4f566fa..aaab809 100644 > --- a/include/configs/sunxi-common.h > +++ b/include/configs/sunxi-common.h > @@ -262,11 +262,14 @@ > defined CONFIG_SY8106A_POWER > #endif > > -#if defined CONFIG_I2C0_ENABLE || defined CONFIG_I2C1_ENABLE || \ > - defined CONFIG_I2C2_ENABLE || defined CONFIG_I2C3_ENABLE || \ > - defined CONFIG_I2C4_ENABLE || defined CONFIG_R_I2C_ENABLE > +#if !defined(CONFIG_DM_I2C) && \ > + (defined CONFIG_I2C0_ENABLE || defined CONFIG_I2C1_ENABLE || \ > + defined CONFIG_I2C2_ENABLE || defined CONFIG_I2C3_ENABLE || \ > + defined CONFIG_I2C4_ENABLE || defined CONFIG_R_I2C_ENABLE) > #define CONFIG_SYS_I2C > +#if !defined(CONFIG_SYS_I2C_MVTWSI) > #define CONFIG_SYS_I2C_MVTWSI > +#endif > #define CONFIG_SYS_I2C_SPEED 400000 > #define CONFIG_SYS_I2C_SLAVE 0x7f > #endif > -- > 1.9.1 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot