mbox series

[v9,0/3] adp5588-keys: Support for dedicated gpio operation

Message ID 20240806-adp5588_gpio_support-v9-0-4d6118b6d653@analog.com
Headers show
Series adp5588-keys: Support for dedicated gpio operation | expand

Message

Utsav Agarwal via B4 Relay Aug. 6, 2024, 8:48 a.m. UTC
Current state of the driver for the ADP5588/87 only allows partial
I/O to be used as GPIO. This support was previously present as a
separate gpio driver, which was dropped with the commit
5ddc896088b0 ("gpio: gpio-adp5588: drop the driver") since the
functionality was deemed to have been merged with adp5588-keys.

This series of patches re-enables this support by allowing the driver to 
relax the requirement for registering a keymap and enable pure GPIO 
operation. 

Changelog
==========

V2: 
	-  Changed gpio_only from a local variable to a member of struct
	adp5588_kpad
	-  Removed condition from adp5588_probe() to skip adp5588_fw_parse() if 
	gpio-only specified. adp558_fw_parse() now handles and returns
	0 if gpio-only has been specified.
	-  Added a check in adp5588_fw_parse() to make sure keypad 
	properties(keypad,num-columns and keypad,num-rows) were not defined when 
	gpio-only specified

V3:
	-  Moved device_property_present() for reading "gpio-only" into 
	adp558_fw_parse()
	-  Added print statements in case of error

V4:
	- Added dt-bindings patch

Signed-off-by: Utsav Agarwal <utsav.agarwal@analog.com>
---
V5:
	- Removed extra property "gpio-only", now pure gpio mode is
	  detected via the adbsence of keypad specific properties.
	- Added dependencies for keypad properties to preserve
	  the original requirements in case a pure gpio mode is not
	  being used.
	- Added additional description for why the "interrupts" property
	  was made optional
	- Rebased current work based on https://lore.kernel.org/linux-input/ZoLt_qBCQS-tG8Ar@google.com/
- Link to v4: https://lore.kernel.org/r/20240701-adp5588_gpio_support-v4-0-44bba0445e90@analog.com

---
Changes in v9:
	- Added dt-binding dependency for interrupt-controller. Now if
	  interrupt-controller is specified, interrupts must be
	  provided.
- Link to v8: https://lore.kernel.org/r/20240704-adp5588_gpio_support-v8-0-208cf5d4c2d6@analog.com

Changes in v8:
	- Fixed indentation in document example (removed extra spaces)
- Link to v7: https://lore.kernel.org/r/20240704-adp5588_gpio_support-v7-0-e34eb7eba5ab@analog.com

Changes in v7:
	- Fixed commit subject for transported patch 
	- Driver now does not setup gpio_irq_chip if 
	  interrupt has not been provided
	- Fixed indentation for dtbinding example
- Link to v6: https://lore.kernel.org/r/20240704-adp5588_gpio_support-v6-0-cb65514d714b@analog.com

Changes in v6:
	- Restored functionality to register interrupts in GPIO
	  mode(i.e, these are optional but not exclusive to keypad mode
	  since even in pure gpio mode, they can be used as inputs via 
	  gpio-keys)
	- Updated dt-bindings such that each keypad property depends on
	  the others. Interrupts, although optional are now required by 
	  keypad mode but are not limited to it.
- Link to v5: https://lore.kernel.org/r/20240703-adp5588_gpio_support-v5-0-49fcead0d390@analog.com

---
Dmitry Torokhov (1):
      Input: adp5588-keys - use guard notation when acquiring mutexes

Utsav Agarwal (2):
      Input: adp5588-keys - add support for pure gpio
      dt-bindings: input: Update dtbinding for adp5588

 .../devicetree/bindings/input/adi,adp5588.yaml     | 51 +++++++++++--
 drivers/input/keyboard/adp5588-keys.c              | 86 +++++++++++++---------
 2 files changed, 95 insertions(+), 42 deletions(-)
---
base-commit: 1c52cf5e79d30ac996f34b64284f2c317004d641
change-id: 20240701-adp5588_gpio_support-65db2bd21a9f

Best regards,

Comments

Krzysztof Kozlowski Aug. 6, 2024, 9:04 a.m. UTC | #1
On 06/08/2024 10:48, Utsav Agarwal via B4 Relay wrote:
> From: Utsav Agarwal <utsav.agarwal@analog.com>
> 

A nit, subject: drop second/last, redundant "dtbinding". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18

Subject: everything is an update. Be descriptive and specific.

> Updating dt bindings for adp5588. Since the device can now function in a
> purely gpio mode, the following keypad specific properties are now made

Hardware changed? How?

> optional:
> 	- interrupts
> 	- keypad,num-rows
> 	- keypad,num-columns
> 	- linux,keymap
> 
> However the above properties are required to be specified when
> configuring the device as a keypad, dependencies have been added
> such that specifying either one would require the remaining as well.
> 
> Note that interrupts are optional, but required when the device has
> either been configured in keypad mode or as an interrupt controller.
> 
> Signed-off-by: Utsav Agarwal <utsav.agarwal@analog.com>
> ---
>  .../devicetree/bindings/input/adi,adp5588.yaml     | 51 +++++++++++++++++++---
>  1 file changed, 45 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/input/adi,adp5588.yaml b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> index 26ea66834ae2..827d72ece54b 100644
> --- a/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> +++ b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> @@ -49,7 +49,12 @@ properties:
>    interrupt-controller:
>      description:
>        This property applies if either keypad,num-rows lower than 8 or
> -      keypad,num-columns lower than 10.
> +      keypad,num-columns lower than 10. This property is optional if
> +      keypad,num-rows or keypad,num-columns are not specified since the
> +      device then acts as gpio only, during which interrupts may or may
> +      not be utilized. If specified however, interrupts must be also be
> +      provided as all interrupt communication is h

Don't repeat constraints in free form text.


andled via a single
> +      interrupt line.
>  
>    '#interrupt-cells':
>      const: 2
> @@ -65,13 +70,30 @@ properties:
>      minItems: 1
>      maxItems: 2
>  
> +
> +dependencies:
> +  keypad,num-rows:
> +    - linux,keymap
> +    - keypad,num-columns
> +  keypad,num-columns:
> +    - linux,keymap
> +    - keypad,num-rows
> +  linux,keymap:
> +    - keypad,num-rows
> +    - keypad,num-columns
> +  interrupt-controller:
> +    - interrupts

How is this related to this patchset? Why? I don't understand what are
you trying to achieve here. Hardware changed? Are you fixing something?
How many issues are you fixing in one (!!!) commit?

> +
> +if:
> +  required:
> +    - linux,keymap
> +then:
> +  required:
> +    - interrupts
> +
>  required:
>    - compatible
>    - reg
> -  - interrupts
> -  - keypad,num-rows
> -  - keypad,num-columns
> -  - linux,keymap
>  
>  unevaluatedProperties: false
>  
> @@ -108,4 +130,21 @@ examples:
>              >;
>          };
>      };
> -...
> +
> +  - |
> +    #include <dt-bindings/interrupt-controller/irq.h>
> +    #include <dt-bindings/input/input.h>
> +    #include <dt-bindings/gpio/gpio.h>

Where do you use these headers?

> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        gpio@34 {
> +            compatible = "adi,adp5588";
> +            reg = <0x34>;
> +
> +            #gpio-cells = <2>;
> +            gpio-controller;
> +        };
> +    };
> +
> +.

Why this change?


Best regards,
Krzysztof
Agarwal, Utsav Aug. 6, 2024, 10:05 a.m. UTC | #2
> -----Original Message-----
> From: Krzysztof Kozlowski <krzk@kernel.org>
> Sent: Tuesday, August 6, 2024 10:04 AM
> To: Agarwal, Utsav <Utsav.Agarwal@analog.com>; Hennerich, Michael
> <Michael.Hennerich@analog.com>; Dmitry Torokhov
> <dmitry.torokhov@gmail.com>; Rob Herring <robh@kernel.org>; Krzysztof
> Kozlowski <krzk+dt@kernel.org>; Conor Dooley <conor+dt@kernel.org>; Sa,
> Nuno <Nuno.Sa@analog.com>
> Cc: linux-input@vger.kernel.org; devicetree@vger.kernel.org; linux-
> kernel@vger.kernel.org; Artamonovs, Arturs
> <Arturs.Artamonovs@analog.com>; Bimpikas, Vasileios
> <Vasileios.Bimpikas@analog.com>; Gaskell, Oliver
> <Oliver.Gaskell@analog.com>
> Subject: Re: [PATCH v9 3/3] dt-bindings: input: Update dtbinding for adp5588
> 
> [External]
> 
> On 06/08/2024 10:48, Utsav Agarwal via B4 Relay wrote:
> > From: Utsav Agarwal <utsav.agarwal@analog.com>
> >
> 
> A nit, subject: drop second/last, redundant "dtbinding". The
> "dt-bindings" prefix is already stating that these are bindings.
> See also:
> https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v6.7-
> rc8/source/Documentation/devicetree/bindings/submitting-
> patches.rst*L18__;Iw!!A3Ni8CS0y2Y!_px-
> SkCaAOezCa_s0eiP5BTliLmvyA110d4MXahf8mHkAXr0vJtpM0EXu7EsoG2jWg
> 5qW9FgaYf2gCZf$
> 
> Subject: everything is an update. Be descriptive and specific.
> 
> > Updating dt bindings for adp5588. Since the device can now function in a
> > purely gpio mode, the following keypad specific properties are now made
> 
> Hardware changed? How?

The hardware was not changed, rather support was added for an already
present functionality in regard to a new use case where the chip was being 
used purely for gpio. I will update the commit description to be more elaborate.

> > optional:
> > 	- interrupts
> > 	- keypad,num-rows
> > 	- keypad,num-columns
> > 	- linux,keymap
> >
> > However the above properties are required to be specified when
> > configuring the device as a keypad, dependencies have been added
> > such that specifying either one would require the remaining as well.
> >
> > Note that interrupts are optional, but required when the device has
> > either been configured in keypad mode or as an interrupt controller.
> >
> > Signed-off-by: Utsav Agarwal <utsav.agarwal@analog.com>
> > ---
> >  .../devicetree/bindings/input/adi,adp5588.yaml     | 51
> +++++++++++++++++++---
> >  1 file changed, 45 insertions(+), 6 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> > index 26ea66834ae2..827d72ece54b 100644
> > --- a/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> > +++ b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
> > @@ -49,7 +49,12 @@ properties:
> >    interrupt-controller:
> >      description:
> >        This property applies if either keypad,num-rows lower than 8 or
> > -      keypad,num-columns lower than 10.
> > +      keypad,num-columns lower than 10. This property is optional if
> > +      keypad,num-rows or keypad,num-columns are not specified since the
> > +      device then acts as gpio only, during which interrupts may or may
> > +      not be utilized. If specified however, interrupts must be also be
> > +      provided as all interrupt communication is h
> 
> Don't repeat constraints in free form text.
> 
Thank you for pointing the same out, I will remove it.
> 
> andled via a single
> > +      interrupt line.
> >
> >    '#interrupt-cells':
> >      const: 2
> > @@ -65,13 +70,30 @@ properties:
> >      minItems: 1
> >      maxItems: 2
> >
> > +
> > +dependencies:
> > +  keypad,num-rows:
> > +    - linux,keymap
> > +    - keypad,num-columns
> > +  keypad,num-columns:
> > +    - linux,keymap
> > +    - keypad,num-rows
> > +  linux,keymap:
> > +    - keypad,num-rows
> > +    - keypad,num-columns
> > +  interrupt-controller:
> > +    - interrupts
> 
> How is this related to this patchset? Why? I don't understand what are
> you trying to achieve here. Hardware changed? Are you fixing something?
> How many issues are you fixing in one (!!!) commit?

Apologies for the confusion, but the issue I'm wanting to address is the lack of
support for a pure gpio mode. Since in this case, interrupts are not used, they
are made optional, but in doing so, I also need to be careful of its requirements
as a keypad, which it was originally structured as. As a result, there is an
interdependency that was established between the keypad properties
(prior to this as you can see, they were all required). This was followed 
by a requirement to make the interrupts required if the device 
was intended to be an interrupt controller in the last review
(https://lore.kernel.org/all/Zq17uABHdNENnwVq@google.com/)

> 
> > +
> > +if:
> > +  required:
> > +    - linux,keymap
> > +then:
> > +  required:
> > +    - interrupts
> > +
> >  required:
> >    - compatible
> >    - reg
> > -  - interrupts
> > -  - keypad,num-rows
> > -  - keypad,num-columns
> > -  - linux,keymap
> >
> >  unevaluatedProperties: false
> >
> > @@ -108,4 +130,21 @@ examples:
> >              >;
> >          };
> >      };
> > -...
> > +
> > +  - |
> > +    #include <dt-bindings/interrupt-controller/irq.h>
> > +    #include <dt-bindings/input/input.h>
> > +    #include <dt-bindings/gpio/gpio.h>
> 
> Where do you use these headers?

I will remove the extra headers
> 

Utsav
Krzysztof Kozlowski Aug. 6, 2024, 10:41 a.m. UTC | #3
On 06/08/2024 12:05, Agarwal, Utsav wrote:
>>
>> A nit, subject: drop second/last, redundant "dtbinding". The
>> "dt-bindings" prefix is already stating that these are bindings.
>> See also:
>> https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v6.7-
>> rc8/source/Documentation/devicetree/bindings/submitting-
>> patches.rst*L18__;Iw!!A3Ni8CS0y2Y!_px-
>> SkCaAOezCa_s0eiP5BTliLmvyA110d4MXahf8mHkAXr0vJtpM0EXu7EsoG2jWg
>> 5qW9FgaYf2gCZf$
>>
>> Subject: everything is an update. Be descriptive and specific.
>>
>>> Updating dt bindings for adp5588. Since the device can now function in a
>>> purely gpio mode, the following keypad specific properties are now made
>>
>> Hardware changed? How?
> 
> The hardware was not changed, rather support was added for an already
> present functionality in regard to a new use case where the chip was being 
> used purely for gpio. I will update the commit description to be more elaborate.

Bindings should reflect hardware, not current Linux support. If the
binding is incomplete, explain it in the commit msg. Commit msg claims
"device can now", so it is not about the driver. This is just confusing.


> 
>>> optional:
>>> 	- interrupts
>>> 	- keypad,num-rows
>>> 	- keypad,num-columns
>>> 	- linux,keymap
>>>
>>> However the above properties are required to be specified when
>>> configuring the device as a keypad, dependencies have been added
>>> such that specifying either one would require the remaining as well.
>>>
>>> Note that interrupts are optional, but required when the device has
>>> either been configured in keypad mode or as an interrupt controller.
>>>
>>> Signed-off-by: Utsav Agarwal <utsav.agarwal@analog.com>
>>> ---
>>>  .../devicetree/bindings/input/adi,adp5588.yaml     | 51
>> +++++++++++++++++++---
>>>  1 file changed, 45 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/input/adi,adp5588.yaml
>> b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
>>> index 26ea66834ae2..827d72ece54b 100644
>>> --- a/Documentation/devicetree/bindings/input/adi,adp5588.yaml
>>> +++ b/Documentation/devicetree/bindings/input/adi,adp5588.yaml
>>> @@ -49,7 +49,12 @@ properties:
>>>    interrupt-controller:
>>>      description:
>>>        This property applies if either keypad,num-rows lower than 8 or
>>> -      keypad,num-columns lower than 10.
>>> +      keypad,num-columns lower than 10. This property is optional if
>>> +      keypad,num-rows or keypad,num-columns are not specified since the
>>> +      device then acts as gpio only, during which interrupts may or may
>>> +      not be utilized. If specified however, interrupts must be also be
>>> +      provided as all interrupt communication is h
>>
>> Don't repeat constraints in free form text.
>>
> Thank you for pointing the same out, I will remove it.
>>
>> andled via a single
>>> +      interrupt line.
>>>
>>>    '#interrupt-cells':
>>>      const: 2
>>> @@ -65,13 +70,30 @@ properties:
>>>      minItems: 1
>>>      maxItems: 2
>>>
>>> +
>>> +dependencies:
>>> +  keypad,num-rows:
>>> +    - linux,keymap
>>> +    - keypad,num-columns
>>> +  keypad,num-columns:
>>> +    - linux,keymap
>>> +    - keypad,num-rows
>>> +  linux,keymap:
>>> +    - keypad,num-rows
>>> +    - keypad,num-columns
>>> +  interrupt-controller:
>>> +    - interrupts
>>
>> How is this related to this patchset? Why? I don't understand what are
>> you trying to achieve here. Hardware changed? Are you fixing something?
>> How many issues are you fixing in one (!!!) commit?
> 
> Apologies for the confusion, but the issue I'm wanting to address is the lack of
> support for a pure gpio mode. Since in this case, interrupts are not used, they

Initial bindings made a mistake of being strictly tied to what driver
supports. Aren't you repeating the mistake?

The commit mentions "gpio mode" but it is not explained - neither in
commit msg nor in the code. What is the "gpio mode" of the device?

> are made optional, but in doing so, I also need to be careful of its requirements
> as a keypad, which it was originally structured as. As a result, there is an
> interdependency that was established between the keypad properties
> (prior to this as you can see, they were all required). This was followed 
> by a requirement to make the interrupts required if the device 
> was intended to be an interrupt controller in the last review
> (https://lore.kernel.org/all/Zq17uABHdNENnwVq@google.com/)

This makes sense, I assume device cannot be an interrupt controller if
it is unable to pass the interrupt to the SoC.

BTW, do not add multiple blank lines before dependencies: block.

> 
>>
>>> +
>>> +if:
>>> +  required:
>>> +    - linux,keymap
>>> +then:
>>> +  required:
>>> +    - interrupts

This can be part of earlier dependencies.

Best regards,
Krzysztof