From: Lee Jones <lee@kernel.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: "Nuno Sá via B4 Relay" <devnull+nuno.sa.analog.com@kernel.org>,
linux-gpio@vger.kernel.org, linux-pwm@vger.kernel.org,
devicetree@vger.kernel.org, linux-input@vger.kernel.org,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Uwe Kleine-König" <ukleinek@kernel.org>,
"Linus Walleij" <linus.walleij@linaro.org>,
"Bartosz Golaszewski" <brgl@bgdev.pl>,
"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
"Liu Ying" <victor.liu@nxp.com>
Subject: Re: [PATCH v3 14/22] mfd: adp5585: support reset and unlock events
Date: Wed, 14 May 2025 09:46:28 +0100 [thread overview]
Message-ID: <20250514084628.GZ2936510@google.com> (raw)
In-Reply-To: <20250514083541.GG23592@pendragon.ideasonboard.com>
On Wed, 14 May 2025, Laurent Pinchart wrote:
> On Tue, May 13, 2025 at 05:22:46PM +0100, Lee Jones wrote:
> > On Mon, 12 May 2025, Nuno Sá via B4 Relay wrote:
> >
> > > From: Nuno Sá <nuno.sa@analog.com>
> > >
> > > The ADP558x family of devices can be programmed to respond to some
> > > especial events, In case of the unlock events, one can lock the keypad
> > > and use KEYS or GPIs events to unlock it. For the reset events, one can
> > > again use a combinations of GPIs/KEYs in order to generate an event that
> > > will trigger the device to generate an output reset pulse.
> > >
> > > Signed-off-by: Nuno Sá <nuno.sa@analog.com>
> > > ---
> > > drivers/mfd/adp5585.c | 279 ++++++++++++++++++++++++++++++++++++++++++++
> > > include/linux/mfd/adp5585.h | 41 +++++++
> > > 2 files changed, 320 insertions(+)
> > >
> > > diff --git a/drivers/mfd/adp5585.c b/drivers/mfd/adp5585.c
> > > index 5851ad30e7323bbb891878167d0786bc60ef5d90..b1227a390fe2f932ba8060b0d722f53f45ec3b4b 100644
> > > --- a/drivers/mfd/adp5585.c
> > > +++ b/drivers/mfd/adp5585.c
> > > @@ -157,6 +157,9 @@ static const struct adp5585_regs adp5585_regs = {
> > > .int_en = ADP5585_INT_EN,
> > > .gen_cfg = ADP5585_GENERAL_CFG,
> > > .poll_ptime_cfg = ADP5585_POLL_PTIME_CFG,
> > > + .reset_cfg = ADP5585_RESET_CFG,
> > > + .reset1_event_a = ADP5585_RESET1_EVENT_A,
> > > + .reset2_event_a = ADP5585_RESET2_EVENT_A,
> > > };
> > >
> > > static const struct adp5585_regs adp5589_regs = {
> > > @@ -164,8 +167,52 @@ static const struct adp5585_regs adp5589_regs = {
> > > .int_en = ADP5589_INT_EN,
> > > .gen_cfg = ADP5589_GENERAL_CFG,
> > > .poll_ptime_cfg = ADP5589_POLL_PTIME_CFG,
> > > + .reset_cfg = ADP5589_RESET_CFG,
> > > + .reset1_event_a = ADP5589_RESET1_EVENT_A,
> > > + .reset2_event_a = ADP5589_RESET2_EVENT_A,
> > > };
> > >
> > > +static int adp5585_validate_event(const struct adp5585_dev *adp5585,
> > > + unsigned int ev, bool has_pin5)
> >
> > has_pin5 (which doesn't actually mean much to me) is passed around a lot
> > and is only used in one place, as far as I can see. You also have 'dev'
> > available here, so why not drop it everywhere and call
> >
> > if (!device_property_present(dev, "gpio-reserved-ranges"))
> >
> > ... here instead?
>
> The information can be stored in struct adp5585_dev. I wouldn't call
> device_property_present() here, as that's costly.
Does this function get called a lot?
Storing in the device data is also good.
> > > +{
> > > + if (has_pin5) {
> > > + if (ev >= ADP5585_ROW5_KEY_EVENT_START && ev <= ADP5585_ROW5_KEY_EVENT_END)
> > > + return 0;
> > > + if (ev >= ADP5585_GPI_EVENT_START && ev <= ADP5585_GPI_EVENT_END)
> > > + return 0;
> > > +
> > > + return dev_err_probe(adp5585->dev, -EINVAL,
> > > + "Invalid unlock/reset event(%u) for this device\n", ev);
> > > + }
> > > +
> > > + if (ev >= ADP5585_KEY_EVENT_START && ev <= ADP5585_KEY_EVENT_END)
> > > + return 0;
> > > + if (ev >= ADP5585_GPI_EVENT_START && ev <= ADP5585_GPI_EVENT_END) {
> > > + /* if it's GPI5 */
> > > + if (ev == (ADP5585_GPI_EVENT_START + 5))
> > > + return dev_err_probe(adp5585->dev, -EINVAL,
> > > + "Invalid unlock/reset event(%u). R5 not available\n",
> > > + ev);
> > > + return 0;
> > > + }
> > > +
> > > + return dev_err_probe(adp5585->dev, -EINVAL,
> > > + "Invalid unlock/reset event(%u) for this device\n", ev);
> > > +}
> > > +
> > > +static int adp5589_validate_event(const struct adp5585_dev *adp5585,
> > > + unsigned int ev, bool has_pin5)
> > > +{
> > > + if (ev >= ADP5589_KEY_EVENT_START && ev <= ADP5589_KEY_EVENT_END)
> > > + return 0;
> > > + if (ev >= ADP5589_GPI_EVENT_START && ev <= ADP5589_GPI_EVENT_END)
> > > + return 0;
> > > +
> > > + return dev_err_probe(adp5585->dev, -EINVAL,
> > > + "Invalid unlock/reset event(%u) for this device\n",
> > > + ev);
> > > +}
> > > +
> > > static int adp5585_fill_chip_configs(struct adp5585_dev *adp5585,
> > > struct i2c_client *i2c,
> > > struct regmap_config *regmap_config)
> > > @@ -180,10 +227,13 @@ static int adp5585_fill_chip_configs(struct adp5585_dev *adp5585,
> > > case ADP5585_MAN_ID_VALUE:
> > > *regmap_config = adp5585_regmap_config_template;
> > > info->regs = &adp5585_regs;
> > > + info->validate_event = adp5585_validate_event;
> >
> > I'd take an extra if() / switch() over a driver-level pointer to a function.
>
> Funny how we have different tastes for this kind of things, I find the
> function pointer more readable :-)
Contributors have tried to do "interesting" things with function
pointers in MFD in the past. To the point were I now have a general
aversion to them. I think they're great for things like subsystem-level
Ops, but beyond that, things _can_ get messy, fast.
--
Lee Jones [李琼斯]
next prev parent reply other threads:[~2025-05-14 8:46 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-12 12:38 [PATCH v3 00/22] mfd: adp5585: support keymap events and drop legacy Input driver Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-12 12:38 ` [PATCH v3 01/22] dt-bindings: mfd: adp5585: ease on the required properties Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-12 12:38 ` [PATCH v3 02/22] mfd: adp5585: only add devices given in FW Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-13 14:34 ` Lee Jones
2025-05-13 15:02 ` Nuno Sá
2025-05-13 15:19 ` Laurent Pinchart
2025-05-13 15:37 ` Nuno Sá
2025-05-13 16:12 ` Lee Jones
2025-05-12 12:38 ` [PATCH v3 03/22] mfd: adp5585: enable oscilator during probe Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-13 14:26 ` Lee Jones
2025-05-13 14:52 ` Nuno Sá
2025-05-13 16:07 ` Lee Jones
2025-05-13 15:24 ` Laurent Pinchart
2025-05-13 15:38 ` Nuno Sá
2025-05-12 12:38 ` [PATCH v3 04/22] pwm: adp5585: don't control OSC_EN in the pwm driver Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-13 15:26 ` Laurent Pinchart
2025-05-13 15:39 ` Nuno Sá
2025-05-13 16:04 ` Lee Jones
2025-05-12 12:38 ` [PATCH v3 05/22] mfd: adp5585: make use of MFD_CELL_NAME() Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-13 14:39 ` Lee Jones
2025-05-13 14:50 ` Nuno Sá
2025-05-12 12:38 ` [PATCH v3 06/22] dt-bindings: mfd: adp5585: document adp5589 I/O expander Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-12 12:38 ` [PATCH v3 07/22] mfd: adp5585: refactor how regmap defaults are handled Nuno Sá
2025-05-12 12:38 ` Nuno Sá via B4 Relay
2025-05-13 15:00 ` Lee Jones
2025-05-13 15:02 ` Lee Jones
2025-05-13 15:32 ` Nuno Sá
2025-05-13 15:36 ` Laurent Pinchart
2025-05-13 16:03 ` Lee Jones
2025-05-13 15:35 ` Laurent Pinchart
2025-05-13 15:41 ` Nuno Sá
2025-05-12 12:39 ` [PATCH v3 08/22] mfd: adp5585: add support for adp5589 Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 09/22] mfd: adp5585: add a per chip reg struture Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 10/22] gpio: adp5585: add support for the adp5589 expander Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 11/22] pwm: adp5585: add support for adp5589 Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 12/22] dt-bindings: mfd: adp5585: add properties for input events Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 13/22] mfd: adp5585: add support for event handling Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-13 15:59 ` Lee Jones
2025-05-15 5:56 ` Nuno Sá
2025-05-15 6:14 ` Nuno Sá
2025-05-12 12:39 ` [PATCH v3 14/22] mfd: adp5585: support reset and unlock events Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-13 16:22 ` Lee Jones
2025-05-14 8:35 ` Laurent Pinchart
2025-05-14 8:46 ` Lee Jones [this message]
2025-05-15 5:46 ` Nuno Sá
2025-05-12 12:39 ` [PATCH v3 15/22] mfd: adp5585: add support for input devices Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 16/22] gpio: adp5585: support gpi events Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 17/22] Input: adp5585: Add Analog Devices ADP5585/89 support Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-19 22:29 ` Dmitry Torokhov
2025-05-20 8:32 ` Nuno Sá
2025-05-20 18:33 ` Dmitry Torokhov
2025-05-21 10:06 ` Nuno Sá
2025-05-12 12:39 ` [PATCH v3 18/22] Input: adp5589: remove the driver Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 19/22] mfd: adp5585: support getting vdd regulator Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 20/22] dt-bindings: mfd: adp5585: document reset gpio Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-12 12:39 ` [PATCH v3 21/22] mfd: adp5585: add support for a reset pin Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-13 16:26 ` Lee Jones
2025-05-15 5:39 ` Nuno Sá
2025-05-12 12:39 ` [PATCH v3 22/22] pwm: adp5585: make sure to include mod_devicetable.h Nuno Sá
2025-05-12 12:39 ` Nuno Sá via B4 Relay
2025-05-19 16:11 ` Uwe Kleine-König
2025-05-19 16:19 ` Nuno Sá
2025-05-14 8:25 ` [PATCH v3 00/22] mfd: adp5585: support keymap events and drop legacy Input driver Lee Jones
2025-05-14 11:04 ` Nuno Sá
2025-07-02 13:34 ` Lee Jones
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=20250514084628.GZ2936510@google.com \
--to=lee@kernel.org \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=devnull+nuno.sa.analog.com@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=robh@kernel.org \
--cc=ukleinek@kernel.org \
--cc=victor.liu@nxp.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.