diff options
Diffstat (limited to 'drivers/iio')
| -rw-r--r-- | drivers/iio/accel/bma180.c | 16 | ||||
| -rw-r--r-- | drivers/iio/adc/max1363.c | 2 | ||||
| -rw-r--r-- | drivers/iio/gyro/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/iio/gyro/st_gyro.h | 1 | ||||
| -rw-r--r-- | drivers/iio/gyro/st_gyro_core.c | 9 | ||||
| -rw-r--r-- | drivers/iio/gyro/st_gyro_i2c.c | 1 | ||||
| -rw-r--r-- | drivers/iio/gyro/st_gyro_spi.c | 1 | ||||
| -rw-r--r-- | drivers/iio/imu/adis16400.h | 1 | ||||
| -rw-r--r-- | drivers/iio/imu/adis16400_core.c | 10 | ||||
| -rw-r--r-- | drivers/iio/light/cm32181.c | 16 | ||||
| -rw-r--r-- | drivers/iio/light/cm36651.c | 45 | ||||
| -rw-r--r-- | drivers/iio/light/tsl2563.c | 16 | ||||
| -rw-r--r-- | drivers/iio/magnetometer/ak8975.c | 16 | ||||
| -rw-r--r-- | drivers/iio/magnetometer/mag3110.c | 8 |
14 files changed, 77 insertions, 67 deletions
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c index 3bec9220df04..bfec313492b3 100644 --- a/drivers/iio/accel/bma180.c +++ b/drivers/iio/accel/bma180.c | |||
| @@ -447,14 +447,14 @@ static const struct iio_chan_spec_ext_info bma180_ext_info[] = { | |||
| 447 | { }, | 447 | { }, |
| 448 | }; | 448 | }; |
| 449 | 449 | ||
| 450 | #define BMA180_CHANNEL(_index) { \ | 450 | #define BMA180_CHANNEL(_axis) { \ |
| 451 | .type = IIO_ACCEL, \ | 451 | .type = IIO_ACCEL, \ |
| 452 | .indexed = 1, \ | 452 | .modified = 1, \ |
| 453 | .channel = (_index), \ | 453 | .channel2 = IIO_MOD_##_axis, \ |
| 454 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ | 454 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ |
| 455 | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ | 455 | BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ |
| 456 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ | 456 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ |
| 457 | .scan_index = (_index), \ | 457 | .scan_index = AXIS_##_axis, \ |
| 458 | .scan_type = { \ | 458 | .scan_type = { \ |
| 459 | .sign = 's', \ | 459 | .sign = 's', \ |
| 460 | .realbits = 14, \ | 460 | .realbits = 14, \ |
| @@ -465,10 +465,10 @@ static const struct iio_chan_spec_ext_info bma180_ext_info[] = { | |||
| 465 | } | 465 | } |
| 466 | 466 | ||
| 467 | static const struct iio_chan_spec bma180_channels[] = { | 467 | static const struct iio_chan_spec bma180_channels[] = { |
| 468 | BMA180_CHANNEL(AXIS_X), | 468 | BMA180_CHANNEL(X), |
| 469 | BMA180_CHANNEL(AXIS_Y), | 469 | BMA180_CHANNEL(Y), |
| 470 | BMA180_CHANNEL(AXIS_Z), | 470 | BMA180_CHANNEL(Z), |
| 471 | IIO_CHAN_SOFT_TIMESTAMP(4), | 471 | IIO_CHAN_SOFT_TIMESTAMP(3), |
| 472 | }; | 472 | }; |
| 473 | 473 | ||
| 474 | static irqreturn_t bma180_trigger_handler(int irq, void *p) | 474 | static irqreturn_t bma180_trigger_handler(int irq, void *p) |
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c index e283f2f2ee2f..360259266d4f 100644 --- a/drivers/iio/adc/max1363.c +++ b/drivers/iio/adc/max1363.c | |||
| @@ -1560,7 +1560,7 @@ static int max1363_probe(struct i2c_client *client, | |||
| 1560 | st->client = client; | 1560 | st->client = client; |
| 1561 | 1561 | ||
| 1562 | st->vref_uv = st->chip_info->int_vref_mv * 1000; | 1562 | st->vref_uv = st->chip_info->int_vref_mv * 1000; |
| 1563 | vref = devm_regulator_get(&client->dev, "vref"); | 1563 | vref = devm_regulator_get_optional(&client->dev, "vref"); |
| 1564 | if (!IS_ERR(vref)) { | 1564 | if (!IS_ERR(vref)) { |
| 1565 | int vref_uv; | 1565 | int vref_uv; |
| 1566 | 1566 | ||
diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig index 41c64a43bcab..ac2d69e34c8c 100644 --- a/drivers/iio/gyro/Kconfig +++ b/drivers/iio/gyro/Kconfig | |||
| @@ -70,7 +70,7 @@ config IIO_ST_GYRO_3AXIS | |||
| 70 | select IIO_TRIGGERED_BUFFER if (IIO_BUFFER) | 70 | select IIO_TRIGGERED_BUFFER if (IIO_BUFFER) |
| 71 | help | 71 | help |
| 72 | Say yes here to build support for STMicroelectronics gyroscopes: | 72 | Say yes here to build support for STMicroelectronics gyroscopes: |
| 73 | L3G4200D, LSM330DL, L3GD20, L3GD20H, LSM330DLC, L3G4IS, LSM330. | 73 | L3G4200D, LSM330DL, L3GD20, LSM330DLC, L3G4IS, LSM330. |
| 74 | 74 | ||
| 75 | This driver can also be built as a module. If so, these modules | 75 | This driver can also be built as a module. If so, these modules |
| 76 | will be created: | 76 | will be created: |
diff --git a/drivers/iio/gyro/st_gyro.h b/drivers/iio/gyro/st_gyro.h index f8f2bf84a5a2..c197360c450b 100644 --- a/drivers/iio/gyro/st_gyro.h +++ b/drivers/iio/gyro/st_gyro.h | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #define LSM330DL_GYRO_DEV_NAME "lsm330dl_gyro" | 19 | #define LSM330DL_GYRO_DEV_NAME "lsm330dl_gyro" |
| 20 | #define LSM330DLC_GYRO_DEV_NAME "lsm330dlc_gyro" | 20 | #define LSM330DLC_GYRO_DEV_NAME "lsm330dlc_gyro" |
| 21 | #define L3GD20_GYRO_DEV_NAME "l3gd20" | 21 | #define L3GD20_GYRO_DEV_NAME "l3gd20" |
| 22 | #define L3GD20H_GYRO_DEV_NAME "l3gd20h" | ||
| 23 | #define L3G4IS_GYRO_DEV_NAME "l3g4is_ui" | 22 | #define L3G4IS_GYRO_DEV_NAME "l3g4is_ui" |
| 24 | #define LSM330_GYRO_DEV_NAME "lsm330_gyro" | 23 | #define LSM330_GYRO_DEV_NAME "lsm330_gyro" |
| 25 | 24 | ||
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c index d53d91adfb55..a8e174a47bc4 100644 --- a/drivers/iio/gyro/st_gyro_core.c +++ b/drivers/iio/gyro/st_gyro_core.c | |||
| @@ -167,11 +167,10 @@ static const struct st_sensors st_gyro_sensors[] = { | |||
| 167 | .wai = ST_GYRO_2_WAI_EXP, | 167 | .wai = ST_GYRO_2_WAI_EXP, |
| 168 | .sensors_supported = { | 168 | .sensors_supported = { |
| 169 | [0] = L3GD20_GYRO_DEV_NAME, | 169 | [0] = L3GD20_GYRO_DEV_NAME, |
| 170 | [1] = L3GD20H_GYRO_DEV_NAME, | 170 | [1] = LSM330D_GYRO_DEV_NAME, |
| 171 | [2] = LSM330D_GYRO_DEV_NAME, | 171 | [2] = LSM330DLC_GYRO_DEV_NAME, |
| 172 | [3] = LSM330DLC_GYRO_DEV_NAME, | 172 | [3] = L3G4IS_GYRO_DEV_NAME, |
| 173 | [4] = L3G4IS_GYRO_DEV_NAME, | 173 | [4] = LSM330_GYRO_DEV_NAME, |
| 174 | [5] = LSM330_GYRO_DEV_NAME, | ||
| 175 | }, | 174 | }, |
| 176 | .ch = (struct iio_chan_spec *)st_gyro_16bit_channels, | 175 | .ch = (struct iio_chan_spec *)st_gyro_16bit_channels, |
| 177 | .odr = { | 176 | .odr = { |
diff --git a/drivers/iio/gyro/st_gyro_i2c.c b/drivers/iio/gyro/st_gyro_i2c.c index 16b8b8d70bf1..23c12f361b05 100644 --- a/drivers/iio/gyro/st_gyro_i2c.c +++ b/drivers/iio/gyro/st_gyro_i2c.c | |||
| @@ -55,7 +55,6 @@ static const struct i2c_device_id st_gyro_id_table[] = { | |||
| 55 | { LSM330DL_GYRO_DEV_NAME }, | 55 | { LSM330DL_GYRO_DEV_NAME }, |
| 56 | { LSM330DLC_GYRO_DEV_NAME }, | 56 | { LSM330DLC_GYRO_DEV_NAME }, |
| 57 | { L3GD20_GYRO_DEV_NAME }, | 57 | { L3GD20_GYRO_DEV_NAME }, |
| 58 | { L3GD20H_GYRO_DEV_NAME }, | ||
| 59 | { L3G4IS_GYRO_DEV_NAME }, | 58 | { L3G4IS_GYRO_DEV_NAME }, |
| 60 | { LSM330_GYRO_DEV_NAME }, | 59 | { LSM330_GYRO_DEV_NAME }, |
| 61 | {}, | 60 | {}, |
diff --git a/drivers/iio/gyro/st_gyro_spi.c b/drivers/iio/gyro/st_gyro_spi.c index 94763e25caf9..b4ad3be26687 100644 --- a/drivers/iio/gyro/st_gyro_spi.c +++ b/drivers/iio/gyro/st_gyro_spi.c | |||
| @@ -54,7 +54,6 @@ static const struct spi_device_id st_gyro_id_table[] = { | |||
| 54 | { LSM330DL_GYRO_DEV_NAME }, | 54 | { LSM330DL_GYRO_DEV_NAME }, |
| 55 | { LSM330DLC_GYRO_DEV_NAME }, | 55 | { LSM330DLC_GYRO_DEV_NAME }, |
| 56 | { L3GD20_GYRO_DEV_NAME }, | 56 | { L3GD20_GYRO_DEV_NAME }, |
| 57 | { L3GD20H_GYRO_DEV_NAME }, | ||
| 58 | { L3G4IS_GYRO_DEV_NAME }, | 57 | { L3G4IS_GYRO_DEV_NAME }, |
| 59 | { LSM330_GYRO_DEV_NAME }, | 58 | { LSM330_GYRO_DEV_NAME }, |
| 60 | {}, | 59 | {}, |
diff --git a/drivers/iio/imu/adis16400.h b/drivers/iio/imu/adis16400.h index 2f8f9d632386..0916bf6b6c31 100644 --- a/drivers/iio/imu/adis16400.h +++ b/drivers/iio/imu/adis16400.h | |||
| @@ -189,6 +189,7 @@ enum { | |||
| 189 | ADIS16300_SCAN_INCLI_X, | 189 | ADIS16300_SCAN_INCLI_X, |
| 190 | ADIS16300_SCAN_INCLI_Y, | 190 | ADIS16300_SCAN_INCLI_Y, |
| 191 | ADIS16400_SCAN_ADC, | 191 | ADIS16400_SCAN_ADC, |
| 192 | ADIS16400_SCAN_TIMESTAMP, | ||
| 192 | }; | 193 | }; |
| 193 | 194 | ||
| 194 | #ifdef CONFIG_IIO_BUFFER | 195 | #ifdef CONFIG_IIO_BUFFER |
diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c index 368660dfe135..7c582f7ae34e 100644 --- a/drivers/iio/imu/adis16400_core.c +++ b/drivers/iio/imu/adis16400_core.c | |||
| @@ -632,7 +632,7 @@ static const struct iio_chan_spec adis16400_channels[] = { | |||
| 632 | ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 14), | 632 | ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 14), |
| 633 | ADIS16400_TEMP_CHAN(ADIS16400_TEMP_OUT, 12), | 633 | ADIS16400_TEMP_CHAN(ADIS16400_TEMP_OUT, 12), |
| 634 | ADIS16400_AUX_ADC_CHAN(ADIS16400_AUX_ADC, 12), | 634 | ADIS16400_AUX_ADC_CHAN(ADIS16400_AUX_ADC, 12), |
| 635 | IIO_CHAN_SOFT_TIMESTAMP(12) | 635 | IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP), |
| 636 | }; | 636 | }; |
| 637 | 637 | ||
| 638 | static const struct iio_chan_spec adis16448_channels[] = { | 638 | static const struct iio_chan_spec adis16448_channels[] = { |
| @@ -659,7 +659,7 @@ static const struct iio_chan_spec adis16448_channels[] = { | |||
| 659 | }, | 659 | }, |
| 660 | }, | 660 | }, |
| 661 | ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12), | 661 | ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12), |
| 662 | IIO_CHAN_SOFT_TIMESTAMP(11) | 662 | IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP), |
| 663 | }; | 663 | }; |
| 664 | 664 | ||
| 665 | static const struct iio_chan_spec adis16350_channels[] = { | 665 | static const struct iio_chan_spec adis16350_channels[] = { |
| @@ -677,7 +677,7 @@ static const struct iio_chan_spec adis16350_channels[] = { | |||
| 677 | ADIS16400_MOD_TEMP_CHAN(X, ADIS16350_XTEMP_OUT, 12), | 677 | ADIS16400_MOD_TEMP_CHAN(X, ADIS16350_XTEMP_OUT, 12), |
| 678 | ADIS16400_MOD_TEMP_CHAN(Y, ADIS16350_YTEMP_OUT, 12), | 678 | ADIS16400_MOD_TEMP_CHAN(Y, ADIS16350_YTEMP_OUT, 12), |
| 679 | ADIS16400_MOD_TEMP_CHAN(Z, ADIS16350_ZTEMP_OUT, 12), | 679 | ADIS16400_MOD_TEMP_CHAN(Z, ADIS16350_ZTEMP_OUT, 12), |
| 680 | IIO_CHAN_SOFT_TIMESTAMP(11) | 680 | IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP), |
| 681 | }; | 681 | }; |
| 682 | 682 | ||
| 683 | static const struct iio_chan_spec adis16300_channels[] = { | 683 | static const struct iio_chan_spec adis16300_channels[] = { |
| @@ -690,7 +690,7 @@ static const struct iio_chan_spec adis16300_channels[] = { | |||
| 690 | ADIS16400_AUX_ADC_CHAN(ADIS16300_AUX_ADC, 12), | 690 | ADIS16400_AUX_ADC_CHAN(ADIS16300_AUX_ADC, 12), |
| 691 | ADIS16400_INCLI_CHAN(X, ADIS16300_PITCH_OUT, 13), | 691 | ADIS16400_INCLI_CHAN(X, ADIS16300_PITCH_OUT, 13), |
| 692 | ADIS16400_INCLI_CHAN(Y, ADIS16300_ROLL_OUT, 13), | 692 | ADIS16400_INCLI_CHAN(Y, ADIS16300_ROLL_OUT, 13), |
| 693 | IIO_CHAN_SOFT_TIMESTAMP(14) | 693 | IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP), |
| 694 | }; | 694 | }; |
| 695 | 695 | ||
| 696 | static const struct iio_chan_spec adis16334_channels[] = { | 696 | static const struct iio_chan_spec adis16334_channels[] = { |
| @@ -701,7 +701,7 @@ static const struct iio_chan_spec adis16334_channels[] = { | |||
| 701 | ADIS16400_ACCEL_CHAN(Y, ADIS16400_YACCL_OUT, 14), | 701 | ADIS16400_ACCEL_CHAN(Y, ADIS16400_YACCL_OUT, 14), |
| 702 | ADIS16400_ACCEL_CHAN(Z, ADIS16400_ZACCL_OUT, 14), | 702 | ADIS16400_ACCEL_CHAN(Z, ADIS16400_ZACCL_OUT, 14), |
| 703 | ADIS16400_TEMP_CHAN(ADIS16350_XTEMP_OUT, 12), | 703 | ADIS16400_TEMP_CHAN(ADIS16350_XTEMP_OUT, 12), |
| 704 | IIO_CHAN_SOFT_TIMESTAMP(8) | 704 | IIO_CHAN_SOFT_TIMESTAMP(ADIS16400_SCAN_TIMESTAMP), |
| 705 | }; | 705 | }; |
| 706 | 706 | ||
| 707 | static struct attribute *adis16400_attributes[] = { | 707 | static struct attribute *adis16400_attributes[] = { |
diff --git a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm32181.c index f17b4e6183c6..47a6dbac2d0c 100644 --- a/drivers/iio/light/cm32181.c +++ b/drivers/iio/light/cm32181.c | |||
| @@ -103,13 +103,13 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181) | |||
| 103 | /** | 103 | /** |
| 104 | * cm32181_read_als_it() - Get sensor integration time (ms) | 104 | * cm32181_read_als_it() - Get sensor integration time (ms) |
| 105 | * @cm32181: pointer of struct cm32181 | 105 | * @cm32181: pointer of struct cm32181 |
| 106 | * @val: pointer of int to load the als_it value. | 106 | * @val2: pointer of int to load the als_it value. |
| 107 | * | 107 | * |
| 108 | * Report the current integartion time by millisecond. | 108 | * Report the current integartion time by millisecond. |
| 109 | * | 109 | * |
| 110 | * Return: IIO_VAL_INT for success, otherwise -EINVAL. | 110 | * Return: IIO_VAL_INT_PLUS_MICRO for success, otherwise -EINVAL. |
| 111 | */ | 111 | */ |
| 112 | static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val) | 112 | static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val2) |
| 113 | { | 113 | { |
| 114 | u16 als_it; | 114 | u16 als_it; |
| 115 | int i; | 115 | int i; |
| @@ -119,8 +119,8 @@ static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val) | |||
| 119 | als_it >>= CM32181_CMD_ALS_IT_SHIFT; | 119 | als_it >>= CM32181_CMD_ALS_IT_SHIFT; |
| 120 | for (i = 0; i < ARRAY_SIZE(als_it_bits); i++) { | 120 | for (i = 0; i < ARRAY_SIZE(als_it_bits); i++) { |
| 121 | if (als_it == als_it_bits[i]) { | 121 | if (als_it == als_it_bits[i]) { |
| 122 | *val = als_it_value[i]; | 122 | *val2 = als_it_value[i]; |
| 123 | return IIO_VAL_INT; | 123 | return IIO_VAL_INT_PLUS_MICRO; |
| 124 | } | 124 | } |
| 125 | } | 125 | } |
| 126 | 126 | ||
| @@ -221,7 +221,7 @@ static int cm32181_read_raw(struct iio_dev *indio_dev, | |||
| 221 | *val = cm32181->calibscale; | 221 | *val = cm32181->calibscale; |
| 222 | return IIO_VAL_INT; | 222 | return IIO_VAL_INT; |
| 223 | case IIO_CHAN_INFO_INT_TIME: | 223 | case IIO_CHAN_INFO_INT_TIME: |
| 224 | ret = cm32181_read_als_it(cm32181, val); | 224 | ret = cm32181_read_als_it(cm32181, val2); |
| 225 | return ret; | 225 | return ret; |
| 226 | } | 226 | } |
| 227 | 227 | ||
| @@ -240,7 +240,7 @@ static int cm32181_write_raw(struct iio_dev *indio_dev, | |||
| 240 | cm32181->calibscale = val; | 240 | cm32181->calibscale = val; |
| 241 | return val; | 241 | return val; |
| 242 | case IIO_CHAN_INFO_INT_TIME: | 242 | case IIO_CHAN_INFO_INT_TIME: |
| 243 | ret = cm32181_write_als_it(cm32181, val); | 243 | ret = cm32181_write_als_it(cm32181, val2); |
| 244 | return ret; | 244 | return ret; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| @@ -264,7 +264,7 @@ static ssize_t cm32181_get_it_available(struct device *dev, | |||
| 264 | 264 | ||
| 265 | n = ARRAY_SIZE(als_it_value); | 265 | n = ARRAY_SIZE(als_it_value); |
| 266 | for (i = 0, len = 0; i < n; i++) | 266 | for (i = 0, len = 0; i < n; i++) |
| 267 | len += sprintf(buf + len, "%d ", als_it_value[i]); | 267 | len += sprintf(buf + len, "0.%06u ", als_it_value[i]); |
| 268 | return len + sprintf(buf + len, "\n"); | 268 | return len + sprintf(buf + len, "\n"); |
| 269 | } | 269 | } |
| 270 | 270 | ||
diff --git a/drivers/iio/light/cm36651.c b/drivers/iio/light/cm36651.c index 0a142af83e25..a45e07492db3 100644 --- a/drivers/iio/light/cm36651.c +++ b/drivers/iio/light/cm36651.c | |||
| @@ -50,10 +50,10 @@ | |||
| 50 | #define CM36651_CS_CONF2_DEFAULT_BIT 0x08 | 50 | #define CM36651_CS_CONF2_DEFAULT_BIT 0x08 |
| 51 | 51 | ||
| 52 | /* CS_CONF3 channel integration time */ | 52 | /* CS_CONF3 channel integration time */ |
| 53 | #define CM36651_CS_IT1 0x00 /* Integration time 80000 usec */ | 53 | #define CM36651_CS_IT1 0x00 /* Integration time 80 msec */ |
| 54 | #define CM36651_CS_IT2 0x40 /* Integration time 160000 usec */ | 54 | #define CM36651_CS_IT2 0x40 /* Integration time 160 msec */ |
| 55 | #define CM36651_CS_IT3 0x80 /* Integration time 320000 usec */ | 55 | #define CM36651_CS_IT3 0x80 /* Integration time 320 msec */ |
| 56 | #define CM36651_CS_IT4 0xC0 /* Integration time 640000 usec */ | 56 | #define CM36651_CS_IT4 0xC0 /* Integration time 640 msec */ |
| 57 | 57 | ||
| 58 | /* PS_CONF1 command code */ | 58 | /* PS_CONF1 command code */ |
| 59 | #define CM36651_PS_ENABLE 0x00 | 59 | #define CM36651_PS_ENABLE 0x00 |
| @@ -64,10 +64,10 @@ | |||
| 64 | #define CM36651_PS_PERS4 0x0C | 64 | #define CM36651_PS_PERS4 0x0C |
| 65 | 65 | ||
| 66 | /* PS_CONF1 command code: integration time */ | 66 | /* PS_CONF1 command code: integration time */ |
| 67 | #define CM36651_PS_IT1 0x00 /* Integration time 320 usec */ | 67 | #define CM36651_PS_IT1 0x00 /* Integration time 0.32 msec */ |
| 68 | #define CM36651_PS_IT2 0x10 /* Integration time 420 usec */ | 68 | #define CM36651_PS_IT2 0x10 /* Integration time 0.42 msec */ |
| 69 | #define CM36651_PS_IT3 0x20 /* Integration time 520 usec */ | 69 | #define CM36651_PS_IT3 0x20 /* Integration time 0.52 msec */ |
| 70 | #define CM36651_PS_IT4 0x30 /* Integration time 640 usec */ | 70 | #define CM36651_PS_IT4 0x30 /* Integration time 0.64 msec */ |
| 71 | 71 | ||
| 72 | /* PS_CONF1 command code: duty ratio */ | 72 | /* PS_CONF1 command code: duty ratio */ |
| 73 | #define CM36651_PS_DR1 0x00 /* Duty ratio 1/80 */ | 73 | #define CM36651_PS_DR1 0x00 /* Duty ratio 1/80 */ |
| @@ -93,8 +93,8 @@ | |||
| 93 | #define CM36651_CLOSE_PROXIMITY 0x32 | 93 | #define CM36651_CLOSE_PROXIMITY 0x32 |
| 94 | #define CM36651_FAR_PROXIMITY 0x33 | 94 | #define CM36651_FAR_PROXIMITY 0x33 |
| 95 | 95 | ||
| 96 | #define CM36651_CS_INT_TIME_AVAIL "80000 160000 320000 640000" | 96 | #define CM36651_CS_INT_TIME_AVAIL "0.08 0.16 0.32 0.64" |
| 97 | #define CM36651_PS_INT_TIME_AVAIL "320 420 520 640" | 97 | #define CM36651_PS_INT_TIME_AVAIL "0.000320 0.000420 0.000520 0.000640" |
| 98 | 98 | ||
| 99 | enum cm36651_operation_mode { | 99 | enum cm36651_operation_mode { |
| 100 | CM36651_LIGHT_EN, | 100 | CM36651_LIGHT_EN, |
| @@ -356,30 +356,30 @@ static int cm36651_read_channel(struct cm36651_data *cm36651, | |||
| 356 | } | 356 | } |
| 357 | 357 | ||
| 358 | static int cm36651_read_int_time(struct cm36651_data *cm36651, | 358 | static int cm36651_read_int_time(struct cm36651_data *cm36651, |
| 359 | struct iio_chan_spec const *chan, int *val) | 359 | struct iio_chan_spec const *chan, int *val2) |
| 360 | { | 360 | { |
| 361 | switch (chan->type) { | 361 | switch (chan->type) { |
| 362 | case IIO_LIGHT: | 362 | case IIO_LIGHT: |
| 363 | if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT1) | 363 | if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT1) |
| 364 | *val = 80000; | 364 | *val2 = 80000; |
| 365 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT2) | 365 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT2) |
| 366 | *val = 160000; | 366 | *val2 = 160000; |
| 367 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT3) | 367 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT3) |
| 368 | *val = 320000; | 368 | *val2 = 320000; |
| 369 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT4) | 369 | else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT4) |
| 370 | *val = 640000; | 370 | *val2 = 640000; |
| 371 | else | 371 | else |
| 372 | return -EINVAL; | 372 | return -EINVAL; |
| 373 | break; | 373 | break; |
| 374 | case IIO_PROXIMITY: | 374 | case IIO_PROXIMITY: |
| 375 | if (cm36651->ps_int_time == CM36651_PS_IT1) | 375 | if (cm36651->ps_int_time == CM36651_PS_IT1) |
| 376 | *val = 320; | 376 | *val2 = 320; |
| 377 | else if (cm36651->ps_int_time == CM36651_PS_IT2) | 377 | else if (cm36651->ps_int_time == CM36651_PS_IT2) |
| 378 | *val = 420; | 378 | *val2 = 420; |
| 379 | else if (cm36651->ps_int_time == CM36651_PS_IT3) | 379 | else if (cm36651->ps_int_time == CM36651_PS_IT3) |
| 380 | *val = 520; | 380 | *val2 = 520; |
| 381 | else if (cm36651->ps_int_time == CM36651_PS_IT4) | 381 | else if (cm36651->ps_int_time == CM36651_PS_IT4) |
| 382 | *val = 640; | 382 | *val2 = 640; |
| 383 | else | 383 | else |
| 384 | return -EINVAL; | 384 | return -EINVAL; |
| 385 | break; | 385 | break; |
| @@ -387,7 +387,7 @@ static int cm36651_read_int_time(struct cm36651_data *cm36651, | |||
| 387 | return -EINVAL; | 387 | return -EINVAL; |
| 388 | } | 388 | } |
| 389 | 389 | ||
| 390 | return IIO_VAL_INT; | 390 | return IIO_VAL_INT_PLUS_MICRO; |
| 391 | } | 391 | } |
| 392 | 392 | ||
| 393 | static int cm36651_write_int_time(struct cm36651_data *cm36651, | 393 | static int cm36651_write_int_time(struct cm36651_data *cm36651, |
| @@ -459,7 +459,8 @@ static int cm36651_read_raw(struct iio_dev *indio_dev, | |||
| 459 | ret = cm36651_read_channel(cm36651, chan, val); | 459 | ret = cm36651_read_channel(cm36651, chan, val); |
| 460 | break; | 460 | break; |
| 461 | case IIO_CHAN_INFO_INT_TIME: | 461 | case IIO_CHAN_INFO_INT_TIME: |
| 462 | ret = cm36651_read_int_time(cm36651, chan, val); | 462 | *val = 0; |
| 463 | ret = cm36651_read_int_time(cm36651, chan, val2); | ||
| 463 | break; | 464 | break; |
| 464 | default: | 465 | default: |
| 465 | ret = -EINVAL; | 466 | ret = -EINVAL; |
| @@ -479,7 +480,7 @@ static int cm36651_write_raw(struct iio_dev *indio_dev, | |||
| 479 | int ret = -EINVAL; | 480 | int ret = -EINVAL; |
| 480 | 481 | ||
| 481 | if (mask == IIO_CHAN_INFO_INT_TIME) { | 482 | if (mask == IIO_CHAN_INFO_INT_TIME) { |
| 482 | ret = cm36651_write_int_time(cm36651, chan, val); | 483 | ret = cm36651_write_int_time(cm36651, chan, val2); |
| 483 | if (ret < 0) | 484 | if (ret < 0) |
| 484 | dev_err(&client->dev, "Integration time write failed\n"); | 485 | dev_err(&client->dev, "Integration time write failed\n"); |
| 485 | } | 486 | } |
diff --git a/drivers/iio/light/tsl2563.c b/drivers/iio/light/tsl2563.c index 3d8110157f2d..94daa9fc1247 100644 --- a/drivers/iio/light/tsl2563.c +++ b/drivers/iio/light/tsl2563.c | |||
| @@ -460,10 +460,14 @@ static int tsl2563_write_raw(struct iio_dev *indio_dev, | |||
| 460 | { | 460 | { |
| 461 | struct tsl2563_chip *chip = iio_priv(indio_dev); | 461 | struct tsl2563_chip *chip = iio_priv(indio_dev); |
| 462 | 462 | ||
| 463 | if (chan->channel == IIO_MOD_LIGHT_BOTH) | 463 | if (mask != IIO_CHAN_INFO_CALIBSCALE) |
| 464 | return -EINVAL; | ||
| 465 | if (chan->channel2 == IIO_MOD_LIGHT_BOTH) | ||
| 464 | chip->calib0 = calib_from_sysfs(val); | 466 | chip->calib0 = calib_from_sysfs(val); |
| 465 | else | 467 | else if (chan->channel2 == IIO_MOD_LIGHT_IR) |
| 466 | chip->calib1 = calib_from_sysfs(val); | 468 | chip->calib1 = calib_from_sysfs(val); |
| 469 | else | ||
| 470 | return -EINVAL; | ||
| 467 | 471 | ||
| 468 | return 0; | 472 | return 0; |
| 469 | } | 473 | } |
| @@ -472,14 +476,14 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev, | |||
| 472 | struct iio_chan_spec const *chan, | 476 | struct iio_chan_spec const *chan, |
| 473 | int *val, | 477 | int *val, |
| 474 | int *val2, | 478 | int *val2, |
| 475 | long m) | 479 | long mask) |
| 476 | { | 480 | { |
| 477 | int ret = -EINVAL; | 481 | int ret = -EINVAL; |
| 478 | u32 calib0, calib1; | 482 | u32 calib0, calib1; |
| 479 | struct tsl2563_chip *chip = iio_priv(indio_dev); | 483 | struct tsl2563_chip *chip = iio_priv(indio_dev); |
| 480 | 484 | ||
| 481 | mutex_lock(&chip->lock); | 485 | mutex_lock(&chip->lock); |
| 482 | switch (m) { | 486 | switch (mask) { |
| 483 | case IIO_CHAN_INFO_RAW: | 487 | case IIO_CHAN_INFO_RAW: |
| 484 | case IIO_CHAN_INFO_PROCESSED: | 488 | case IIO_CHAN_INFO_PROCESSED: |
| 485 | switch (chan->type) { | 489 | switch (chan->type) { |
| @@ -498,7 +502,7 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev, | |||
| 498 | ret = tsl2563_get_adc(chip); | 502 | ret = tsl2563_get_adc(chip); |
| 499 | if (ret) | 503 | if (ret) |
| 500 | goto error_ret; | 504 | goto error_ret; |
| 501 | if (chan->channel == 0) | 505 | if (chan->channel2 == IIO_MOD_LIGHT_BOTH) |
| 502 | *val = chip->data0; | 506 | *val = chip->data0; |
| 503 | else | 507 | else |
| 504 | *val = chip->data1; | 508 | *val = chip->data1; |
| @@ -510,7 +514,7 @@ static int tsl2563_read_raw(struct iio_dev *indio_dev, | |||
| 510 | break; | 514 | break; |
| 511 | 515 | ||
| 512 | case IIO_CHAN_INFO_CALIBSCALE: | 516 | case IIO_CHAN_INFO_CALIBSCALE: |
| 513 | if (chan->channel == 0) | 517 | if (chan->channel2 == IIO_MOD_LIGHT_BOTH) |
| 514 | *val = calib_to_sysfs(chip->calib0); | 518 | *val = calib_to_sysfs(chip->calib0); |
| 515 | else | 519 | else |
| 516 | *val = calib_to_sysfs(chip->calib1); | 520 | *val = calib_to_sysfs(chip->calib1); |
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c index ff284e5afd95..05423543f89d 100644 --- a/drivers/iio/magnetometer/ak8975.c +++ b/drivers/iio/magnetometer/ak8975.c | |||
| @@ -85,6 +85,7 @@ | |||
| 85 | #define AK8975_MAX_CONVERSION_TIMEOUT 500 | 85 | #define AK8975_MAX_CONVERSION_TIMEOUT 500 |
| 86 | #define AK8975_CONVERSION_DONE_POLL_TIME 10 | 86 | #define AK8975_CONVERSION_DONE_POLL_TIME 10 |
| 87 | #define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000) | 87 | #define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000) |
| 88 | #define RAW_TO_GAUSS(asa) ((((asa) + 128) * 3000) / 256) | ||
| 88 | 89 | ||
| 89 | /* | 90 | /* |
| 90 | * Per-instance context data for the device. | 91 | * Per-instance context data for the device. |
| @@ -265,15 +266,15 @@ static int ak8975_setup(struct i2c_client *client) | |||
| 265 | * | 266 | * |
| 266 | * Since 1uT = 0.01 gauss, our final scale factor becomes: | 267 | * Since 1uT = 0.01 gauss, our final scale factor becomes: |
| 267 | * | 268 | * |
| 268 | * Hadj = H * ((ASA + 128) / 256) * 3/10 * 100 | 269 | * Hadj = H * ((ASA + 128) / 256) * 3/10 * 1/100 |
| 269 | * Hadj = H * ((ASA + 128) * 30 / 256 | 270 | * Hadj = H * ((ASA + 128) * 0.003) / 256 |
| 270 | * | 271 | * |
| 271 | * Since ASA doesn't change, we cache the resultant scale factor into the | 272 | * Since ASA doesn't change, we cache the resultant scale factor into the |
| 272 | * device context in ak8975_setup(). | 273 | * device context in ak8975_setup(). |
| 273 | */ | 274 | */ |
| 274 | data->raw_to_gauss[0] = ((data->asa[0] + 128) * 30) >> 8; | 275 | data->raw_to_gauss[0] = RAW_TO_GAUSS(data->asa[0]); |
| 275 | data->raw_to_gauss[1] = ((data->asa[1] + 128) * 30) >> 8; | 276 | data->raw_to_gauss[1] = RAW_TO_GAUSS(data->asa[1]); |
| 276 | data->raw_to_gauss[2] = ((data->asa[2] + 128) * 30) >> 8; | 277 | data->raw_to_gauss[2] = RAW_TO_GAUSS(data->asa[2]); |
| 277 | 278 | ||
| 278 | return 0; | 279 | return 0; |
| 279 | } | 280 | } |
| @@ -428,8 +429,9 @@ static int ak8975_read_raw(struct iio_dev *indio_dev, | |||
| 428 | case IIO_CHAN_INFO_RAW: | 429 | case IIO_CHAN_INFO_RAW: |
| 429 | return ak8975_read_axis(indio_dev, chan->address, val); | 430 | return ak8975_read_axis(indio_dev, chan->address, val); |
| 430 | case IIO_CHAN_INFO_SCALE: | 431 | case IIO_CHAN_INFO_SCALE: |
| 431 | *val = data->raw_to_gauss[chan->address]; | 432 | *val = 0; |
| 432 | return IIO_VAL_INT; | 433 | *val2 = data->raw_to_gauss[chan->address]; |
| 434 | return IIO_VAL_INT_PLUS_MICRO; | ||
| 433 | } | 435 | } |
| 434 | return -EINVAL; | 436 | return -EINVAL; |
| 435 | } | 437 | } |
diff --git a/drivers/iio/magnetometer/mag3110.c b/drivers/iio/magnetometer/mag3110.c index 4b65b6d3bdb1..f66955fb3509 100644 --- a/drivers/iio/magnetometer/mag3110.c +++ b/drivers/iio/magnetometer/mag3110.c | |||
| @@ -106,7 +106,7 @@ static ssize_t mag3110_show_int_plus_micros(char *buf, | |||
| 106 | 106 | ||
| 107 | while (n-- > 0) | 107 | while (n-- > 0) |
| 108 | len += scnprintf(buf + len, PAGE_SIZE - len, | 108 | len += scnprintf(buf + len, PAGE_SIZE - len, |
| 109 | "%d.%d ", vals[n][0], vals[n][1]); | 109 | "%d.%06d ", vals[n][0], vals[n][1]); |
| 110 | 110 | ||
| 111 | /* replace trailing space by newline */ | 111 | /* replace trailing space by newline */ |
| 112 | buf[len - 1] = '\n'; | 112 | buf[len - 1] = '\n'; |
| @@ -154,6 +154,9 @@ static int mag3110_read_raw(struct iio_dev *indio_dev, | |||
| 154 | 154 | ||
| 155 | switch (mask) { | 155 | switch (mask) { |
| 156 | case IIO_CHAN_INFO_RAW: | 156 | case IIO_CHAN_INFO_RAW: |
| 157 | if (iio_buffer_enabled(indio_dev)) | ||
| 158 | return -EBUSY; | ||
| 159 | |||
| 157 | switch (chan->type) { | 160 | switch (chan->type) { |
| 158 | case IIO_MAGN: /* in 0.1 uT / LSB */ | 161 | case IIO_MAGN: /* in 0.1 uT / LSB */ |
| 159 | ret = mag3110_read(data, buffer); | 162 | ret = mag3110_read(data, buffer); |
| @@ -199,6 +202,9 @@ static int mag3110_write_raw(struct iio_dev *indio_dev, | |||
| 199 | struct mag3110_data *data = iio_priv(indio_dev); | 202 | struct mag3110_data *data = iio_priv(indio_dev); |
| 200 | int rate; | 203 | int rate; |
| 201 | 204 | ||
| 205 | if (iio_buffer_enabled(indio_dev)) | ||
| 206 | return -EBUSY; | ||
| 207 | |||
| 202 | switch (mask) { | 208 | switch (mask) { |
| 203 | case IIO_CHAN_INFO_SAMP_FREQ: | 209 | case IIO_CHAN_INFO_SAMP_FREQ: |
| 204 | rate = mag3110_get_samp_freq_index(data, val, val2); | 210 | rate = mag3110_get_samp_freq_index(data, val, val2); |
