Use IIO_DECLARE_BUFFER_WITH_TS to declare the buffer that gets used with
iio_push_to_buffers_with_ts(). This makes the code a bit easier to read
and understand.
AD4695_MAX_CHANNEL_SIZE macro is dropped since it was making the line
too long and didn't add that much value.
AD4695_MAX_CHANNELS + 2 is changed to AD4695_MAX_CHANNELS + 1 because
previously we were overallocating. AD4695_MAX_CHANNELS is the number of
of voltage channels and + 1 is for the temperature channel.
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/adc/ad4695.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/ad4695.c b/drivers/iio/adc/ad4695.c
index 68c6625db0d75f4cade7cb029e94191118dbcaa0..9862ff99642b61db42b16b797ae046efd99c2811 100644
--- a/drivers/iio/adc/ad4695.c
+++ b/drivers/iio/adc/ad4695.c
@@ -106,8 +106,6 @@
/* Max number of voltage input channels. */
#define AD4695_MAX_CHANNELS 16
-/* Max size of 1 raw sample in bytes. */
-#define AD4695_MAX_CHANNEL_SIZE 2
enum ad4695_in_pair {
AD4695_IN_PAIR_REFGND,
@@ -162,8 +160,8 @@ struct ad4695_state {
struct spi_transfer buf_read_xfer[AD4695_MAX_CHANNELS * 2 + 3];
struct spi_message buf_read_msg;
/* Raw conversion data received. */
- u8 buf[ALIGN((AD4695_MAX_CHANNELS + 2) * AD4695_MAX_CHANNEL_SIZE,
- sizeof(s64)) + sizeof(s64)] __aligned(IIO_DMA_MINALIGN);
+ IIO_DECLARE_BUFFER_WITH_TS(u8, buf, (AD4695_MAX_CHANNELS + 1) * 2)
+ __aligned(IIO_DMA_MINALIGN);
u16 raw_data;
/* Commands to send for single conversion. */
u16 cnv_cmd;
--
2.43.0
On Fri, Apr 18, 2025 at 05:58:33PM -0500, David Lechner wrote: > Use IIO_DECLARE_BUFFER_WITH_TS to declare the buffer that gets used with > iio_push_to_buffers_with_ts(). This makes the code a bit easier to read > and understand. > > AD4695_MAX_CHANNEL_SIZE macro is dropped since it was making the line > too long and didn't add that much value. > > AD4695_MAX_CHANNELS + 2 is changed to AD4695_MAX_CHANNELS + 1 because > previously we were overallocating. AD4695_MAX_CHANNELS is the number of > of voltage channels and + 1 is for the temperature channel. ... > -/* Max size of 1 raw sample in bytes. */ > -#define AD4695_MAX_CHANNEL_SIZE 2 > /* Raw conversion data received. */ > - u8 buf[ALIGN((AD4695_MAX_CHANNELS + 2) * AD4695_MAX_CHANNEL_SIZE, > - sizeof(s64)) + sizeof(s64)] __aligned(IIO_DMA_MINALIGN); > + IIO_DECLARE_BUFFER_WITH_TS(u8, buf, (AD4695_MAX_CHANNELS + 1) * 2) > + __aligned(IIO_DMA_MINALIGN); I would rather expect this to be properly written as u16 / __le16 / __be16 instead of playing tricks with u8. With all comments given so far I would expect here something like: IIO_DECLARE_BUFFER_WITH_TS(u16, buf, AD4695_MAX_CHANNELS + 1); -- With Best Regards, Andy Shevchenko
On 4/19/25 11:38 AM, Andy Shevchenko wrote: > On Fri, Apr 18, 2025 at 05:58:33PM -0500, David Lechner wrote: >> Use IIO_DECLARE_BUFFER_WITH_TS to declare the buffer that gets used with >> iio_push_to_buffers_with_ts(). This makes the code a bit easier to read >> and understand. >> >> AD4695_MAX_CHANNEL_SIZE macro is dropped since it was making the line >> too long and didn't add that much value. >> >> AD4695_MAX_CHANNELS + 2 is changed to AD4695_MAX_CHANNELS + 1 because >> previously we were overallocating. AD4695_MAX_CHANNELS is the number of >> of voltage channels and + 1 is for the temperature channel. > > ... > >> -/* Max size of 1 raw sample in bytes. */ >> -#define AD4695_MAX_CHANNEL_SIZE 2 > >> /* Raw conversion data received. */ >> - u8 buf[ALIGN((AD4695_MAX_CHANNELS + 2) * AD4695_MAX_CHANNEL_SIZE, >> - sizeof(s64)) + sizeof(s64)] __aligned(IIO_DMA_MINALIGN); >> + IIO_DECLARE_BUFFER_WITH_TS(u8, buf, (AD4695_MAX_CHANNELS + 1) * 2) >> + __aligned(IIO_DMA_MINALIGN); > > I would rather expect this to be properly written as u16 / __le16 / __be16 > instead of playing tricks with u8. > > With all comments given so far I would expect here something like: > > IIO_DECLARE_BUFFER_WITH_TS(u16, buf, AD4695_MAX_CHANNELS + 1); > > We would have to make significant changes to the driver to allow u16 instead of u8. I don't remember why I did it that way in the first place, but I consider changing it out of scope for this patch.
On Sat, 19 Apr 2025 12:57:11 -0500 David Lechner <dlechner@baylibre.com> wrote: > On 4/19/25 11:38 AM, Andy Shevchenko wrote: > > On Fri, Apr 18, 2025 at 05:58:33PM -0500, David Lechner wrote: > >> Use IIO_DECLARE_BUFFER_WITH_TS to declare the buffer that gets used with > >> iio_push_to_buffers_with_ts(). This makes the code a bit easier to read > >> and understand. > >> > >> AD4695_MAX_CHANNEL_SIZE macro is dropped since it was making the line > >> too long and didn't add that much value. > >> > >> AD4695_MAX_CHANNELS + 2 is changed to AD4695_MAX_CHANNELS + 1 because > >> previously we were overallocating. AD4695_MAX_CHANNELS is the number of > >> of voltage channels and + 1 is for the temperature channel. > > > > ... > > > >> -/* Max size of 1 raw sample in bytes. */ > >> -#define AD4695_MAX_CHANNEL_SIZE 2 > > > >> /* Raw conversion data received. */ > >> - u8 buf[ALIGN((AD4695_MAX_CHANNELS + 2) * AD4695_MAX_CHANNEL_SIZE, > >> - sizeof(s64)) + sizeof(s64)] __aligned(IIO_DMA_MINALIGN); > >> + IIO_DECLARE_BUFFER_WITH_TS(u8, buf, (AD4695_MAX_CHANNELS + 1) * 2) > >> + __aligned(IIO_DMA_MINALIGN); > > > > I would rather expect this to be properly written as u16 / __le16 / __be16 > > instead of playing tricks with u8. > > > > With all comments given so far I would expect here something like: > > > > IIO_DECLARE_BUFFER_WITH_TS(u16, buf, AD4695_MAX_CHANNELS + 1); > > > > > > We would have to make significant changes to the driver to allow u16 instead > of u8. I don't remember why I did it that way in the first place, but I consider > changing it out of scope for this patch. There are drivers where the size varies depending on the exact part. Maybe this is a cut and paste from one of those or you thought this might get bigger to support > 16bit channels in the future. Either way, right now it is always 16 bits so an appropriately sized type would be good as you say. I think such a change should be in a precursor patch probably rather than left for another day. Looks trivial to me given st->buf is only accessed directly in 2 places. Jonathan
© 2016 - 2025 Red Hat, Inc.