From: "Mathieu Dubois-Briand" <mathieu.dubois-briand@bootlin.com>
To: "Andy Shevchenko" <andy.shevchenko@gmail.com>
Cc: "Andy Shevchenko" <andriy.shevchenko@intel.com>,
"Lee Jones" <lee@kernel.org>, "Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Kamel Bouhara" <kamel.bouhara@bootlin.com>,
"Linus Walleij" <linus.walleij@linaro.org>,
"Bartosz Golaszewski" <brgl@bgdev.pl>,
"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
"Uwe Kleine-König" <ukleinek@kernel.org>,
"Michael Walle" <mwalle@kernel.org>,
"Mark Brown" <broonie@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-input@vger.kernel.org,
linux-pwm@vger.kernel.org,
"Grégory Clement" <gregory.clement@bootlin.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v4 07/10] gpio: max7360: Add MAX7360 gpio support
Date: Mon, 17 Mar 2025 15:13:07 +0100 [thread overview]
Message-ID: <D8ILQ4NT6977.50SD8DM8FIBF@bootlin.com> (raw)
In-Reply-To: <Z9PlYSZDviGOCV7X@surfacebook.localdomain>
On Fri Mar 14, 2025 at 9:14 AM CET, Andy Shevchenko wrote:
> Thu, Mar 13, 2025 at 06:07:03PM +0100, Mathieu Dubois-Briand kirjoitti:
> > On Fri Feb 14, 2025 at 4:59 PM CET, Andy Shevchenko wrote:
> > > On Fri, Feb 14, 2025 at 12:49:57PM +0100, Mathieu Dubois-Briand wrote:
> > > > Add driver for Maxim Integrated MAX7360 GPIO/GPO controller.
>
> ...
>
> > > > + /*
> > > > + * MAX7360_REG_DEBOUNCE contains configuration both for keypad debounce
> > > > + * timings and gpos/keypad columns repartition. Only the later is
> > > > + * modified here.
> > > > + */
> > > > + val = FIELD_PREP(MAX7360_PORTS, ngpios);
> > > > + ret = regmap_write_bits(regmap, MAX7360_REG_DEBOUNCE, MAX7360_PORTS, val);
> > > > + if (ret) {
> > > > + dev_err(dev, "Failed to write max7360 columns/gpos configuration");
> > > > + return ret;
> > > > + }
> > >
> > > Shouldn't this be configured via ->set_config() callback?
> >
> > I believe this comment has been a bit outdated by our discussion on
> > using GPIO valid mask, but I believe we could not use the ->set_config()
> > callback here: this callback is made to configure a single pin while the
> > gpos/keypad columns repartition is global.
>
> Yeah, we have similar desing in Intel Bay Trail (see pinctrl-baytrail.c) and it
> requires some software driven heuristics on how individual setting may affect
> the global one. But the Q here is is the debounce affects only keypad? Then it
> should be configured via keypad matrix driver. Btw, have you checked
> drivers/input/keyboard/matrix_keypad.c? Is there anything that can be useful
> here?
>
Hum, maybe the comment is not clear enough? Not sure, but please tell
me.
So yes, this register is named "debounce" but controls two different
things:
- The keypad debounce: we do not touch it here.
- The partition between keypad columns and gpos. This is the value we do
modify here.
I've been looking at drivers/input/keyboard/matrix_keypad.c, but I
believe the idea is completely different: it allows to use GPIOs to
create a keypad matrix, without the help of any controller. Here we have
a controller dedicated to keypad matrix, allowing to repurpose unused
columns as GPIOs. So except for some device tree similar properties and
input events, I believe there there isn't much we can reuse.
> ...
>
> > > > + if (irq < 0)
> > > > + return dev_err_probe(dev, irq, "Failed to get IRQ\n");
> > > > +
> > > > + irq_chip = devm_kzalloc(dev, sizeof(*irq_chip), GFP_KERNEL);
> > > > + if (!irq_chip)
> > > > + return -ENOMEM;
> > > > +
> > > > + irq_chip->name = dev_name(dev);
> > > > + irq_chip->status_base = MAX7360_REG_GPIOIN;
> > > > + irq_chip->num_regs = 1;
> > > > + irq_chip->num_irqs = MAX7360_MAX_GPIO;
> > > > + irq_chip->irqs = max7360_regmap_irqs;
> > > > + irq_chip->handle_mask_sync = max7360_handle_mask_sync;
> > > > + irq_chip->status_is_level = true;
> > > > + irq_chip->irq_drv_data = regmap;
> > > > +
> > > > + for (unsigned int i = 0; i < MAX7360_MAX_GPIO; i++) {
> > > > + regmap_write_bits(regmap, MAX7360_REG_PWMCFG(i),
> > > > + MAX7360_PORT_CFG_INTERRUPT_EDGES,
> > > > + MAX7360_PORT_CFG_INTERRUPT_EDGES);
> > > > + }
> > > > +
> > > > + flags = IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED;
> > > > + ret = devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev), regmap, irq, flags, 0,
> > > > + irq_chip, &irq_chip_data);
> > >
> > > Right.
> > >
> > > What I mean in previous discussion is to update gpio-regmap to call this from inside.
> > > You need to add irq_chip pointer and irq_chip_data pointer to the regmap configuration
> > > and if they are set (or the first one, I dunno if this is supported by IRQ chip core)
> > > call this function and assign domain. This should be called after GPIO chip is
> > > added, but before IRQ domain attachment.
> > >
> >
> > Ok, this is a bit more clear to me now. So I came up with something, it
> > will be part of the next iteration, probably during the next week.
> >
> > This required to add a few additional fields to the gpio_regmap_config
> > structure, specifying the IRQ configuration:
> >
> > + * @regmap_irq_chip: (Optional) Pointer on an regmap_irq_chip structure. If
> > + * set, a regmap-irq device will be created and the IRQ
> > + * domain will be set accordingly.
> > + * @regmap_irq_chip_data: (Optional) Pointer on an regmap_irq_chip_data
> > + * structure pointer. If set, it will be populated with a
> > + * pointer on allocated regmap_irq data.
> > + * @regmap_irq_irqno (Optional) The IRQ the device uses to signal interrupts.
> > + * @regmap_irq_flags (Optional) The IRQF_ flags to use for the interrupt.
>
> Okay, just make sure it's guarded by the same ifdeffery as the similar in the
> GPIO:
>
> #ifdef CONFIG_GPIOLIB_IRQCHIP
>
Thanks!
> ...
>
> > > > +
> > > > + regmap_write(regmap, MAX7360_REG_GPIOOUTM, outconf);
> > > > + }
> > > > +
> > > > + /* Add gpio device. */
> > > > + gpio_config.parent = dev;
> > > > + gpio_config.regmap = regmap;
> > >
> > > > + if (gpio_function == MAX7360_GPIO_PORT) {
> > > > + gpio_config.ngpio = MAX7360_MAX_GPIO;
> > >
> > > Why this case can't be managed also via ngpios property? Maybe at the end of
> > > the day you rather need to have another property to tell where the split is?
> > >
> > > This will help a lot and removes unneeded sharing of ngpios here and there.
> > >
> > > What I read from this code is like you are trying to put _two_in_one_ semantics
> > > on the shoulders of "ngpios".
> >
> > So as I reworked the keypad columns GPIOs, PORT GPIOs and the COL GPIOs
> > are a bit more similar on this point. So far I now use a constant value
> > assigned in the driver for both, as I believe there is no way the number
> > of GPIOs could be a different. Yet I can easily switch back to a value
> > provided by a device property.
>
> Sounds good as long as ngpios is not overloaded with the additional meanings.
Thanks again for your review.
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-03-17 14:13 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-14 11:49 [PATCH v4 00/10] Add support for MAX7360 Mathieu Dubois-Briand
2025-02-14 11:49 ` [PATCH v4 01/10] dt-bindings: mfd: gpio: Add MAX7360 Mathieu Dubois-Briand
2025-02-16 12:58 ` Krzysztof Kozlowski
2025-03-18 16:31 ` Mathieu Dubois-Briand
2025-02-14 11:49 ` [PATCH v4 02/10] mfd: Add max7360 support mathieu.dubois-briand
2025-02-18 10:09 ` Andy Shevchenko
2025-02-14 11:49 ` [PATCH v4 03/10] pwm: max7360: Add MAX7360 PWM support mathieu.dubois-briand
2025-02-14 15:10 ` Andy Shevchenko
2025-02-14 16:05 ` Mathieu Dubois-Briand
2025-03-13 21:03 ` Uwe Kleine-König
2025-03-17 13:51 ` Mathieu Dubois-Briand
2025-02-14 11:49 ` [PATCH v4 04/10] gpio: regmap: Allow to provide request and free callbacks Mathieu Dubois-Briand
2025-02-14 16:07 ` Andy Shevchenko
2025-02-16 13:17 ` Sander Vanheule
2025-02-17 12:19 ` Mathieu Dubois-Briand
2025-02-14 11:49 ` [PATCH v4 05/10] gpio: regmap: Allow to retrieve ngpio Mathieu Dubois-Briand
2025-02-14 16:04 ` Andy Shevchenko
2025-02-14 11:49 ` [PATCH v4 06/10] regmap: irq: Add support for chips without separate IRQ status Mathieu Dubois-Briand
2025-02-14 15:18 ` Andy Shevchenko
2025-02-14 15:49 ` Mathieu Dubois-Briand
2025-02-14 16:02 ` Andy Shevchenko
2025-02-26 13:18 ` Mark Brown
2025-02-26 13:52 ` Andy Shevchenko
2025-02-14 11:49 ` [PATCH v4 07/10] gpio: max7360: Add MAX7360 gpio support Mathieu Dubois-Briand
2025-02-14 11:54 ` Mathieu Dubois-Briand
2025-02-14 15:59 ` Andy Shevchenko
2025-02-14 16:18 ` Andy Shevchenko
2025-02-17 11:20 ` Mathieu Dubois-Briand
2025-02-17 20:08 ` Andy Shevchenko
2025-03-13 16:43 ` Mathieu Dubois-Briand
2025-03-14 8:02 ` Andy Shevchenko
2025-03-17 14:44 ` Mathieu Dubois-Briand
2025-03-13 17:07 ` Mathieu Dubois-Briand
2025-03-14 8:14 ` Andy Shevchenko
2025-03-17 14:13 ` Mathieu Dubois-Briand [this message]
2025-03-17 15:56 ` Andy Shevchenko
2025-02-14 11:49 ` [PATCH v4 08/10] input: keyboard: Add support for MAX7360 keypad Mathieu Dubois-Briand
2025-02-14 11:49 ` [PATCH v4 09/10] input: misc: Add support for MAX7360 rotary Mathieu Dubois-Briand
2025-02-14 11:50 ` [PATCH v4 10/10] MAINTAINERS: Add entry on MAX7360 driver Mathieu Dubois-Briand
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=D8ILQ4NT6977.50SD8DM8FIBF@bootlin.com \
--to=mathieu.dubois-briand@bootlin.com \
--cc=andriy.shevchenko@intel.com \
--cc=andy.shevchenko@gmail.com \
--cc=brgl@bgdev.pl \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=dakr@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=gregory.clement@bootlin.com \
--cc=kamel.bouhara@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=mwalle@kernel.org \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=ukleinek@kernel.org \
/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.