Second set of new device support, cleanups and features for IIO in the 5.8 cycle
Usual mixed back but with a few subsystem wide or device type
wide cleanups.
New device support
* adis16475
- New driver supporting adis16470, adis16475, adis16477, adis16465,
adis16467, adis16500, adis16505 and adis16507.
Includes some rework of the adis library to simplify using it
for this new driver.
* ak8974
- Add support for Alps hscdt008a. ID only. Related patches add support
for scale.
* atlas-sensor
- Add support for RTD-SM OEM temperature sensor.
* cm32181
- Add support for CM3218 including support for SMBUS alert via
ACPI resources.
* ltc2632
- Add support for ltc2634-12/10/8 DACS including handling per
device type numbers of channels.
Major Features
* cm32181
- ACPI bindings including parsing CPM0 and CPM1 custom ACPI tables.
Includes minor tidy ups and fixes.
* vcnl4000
- Add event support
- Add buffered data capture support
- Add control of sampling frequency
Cleanups and minor fixes.
* core
- Trivial rework of iio_device_alloc to use an early return and
improve readability.
- Precursors to addition of multiple buffer support. So far
minor refactoring.
* subsystem wide
- Use get_unaligned_be24 slightly improve readability over open
coding it.
* adis drivers
- Use iio_get_debugfs_dentry access function.
* bh1780, cm32181, cm3232, gp2ap02a00f, opt3001, st_uvis25, vl6180,
dmard06, kxsd9
- Drop use of of_match_ptr to allow ACPI based probing via PRP0001.
Part of clear out of this to avoid cut and paste into new drivers.
* ad5592r, ad5593r
- Fix typos
* ad5933
- Use managed interfaces to automate error handling and remove.
* ak8974
- Fix wrong number of 'real bits' for buffered data.
- Refactor to pull measurement code out as separate function.
bmp280
- Fix lack of clamp on range during data capture.
* at91-sama5d2_adc
- Handle unfinished conversions correctly.
- Allow use of triggers other than it's own.
- Reorganize buffer setup and tear down as part of long running
subsystem wide rework.
* ccs811
- Add DT binding docs and match table.
- Support external reset and wakeup pins.
* hid-sensors
- Reorganize buffer setup and tear down as part of long running
subsystem wide rework.
* ltr501
- Constify some structs.
* vcnl4000
- Fix an endian issue by using explicit byte swapped i2c accessors.
-----BEGIN PGP SIGNATURE-----
iQJFBAABCAAvFiEEbilms4eEBlKRJoGxVIU0mcT0FogFAl666PYRHGppYzIzQGtl
cm5lbC5vcmcACgkQVIU0mcT0FohMRQ//ZvDdYRB883lW11iRZJhnzpFhClNbzEp1
2wxEqMOaLQmf6MntRX6LWmN15EGmQw1Eu2SBCt3G5XRMWKvtxaLnERKYxds67qtP
uhTJDnfcDUYa6ACEHYs0FSfdmUL3S/7qmdKsABU+86o4LGzyb/jblWruB+6jOWyJ
vRtMGUC8QP2RA2hq5UNJ3au1tlIS3IYqkmh1A1IXD8OtNW/EGpwFUMsmtRGd99gI
lJb9VtlAF2bxqUBJuvludrRs8HMHafKRm9WM7+pJX7w2waSsiMMFojB7jDlJTAW/
J2Zb5UGSUHMwJNLmhr+t1BjeAtO9AVzQsK80e+GXxjyb7rv1IKSt9eFUfev1jCuR
lws3+QhwamGrxh7sFG4NFaWkZmmj5SSPTMqI+GCjm1VTL+vb3rh0MBjgn9/RNPux
lEhscgEmq0w3BJPX08G8tZ4yipZbO4ZMmuQC3Gx2iPqO80xJqD+XpD5jz4MciGBC
MDfWMamlnGk3n1sb4TIm0vPCtkz471DX5TyVLPLatcPnwWtu1zH380BD9HGVfnBN
Fommp6YKvlpOCHOgl4vNg9pLKyUAukQbM8V0lPfk3NWQdswABmzDYJqh4HJWADxT
uLiW8VgDfeq7CVPL+wwfWV3S9edu/REZa2f9y6qV/3eCyK0XId2CVHr8WpqbQIOR
p6jjJHfzPNU=
=mYqq
-----END PGP SIGNATURE-----
Merge tag 'iio-for-5.8b' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes:
Second set of new device support, cleanups and features for IIO in the 5.8 cycle
Usual mixed back but with a few subsystem wide or device type
wide cleanups.
New device support
* adis16475
- New driver supporting adis16470, adis16475, adis16477, adis16465,
adis16467, adis16500, adis16505 and adis16507.
Includes some rework of the adis library to simplify using it
for this new driver.
* ak8974
- Add support for Alps hscdt008a. ID only. Related patches add support
for scale.
* atlas-sensor
- Add support for RTD-SM OEM temperature sensor.
* cm32181
- Add support for CM3218 including support for SMBUS alert via
ACPI resources.
* ltc2632
- Add support for ltc2634-12/10/8 DACS including handling per
device type numbers of channels.
Major Features
* cm32181
- ACPI bindings including parsing CPM0 and CPM1 custom ACPI tables.
Includes minor tidy ups and fixes.
* vcnl4000
- Add event support
- Add buffered data capture support
- Add control of sampling frequency
Cleanups and minor fixes.
* core
- Trivial rework of iio_device_alloc to use an early return and
improve readability.
- Precursors to addition of multiple buffer support. So far
minor refactoring.
* subsystem wide
- Use get_unaligned_be24 slightly improve readability over open
coding it.
* adis drivers
- Use iio_get_debugfs_dentry access function.
* bh1780, cm32181, cm3232, gp2ap02a00f, opt3001, st_uvis25, vl6180,
dmard06, kxsd9
- Drop use of of_match_ptr to allow ACPI based probing via PRP0001.
Part of clear out of this to avoid cut and paste into new drivers.
* ad5592r, ad5593r
- Fix typos
* ad5933
- Use managed interfaces to automate error handling and remove.
* ak8974
- Fix wrong number of 'real bits' for buffered data.
- Refactor to pull measurement code out as separate function.
bmp280
- Fix lack of clamp on range during data capture.
* at91-sama5d2_adc
- Handle unfinished conversions correctly.
- Allow use of triggers other than it's own.
- Reorganize buffer setup and tear down as part of long running
subsystem wide rework.
* ccs811
- Add DT binding docs and match table.
- Support external reset and wakeup pins.
* hid-sensors
- Reorganize buffer setup and tear down as part of long running
subsystem wide rework.
* ltr501
- Constify some structs.
* vcnl4000
- Fix an endian issue by using explicit byte swapped i2c accessors.
* tag 'iio-for-5.8b' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio: (74 commits)
iio: light: ltr501: Constify structs
staging: iio: ad5933: attach life-cycle of kfifo buffer to parent device and use managed calls throughout
iio: bmp280: fix compensation of humidity
iio: light: cm32181: Fix integartion time typo
iio: light: cm32181: Add support for parsing CPM0 and CPM1 ACPI tables
iio: light: cm32181: Make lux_per_bit and lux_per_bit_base_it runtime settings
iio: light: cm32181: Use units of 1/100000th for calibscale and lux_per_bit
iio: light: cm32181: Change reg_init to use a bitmap of which registers to init
iio: light: cm32181: Handle CM3218 ACPI devices with 2 I2C resources
iio: light: cm32181: Clean up the probe function a bit
iio: light: cm32181: Add support for the CM3218
iio: light: cm32181: Add some extra register defines
iio: light: cm32181: Add support for ACPI enumeration
iio: light: cm32181: Switch to new style i2c-driver probe function
iio: hid-sensors: move triggered buffer setup into hid_sensor_setup_trigger
iio: vcnl4000: Add buffer support for VCNL4010/20.
iio: vcnl4000: Add sampling frequency support for VCNL4010/20.
iio: vcnl4000: Add event support for VCNL4010/20.
iio: vcnl4000: Factorize data reading and writing.
iio: vcnl4000: Fix i2c swapped word reading.
...
This commit is contained in:
commit
cef077e6aa
72 changed files with 3471 additions and 662 deletions
|
|
@ -83,10 +83,13 @@ struct adis_data {
|
|||
* @trig: IIO trigger object data
|
||||
* @data: ADIS chip variant specific data
|
||||
* @burst: ADIS burst transfer information
|
||||
* @burst_extra_len: Burst extra length. Should only be used by devices that can
|
||||
* dynamically change their burst mode length.
|
||||
* @state_lock: Lock used by the device to protect state
|
||||
* @msg: SPI message object
|
||||
* @xfer: SPI transfer objects to be used for a @msg
|
||||
* @current_page: Some ADIS devices have registers, this selects current page
|
||||
* @irq_flag: IRQ handling flags as passed to request_irq()
|
||||
* @buffer: Data buffer for information read from the device
|
||||
* @tx: DMA safe TX buffer for SPI transfers
|
||||
* @rx: DMA safe RX buffer for SPI transfers
|
||||
|
|
@ -97,7 +100,7 @@ struct adis {
|
|||
|
||||
const struct adis_data *data;
|
||||
struct adis_burst *burst;
|
||||
|
||||
unsigned int burst_extra_len;
|
||||
/**
|
||||
* The state_lock is meant to be used during operations that require
|
||||
* a sequence of SPI R/W in order to protect the SPI transfer
|
||||
|
|
@ -113,6 +116,7 @@ struct adis {
|
|||
struct spi_message msg;
|
||||
struct spi_transfer *xfer;
|
||||
unsigned int current_page;
|
||||
unsigned long irq_flag;
|
||||
void *buffer;
|
||||
|
||||
uint8_t tx[10] ____cacheline_aligned;
|
||||
|
|
@ -331,6 +335,65 @@ static inline int adis_read_reg_32(struct adis *adis, unsigned int reg,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int __adis_update_bits_base(struct adis *adis, unsigned int reg, const u32 mask,
|
||||
const u32 val, u8 size);
|
||||
/**
|
||||
* adis_update_bits_base() - ADIS Update bits function - Locked version
|
||||
* @adis: The adis device
|
||||
* @reg: The address of the lower of the two registers
|
||||
* @mask: Bitmask to change
|
||||
* @val: Value to be written
|
||||
* @size: Size of the register to update
|
||||
*
|
||||
* Updates the desired bits of @reg in accordance with @mask and @val.
|
||||
*/
|
||||
static inline int adis_update_bits_base(struct adis *adis, unsigned int reg,
|
||||
const u32 mask, const u32 val, u8 size)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&adis->state_lock);
|
||||
ret = __adis_update_bits_base(adis, reg, mask, val, size);
|
||||
mutex_unlock(&adis->state_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* adis_update_bits() - Wrapper macro for adis_update_bits_base - Locked version
|
||||
* @adis: The adis device
|
||||
* @reg: The address of the lower of the two registers
|
||||
* @mask: Bitmask to change
|
||||
* @val: Value to be written
|
||||
*
|
||||
* This macro evaluates the sizeof of @val at compile time and calls
|
||||
* adis_update_bits_base() accordingly. Be aware that using MACROS/DEFINES for
|
||||
* @val can lead to undesired behavior if the register to update is 16bit.
|
||||
*/
|
||||
#define adis_update_bits(adis, reg, mask, val) ({ \
|
||||
BUILD_BUG_ON(sizeof(val) == 1 || sizeof(val) == 8); \
|
||||
__builtin_choose_expr(sizeof(val) == 4, \
|
||||
adis_update_bits_base(adis, reg, mask, val, 4), \
|
||||
adis_update_bits_base(adis, reg, mask, val, 2)); \
|
||||
})
|
||||
|
||||
/**
|
||||
* adis_update_bits() - Wrapper macro for adis_update_bits_base
|
||||
* @adis: The adis device
|
||||
* @reg: The address of the lower of the two registers
|
||||
* @mask: Bitmask to change
|
||||
* @val: Value to be written
|
||||
*
|
||||
* This macro evaluates the sizeof of @val at compile time and calls
|
||||
* adis_update_bits_base() accordingly. Be aware that using MACROS/DEFINES for
|
||||
* @val can lead to undesired behavior if the register to update is 16bit.
|
||||
*/
|
||||
#define __adis_update_bits(adis, reg, mask, val) ({ \
|
||||
BUILD_BUG_ON(sizeof(val) == 1 || sizeof(val) == 8); \
|
||||
__builtin_choose_expr(sizeof(val) == 4, \
|
||||
__adis_update_bits_base(adis, reg, mask, val, 4), \
|
||||
__adis_update_bits_base(adis, reg, mask, val, 2)); \
|
||||
})
|
||||
|
||||
int adis_enable_irq(struct adis *adis, bool enable);
|
||||
int __adis_check_status(struct adis *adis);
|
||||
int __adis_initial_startup(struct adis *adis);
|
||||
|
|
@ -441,18 +504,25 @@ int adis_single_conversion(struct iio_dev *indio_dev,
|
|||
* @en burst mode enabled
|
||||
* @reg_cmd register command that triggers burst
|
||||
* @extra_len extra length to account in the SPI RX buffer
|
||||
* @burst_max_len holds the maximum burst size when the device supports
|
||||
* more than one burst mode with different sizes
|
||||
*/
|
||||
struct adis_burst {
|
||||
bool en;
|
||||
unsigned int reg_cmd;
|
||||
unsigned int extra_len;
|
||||
const u32 extra_len;
|
||||
const u32 burst_max_len;
|
||||
};
|
||||
|
||||
int
|
||||
devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
|
||||
irq_handler_t trigger_handler);
|
||||
int adis_setup_buffer_and_trigger(struct adis *adis,
|
||||
struct iio_dev *indio_dev, irqreturn_t (*trigger_handler)(int, void *));
|
||||
void adis_cleanup_buffer_and_trigger(struct adis *adis,
|
||||
struct iio_dev *indio_dev);
|
||||
|
||||
int devm_adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev);
|
||||
int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev);
|
||||
void adis_remove_trigger(struct adis *adis);
|
||||
|
||||
|
|
@ -461,6 +531,13 @@ int adis_update_scan_mode(struct iio_dev *indio_dev,
|
|||
|
||||
#else /* CONFIG_IIO_BUFFER */
|
||||
|
||||
static inline int
|
||||
devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
|
||||
irq_handler_t trigger_handler)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int adis_setup_buffer_and_trigger(struct adis *adis,
|
||||
struct iio_dev *indio_dev, irqreturn_t (*trigger_handler)(int, void *))
|
||||
{
|
||||
|
|
@ -472,6 +549,12 @@ static inline void adis_cleanup_buffer_and_trigger(struct adis *adis,
|
|||
{
|
||||
}
|
||||
|
||||
static inline int devm_adis_probe_trigger(struct adis *adis,
|
||||
struct iio_dev *indio_dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int adis_probe_trigger(struct adis *adis,
|
||||
struct iio_dev *indio_dev)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue