* Re: [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
[not found] <50a787d6.NK04zL7PgCPbLOrx%fengguang.wu@intel.com>
@ 2012-11-18 13:42 ` Jonathan Cameron
2012-11-18 13:47 ` [PATCH] iio:adc:ad7298 Mark the rx and tx buffers as big endian Jonathan Cameron
2012-11-18 14:19 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Lars-Peter Clausen
0 siblings, 2 replies; 5+ messages in thread
From: Jonathan Cameron @ 2012-11-18 13:42 UTC (permalink / raw)
To: kbuild test robot; +Cc: Lars-Peter Clausen, linux-iio
Hi Lars-Peter
Hmm. currious. I'd not normally have that check on - for reference
this only happens for me with CF="-D__CHECK_ENDIAN__" appeneded to my
normal make for the kernel.
Anyhow, initial thought was to change rx_buf and tx_buf to __be16.
Can you see any issues with that?
It clears the warnings out.
Jonathan
On 11/17/2012 12:49 PM, kbuild test robot wrote:
> tree: git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
> head: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7
> commit: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7 [24/24] staging:iio: Move the ad7298 driver out of staging
>
>
> sparse warnings:
>
> + drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
> drivers/iio/adc/ad7298.c:125:23: expected unsigned short [unsigned] [short] <noident>
> drivers/iio/adc/ad7298.c:125:23: got restricted __be16 [usertype] <noident>
> drivers/iio/adc/ad7298.c:186:23: sparse: incorrect type in assignment (different base types)
> drivers/iio/adc/ad7298.c:186:23: expected unsigned short [unsigned] [short] <noident>
> drivers/iio/adc/ad7298.c:186:23: got restricted __be16 [usertype] <noident>
> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>
> vim +125 drivers/iio/adc/ad7298.c
>
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 119 command = AD7298_WRITE | st->ext_ref;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 120
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 121 for (i = 0, m = AD7298_CH(0); i < AD7298_MAX_CHAN; i++, m >>= 1)
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 122 if (test_bit(i, active_scan_mask))
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 123 command |= m;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 124
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 @125 st->tx_buf[0] = cpu_to_be16(command);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 126
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 127 /* build spi ring message */
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 128 st->ring_xfer[0].tx_buf = &st->tx_buf[0];
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 129 st->ring_xfer[0].len = 2;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 130 st->ring_xfer[0].cs_change = 1;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 131 st->ring_xfer[1].tx_buf = &st->tx_buf[1];
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 132 st->ring_xfer[1].len = 2;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 133 st->ring_xfer[1].cs_change = 1;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 134
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 135 spi_message_init(&st->ring_msg);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 136 spi_message_add_tail(&st->ring_xfer[0], &st->ring_msg);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 137 spi_message_add_tail(&st->ring_xfer[1], &st->ring_msg);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 138
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 139 for (i = 0; i < scan_count; i++) {
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 140 st->ring_xfer[i + 2].rx_buf = &st->rx_buf[i];
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 141 st->ring_xfer[i + 2].len = 2;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 142 st->ring_xfer[i + 2].cs_change = 1;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 143 spi_message_add_tail(&st->ring_xfer[i + 2], &st->ring_msg);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 144 }
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 145 /* make sure last transfer cs_change is not set */
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 146 st->ring_xfer[i + 1].cs_change = 0;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 147
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 148 return 0;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 149 }
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 150
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 151 /**
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 152 * ad7298_trigger_handler() bh of trigger launched polling to ring buffer
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 153 *
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 154 * Currently there is no option in this driver to disable the saving of
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 155 * timestamps within the ring.
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 156 **/
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 157 static irqreturn_t ad7298_trigger_handler(int irq, void *p)
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 158 {
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 159 struct iio_poll_func *pf = p;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 160 struct iio_dev *indio_dev = pf->indio_dev;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 161 struct ad7298_state *st = iio_priv(indio_dev);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 162 s64 time_ns = 0;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 163 int b_sent;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 164
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 165 b_sent = spi_sync(st->spi, &st->ring_msg);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 166 if (b_sent)
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 167 goto done;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 168
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 169 if (indio_dev->scan_timestamp) {
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 170 time_ns = iio_get_time_ns();
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 171 memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 172 &time_ns, sizeof(time_ns));
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 173 }
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 174
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 175 iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 176
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 177 done:
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 178 iio_trigger_notify_done(indio_dev->trig);
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 179
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 180 return IRQ_HANDLED;
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 181 }
> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 182
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 183 static int ad7298_scan_direct(struct ad7298_state *st, unsigned ch)
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 184 {
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 185 int ret;
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @186 st->tx_buf[0] = cpu_to_be16(AD7298_WRITE | st->ext_ref |
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 187 (AD7298_CH(0) >> ch));
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 188
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 189 ret = spi_sync(st->spi, &st->scan_single_msg);
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 190 if (ret)
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 191 return ret;
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 192
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @193 return be16_to_cpu(st->rx_buf[0]);
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 194 }
> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 195
> 01a99e18 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-05-18 196 static int ad7298_scan_temp(struct ad7298_state *st, int *val)
>
> ---
> 0-DAY kernel build testing backend Open Source Technology Center
> Fengguang Wu, Yuanhan Liu Intel Corporation
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] iio:adc:ad7298 Mark the rx and tx buffers as big endian.
2012-11-18 13:42 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Jonathan Cameron
@ 2012-11-18 13:47 ` Jonathan Cameron
2012-11-18 14:19 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Lars-Peter Clausen
1 sibling, 0 replies; 5+ messages in thread
From: Jonathan Cameron @ 2012-11-18 13:47 UTC (permalink / raw)
To: linux-iio; +Cc: fengguang.wu, lars, Jonathan Cameron
Sparse shows that these two buffers should be __be16
rather than unsigned short when one enables endian
checks.
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Reported-by: fengguang.wu@intel.com
---
drivers/iio/adc/ad7298.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
index 441a9a2..2691ad9 100644
--- a/drivers/iio/adc/ad7298.c
+++ b/drivers/iio/adc/ad7298.c
@@ -54,8 +54,8 @@ struct ad7298_state {
* DMA (thus cache coherency maintenance) requires the
* transfer buffers to live in their own cache lines.
*/
- unsigned short rx_buf[12] ____cacheline_aligned;
- unsigned short tx_buf[2];
+ __be16 rx_buf[12] ____cacheline_aligned;
+ __be16 tx_buf[2];
};
#define AD7298_V_CHAN(index) \
--
1.8.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
2012-11-18 13:42 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Jonathan Cameron
2012-11-18 13:47 ` [PATCH] iio:adc:ad7298 Mark the rx and tx buffers as big endian Jonathan Cameron
@ 2012-11-18 14:19 ` Lars-Peter Clausen
2012-11-18 18:36 ` Jonathan Cameron
1 sibling, 1 reply; 5+ messages in thread
From: Lars-Peter Clausen @ 2012-11-18 14:19 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: kbuild test robot, linux-iio
On 11/18/2012 02:42 PM, Jonathan Cameron wrote:
> Hi Lars-Peter
>
> Hmm. currious. I'd not normally have that check on - for reference
> this only happens for me with CF="-D__CHECK_ENDIAN__" appeneded to my
> normal make for the kernel.
>
> Anyhow, initial thought was to change rx_buf and tx_buf to __be16.
> Can you see any issues with that?
>
I actually had such a patch initially in my series, but removed it again, since
we are using the buffer as non __be16 in some places.
> It clears the warnings out.
But if sparse doesn't complain about those we are better of with the change I
guess.
>
> Jonathan
>
> On 11/17/2012 12:49 PM, kbuild test robot wrote:
>> tree: git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
>> head: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7
>> commit: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7 [24/24] staging:iio: Move the ad7298 driver out of staging
>>
>>
>> sparse warnings:
>>
>> + drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
>> drivers/iio/adc/ad7298.c:125:23: expected unsigned short [unsigned] [short] <noident>
>> drivers/iio/adc/ad7298.c:125:23: got restricted __be16 [usertype] <noident>
>> drivers/iio/adc/ad7298.c:186:23: sparse: incorrect type in assignment (different base types)
>> drivers/iio/adc/ad7298.c:186:23: expected unsigned short [unsigned] [short] <noident>
>> drivers/iio/adc/ad7298.c:186:23: got restricted __be16 [usertype] <noident>
>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>>
>> vim +125 drivers/iio/adc/ad7298.c
>>
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 119 command = AD7298_WRITE | st->ext_ref;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 120
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 121 for (i = 0, m = AD7298_CH(0); i < AD7298_MAX_CHAN; i++, m >>= 1)
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 122 if (test_bit(i, active_scan_mask))
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 123 command |= m;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 124
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 @125 st->tx_buf[0] = cpu_to_be16(command);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 126
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 127 /* build spi ring message */
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 128 st->ring_xfer[0].tx_buf = &st->tx_buf[0];
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 129 st->ring_xfer[0].len = 2;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 130 st->ring_xfer[0].cs_change = 1;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 131 st->ring_xfer[1].tx_buf = &st->tx_buf[1];
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 132 st->ring_xfer[1].len = 2;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 133 st->ring_xfer[1].cs_change = 1;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 134
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 135 spi_message_init(&st->ring_msg);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 136 spi_message_add_tail(&st->ring_xfer[0], &st->ring_msg);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 137 spi_message_add_tail(&st->ring_xfer[1], &st->ring_msg);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 138
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 139 for (i = 0; i < scan_count; i++) {
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 140 st->ring_xfer[i + 2].rx_buf = &st->rx_buf[i];
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 141 st->ring_xfer[i + 2].len = 2;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 142 st->ring_xfer[i + 2].cs_change = 1;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 143 spi_message_add_tail(&st->ring_xfer[i + 2], &st->ring_msg);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 144 }
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 145 /* make sure last transfer cs_change is not set */
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 146 st->ring_xfer[i + 1].cs_change = 0;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 147
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 148 return 0;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 149 }
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 150
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 151 /**
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 152 * ad7298_trigger_handler() bh of trigger launched polling to ring buffer
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 153 *
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 154 * Currently there is no option in this driver to disable the saving of
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 155 * timestamps within the ring.
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 156 **/
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 157 static irqreturn_t ad7298_trigger_handler(int irq, void *p)
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 158 {
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 159 struct iio_poll_func *pf = p;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 160 struct iio_dev *indio_dev = pf->indio_dev;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 161 struct ad7298_state *st = iio_priv(indio_dev);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 162 s64 time_ns = 0;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 163 int b_sent;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 164
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 165 b_sent = spi_sync(st->spi, &st->ring_msg);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 166 if (b_sent)
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 167 goto done;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 168
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 169 if (indio_dev->scan_timestamp) {
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 170 time_ns = iio_get_time_ns();
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 171 memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 172 &time_ns, sizeof(time_ns));
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 173 }
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 174
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 175 iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 176
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 177 done:
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 178 iio_trigger_notify_done(indio_dev->trig);
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 179
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 180 return IRQ_HANDLED;
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 181 }
>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 182
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 183 static int ad7298_scan_direct(struct ad7298_state *st, unsigned ch)
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 184 {
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 185 int ret;
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @186 st->tx_buf[0] = cpu_to_be16(AD7298_WRITE | st->ext_ref |
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 187 (AD7298_CH(0) >> ch));
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 188
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 189 ret = spi_sync(st->spi, &st->scan_single_msg);
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 190 if (ret)
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 191 return ret;
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 192
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @193 return be16_to_cpu(st->rx_buf[0]);
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 194 }
>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 195
>> 01a99e18 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-05-18 196 static int ad7298_scan_temp(struct ad7298_state *st, int *val)
>>
>> ---
>> 0-DAY kernel build testing backend Open Source Technology Center
>> Fengguang Wu, Yuanhan Liu Intel Corporation
>>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
2012-11-18 14:19 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Lars-Peter Clausen
@ 2012-11-18 18:36 ` Jonathan Cameron
2012-11-18 18:48 ` Jonathan Cameron
0 siblings, 1 reply; 5+ messages in thread
From: Jonathan Cameron @ 2012-11-18 18:36 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: kbuild test robot, linux-iio
On 11/18/2012 02:19 PM, Lars-Peter Clausen wrote:
> On 11/18/2012 02:42 PM, Jonathan Cameron wrote:
>> Hi Lars-Peter
>>
>> Hmm. currious. I'd not normally have that check on - for reference
>> this only happens for me with CF="-D__CHECK_ENDIAN__" appeneded to my
>> normal make for the kernel.
>>
>> Anyhow, initial thought was to change rx_buf and tx_buf to __be16.
>> Can you see any issues with that?
>>
>
> I actually had such a patch initially in my series, but removed it again, since
> we are using the buffer as non __be16 in some places.
>
>> It clears the warnings out.
>
> But if sparse doesn't complain about those we are better of with the change I
> guess.
Hmm. I wonder if there is any marking for no endianness specified?
Either that or we'll need to play games with a union to pull this off
cleanly.
For anyone reading this without the background. This bit of code is filling
a buffer with a mixture of big and cpu endian elements. This buffer is described
to userspace which can then do the conversions as necessary.
For now I'm going to hold the patch I sent out as it's not a real fix, but
rather a nasty work around of the problem.
Jonathan
>
>>
>> Jonathan
>>
>> On 11/17/2012 12:49 PM, kbuild test robot wrote:
>>> tree: git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
>>> head: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7
>>> commit: e3e10fa5760709eb9dcc05fc9bfd48f90e2abbd7 [24/24] staging:iio: Move the ad7298 driver out of staging
>>>
>>>
>>> sparse warnings:
>>>
>>> + drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
>>> drivers/iio/adc/ad7298.c:125:23: expected unsigned short [unsigned] [short] <noident>
>>> drivers/iio/adc/ad7298.c:125:23: got restricted __be16 [usertype] <noident>
>>> drivers/iio/adc/ad7298.c:186:23: sparse: incorrect type in assignment (different base types)
>>> drivers/iio/adc/ad7298.c:186:23: expected unsigned short [unsigned] [short] <noident>
>>> drivers/iio/adc/ad7298.c:186:23: got restricted __be16 [usertype] <noident>
>>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>>> + drivers/iio/adc/ad7298.c:193:16: sparse: cast to restricted __be16
>>>
>>> vim +125 drivers/iio/adc/ad7298.c
>>>
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 119 command = AD7298_WRITE | st->ext_ref;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 120
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 121 for (i = 0, m = AD7298_CH(0); i < AD7298_MAX_CHAN; i++, m >>= 1)
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 122 if (test_bit(i, active_scan_mask))
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 123 command |= m;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 124
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 @125 st->tx_buf[0] = cpu_to_be16(command);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 126
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 127 /* build spi ring message */
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 128 st->ring_xfer[0].tx_buf = &st->tx_buf[0];
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 129 st->ring_xfer[0].len = 2;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 130 st->ring_xfer[0].cs_change = 1;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 131 st->ring_xfer[1].tx_buf = &st->tx_buf[1];
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 132 st->ring_xfer[1].len = 2;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 133 st->ring_xfer[1].cs_change = 1;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 134
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 135 spi_message_init(&st->ring_msg);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 136 spi_message_add_tail(&st->ring_xfer[0], &st->ring_msg);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 137 spi_message_add_tail(&st->ring_xfer[1], &st->ring_msg);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 138
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 139 for (i = 0; i < scan_count; i++) {
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 140 st->ring_xfer[i + 2].rx_buf = &st->rx_buf[i];
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 141 st->ring_xfer[i + 2].len = 2;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 142 st->ring_xfer[i + 2].cs_change = 1;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 143 spi_message_add_tail(&st->ring_xfer[i + 2], &st->ring_msg);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 144 }
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 145 /* make sure last transfer cs_change is not set */
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 146 st->ring_xfer[i + 1].cs_change = 0;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 147
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 148 return 0;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 149 }
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 150
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 151 /**
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 152 * ad7298_trigger_handler() bh of trigger launched polling to ring buffer
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 153 *
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 154 * Currently there is no option in this driver to disable the saving of
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 155 * timestamps within the ring.
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 156 **/
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 157 static irqreturn_t ad7298_trigger_handler(int irq, void *p)
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 158 {
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 159 struct iio_poll_func *pf = p;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 160 struct iio_dev *indio_dev = pf->indio_dev;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 161 struct ad7298_state *st = iio_priv(indio_dev);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 162 s64 time_ns = 0;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 163 int b_sent;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 164
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 165 b_sent = spi_sync(st->spi, &st->ring_msg);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 166 if (b_sent)
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 167 goto done;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 168
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 169 if (indio_dev->scan_timestamp) {
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 170 time_ns = iio_get_time_ns();
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 171 memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 172 &time_ns, sizeof(time_ns));
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 173 }
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 174
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 175 iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 176
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 177 done:
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 178 iio_trigger_notify_done(indio_dev->trig);
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 179
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 180 return IRQ_HANDLED;
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 181 }
>>> 8c4c8ffe drivers/staging/iio/adc/ad7298.c Lars-Peter Clausen 2012-11-15 182
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 183 static int ad7298_scan_direct(struct ad7298_state *st, unsigned ch)
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 184 {
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 185 int ret;
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @186 st->tx_buf[0] = cpu_to_be16(AD7298_WRITE | st->ext_ref |
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 187 (AD7298_CH(0) >> ch));
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 188
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 189 ret = spi_sync(st->spi, &st->scan_single_msg);
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 190 if (ret)
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 191 return ret;
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 192
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 @193 return be16_to_cpu(st->rx_buf[0]);
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 194 }
>>> 7c31b984 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-02-24 195
>>> 01a99e18 drivers/staging/iio/adc/ad7298_core.c Michael Hennerich 2011-05-18 196 static int ad7298_scan_temp(struct ad7298_state *st, int *val)
>>>
>>> ---
>>> 0-DAY kernel build testing backend Open Source Technology Center
>>> Fengguang Wu, Yuanhan Liu Intel Corporation
>>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types)
2012-11-18 18:36 ` Jonathan Cameron
@ 2012-11-18 18:48 ` Jonathan Cameron
0 siblings, 0 replies; 5+ messages in thread
From: Jonathan Cameron @ 2012-11-18 18:48 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: kbuild test robot, linux-iio
On 11/18/2012 06:36 PM, Jonathan Cameron wrote:
> On 11/18/2012 02:19 PM, Lars-Peter Clausen wrote:
>> On 11/18/2012 02:42 PM, Jonathan Cameron wrote:
>>> Hi Lars-Peter
>>>
>>> Hmm. currious. I'd not normally have that check on - for reference
>>> this only happens for me with CF="-D__CHECK_ENDIAN__" appeneded to my
>>> normal make for the kernel.
>>>
>>> Anyhow, initial thought was to change rx_buf and tx_buf to __be16.
>>> Can you see any issues with that?
>>>
>>
>> I actually had such a patch initially in my series, but removed it again, since
>> we are using the buffer as non __be16 in some places.
>>
>>> It clears the warnings out.
>>
>> But if sparse doesn't complain about those we are better of with the change I
>> guess.
> Hmm. I wonder if there is any marking for no endianness specified?
> Either that or we'll need to play games with a union to pull this off
> cleanly.
>
> For anyone reading this without the background. This bit of code is filling
> a buffer with a mixture of big and cpu endian elements. This buffer is described
> to userspace which can then do the conversions as necessary.
>
> For now I'm going to hold the patch I sent out as it's not a real fix, but
> rather a nasty work around of the problem.
As a quick stab at it, how about something like...
diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
index 441a9a2..258ba97 100644
--- a/drivers/iio/adc/ad7298.c
+++ b/drivers/iio/adc/ad7298.c
@@ -54,8 +54,11 @@ struct ad7298_state {
* DMA (thus cache coherency maintenance) requires the
* transfer buffers to live in their own cache lines.
*/
- unsigned short rx_buf[12] ____cacheline_aligned;
- unsigned short tx_buf[2];
+ union {
+ __be16 rx_buf[12];
+ s64 rx_ts[3];
+ } ____cacheline_aligned;
+ __be16 tx_buf[2];
};
#define AD7298_V_CHAN(index) \
@@ -159,18 +162,15 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p)
struct iio_poll_func *pf = p;
struct iio_dev *indio_dev = pf->indio_dev;
struct ad7298_state *st = iio_priv(indio_dev);
- s64 time_ns = 0;
int b_sent;
b_sent = spi_sync(st->spi, &st->ring_msg);
if (b_sent)
goto done;
- if (indio_dev->scan_timestamp) {
- time_ns = iio_get_time_ns();
- memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
- &time_ns, sizeof(time_ns));
- }
+ if (indio_dev->scan_timestamp)
+ st->rx_ts[(indio_dev->scan_bytes + sizeof(s64) - 1) / sizeof(s64)]
+ = iio_get_time_ns();
iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-11-18 18:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <50a787d6.NK04zL7PgCPbLOrx%fengguang.wu@intel.com>
2012-11-18 13:42 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Jonathan Cameron
2012-11-18 13:47 ` [PATCH] iio:adc:ad7298 Mark the rx and tx buffers as big endian Jonathan Cameron
2012-11-18 14:19 ` [iio:togreg 24/24] drivers/iio/adc/ad7298.c:125:23: sparse: incorrect type in assignment (different base types) Lars-Peter Clausen
2012-11-18 18:36 ` Jonathan Cameron
2012-11-18 18:48 ` Jonathan Cameron
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.