Browse Source

Merge tag 'iio-fixes-for-4.5b' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus

Jonathan writes:

Second set of IIO fixes for the 4.5 cycle.  These ones are mostly
dependent on patches from the recent merge cycle.

* adc, imu and iio staging drivers
  - !HAS_IOMEM dependency fixes
* dht11
  - use boottime clock for time measurement to avoid incorrect measurements
   due to clock updates.
* lidar
  - correct a return value for short i2c transfers.
Greg Kroah-Hartman 10 years ago
parent
commit
5982557ac6

+ 2 - 0
drivers/iio/adc/Kconfig

@@ -175,6 +175,7 @@ config DA9150_GPADC
 config EXYNOS_ADC
 config EXYNOS_ADC
 	tristate "Exynos ADC driver support"
 	tristate "Exynos ADC driver support"
 	depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || (OF && COMPILE_TEST)
 	depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || (OF && COMPILE_TEST)
+	depends on HAS_IOMEM
 	help
 	help
 	  Core support for the ADC block found in the Samsung EXYNOS series
 	  Core support for the ADC block found in the Samsung EXYNOS series
 	  of SoCs for drivers such as the touchscreen and hwmon to use to share
 	  of SoCs for drivers such as the touchscreen and hwmon to use to share
@@ -207,6 +208,7 @@ config INA2XX_ADC
 config IMX7D_ADC
 config IMX7D_ADC
 	tristate "IMX7D ADC driver"
 	tristate "IMX7D ADC driver"
 	depends on ARCH_MXC || COMPILE_TEST
 	depends on ARCH_MXC || COMPILE_TEST
+	depends on HAS_IOMEM
 	help
 	help
 	  Say yes here to build support for IMX7D ADC.
 	  Say yes here to build support for IMX7D ADC.
 
 

+ 4 - 4
drivers/iio/humidity/dht11.c

@@ -117,7 +117,7 @@ static int dht11_decode(struct dht11 *dht11, int offset, int timeres)
 	if (((hum_int + hum_dec + temp_int + temp_dec) & 0xff) != checksum)
 	if (((hum_int + hum_dec + temp_int + temp_dec) & 0xff) != checksum)
 		return -EIO;
 		return -EIO;
 
 
-	dht11->timestamp = ktime_get_real_ns();
+	dht11->timestamp = ktime_get_boot_ns();
 	if (hum_int < 20) {  /* DHT22 */
 	if (hum_int < 20) {  /* DHT22 */
 		dht11->temperature = (((temp_int & 0x7f) << 8) + temp_dec) *
 		dht11->temperature = (((temp_int & 0x7f) << 8) + temp_dec) *
 					((temp_int & 0x80) ? -100 : 100);
 					((temp_int & 0x80) ? -100 : 100);
@@ -145,7 +145,7 @@ static irqreturn_t dht11_handle_irq(int irq, void *data)
 
 
 	/* TODO: Consider making the handler safe for IRQ sharing */
 	/* TODO: Consider making the handler safe for IRQ sharing */
 	if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0) {
 	if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0) {
-		dht11->edges[dht11->num_edges].ts = ktime_get_real_ns();
+		dht11->edges[dht11->num_edges].ts = ktime_get_boot_ns();
 		dht11->edges[dht11->num_edges++].value =
 		dht11->edges[dht11->num_edges++].value =
 						gpio_get_value(dht11->gpio);
 						gpio_get_value(dht11->gpio);
 
 
@@ -164,7 +164,7 @@ static int dht11_read_raw(struct iio_dev *iio_dev,
 	int ret, timeres;
 	int ret, timeres;
 
 
 	mutex_lock(&dht11->lock);
 	mutex_lock(&dht11->lock);
-	if (dht11->timestamp + DHT11_DATA_VALID_TIME < ktime_get_real_ns()) {
+	if (dht11->timestamp + DHT11_DATA_VALID_TIME < ktime_get_boot_ns()) {
 		timeres = ktime_get_resolution_ns();
 		timeres = ktime_get_resolution_ns();
 		if (DHT11_DATA_BIT_HIGH < 2 * timeres) {
 		if (DHT11_DATA_BIT_HIGH < 2 * timeres) {
 			dev_err(dht11->dev, "timeresolution %dns too low\n",
 			dev_err(dht11->dev, "timeresolution %dns too low\n",
@@ -279,7 +279,7 @@ static int dht11_probe(struct platform_device *pdev)
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
-	dht11->timestamp = ktime_get_real_ns() - DHT11_DATA_VALID_TIME - 1;
+	dht11->timestamp = ktime_get_boot_ns() - DHT11_DATA_VALID_TIME - 1;
 	dht11->num_edges = -1;
 	dht11->num_edges = -1;
 
 
 	platform_set_drvdata(pdev, iio);
 	platform_set_drvdata(pdev, iio);

+ 1 - 1
drivers/iio/imu/inv_mpu6050/Kconfig

@@ -5,9 +5,9 @@
 config INV_MPU6050_IIO
 config INV_MPU6050_IIO
 	tristate "Invensense MPU6050 devices"
 	tristate "Invensense MPU6050 devices"
 	depends on I2C && SYSFS
 	depends on I2C && SYSFS
+	depends on I2C_MUX
 	select IIO_BUFFER
 	select IIO_BUFFER
 	select IIO_TRIGGERED_BUFFER
 	select IIO_TRIGGERED_BUFFER
-	select I2C_MUX
 	help
 	help
 	  This driver supports the Invensense MPU6050 devices.
 	  This driver supports the Invensense MPU6050 devices.
 	  This driver can also support MPU6500 in MPU6050 compatibility mode
 	  This driver can also support MPU6500 in MPU6050 compatibility mode

+ 1 - 1
drivers/iio/proximity/pulsedlight-lidar-lite-v2.c

@@ -87,7 +87,7 @@ static int lidar_i2c_xfer(struct lidar_data *data, u8 reg, u8 *val, int len)
 
 
 	ret = i2c_transfer(client->adapter, msg, 2);
 	ret = i2c_transfer(client->adapter, msg, 2);
 
 
-	return (ret == 2) ? 0 : ret;
+	return (ret == 2) ? 0 : -EIO;
 }
 }
 
 
 static int lidar_smbus_xfer(struct lidar_data *data, u8 reg, u8 *val, int len)
 static int lidar_smbus_xfer(struct lidar_data *data, u8 reg, u8 *val, int len)

+ 1 - 0
drivers/staging/iio/adc/Kconfig

@@ -6,6 +6,7 @@ menu "Analog to digital converters"
 config AD7606
 config AD7606
 	tristate "Analog Devices AD7606 ADC driver"
 	tristate "Analog Devices AD7606 ADC driver"
 	depends on GPIOLIB || COMPILE_TEST
 	depends on GPIOLIB || COMPILE_TEST
+	depends on HAS_IOMEM
 	select IIO_BUFFER
 	select IIO_BUFFER
 	select IIO_TRIGGERED_BUFFER
 	select IIO_TRIGGERED_BUFFER
 	help
 	help