Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: events.h: add event identifier macros for differential channel

Currently, there are 3 helper macros in iio/events.h to create event
identifiers:
- IIO_EVENT_CODE : create generic event identifier for differential and non
differential channels
- IIO_MOD_EVENT_CODE : create event identifier for modified (non
differential) channels
- IIO_UNMOD_EVENT_CODE : create event identifier for unmodified (non
differential) channels

For differential channels, drivers are expected to use IIO_EVENT_CODE.
However, only one driver in drivers/iio currently uses it correctly,
leading to inconsistent event identifiers for differential channels that
don’t match the intended attributes (such as max1363.c that supports
differential channels, but only uses IIO_UNMOD_EVENT_CODE).

To prevent such issues in future drivers, a new helper macro,
IIO_DIFF_EVENT_CODE, is introduced to specifically create event identifiers
for differential channels. Only one helper is needed for differential
channels since they cannot have modifiers.

Additionally, the descriptions for IIO_MOD_EVENT_CODE and
IIO_UNMOD_EVENT_CODE have been updated to clarify that they are intended
for non-differential channels,

Signed-off-by: Julien Stephan <jstephan@baylibre.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20241028-iio-add-macro-for-even-identifier-for-differential-channels-v1-1-b452c90f7ea6@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Julien Stephan and committed by
Jonathan Cameron
5d8173b8 3c9b6fd7

+16 -2
+16 -2
include/linux/iio/events.h
··· 30 30 31 31 32 32 /** 33 - * IIO_MOD_EVENT_CODE() - create event identifier for modified channels 33 + * IIO_MOD_EVENT_CODE() - create event identifier for modified (non 34 + * differential) channels 34 35 * @chan_type: Type of the channel. Should be one of enum iio_chan_type. 35 36 * @number: Channel number. 36 37 * @modifier: Modifier for the channel. Should be one of enum iio_modifier. ··· 44 43 IIO_EVENT_CODE(chan_type, 0, modifier, direction, type, number, 0, 0) 45 44 46 45 /** 47 - * IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified channels 46 + * IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified (non 47 + * differential) channels 48 48 * @chan_type: Type of the channel. Should be one of enum iio_chan_type. 49 49 * @number: Channel number. 50 50 * @type: Type of the event. Should be one of enum iio_event_type. ··· 54 52 55 53 #define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \ 56 54 IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0) 55 + 56 + /** 57 + * IIO_DIFF_EVENT_CODE() - create event identifier for differential channels 58 + * @chan_type: Type of the channel. Should be one of enum iio_chan_type. 59 + * @chan1: First channel number for differential channels. 60 + * @chan2: Second channel number for differential channels. 61 + * @type: Type of the event. Should be one of enum iio_event_type. 62 + * @direction: Direction of the event. One of enum iio_event_direction. 63 + */ 64 + 65 + #define IIO_DIFF_EVENT_CODE(chan_type, chan1, chan2, type, direction) \ 66 + IIO_EVENT_CODE(chan_type, 1, 0, direction, type, 0, chan1, chan2) 57 67 58 68 #endif