> This patch introduces the preliminary support for PMICs X-Powers AXP202 > and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit) > used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company > of Allwinner. > > The core enables support for two subsystems: > - PEK (Power Enable Key) > - Regulators > > Signed-off-by: Carlo Caione <carlo@xxxxxxxxxx> > --- > drivers/mfd/Kconfig | 12 +++ > drivers/mfd/Makefile | 1 + > drivers/mfd/axp20x.c | 240 +++++++++++++++++++++++++++++++++++++++++++++ > include/linux/mfd/axp20x.h | 180 ++++++++++++++++++++++++++++++++++ > 4 files changed, 433 insertions(+) > create mode 100644 drivers/mfd/axp20x.c > create mode 100644 include/linux/mfd/axp20x.h > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 49bb445..24ba61a 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -59,6 +59,18 @@ config MFD_AAT2870_CORE > additional drivers must be enabled in order to use the > functionality of the device. > > +config MFD_AXP20X > + bool "X-Powers AXP20X" > + select MFD_CORE > + select REGMAP_I2C > + select REGMAP_IRQ > + depends on I2C=y > + help > + If you say Y here you get support for the AXP20X. > + This driver provides common support for accessing the device, > + additional drivers must be enabled in order to use the > + functionality of the device. Please tell us what this device is and what sub-devices are available? [...] > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > new file mode 100644 > index 0000000..f77a663 > --- /dev/null > +++ b/drivers/mfd/axp20x.c > @@ -0,0 +1,240 @@ > +/* > + * axp20x.c - MFD core driver for the X-Powers AXP202 and AXP209 ... which consist of ... [...] > +static struct resource axp20x_pek_resources[] = { > + { > + .name = "PEK_DBR", > + .start = AXP20X_IRQ_PEK_RIS_EDGE, > + .end = AXP20X_IRQ_PEK_RIS_EDGE, > + .flags = IORESOURCE_IRQ, > + }, { > + .name = "PEK_DBF", > + .start = AXP20X_IRQ_PEK_FAL_EDGE, > + .end = AXP20X_IRQ_PEK_FAL_EDGE, > + .flags = IORESOURCE_IRQ, > + }, > +}; Have you considered doing this in the Device Tree? It's a lot less code/overhead. > +static const struct i2c_device_id axp20x_i2c_id[] = { > + { }, > +}; > +MODULE_DEVICE_TABLE(i2c, axp20x_i2c_id); We really should consider changing the I2C subsystem! Can you add a comment here describing why we have to add this seemingly pointless empty struct please? > +static struct mfd_cell axp20x_cells[] = { > + { > + .name = "axp20x-pek", > + .num_resources = ARRAY_SIZE(axp20x_pek_resources), > + .resources = axp20x_pek_resources, > + }, { > + .name = "axp20x-regulator", > + }, > +}; Do these drivers don't look inside the DTB at all? [...] > + of_id = of_match_device(axp20x_of_match, &i2c->dev); > + if (!of_id) { > + dev_err(&i2c->dev, "Unable to setup AXP20X data\n"); > + return -ENODEV; > + } > + axp20x->variant = (int) of_id->data; 'variant' needs to be a (unsigned?) long or it will break on 64bit architectures. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html