patch "iio: magnetometer: st_magn: fix drdy line configuration for LIS3MDL" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: magnetometer: st_magn: fix drdy line configuration for LIS3MDL
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
c65e3d6ef4bfdc4c8460509f08507cf7dc026974Mon Sep 17 00:00:00 2001
From: Lorenzo Bianconi <[email protected]>
Date: Tue, 29 Aug 2017 13:45:11 +0200
Subject: iio: magnetometer: st_magn: fix drdy line configuration for LIS3MDL
Data-ready line in LIS3MDL is routed to drdy pin and it is not possible to select a different INT pin. st_sensors_set_dataready_irq() assumes that if drdy int address is not exported in register map, irq trigger is not supported by the sensor and hw_irq_trigger is always false. Based on this configuration st_sensors_irq_thread does not consume generated interrupt causing an unhandled irq.
Fix this taking into account status register address in st_sensors_set_dataready_irq()
--- drivers/iio/common/st_sensors/st_sensors_core.c | 11 ++++++++++- drivers/iio/magnetometer/st_magn_core.c | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-)
drivers/iio/common/st_sensors/st_sensors_core.c +10 -1
@@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)u8 drdy_mask;struct st_sensor_data *sdata =iio_priv (indio_dev); -if (!sdata->sensor_settings->drdy_irq.addr) +if (!sdata->sensor_settings->drdy_irq.addr) { +/* +* there are some devices (e.g. LIS3MDL) where drdy line is +* routed to a given pin and it is not possible to select a +* different one. Take into account irq status register +* to understand if irq trigger can be properly supported +*/ +if (sdata->sensor_settings->drdy_irq.addr_stat_drdy) + sdata->hw_irq_trigger = enable;return 0 ; + }/* Enable/Disable the interrupt generator 1. */ if (sdata->sensor_settings->drdy_irq.ig1.en_addr >0 ) {
drivers/iio/magnetometer/st_magn_core.c +4 -0
@@ -315,6 +315,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = { }, }, }, + .drdy_irq = { +/* drdy line is routed drdy pin */ + .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR, + }, .multi_read_bit = true, .bootime = 2, },
Signature · 1 line
2.14.1