4
4
*
5
5
* Copyright 2017 Analog Devices Inc.
6
6
*/
7
+ #include "linux/byteorder/little_endian.h"
7
8
#include <linux/bitfield.h>
8
9
#include <linux/clk.h>
9
10
#include <linux/delay.h>
20
21
#include <linux/regulator/consumer.h>
21
22
#include <linux/sysfs.h>
22
23
#include <linux/spi/spi.h>
23
- #include <linux/spi/spi-engine.h>
24
+ #include <linux/spi/spi-engine-ex .h>
24
25
#include <linux/util_macros.h>
25
26
#include <linux/units.h>
26
27
#include <linux/rational.h>
@@ -444,7 +445,7 @@ struct ad7768_state {
444
445
*/
445
446
union {
446
447
unsigned char buf [6 ];
447
- __be32 word ;
448
+ __le32 word ;
448
449
struct {
449
450
__be32 chan ;
450
451
s64 timestamp ;
@@ -458,16 +459,16 @@ static int ad7768_spi_reg_read(struct ad7768_state *st, unsigned int addr,
458
459
struct spi_transfer xfer = {
459
460
.rx_buf = st -> data .buf ,
460
461
.len = len + 1 ,
461
- .bits_per_word = (len == 3 ? 32 : 16 ),
462
462
};
463
463
unsigned char tx_data [4 ];
464
464
int ret ;
465
+
465
466
tx_data [0 ] = AD7768_RD_FLAG_MSK (addr );
466
467
xfer .tx_buf = tx_data ;
467
468
ret = spi_sync_transfer (st -> spi , & xfer , 1 );
468
469
if (ret < 0 )
469
470
return ret ;
470
- * data = (len == 1 ? st -> data .buf [0 ] : st -> data .word );
471
+ * data = (len == 1 ? st -> data .buf [1 ] : cpu_to_be32 ( st -> data .word ) );
471
472
return ret ;
472
473
}
473
474
@@ -478,7 +479,6 @@ static int ad7768_spi_reg_write(struct ad7768_state *st,
478
479
struct spi_transfer xfer = {
479
480
.rx_buf = st -> data .buf ,
480
481
.len = 2 ,
481
- .bits_per_word = 16 ,
482
482
};
483
483
unsigned char tx_data [2 ];
484
484
tx_data [0 ] = AD7768_WR_FLAG_MSK (addr );
@@ -1214,12 +1214,16 @@ static int ad7768_buffer_postenable(struct iio_dev *indio_dev)
1214
1214
st -> offload_xfer .rx_buf = rx_data ;
1215
1215
spi_message_init_with_transfers (& st -> offload_msg , & st -> offload_xfer , 1 );
1216
1216
1217
+ ret = spi_optimize_message (st -> spi , & st -> offload_msg );
1218
+ if (ret < 0 )
1219
+ return ret ;
1220
+
1217
1221
spi_bus_lock (st -> spi -> master );
1218
1222
1219
- ret = spi_engine_offload_load_msg (st -> spi , & st -> offload_msg );
1223
+ ret = spi_engine_ex_offload_load_msg (st -> spi , & st -> offload_msg );
1220
1224
if (ret < 0 )
1221
1225
return ret ;
1222
- spi_engine_offload_enable (st -> spi , true);
1226
+ spi_engine_ex_offload_enable (st -> spi , true);
1223
1227
}
1224
1228
1225
1229
return ret ;
@@ -1231,9 +1235,10 @@ static int ad7768_buffer_predisable(struct iio_dev *indio_dev)
1231
1235
unsigned int regval ;
1232
1236
1233
1237
if (st -> spi_is_dma_mapped ) {
1234
- spi_engine_offload_enable (st -> spi , false);
1238
+ spi_engine_ex_offload_enable (st -> spi , false);
1235
1239
spi_bus_unlock (st -> spi -> master );
1236
1240
}
1241
+ spi_unoptimize_message (& st -> offload_msg );
1237
1242
1238
1243
/*
1239
1244
* To exit continuous read mode, perform a single read of the ADC_DATA
@@ -1445,7 +1450,7 @@ static int ad7768_probe(struct spi_device *spi)
1445
1450
return PTR_ERR (st -> mclk );
1446
1451
1447
1452
st -> mclk_freq = clk_get_rate (st -> mclk );
1448
- st -> spi_is_dma_mapped = spi_engine_offload_supported (spi );
1453
+ st -> spi_is_dma_mapped = spi_engine_ex_offload_supported (spi );
1449
1454
st -> irq = spi -> irq ;
1450
1455
st -> vref = regulator_get_voltage (st -> regulator );
1451
1456
0 commit comments