[v4,0/9] iio: adc: palmas_gpadc: add iio events

Message ID 20230408114825.824505-1-risca@dalakolonin.se
Headers
Series iio: adc: palmas_gpadc: add iio events |

Message

Patrik Dahlström April 8, 2023, 11:48 a.m. UTC
  This series is based on iio/togreg [1] and includes one patch ("fix NULL
dereference on rmmod") which is already in linux-next and another patch
from Jonathan Cameron ("Take probe fully device managed") to make the
rest of the patches apply cleanly to iio/togreg.

The palmas gpadc block has support for monitoring up to 2 ADC channels
and issue an interrupt if they reach past a set threshold. This can be
configured statically with device tree today, but it only gets enabled
when reaching sleep mode. Also, it doesn't look like anyone is using it.

Instead of this one special case, change the code so userspace can
configure the ADC channels to their own needs through the iio events
subsystem. The high and low threshold values can be set for every
channel, but only 2 thresholds can be enabled at a time. Trying to
enable more than 2 thresholds will result in an error.

The configured thresholds will wake up the system from sleep mode if
wakeup is enabled in /sys/devices/.../power/wakeup.

The old platform data was removed.

Thresholds, events, and wakeup were tested on omap5-uevm board. It wakes
up from sleep mode when wakeup is enabled and a threshold is passed. A
userspace tool for monitoring events and adjusting thresholds can be
found at [2].

For more background and the use case for these patches, see [3].

V3 -> V4:
* Reabased to iio/togreg and included required patches.
* Avoid initializing variables unnecessarily.
* Minor cosmetic fixes to comments.
V2 -> V3:
* Rebased to linux-next.
* Avoid reconfiguring events on error and when old == new value.
V1 -> V2:
* Begin by removing adc_wakeupX_data instead of doing it last.
* Split changes in smaller patches

[1] git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
[2] https://github.com/Risca/pyra_vol_mon
[3] https://pyra-handheld.com/boards/threads/improve-volume-wheel-daemon-bounty.99430/post-1711410

Jonathan Cameron (1):
  iio: adc: palmas: Take probe fully device managed.

Patrik Dahlström (8):
  iio: adc: palmas_gpadc: fix NULL dereference on rmmod
  iio: adc: palmas: remove adc_wakeupX_data
  iio: adc: palmas: replace "wakeup" with "event"
  iio: adc: palmas: use iio_event_direction for threshold polarity
  iio: adc: palmas: move eventX_enable into palmas_adc_event
  iio: adc: palmas: always reset events on unload
  iio: adc: palmas: add support for iio threshold events
  iio: adc: palmas: don't alter event config on suspend/resume

 drivers/iio/adc/palmas_gpadc.c | 616 +++++++++++++++++++++++++--------
 include/linux/mfd/palmas.h     |   8 -
 2 files changed, 478 insertions(+), 146 deletions(-)


base-commit: f73df43e957a6fc705a9bd6d143585bdf1b13365
  

Comments

Jonathan Cameron April 12, 2023, 8:22 p.m. UTC | #1
On Sat,  8 Apr 2023 13:48:16 +0200
Patrik Dahlström <risca@dalakolonin.se> wrote:

Hi Patrik,

Patches 3-9 applied from this posting to the togreg branch of iio.git
which will initially be pushed out as testing so 0-day can poke at it
tomorrow.

Thanks,

Jonathan


> This series is based on iio/togreg [1] and includes one patch ("fix NULL
> dereference on rmmod") which is already in linux-next and another patch
> from Jonathan Cameron ("Take probe fully device managed") to make the
> rest of the patches apply cleanly to iio/togreg.
> 
> The palmas gpadc block has support for monitoring up to 2 ADC channels
> and issue an interrupt if they reach past a set threshold. This can be
> configured statically with device tree today, but it only gets enabled
> when reaching sleep mode. Also, it doesn't look like anyone is using it.
> 
> Instead of this one special case, change the code so userspace can
> configure the ADC channels to their own needs through the iio events
> subsystem. The high and low threshold values can be set for every
> channel, but only 2 thresholds can be enabled at a time. Trying to
> enable more than 2 thresholds will result in an error.
> 
> The configured thresholds will wake up the system from sleep mode if
> wakeup is enabled in /sys/devices/.../power/wakeup.
> 
> The old platform data was removed.
> 
> Thresholds, events, and wakeup were tested on omap5-uevm board. It wakes
> up from sleep mode when wakeup is enabled and a threshold is passed. A
> userspace tool for monitoring events and adjusting thresholds can be
> found at [2].
> 
> For more background and the use case for these patches, see [3].
> 
> V3 -> V4:
> * Reabased to iio/togreg and included required patches.
> * Avoid initializing variables unnecessarily.
> * Minor cosmetic fixes to comments.
> V2 -> V3:
> * Rebased to linux-next.
> * Avoid reconfiguring events on error and when old == new value.
> V1 -> V2:
> * Begin by removing adc_wakeupX_data instead of doing it last.
> * Split changes in smaller patches
> 
> [1] git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
> [2] https://github.com/Risca/pyra_vol_mon
> [3] https://pyra-handheld.com/boards/threads/improve-volume-wheel-daemon-bounty.99430/post-1711410
> 
> Jonathan Cameron (1):
>   iio: adc: palmas: Take probe fully device managed.
> 
> Patrik Dahlström (8):
>   iio: adc: palmas_gpadc: fix NULL dereference on rmmod
>   iio: adc: palmas: remove adc_wakeupX_data
>   iio: adc: palmas: replace "wakeup" with "event"
>   iio: adc: palmas: use iio_event_direction for threshold polarity
>   iio: adc: palmas: move eventX_enable into palmas_adc_event
>   iio: adc: palmas: always reset events on unload
>   iio: adc: palmas: add support for iio threshold events
>   iio: adc: palmas: don't alter event config on suspend/resume
> 
>  drivers/iio/adc/palmas_gpadc.c | 616 +++++++++++++++++++++++++--------
>  include/linux/mfd/palmas.h     |   8 -
>  2 files changed, 478 insertions(+), 146 deletions(-)
> 
> 
> base-commit: f73df43e957a6fc705a9bd6d143585bdf1b13365