From: Lee Jones <lee.jones@linaro.org>
To: Alistair Francis <alistair23@gmail.com>
Cc: linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Michael Walle <michael@walle.cc>, Mark Brown <broonie@kernel.org>
Subject: Re: [PATCH v2 1/1] mfd: simple-mfd-i2c: Add support for registering devices via MFD cells
Date: Fri, 6 Aug 2021 12:41:38 +0100 [thread overview]
Message-ID: <YQ0f8hJSuLqR3SGQ@google.com> (raw)
In-Reply-To: <CAKmqyKMPg8kikB7Ym6qc+VYAwt0DvyXK+xqu3SwgJwcaCyUrbA@mail.gmail.com>
On Fri, 06 Aug 2021, Alistair Francis wrote:
> On Thu, Aug 5, 2021 at 6:56 PM Lee Jones <lee.jones@linaro.org> wrote:
> >
> > More devices are cropping up requiring only Regmap initialisation and
> > child registration functionality. We currently only support that if
> > all required devices are represented by their own Device Tree nodes
> > complete with compatible strings.
> >
> > However, not everyone is happy with adding empty nodes that provide no
> > additional device information into the Device Tree.
> >
> > Rather than have a plethora of mostly empty, function-less drivers in
> > MFD, we'll support those simple cases in here instead via MFD cells.
> >
> > Cc: Michael Walle <michael@walle.cc>
> > Cc: Mark Brown <broonie@kernel.org>
> > Cc: Alistair Francis <alistair23@gmail.com>
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> > v2:
> > - Check for empty of_device_id .data entry
> >
> > drivers/mfd/simple-mfd-i2c.c | 41 +++++++++++++++++++++++++++++-------
> > drivers/mfd/simple-mfd-i2c.h | 32 ++++++++++++++++++++++++++++
> > 2 files changed, 65 insertions(+), 8 deletions(-)
> > create mode 100644 drivers/mfd/simple-mfd-i2c.h
> >
> > diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c
> > index 87f684cff9a17..583e8c7924af0 100644
> > --- a/drivers/mfd/simple-mfd-i2c.c
> > +++ b/drivers/mfd/simple-mfd-i2c.c
> > @@ -2,39 +2,64 @@
> > /*
> > * Simple MFD - I2C
> > *
> > + * Author(s):
> > + * Michael Walle <michael@walle.cc>
> > + * Lee Jones <lee.jones@linaro.org>
> > + *
> > * 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 to reference it.
> > *
> > * Once the register map has been successfully initialised, any sub-devices
> > - * represented by child nodes in Device Tree will be subsequently registered.
> > + * represented by child nodes in Device Tree or via the MFD cells in this file
> > + * will be subsequently registered.
> > */
> >
> > #include <linux/i2c.h>
> > #include <linux/kernel.h>
> > +#include <linux/mfd/core.h>
> > #include <linux/module.h>
> > #include <linux/of_platform.h>
> > #include <linux/regmap.h>
> >
> > -static const struct regmap_config simple_regmap_config = {
> > +#include "simple-mfd-i2c.h"
> > +
> > +static const struct regmap_config regmap_config_8r_8v = {
> > .reg_bits = 8,
> > .val_bits = 8,
> > };
> >
> > static int simple_mfd_i2c_probe(struct i2c_client *i2c)
> > {
> > - const struct regmap_config *config;
> > + const struct simple_mfd_data *simple_mfd_data;
> > + const struct regmap_config *regmap_config;
> > struct regmap *regmap;
> > + int ret;
> > +
> > + simple_mfd_data = device_get_match_data(&i2c->dev);
> >
> > - config = device_get_match_data(&i2c->dev);
> > - if (!config)
> > - config = &simple_regmap_config;
> > + /* If no regmap_config is specified, use the default 8reg and 8val bits */
> > + if (!simple_mfd_data || !simple_mfd_data->regmap_config)
> > + regmap_config = ®map_config_8r_8v;
> > + else
> > + regmap_config = simple_mfd_data->regmap_config;
> >
> > - regmap = devm_regmap_init_i2c(i2c, config);
> > + regmap = devm_regmap_init_i2c(i2c, regmap_config);
> > if (IS_ERR(regmap))
> > return PTR_ERR(regmap);
> >
> > - return devm_of_platform_populate(&i2c->dev);
> > + /* If no MFD cells are spedified, use register the DT child nodes instead */
> > + if (!simple_mfd_data || !simple_mfd_data->mfd_cell)
> > + return devm_of_platform_populate(&i2c->dev);
> > +
> > + ret = devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO,
> > + simple_mfd_data->mfd_cell,
> > + simple_mfd_data->mfd_cell_size,
> > + NULL, 0, NULL);
> > + if (!ret)
>
> Shouldn't this be `if (ret)` instead?
>
> With that changed this works for me as well:
You're right. Will fix.
> Reviewed-by: Alistair Francis <alistair@alistair23.me>
> Tested-by: Alistair Francis <alistair@alistair23.me>
Thanks.
--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
prev parent reply other threads:[~2021-08-06 11:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-05 8:56 [PATCH v2 1/1] mfd: simple-mfd-i2c: Add support for registering devices via MFD cells Lee Jones
2021-08-05 10:01 ` Michael Walle
2021-08-05 11:03 ` Lee Jones
2021-08-06 8:19 ` Alistair Francis
2021-08-06 11:41 ` Lee Jones [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YQ0f8hJSuLqR3SGQ@google.com \
--to=lee.jones@linaro.org \
--cc=alistair23@gmail.com \
--cc=broonie@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael@walle.cc \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).