On Thu, 13 Aug 2020, Michael Walle wrote: > There are I2C devices which contain several different functions but > doesn't require any special access functions. For these kind of drivers > an I2C regmap should be enough. > > Create an I2C driver which creates an I2C regmap and enumerates its > children. If a device wants to use this as its MFD core driver, it has > to add an individual compatible string. It may provide its own regmap > configuration. > > Subdevices can use dev_get_regmap() on the parent to get their regmap > instance. > > Signed-off-by: Michael Walle <michael@xxxxxxxx> > --- > Changes since v7: > - none > > Changes since v6: > - added SIMPLE_MFD_I2C help text > - revised description in module header > > Changes since v5: > - removed "select MFD_CORE" in Kconfig > - removed help text in Kconfig, we assume that the users of this > driver will have a "select MFD_SIMPLE_MFD_I2C". Instead added > a small description to the driver itself. > - removed "struct simple_mfd_i2c_config" and use regmap_config > directly > - changed builtin_i2c_driver() to module_i2c_driver(), added > MODULE_ boilerplate > - cleaned up the included files > > Changes since v4: > - new patch. Lee, please bear with me. I didn't want to delay the > new version (where a lot of remarks on the other patches were > addressed) even more, just because we haven't figured out how > to deal with the MFD part. So for now, I've included this one. > > drivers/mfd/Kconfig | 12 ++++++++ > drivers/mfd/Makefile | 1 + > drivers/mfd/simple-mfd-i2c.c | 56 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 69 insertions(+) > create mode 100644 drivers/mfd/simple-mfd-i2c.c > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 33df0837ab41..6e1a38944d28 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -1162,6 +1162,18 @@ config MFD_SI476X_CORE > To compile this driver as a module, choose M here: the > module will be called si476x-core. > > +config MFD_SIMPLE_MFD_I2C > + tristate > + depends on I2C > + select REGMAP_I2C > + help > + This driver creates a single register map with the intention for it > + to be shared by all sub-devices. > + > + Once the register map has been successfully initialised, any > + sub-devices represented by child nodes in Device Tree will be > + subsequently registered. > + > config MFD_SM501 > tristate "Silicon Motion SM501" > depends on HAS_DMA > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index a60e5f835283..78d24a3e7c9e 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -264,3 +264,4 @@ obj-$(CONFIG_MFD_STMFX) += stmfx.o > obj-$(CONFIG_MFD_KHADAS_MCU) += khadas-mcu.o > > obj-$(CONFIG_SGI_MFD_IOC3) += ioc3.o > +obj-$(CONFIG_MFD_SIMPLE_MFD_I2C) += simple-mfd-i2c.o > diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c > new file mode 100644 > index 000000000000..09b40ebfdf07 > --- /dev/null > +++ b/drivers/mfd/simple-mfd-i2c.c > @@ -0,0 +1,56 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Simple MFD - I2C > + * > + * This driver creates a single register map with the intention for it to be > + * shared by all sub-devices. Children can use their parent's device structure > + * (dev.parent) in order reference it. Nit: "in order *to* reference it" Once fixed, please add my: For my own reference (apply this as-is to your sign-off block): Acked-for-MFD-by: Lee Jones <lee.jones@xxxxxxxxxx> -- Lee Jones [李琼斯] Senior Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog