Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Jonathan writes:

Second round of new IIO drivers, features and cleanups for the 3.18 cycle.

New drivers and part support
* Bosch bmg160 Gyroscope driver
* Dyna-Image al3320a ambient light sensor driver
* Bosh bmi055 gyroscope part driver (accelerometer part supported by bmc150)
* isl29018 - add support for isl29023 and isl29035
* kxcjk-1013 - add support for kxcj9-1008 and kxtj2-1009
* bmc150 - additional part support (BMI055 accelerometer part, BMA255,
BMA222E, BMA250E and BMA280). Different resolutions but otherwise similar
parts.
* bma180 - add BMA250 (note different from the BMA250E support above despite
the naming). A lot of driver reworking lead up to this - described below.

New features
* kxcjk1013 - add threshold event support.
* rockchip - document DT bindings.
* isl29018 - ACPI support
* bma180 - enable use without IRQ

Cleanups
* Tree wide - drop owner field assignment if using the module_platform_driver
helper as that assigns it anyway.
* kxcjk1013 - drop a redundant assignment of the current range and fix a
a defined but not used warning.
* inv_mpu6050 - Remove an unnecessary cast form a void pointer.
* rockchip - drop and unused variable.
* at91_adc - make a local function static.
* st-sensors-core - correctly handle an error in setting in
st_sensors_set_drdy_int_pin
* isl29018 - typo fix
* bmc150 - fix incorrect scale value for 16G range (Driver new this cycle)
* bmc150 - fix issues when CONFIG_PM_RUNTIME not set (Driver new this cycle)
* ad7606 - line length tidy up.
* bmg160 - set power state only if PM_RUNTIME is defined.
* ak8975 - fix some unnecessary casting between char * and const char *
* bma180 - prefix remaining bits and bobs with bma180_ and ensure consistent.
- use a bool instead of an int for state (as its either on or off).
- expose the temperature channel
- statically allocate buffers to avoid need for update_scan_mode
callback.
- refactor to allow futher chip variants including support for part
specific config and disable code + different resolutions.

+2768 -343
+7
Documentation/ABI/testing/sysfs-bus-iio-gyro-bmg160
··· 1 + What: /sys/bus/iio/devices/triggerX/name = "bmg160-any-motion-devX" 2 + KernelVersion: 3.17 3 + Contact: linux-iio@vger.kernel.org 4 + Description: 5 + The BMG160 gyro kernel module provides an additional trigger, 6 + which sets driver in a mode, where data is pushed to the buffer 7 + only when there is any motion.
+24
Documentation/devicetree/bindings/iio/adc/rockchip-saradc.txt
··· 1 + Rockchip Successive Approximation Register (SAR) A/D Converter bindings 2 + 3 + Required properties: 4 + - compatible: Should be "rockchip,saradc" 5 + - reg: physical base address of the controller and length of memory mapped 6 + region. 7 + - interrupts: The interrupt number to the cpu. The interrupt specifier format 8 + depends on the interrupt controller. 9 + - clocks: Must contain an entry for each entry in clock-names. 10 + - clock-names: Shall be "saradc" for the converter-clock, and "apb_pclk" for 11 + the peripheral clock. 12 + - vref-supply: The regulator supply ADC reference voltage. 13 + - #io-channel-cells: Should be 1, see ../iio-bindings.txt 14 + 15 + Example: 16 + saradc: saradc@2006c000 { 17 + compatible = "rockchip,saradc"; 18 + reg = <0x2006c000 0x100>; 19 + interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; 20 + clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>; 21 + clock-names = "saradc", "apb_pclk"; 22 + #io-channel-cells = <1>; 23 + vref-supply = <&vcc18>; 24 + };
+8 -5
drivers/iio/accel/Kconfig
··· 6 6 menu "Accelerometers" 7 7 8 8 config BMA180 9 - tristate "Bosch BMA180 3-Axis Accelerometer Driver" 9 + tristate "Bosch BMA180/BMA250 3-Axis Accelerometer Driver" 10 10 depends on I2C 11 11 select IIO_BUFFER 12 12 select IIO_TRIGGERED_BUFFER 13 13 help 14 - Say Y here if you want to build a driver for the Bosch BMA180 15 - triaxial acceleration sensor. 14 + Say Y here if you want to build a driver for the Bosch BMA180 or 15 + BMA250 triaxial acceleration sensor. 16 16 17 17 To compile this driver as a module, choose M here: the 18 18 module will be called bma180. ··· 23 23 select IIO_BUFFER 24 24 select IIO_TRIGGERED_BUFFER 25 25 help 26 - Say yes here to build support for the Bosch BMC150 accelerometer. 26 + Say yes here to build support for the following Bosch accelerometers: 27 + BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. 28 + 27 29 Currently this only supports the device via an i2c interface. 28 30 29 31 This is a combo module with both accelerometer and magnetometer. ··· 99 97 select IIO_TRIGGERED_BUFFER 100 98 help 101 99 Say Y here if you want to build a driver for the Kionix KXCJK-1013 102 - triaxial acceleration sensor. 100 + triaxial acceleration sensor. This driver also supports KXCJ9-1008 101 + and KXTJ2-1009. 103 102 104 103 To compile this driver as a module, choose M here: the module will 105 104 be called kxcjk-1013.
+333 -151
drivers/iio/accel/bma180.c
··· 3 3 * 4 4 * Copyright 2013 Oleksandr Kravchenko <x0199363@ti.com> 5 5 * 6 + * Support for BMA250 (c) Peter Meerwald <pmeerw@pmeerw.net> 7 + * 6 8 * This file is subject to the terms and conditions of version 2 of 7 9 * the GNU General Public License. See the file COPYING in the main 8 10 * directory of this archive for more details. 11 + * 12 + * SPI is not supported by driver 13 + * BMA180: 7-bit I2C slave address 0x40 or 0x41 14 + * BMA250: 7-bit I2C slave address 0x18 or 0x19 9 15 */ 10 16 11 17 #include <linux/module.h> ··· 32 26 #define BMA180_DRV_NAME "bma180" 33 27 #define BMA180_IRQ_NAME "bma180_event" 34 28 29 + enum { 30 + BMA180, 31 + BMA250, 32 + }; 33 + 34 + struct bma180_data; 35 + 36 + struct bma180_part_info { 37 + const struct iio_chan_spec *channels; 38 + unsigned num_channels; 39 + const int *scale_table; 40 + unsigned num_scales; 41 + const int *bw_table; 42 + unsigned num_bw; 43 + 44 + u8 int_reset_reg, int_reset_mask; 45 + u8 sleep_reg, sleep_mask; 46 + u8 bw_reg, bw_mask; 47 + u8 scale_reg, scale_mask; 48 + u8 power_reg, power_mask, lowpower_val; 49 + u8 int_enable_reg, int_enable_mask; 50 + u8 softreset_reg; 51 + 52 + int (*chip_config)(struct bma180_data *data); 53 + void (*chip_disable)(struct bma180_data *data); 54 + }; 55 + 35 56 /* Register set */ 36 57 #define BMA180_CHIP_ID 0x00 /* Need to distinguish BMA180 from other */ 37 58 #define BMA180_ACC_X_LSB 0x02 /* First of 6 registers of accel data */ 59 + #define BMA180_TEMP 0x08 38 60 #define BMA180_CTRL_REG0 0x0d 39 61 #define BMA180_RESET 0x10 40 62 #define BMA180_BW_TCS 0x20 ··· 83 49 #define BMA180_SMP_SKIP BIT(0) 84 50 85 51 /* Bit masks for registers bit fields */ 86 - #define BMA180_RANGE 0x0e /* Range of measured accel values*/ 52 + #define BMA180_RANGE 0x0e /* Range of measured accel values */ 87 53 #define BMA180_BW 0xf0 /* Accel bandwidth */ 88 54 #define BMA180_MODE_CONFIG 0x03 /* Config operation modes */ 89 55 90 56 /* We have to write this value in reset register to do soft reset */ 91 57 #define BMA180_RESET_VAL 0xb6 92 58 93 - #define BMA_180_ID_REG_VAL 0x03 59 + #define BMA180_ID_REG_VAL 0x03 94 60 95 61 /* Chip power modes */ 96 - #define BMA180_LOW_NOISE 0x00 97 62 #define BMA180_LOW_POWER 0x03 98 63 99 - #define BMA180_LOW_NOISE_STR "low_noise" 100 - #define BMA180_LOW_POWER_STR "low_power" 64 + #define BMA250_RANGE_REG 0x0f 65 + #define BMA250_BW_REG 0x10 66 + #define BMA250_POWER_REG 0x11 67 + #define BMA250_RESET_REG 0x14 68 + #define BMA250_INT_ENABLE_REG 0x17 69 + #define BMA250_INT_MAP_REG 0x1a 70 + #define BMA250_INT_RESET_REG 0x21 101 71 102 - /* Defaults values */ 103 - #define BMA180_DEF_PMODE 0 104 - #define BMA180_DEF_BW 20 105 - #define BMA180_DEF_SCALE 2452 106 - 107 - /* Available values for sysfs */ 108 - #define BMA180_FLP_FREQ_AVAILABLE \ 109 - "10 20 40 75 150 300" 110 - #define BMA180_SCALE_AVAILABLE \ 111 - "0.001275 0.001863 0.002452 0.003727 0.004903 0.009709 0.019417" 72 + #define BMA250_RANGE_MASK GENMASK(3, 0) /* Range of accel values */ 73 + #define BMA250_BW_MASK GENMASK(4, 0) /* Accel bandwidth */ 74 + #define BMA250_SUSPEND_MASK BIT(7) /* chip will sleep */ 75 + #define BMA250_LOWPOWER_MASK BIT(6) 76 + #define BMA250_DATA_INTEN_MASK BIT(4) 77 + #define BMA250_INT1_DATA_MASK BIT(0) 78 + #define BMA250_INT_RESET_MASK BIT(7) /* Reset pending interrupts */ 112 79 113 80 struct bma180_data { 114 81 struct i2c_client *client; 115 82 struct iio_trigger *trig; 83 + const struct bma180_part_info *part_info; 116 84 struct mutex mutex; 117 - int sleep_state; 85 + bool sleep_state; 118 86 int scale; 119 87 int bw; 120 - int pmode; 121 - char *buff; 88 + bool pmode; 89 + u8 buff[16]; /* 3x 16-bit + 8-bit + padding + timestamp */ 122 90 }; 123 91 124 - enum bma180_axis { 92 + enum bma180_chan { 125 93 AXIS_X, 126 94 AXIS_Y, 127 95 AXIS_Z, 96 + TEMP 128 97 }; 129 98 130 - static int bw_table[] = { 10, 20, 40, 75, 150, 300 }; /* Hz */ 131 - static int scale_table[] = { 1275, 1863, 2452, 3727, 4903, 9709, 19417 }; 99 + static int bma180_bw_table[] = { 10, 20, 40, 75, 150, 300 }; /* Hz */ 100 + static int bma180_scale_table[] = { 1275, 1863, 2452, 3727, 4903, 9709, 19417 }; 132 101 133 - static int bma180_get_acc_reg(struct bma180_data *data, enum bma180_axis axis) 102 + static int bma250_bw_table[] = { 8, 16, 31, 63, 125, 250 }; /* Hz */ 103 + static int bma250_scale_table[] = { 0, 0, 0, 38344, 0, 76590, 0, 0, 153180, 0, 104 + 0, 0, 306458 }; 105 + 106 + static int bma180_get_data_reg(struct bma180_data *data, enum bma180_chan chan) 134 107 { 135 - u8 reg = BMA180_ACC_X_LSB + axis * 2; 136 108 int ret; 137 109 138 110 if (data->sleep_state) 139 111 return -EBUSY; 140 112 141 - ret = i2c_smbus_read_word_data(data->client, reg); 142 - if (ret < 0) 143 - dev_err(&data->client->dev, 144 - "failed to read accel_%c registers\n", 'x' + axis); 113 + switch (chan) { 114 + case TEMP: 115 + ret = i2c_smbus_read_byte_data(data->client, BMA180_TEMP); 116 + if (ret < 0) 117 + dev_err(&data->client->dev, "failed to read temp register\n"); 118 + break; 119 + default: 120 + ret = i2c_smbus_read_word_data(data->client, 121 + BMA180_ACC_X_LSB + chan * 2); 122 + if (ret < 0) 123 + dev_err(&data->client->dev, 124 + "failed to read accel_%c register\n", 125 + 'x' + chan); 126 + } 145 127 146 128 return ret; 147 129 } ··· 175 125 176 126 static int bma180_reset_intr(struct bma180_data *data) 177 127 { 178 - int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_RESET_INT, 1); 128 + int ret = bma180_set_bits(data, data->part_info->int_reset_reg, 129 + data->part_info->int_reset_mask, 1); 179 130 180 131 if (ret) 181 132 dev_err(&data->client->dev, "failed to reset interrupt\n"); ··· 184 133 return ret; 185 134 } 186 135 187 - static int bma180_set_new_data_intr_state(struct bma180_data *data, int state) 136 + static int bma180_set_new_data_intr_state(struct bma180_data *data, bool state) 188 137 { 189 - u8 reg_val = state ? BMA180_NEW_DATA_INT : 0x00; 190 - int ret = i2c_smbus_write_byte_data(data->client, BMA180_CTRL_REG3, 191 - reg_val); 192 - 138 + int ret = bma180_set_bits(data, data->part_info->int_enable_reg, 139 + data->part_info->int_enable_mask, state); 193 140 if (ret) 194 141 goto err; 195 142 ret = bma180_reset_intr(data); ··· 202 153 return ret; 203 154 } 204 155 205 - static int bma180_set_sleep_state(struct bma180_data *data, int state) 156 + static int bma180_set_sleep_state(struct bma180_data *data, bool state) 206 157 { 207 - int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_SLEEP, state); 158 + int ret = bma180_set_bits(data, data->part_info->sleep_reg, 159 + data->part_info->sleep_mask, state); 208 160 209 161 if (ret) { 210 162 dev_err(&data->client->dev, ··· 217 167 return 0; 218 168 } 219 169 220 - static int bma180_set_ee_writing_state(struct bma180_data *data, int state) 170 + static int bma180_set_ee_writing_state(struct bma180_data *data, bool state) 221 171 { 222 172 int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_EE_W, state); 223 173 ··· 235 185 if (data->sleep_state) 236 186 return -EBUSY; 237 187 238 - for (i = 0; i < ARRAY_SIZE(bw_table); ++i) { 239 - if (bw_table[i] == val) { 240 - ret = bma180_set_bits(data, 241 - BMA180_BW_TCS, BMA180_BW, i); 188 + for (i = 0; i < data->part_info->num_bw; ++i) { 189 + if (data->part_info->bw_table[i] == val) { 190 + ret = bma180_set_bits(data, data->part_info->bw_reg, 191 + data->part_info->bw_mask, i); 242 192 if (ret) { 243 193 dev_err(&data->client->dev, 244 194 "failed to set bandwidth\n"); ··· 259 209 if (data->sleep_state) 260 210 return -EBUSY; 261 211 262 - for (i = 0; i < ARRAY_SIZE(scale_table); ++i) 263 - if (scale_table[i] == val) { 264 - ret = bma180_set_bits(data, 265 - BMA180_OFFSET_LSB1, BMA180_RANGE, i); 212 + for (i = 0; i < data->part_info->num_scales; ++i) 213 + if (data->part_info->scale_table[i] == val) { 214 + ret = bma180_set_bits(data, data->part_info->scale_reg, 215 + data->part_info->scale_mask, i); 266 216 if (ret) { 267 217 dev_err(&data->client->dev, 268 218 "failed to set scale\n"); ··· 275 225 return -EINVAL; 276 226 } 277 227 278 - static int bma180_set_pmode(struct bma180_data *data, int mode) 228 + static int bma180_set_pmode(struct bma180_data *data, bool mode) 279 229 { 280 - u8 reg_val = mode ? BMA180_LOW_POWER : BMA180_LOW_NOISE; 281 - int ret = bma180_set_bits(data, BMA180_TCO_Z, BMA180_MODE_CONFIG, 282 - reg_val); 230 + u8 reg_val = mode ? data->part_info->lowpower_val : 0; 231 + int ret = bma180_set_bits(data, data->part_info->power_reg, 232 + data->part_info->power_mask, reg_val); 283 233 284 234 if (ret) { 285 235 dev_err(&data->client->dev, "failed to set power mode\n"); ··· 293 243 static int bma180_soft_reset(struct bma180_data *data) 294 244 { 295 245 int ret = i2c_smbus_write_byte_data(data->client, 296 - BMA180_RESET, BMA180_RESET_VAL); 246 + data->part_info->softreset_reg, BMA180_RESET_VAL); 297 247 298 248 if (ret) 299 249 dev_err(&data->client->dev, "failed to reset the chip\n"); ··· 307 257 int ret = i2c_smbus_read_byte_data(data->client, BMA180_CHIP_ID); 308 258 309 259 if (ret < 0) 310 - goto err; 311 - if (ret != BMA_180_ID_REG_VAL) { 312 - ret = -ENODEV; 313 - goto err; 314 - } 260 + return ret; 261 + if (ret != BMA180_ID_REG_VAL) 262 + return -ENODEV; 315 263 316 264 ret = bma180_soft_reset(data); 317 265 if (ret) 318 - goto err; 266 + return ret; 319 267 /* 320 268 * No serial transaction should occur within minimum 10 us 321 269 * after soft_reset command 322 270 */ 323 271 msleep(20); 324 272 273 + ret = bma180_set_new_data_intr_state(data, false); 274 + if (ret) 275 + return ret; 276 + 277 + return bma180_set_pmode(data, false); 278 + } 279 + 280 + static int bma180_chip_config(struct bma180_data *data) 281 + { 282 + int ret = bma180_chip_init(data); 283 + 284 + if (ret) 285 + goto err; 325 286 ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_DIS_WAKE_UP, 1); 326 287 if (ret) 327 288 goto err; 328 - ret = bma180_set_ee_writing_state(data, 1); 329 - if (ret) 330 - goto err; 331 - ret = bma180_set_new_data_intr_state(data, 0); 289 + ret = bma180_set_ee_writing_state(data, true); 332 290 if (ret) 333 291 goto err; 334 292 ret = bma180_set_bits(data, BMA180_OFFSET_LSB1, BMA180_SMP_SKIP, 1); 335 293 if (ret) 336 294 goto err; 337 - ret = bma180_set_pmode(data, BMA180_DEF_PMODE); 295 + ret = bma180_set_bw(data, 20); /* 20 Hz */ 338 296 if (ret) 339 297 goto err; 340 - ret = bma180_set_bw(data, BMA180_DEF_BW); 341 - if (ret) 342 - goto err; 343 - ret = bma180_set_scale(data, BMA180_DEF_SCALE); 298 + ret = bma180_set_scale(data, 2452); /* 2 G */ 344 299 if (ret) 345 300 goto err; 346 301 347 302 return 0; 348 303 349 304 err: 350 - dev_err(&data->client->dev, "failed to init the chip\n"); 305 + dev_err(&data->client->dev, "failed to config the chip\n"); 306 + return ret; 307 + } 308 + 309 + static int bma250_chip_config(struct bma180_data *data) 310 + { 311 + int ret = bma180_chip_init(data); 312 + 313 + if (ret) 314 + goto err; 315 + ret = bma180_set_bw(data, 16); /* 16 Hz */ 316 + if (ret) 317 + goto err; 318 + ret = bma180_set_scale(data, 38344); /* 2 G */ 319 + if (ret) 320 + goto err; 321 + ret = bma180_set_bits(data, BMA250_INT_MAP_REG, 322 + BMA250_INT1_DATA_MASK, 1); 323 + if (ret) 324 + goto err; 325 + 326 + return 0; 327 + 328 + err: 329 + dev_err(&data->client->dev, "failed to config the chip\n"); 351 330 return ret; 352 331 } 353 332 354 333 static void bma180_chip_disable(struct bma180_data *data) 355 334 { 356 - if (bma180_set_new_data_intr_state(data, 0)) 335 + if (bma180_set_new_data_intr_state(data, false)) 357 336 goto err; 358 - if (bma180_set_ee_writing_state(data, 0)) 337 + if (bma180_set_ee_writing_state(data, false)) 359 338 goto err; 360 - if (bma180_set_sleep_state(data, 1)) 339 + if (bma180_set_sleep_state(data, true)) 361 340 goto err; 362 341 363 342 return; ··· 395 316 dev_err(&data->client->dev, "failed to disable the chip\n"); 396 317 } 397 318 398 - static IIO_CONST_ATTR(in_accel_filter_low_pass_3db_frequency_available, 399 - BMA180_FLP_FREQ_AVAILABLE); 400 - static IIO_CONST_ATTR(in_accel_scale_available, BMA180_SCALE_AVAILABLE); 319 + static void bma250_chip_disable(struct bma180_data *data) 320 + { 321 + if (bma180_set_new_data_intr_state(data, false)) 322 + goto err; 323 + if (bma180_set_sleep_state(data, true)) 324 + goto err; 325 + 326 + return; 327 + 328 + err: 329 + dev_err(&data->client->dev, "failed to disable the chip\n"); 330 + } 331 + 332 + static ssize_t bma180_show_avail(char *buf, const int *vals, unsigned n, 333 + bool micros) 334 + { 335 + size_t len = 0; 336 + int i; 337 + 338 + for (i = 0; i < n; i++) { 339 + if (!vals[i]) 340 + continue; 341 + len += scnprintf(buf + len, PAGE_SIZE - len, 342 + micros ? "0.%06d " : "%d ", vals[i]); 343 + } 344 + buf[len - 1] = '\n'; 345 + 346 + return len; 347 + } 348 + 349 + static ssize_t bma180_show_filter_freq_avail(struct device *dev, 350 + struct device_attribute *attr, char *buf) 351 + { 352 + struct bma180_data *data = iio_priv(dev_to_iio_dev(dev)); 353 + 354 + return bma180_show_avail(buf, data->part_info->bw_table, 355 + data->part_info->num_bw, false); 356 + } 357 + 358 + static ssize_t bma180_show_scale_avail(struct device *dev, 359 + struct device_attribute *attr, char *buf) 360 + { 361 + struct bma180_data *data = iio_priv(dev_to_iio_dev(dev)); 362 + 363 + return bma180_show_avail(buf, data->part_info->scale_table, 364 + data->part_info->num_scales, true); 365 + } 366 + 367 + static IIO_DEVICE_ATTR(in_accel_filter_low_pass_3db_frequency_available, 368 + S_IRUGO, bma180_show_filter_freq_avail, NULL, 0); 369 + 370 + static IIO_DEVICE_ATTR(in_accel_scale_available, 371 + S_IRUGO, bma180_show_scale_avail, NULL, 0); 401 372 402 373 static struct attribute *bma180_attributes[] = { 403 - &iio_const_attr_in_accel_filter_low_pass_3db_frequency_available.dev_attr.attr, 404 - &iio_const_attr_in_accel_scale_available.dev_attr.attr, 374 + &iio_dev_attr_in_accel_filter_low_pass_3db_frequency_available. 375 + dev_attr.attr, 376 + &iio_dev_attr_in_accel_scale_available.dev_attr.attr, 405 377 NULL, 406 378 }; 407 379 ··· 470 340 switch (mask) { 471 341 case IIO_CHAN_INFO_RAW: 472 342 mutex_lock(&data->mutex); 473 - if (iio_buffer_enabled(indio_dev)) 474 - ret = -EBUSY; 475 - else 476 - ret = bma180_get_acc_reg(data, chan->scan_index); 343 + if (iio_buffer_enabled(indio_dev)) { 344 + mutex_unlock(&data->mutex); 345 + return -EBUSY; 346 + } 347 + ret = bma180_get_data_reg(data, chan->scan_index); 477 348 mutex_unlock(&data->mutex); 478 349 if (ret < 0) 479 350 return ret; 480 - *val = (s16)ret >> chan->scan_type.shift; 351 + *val = sign_extend32(ret >> chan->scan_type.shift, 352 + chan->scan_type.realbits - 1); 481 353 return IIO_VAL_INT; 482 354 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: 483 355 *val = data->bw; 484 356 return IIO_VAL_INT; 485 357 case IIO_CHAN_INFO_SCALE: 486 - *val = 0; 487 - *val2 = data->scale; 488 - return IIO_VAL_INT_PLUS_MICRO; 358 + switch (chan->type) { 359 + case IIO_ACCEL: 360 + *val = 0; 361 + *val2 = data->scale; 362 + return IIO_VAL_INT_PLUS_MICRO; 363 + case IIO_TEMP: 364 + *val = 500; 365 + return IIO_VAL_INT; 366 + default: 367 + return -EINVAL; 368 + } 369 + case IIO_CHAN_INFO_OFFSET: 370 + *val = 48; /* 0 LSB @ 24 degree C */ 371 + return IIO_VAL_INT; 489 372 default: 490 373 return -EINVAL; 491 374 } ··· 530 387 } 531 388 } 532 389 533 - static int bma180_update_scan_mode(struct iio_dev *indio_dev, 534 - const unsigned long *scan_mask) 535 - { 536 - struct bma180_data *data = iio_priv(indio_dev); 537 - 538 - if (data->buff) 539 - devm_kfree(&indio_dev->dev, data->buff); 540 - data->buff = devm_kzalloc(&indio_dev->dev, 541 - indio_dev->scan_bytes, GFP_KERNEL); 542 - if (!data->buff) 543 - return -ENOMEM; 544 - 545 - return 0; 546 - } 547 - 548 390 static const struct iio_info bma180_info = { 549 391 .attrs = &bma180_attrs_group, 550 392 .read_raw = bma180_read_raw, 551 393 .write_raw = bma180_write_raw, 552 - .update_scan_mode = bma180_update_scan_mode, 553 394 .driver_module = THIS_MODULE, 554 395 }; 555 396 556 - static const char * const bma180_power_modes[] = { 557 - BMA180_LOW_NOISE_STR, 558 - BMA180_LOW_POWER_STR, 559 - }; 397 + static const char * const bma180_power_modes[] = { "low_noise", "low_power" }; 560 398 561 399 static int bma180_get_power_mode(struct iio_dev *indio_dev, 562 400 const struct iio_chan_spec *chan) ··· 573 449 { }, 574 450 }; 575 451 576 - #define BMA180_CHANNEL(_axis) { \ 452 + #define BMA180_ACC_CHANNEL(_axis, _bits) { \ 577 453 .type = IIO_ACCEL, \ 578 454 .modified = 1, \ 579 455 .channel2 = IIO_MOD_##_axis, \ ··· 583 459 .scan_index = AXIS_##_axis, \ 584 460 .scan_type = { \ 585 461 .sign = 's', \ 586 - .realbits = 14, \ 462 + .realbits = _bits, \ 587 463 .storagebits = 16, \ 588 - .shift = 2, \ 464 + .shift = 16 - _bits, \ 589 465 }, \ 590 466 .ext_info = bma180_ext_info, \ 591 467 } 592 468 469 + #define BMA180_TEMP_CHANNEL { \ 470 + .type = IIO_TEMP, \ 471 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 472 + BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \ 473 + .scan_index = TEMP, \ 474 + .scan_type = { \ 475 + .sign = 's', \ 476 + .realbits = 8, \ 477 + .storagebits = 16, \ 478 + }, \ 479 + } 480 + 593 481 static const struct iio_chan_spec bma180_channels[] = { 594 - BMA180_CHANNEL(X), 595 - BMA180_CHANNEL(Y), 596 - BMA180_CHANNEL(Z), 597 - IIO_CHAN_SOFT_TIMESTAMP(3), 482 + BMA180_ACC_CHANNEL(X, 14), 483 + BMA180_ACC_CHANNEL(Y, 14), 484 + BMA180_ACC_CHANNEL(Z, 14), 485 + BMA180_TEMP_CHANNEL, 486 + IIO_CHAN_SOFT_TIMESTAMP(4), 487 + }; 488 + 489 + static const struct iio_chan_spec bma250_channels[] = { 490 + BMA180_ACC_CHANNEL(X, 10), 491 + BMA180_ACC_CHANNEL(Y, 10), 492 + BMA180_ACC_CHANNEL(Z, 10), 493 + BMA180_TEMP_CHANNEL, 494 + IIO_CHAN_SOFT_TIMESTAMP(4), 495 + }; 496 + 497 + static const struct bma180_part_info bma180_part_info[] = { 498 + [BMA180] = { 499 + bma180_channels, ARRAY_SIZE(bma180_channels), 500 + bma180_scale_table, ARRAY_SIZE(bma180_scale_table), 501 + bma180_bw_table, ARRAY_SIZE(bma180_bw_table), 502 + BMA180_CTRL_REG0, BMA180_RESET_INT, 503 + BMA180_CTRL_REG0, BMA180_SLEEP, 504 + BMA180_BW_TCS, BMA180_BW, 505 + BMA180_OFFSET_LSB1, BMA180_RANGE, 506 + BMA180_TCO_Z, BMA180_MODE_CONFIG, BMA180_LOW_POWER, 507 + BMA180_CTRL_REG3, BMA180_NEW_DATA_INT, 508 + BMA180_RESET, 509 + bma180_chip_config, 510 + bma180_chip_disable, 511 + }, 512 + [BMA250] = { 513 + bma250_channels, ARRAY_SIZE(bma250_channels), 514 + bma250_scale_table, ARRAY_SIZE(bma250_scale_table), 515 + bma250_bw_table, ARRAY_SIZE(bma250_bw_table), 516 + BMA250_INT_RESET_REG, BMA250_INT_RESET_MASK, 517 + BMA250_POWER_REG, BMA250_SUSPEND_MASK, 518 + BMA250_BW_REG, BMA250_BW_MASK, 519 + BMA250_RANGE_REG, BMA250_RANGE_MASK, 520 + BMA250_POWER_REG, BMA250_LOWPOWER_MASK, 1, 521 + BMA250_INT_ENABLE_REG, BMA250_DATA_INTEN_MASK, 522 + BMA250_RESET_REG, 523 + bma250_chip_config, 524 + bma250_chip_disable, 525 + }, 598 526 }; 599 527 600 528 static irqreturn_t bma180_trigger_handler(int irq, void *p) ··· 661 485 662 486 for_each_set_bit(bit, indio_dev->buffer->scan_mask, 663 487 indio_dev->masklength) { 664 - ret = bma180_get_acc_reg(data, bit); 488 + ret = bma180_get_data_reg(data, bit); 665 489 if (ret < 0) { 666 490 mutex_unlock(&data->mutex); 667 491 goto err; 668 492 } 669 493 ((s16 *)data->buff)[i++] = ret; 670 494 } 495 + 671 496 mutex_unlock(&data->mutex); 672 497 673 498 iio_push_to_buffers_with_timestamp(indio_dev, data->buff, time_ns); ··· 706 529 { 707 530 struct bma180_data *data; 708 531 struct iio_dev *indio_dev; 709 - struct iio_trigger *trig; 710 532 int ret; 711 533 712 534 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); ··· 715 539 data = iio_priv(indio_dev); 716 540 i2c_set_clientdata(client, indio_dev); 717 541 data->client = client; 542 + data->part_info = &bma180_part_info[id->driver_data]; 718 543 719 - ret = bma180_chip_init(data); 544 + ret = data->part_info->chip_config(data); 720 545 if (ret < 0) 721 546 goto err_chip_disable; 722 547 723 548 mutex_init(&data->mutex); 724 - 725 549 indio_dev->dev.parent = &client->dev; 726 - indio_dev->channels = bma180_channels; 727 - indio_dev->num_channels = ARRAY_SIZE(bma180_channels); 728 - indio_dev->name = BMA180_DRV_NAME; 550 + indio_dev->channels = data->part_info->channels; 551 + indio_dev->num_channels = data->part_info->num_channels; 552 + indio_dev->name = id->name; 729 553 indio_dev->modes = INDIO_DIRECT_MODE; 730 554 indio_dev->info = &bma180_info; 731 555 732 - trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, indio_dev->id); 733 - if (!trig) { 734 - ret = -ENOMEM; 735 - goto err_chip_disable; 556 + if (client->irq > 0) { 557 + data->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, 558 + indio_dev->id); 559 + if (!data->trig) { 560 + ret = -ENOMEM; 561 + goto err_chip_disable; 562 + } 563 + 564 + ret = devm_request_irq(&client->dev, client->irq, 565 + iio_trigger_generic_data_rdy_poll, IRQF_TRIGGER_RISING, 566 + "bma180_event", data->trig); 567 + if (ret) { 568 + dev_err(&client->dev, "unable to request IRQ\n"); 569 + goto err_trigger_free; 570 + } 571 + 572 + data->trig->dev.parent = &client->dev; 573 + data->trig->ops = &bma180_trigger_ops; 574 + iio_trigger_set_drvdata(data->trig, indio_dev); 575 + indio_dev->trig = data->trig; 576 + 577 + ret = iio_trigger_register(data->trig); 578 + if (ret) 579 + goto err_trigger_free; 736 580 } 737 - 738 - ret = devm_request_irq(&client->dev, client->irq, 739 - iio_trigger_generic_data_rdy_poll, 740 - IRQF_TRIGGER_RISING, BMA180_IRQ_NAME, trig); 741 - if (ret) { 742 - dev_err(&client->dev, "unable to request IRQ\n"); 743 - goto err_trigger_free; 744 - } 745 - 746 - trig->dev.parent = &client->dev; 747 - trig->ops = &bma180_trigger_ops; 748 - iio_trigger_set_drvdata(trig, indio_dev); 749 - data->trig = trig; 750 - indio_dev->trig = trig; 751 - 752 - ret = iio_trigger_register(trig); 753 - if (ret) 754 - goto err_trigger_free; 755 581 756 582 ret = iio_triggered_buffer_setup(indio_dev, NULL, 757 583 bma180_trigger_handler, NULL); ··· 773 595 err_buffer_cleanup: 774 596 iio_triggered_buffer_cleanup(indio_dev); 775 597 err_trigger_unregister: 776 - iio_trigger_unregister(trig); 598 + if (data->trig) 599 + iio_trigger_unregister(data->trig); 777 600 err_trigger_free: 778 - iio_trigger_free(trig); 601 + iio_trigger_free(data->trig); 779 602 err_chip_disable: 780 - bma180_chip_disable(data); 603 + data->part_info->chip_disable(data); 781 604 782 605 return ret; 783 606 } ··· 790 611 791 612 iio_device_unregister(indio_dev); 792 613 iio_triggered_buffer_cleanup(indio_dev); 793 - iio_trigger_unregister(data->trig); 794 - iio_trigger_free(data->trig); 614 + if (data->trig) { 615 + iio_trigger_unregister(data->trig); 616 + iio_trigger_free(data->trig); 617 + } 795 618 796 619 mutex_lock(&data->mutex); 797 - bma180_chip_disable(data); 620 + data->part_info->chip_disable(data); 798 621 mutex_unlock(&data->mutex); 799 622 800 623 return 0; ··· 810 629 int ret; 811 630 812 631 mutex_lock(&data->mutex); 813 - ret = bma180_set_sleep_state(data, 1); 632 + ret = bma180_set_sleep_state(data, true); 814 633 mutex_unlock(&data->mutex); 815 634 816 635 return ret; ··· 823 642 int ret; 824 643 825 644 mutex_lock(&data->mutex); 826 - ret = bma180_set_sleep_state(data, 0); 645 + ret = bma180_set_sleep_state(data, false); 827 646 mutex_unlock(&data->mutex); 828 647 829 648 return ret; ··· 835 654 #define BMA180_PM_OPS NULL 836 655 #endif 837 656 838 - static struct i2c_device_id bma180_id[] = { 839 - { BMA180_DRV_NAME, 0 }, 657 + static struct i2c_device_id bma180_ids[] = { 658 + { "bma180", BMA180 }, 659 + { "bma250", BMA250 }, 840 660 { } 841 661 }; 842 662 843 - MODULE_DEVICE_TABLE(i2c, bma180_id); 663 + MODULE_DEVICE_TABLE(i2c, bma180_ids); 844 664 845 665 static struct i2c_driver bma180_driver = { 846 666 .driver = { 847 - .name = BMA180_DRV_NAME, 667 + .name = "bma180", 848 668 .owner = THIS_MODULE, 849 669 .pm = BMA180_PM_OPS, 850 670 }, 851 671 .probe = bma180_probe, 852 672 .remove = bma180_remove, 853 - .id_table = bma180_id, 673 + .id_table = bma180_ids, 854 674 }; 855 675 856 676 module_i2c_driver(bma180_driver); 857 677 858 678 MODULE_AUTHOR("Kravchenko Oleksandr <x0199363@ti.com>"); 859 679 MODULE_AUTHOR("Texas Instruments, Inc."); 860 - MODULE_DESCRIPTION("Bosch BMA180 triaxial acceleration sensor"); 680 + MODULE_DESCRIPTION("Bosch BMA180/BMA250 triaxial acceleration sensor"); 861 681 MODULE_LICENSE("GPL");
+182 -59
drivers/iio/accel/bmc150-accel.c
··· 1 1 /* 2 - * BMC150 3-axis accelerometer driver 2 + * 3-axis accelerometer driver supporting following Bosch-Sensortec chips: 3 + * - BMC150 4 + * - BMI055 5 + * - BMA255 6 + * - BMA250E 7 + * - BMA222E 8 + * - BMA280 9 + * 3 10 * Copyright (c) 2014, Intel Corporation. 4 11 * 5 12 * This program is free software; you can redistribute it and/or modify it ··· 41 34 #define BMC150_ACCEL_GPIO_NAME "bmc150_accel_int" 42 35 43 36 #define BMC150_ACCEL_REG_CHIP_ID 0x00 44 - #define BMC150_ACCEL_CHIP_ID_VAL 0xFA 45 37 46 38 #define BMC150_ACCEL_REG_INT_STATUS_2 0x0B 47 39 #define BMC150_ACCEL_ANY_MOTION_MASK 0x07 ··· 132 126 BMC150_ACCEL_SLEEP_MODE_SUSPEND = 0x04, 133 127 }; 134 128 129 + struct bmc150_scale_info { 130 + int scale; 131 + u8 reg_range; 132 + }; 133 + 134 + struct bmc150_accel_chip_info { 135 + u8 chip_id; 136 + const struct iio_chan_spec *channels; 137 + int num_channels; 138 + const struct bmc150_scale_info scale_table[4]; 139 + }; 140 + 135 141 struct bmc150_accel_data { 136 142 struct i2c_client *client; 137 143 struct iio_trigger *dready_trig; ··· 158 140 bool dready_trigger_on; 159 141 bool motion_trigger_on; 160 142 int64_t timestamp; 143 + const struct bmc150_accel_chip_info *chip_info; 161 144 }; 162 145 163 146 static const struct { ··· 187 168 {0x0F, 1} }; 188 169 189 170 static const struct { 190 - int scale; 191 - int range; 192 - } bmc150_accel_scale_table[] = { {9610, BMC150_ACCEL_DEF_RANGE_2G}, 193 - {19122, BMC150_ACCEL_DEF_RANGE_4G}, 194 - {38344, BMC150_ACCEL_DEF_RANGE_8G}, 195 - {77057, BMC150_ACCEL_DEF_RANGE_16G} }; 196 - 197 - static const struct { 198 171 int sleep_dur; 199 - int reg_value; 172 + u8 reg_value; 200 173 } bmc150_accel_sleep_value_table[] = { {0, 0}, 201 174 {500, BMC150_ACCEL_SLEEP_500_MICRO}, 202 175 {1000, BMC150_ACCEL_SLEEP_1_MS}, ··· 278 267 } 279 268 280 269 dev_dbg(&data->client->dev, "Chip Id %x\n", ret); 281 - if (ret != BMC150_ACCEL_CHIP_ID_VAL) { 270 + if (ret != data->chip_info->chip_id) { 282 271 dev_err(&data->client->dev, "Invalid chip %x\n", ret); 283 272 return -ENODEV; 284 273 } ··· 510 499 return -EINVAL; 511 500 } 512 501 502 + #ifdef CONFIG_PM_RUNTIME 513 503 static int bmc150_accel_get_startup_times(struct bmc150_accel_data *data) 514 504 { 515 505 int i; ··· 541 529 542 530 return 0; 543 531 } 532 + #else 533 + static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on) 534 + { 535 + return 0; 536 + } 537 + #endif 544 538 545 539 static int bmc150_accel_set_scale(struct bmc150_accel_data *data, int val) 546 540 { 547 541 int ret, i; 548 542 549 - for (i = 0; i < ARRAY_SIZE(bmc150_accel_scale_table); ++i) { 550 - if (bmc150_accel_scale_table[i].scale == val) { 543 + for (i = 0; i < ARRAY_SIZE(data->chip_info->scale_table); ++i) { 544 + if (data->chip_info->scale_table[i].scale == val) { 551 545 ret = i2c_smbus_write_byte_data( 552 - data->client, 553 - BMC150_ACCEL_REG_PMU_RANGE, 554 - bmc150_accel_scale_table[i].range); 546 + data->client, 547 + BMC150_ACCEL_REG_PMU_RANGE, 548 + data->chip_info->scale_table[i].reg_range); 555 549 if (ret < 0) { 556 550 dev_err(&data->client->dev, 557 551 "Error writing pmu_range\n"); 558 552 return ret; 559 553 } 560 554 561 - data->range = bmc150_accel_scale_table[i].range; 555 + data->range = data->chip_info->scale_table[i].reg_range; 562 556 return 0; 563 557 } 564 558 } ··· 591 573 return IIO_VAL_INT; 592 574 } 593 575 594 - static int bmc150_accel_get_axis(struct bmc150_accel_data *data, int axis, 576 + static int bmc150_accel_get_axis(struct bmc150_accel_data *data, 577 + struct iio_chan_spec const *chan, 595 578 int *val) 596 579 { 597 580 int ret; 581 + int axis = chan->scan_index; 598 582 599 583 mutex_lock(&data->mutex); 600 584 ret = bmc150_accel_set_power_state(data, true); ··· 613 593 mutex_unlock(&data->mutex); 614 594 return ret; 615 595 } 616 - *val = sign_extend32(ret >> 4, 11); 596 + *val = sign_extend32(ret >> chan->scan_type.shift, 597 + chan->scan_type.realbits - 1); 617 598 ret = bmc150_accel_set_power_state(data, false); 618 599 mutex_unlock(&data->mutex); 619 600 if (ret < 0) ··· 639 618 if (iio_buffer_enabled(indio_dev)) 640 619 return -EBUSY; 641 620 else 642 - return bmc150_accel_get_axis(data, 643 - chan->scan_index, 644 - val); 621 + return bmc150_accel_get_axis(data, chan, val); 645 622 default: 646 623 return -EINVAL; 647 624 } ··· 658 639 case IIO_ACCEL: 659 640 { 660 641 int i; 642 + const struct bmc150_scale_info *si; 643 + int st_size = ARRAY_SIZE(data->chip_info->scale_table); 661 644 662 - for (i = 0; i < ARRAY_SIZE(bmc150_accel_scale_table); 663 - ++i) { 664 - if (bmc150_accel_scale_table[i].range == 665 - data->range) { 666 - *val2 = 667 - bmc150_accel_scale_table[i].scale; 645 + for (i = 0; i < st_size; ++i) { 646 + si = &data->chip_info->scale_table[i]; 647 + if (si->reg_range == data->range) { 648 + *val2 = si->scale; 668 649 return IIO_VAL_INT_PLUS_MICRO; 669 650 } 670 651 } ··· 852 833 BIT(IIO_EV_INFO_PERIOD) 853 834 }; 854 835 855 - #define BMC150_ACCEL_CHANNEL(_axis) { \ 836 + #define BMC150_ACCEL_CHANNEL(_axis, bits) { \ 856 837 .type = IIO_ACCEL, \ 857 838 .modified = 1, \ 858 839 .channel2 = IIO_MOD_##_axis, \ ··· 862 843 .scan_index = AXIS_##_axis, \ 863 844 .scan_type = { \ 864 845 .sign = 's', \ 865 - .realbits = 12, \ 846 + .realbits = (bits), \ 866 847 .storagebits = 16, \ 867 - .shift = 4, \ 848 + .shift = 16 - (bits), \ 868 849 }, \ 869 850 .event_spec = &bmc150_accel_event, \ 870 851 .num_event_specs = 1 \ 871 852 } 872 853 873 - static const struct iio_chan_spec bmc150_accel_channels[] = { 874 - { 875 - .type = IIO_TEMP, 876 - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 877 - BIT(IIO_CHAN_INFO_SCALE) | 878 - BIT(IIO_CHAN_INFO_OFFSET), 879 - .scan_index = -1, 854 + #define BMC150_ACCEL_CHANNELS(bits) { \ 855 + { \ 856 + .type = IIO_TEMP, \ 857 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 858 + BIT(IIO_CHAN_INFO_SCALE) | \ 859 + BIT(IIO_CHAN_INFO_OFFSET), \ 860 + .scan_index = -1, \ 861 + }, \ 862 + BMC150_ACCEL_CHANNEL(X, bits), \ 863 + BMC150_ACCEL_CHANNEL(Y, bits), \ 864 + BMC150_ACCEL_CHANNEL(Z, bits), \ 865 + IIO_CHAN_SOFT_TIMESTAMP(3), \ 866 + } 867 + 868 + static const struct iio_chan_spec bma222e_accel_channels[] = 869 + BMC150_ACCEL_CHANNELS(8); 870 + static const struct iio_chan_spec bma250e_accel_channels[] = 871 + BMC150_ACCEL_CHANNELS(10); 872 + static const struct iio_chan_spec bmc150_accel_channels[] = 873 + BMC150_ACCEL_CHANNELS(12); 874 + static const struct iio_chan_spec bma280_accel_channels[] = 875 + BMC150_ACCEL_CHANNELS(14); 876 + 877 + enum { 878 + bmc150, 879 + bmi055, 880 + bma255, 881 + bma250e, 882 + bma222e, 883 + bma280, 884 + }; 885 + 886 + static const struct bmc150_accel_chip_info bmc150_accel_chip_info_tbl[] = { 887 + [bmc150] = { 888 + .chip_id = 0xFA, 889 + .channels = bmc150_accel_channels, 890 + .num_channels = ARRAY_SIZE(bmc150_accel_channels), 891 + .scale_table = { {9610, BMC150_ACCEL_DEF_RANGE_2G}, 892 + {19122, BMC150_ACCEL_DEF_RANGE_4G}, 893 + {38344, BMC150_ACCEL_DEF_RANGE_8G}, 894 + {76590, BMC150_ACCEL_DEF_RANGE_16G} }, 880 895 }, 881 - BMC150_ACCEL_CHANNEL(X), 882 - BMC150_ACCEL_CHANNEL(Y), 883 - BMC150_ACCEL_CHANNEL(Z), 884 - IIO_CHAN_SOFT_TIMESTAMP(3), 896 + [bmi055] = { 897 + .chip_id = 0xFA, 898 + .channels = bmc150_accel_channels, 899 + .num_channels = ARRAY_SIZE(bmc150_accel_channels), 900 + .scale_table = { {9610, BMC150_ACCEL_DEF_RANGE_2G}, 901 + {19122, BMC150_ACCEL_DEF_RANGE_4G}, 902 + {38344, BMC150_ACCEL_DEF_RANGE_8G}, 903 + {76590, BMC150_ACCEL_DEF_RANGE_16G} }, 904 + }, 905 + [bma255] = { 906 + .chip_id = 0xFA, 907 + .channels = bmc150_accel_channels, 908 + .num_channels = ARRAY_SIZE(bmc150_accel_channels), 909 + .scale_table = { {9610, BMC150_ACCEL_DEF_RANGE_2G}, 910 + {19122, BMC150_ACCEL_DEF_RANGE_4G}, 911 + {38344, BMC150_ACCEL_DEF_RANGE_8G}, 912 + {76590, BMC150_ACCEL_DEF_RANGE_16G} }, 913 + }, 914 + [bma250e] = { 915 + .chip_id = 0xF9, 916 + .channels = bma250e_accel_channels, 917 + .num_channels = ARRAY_SIZE(bma250e_accel_channels), 918 + .scale_table = { {38344, BMC150_ACCEL_DEF_RANGE_2G}, 919 + {76590, BMC150_ACCEL_DEF_RANGE_4G}, 920 + {153277, BMC150_ACCEL_DEF_RANGE_8G}, 921 + {306457, BMC150_ACCEL_DEF_RANGE_16G} }, 922 + }, 923 + [bma222e] = { 924 + .chip_id = 0xF8, 925 + .channels = bma222e_accel_channels, 926 + .num_channels = ARRAY_SIZE(bma222e_accel_channels), 927 + .scale_table = { {153277, BMC150_ACCEL_DEF_RANGE_2G}, 928 + {306457, BMC150_ACCEL_DEF_RANGE_4G}, 929 + {612915, BMC150_ACCEL_DEF_RANGE_8G}, 930 + {1225831, BMC150_ACCEL_DEF_RANGE_16G} }, 931 + }, 932 + [bma280] = { 933 + .chip_id = 0xFB, 934 + .channels = bma280_accel_channels, 935 + .num_channels = ARRAY_SIZE(bma280_accel_channels), 936 + .scale_table = { {2392, BMC150_ACCEL_DEF_RANGE_2G}, 937 + {4785, BMC150_ACCEL_DEF_RANGE_4G}, 938 + {9581, BMC150_ACCEL_DEF_RANGE_8G}, 939 + {19152, BMC150_ACCEL_DEF_RANGE_16G} }, 940 + }, 885 941 }; 886 942 887 943 static const struct iio_info bmc150_accel_info = { ··· 1127 1033 return IRQ_HANDLED; 1128 1034 } 1129 1035 1130 - static int bmc150_accel_acpi_gpio_probe(struct i2c_client *client, 1131 - struct bmc150_accel_data *data) 1036 + static const char *bmc150_accel_match_acpi_device(struct device *dev, int *data) 1132 1037 { 1133 1038 const struct acpi_device_id *id; 1039 + 1040 + id = acpi_match_device(dev->driver->acpi_match_table, dev); 1041 + 1042 + if (!id) 1043 + return NULL; 1044 + 1045 + *data = (int) id->driver_data; 1046 + 1047 + return dev_name(dev); 1048 + } 1049 + 1050 + static int bmc150_accel_gpio_probe(struct i2c_client *client, 1051 + struct bmc150_accel_data *data) 1052 + { 1134 1053 struct device *dev; 1135 1054 struct gpio_desc *gpio; 1136 1055 int ret; ··· 1152 1045 return -EINVAL; 1153 1046 1154 1047 dev = &client->dev; 1155 - if (!ACPI_HANDLE(dev)) 1156 - return -ENODEV; 1157 - 1158 - id = acpi_match_device(dev->driver->acpi_match_table, dev); 1159 - if (!id) 1160 - return -ENODEV; 1161 1048 1162 1049 /* data ready gpio interrupt pin */ 1163 1050 gpio = devm_gpiod_get_index(dev, BMC150_ACCEL_GPIO_NAME, 0); 1164 1051 if (IS_ERR(gpio)) { 1165 - dev_err(dev, "Failed: acpi gpio get index\n"); 1052 + dev_err(dev, "Failed: gpio get index\n"); 1166 1053 return PTR_ERR(gpio); 1167 1054 } 1168 1055 ··· 1177 1076 struct bmc150_accel_data *data; 1178 1077 struct iio_dev *indio_dev; 1179 1078 int ret; 1079 + const char *name = NULL; 1080 + int chip_id = 0; 1180 1081 1181 1082 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); 1182 1083 if (!indio_dev) ··· 1188 1085 i2c_set_clientdata(client, indio_dev); 1189 1086 data->client = client; 1190 1087 1088 + if (id) { 1089 + name = id->name; 1090 + chip_id = id->driver_data; 1091 + } 1092 + 1093 + if (ACPI_HANDLE(&client->dev)) 1094 + name = bmc150_accel_match_acpi_device(&client->dev, &chip_id); 1095 + 1096 + data->chip_info = &bmc150_accel_chip_info_tbl[chip_id]; 1097 + 1191 1098 ret = bmc150_accel_chip_init(data); 1192 1099 if (ret < 0) 1193 1100 return ret; ··· 1205 1092 mutex_init(&data->mutex); 1206 1093 1207 1094 indio_dev->dev.parent = &client->dev; 1208 - indio_dev->channels = bmc150_accel_channels; 1209 - indio_dev->num_channels = ARRAY_SIZE(bmc150_accel_channels); 1210 - indio_dev->name = BMC150_ACCEL_DRV_NAME; 1095 + indio_dev->channels = data->chip_info->channels; 1096 + indio_dev->num_channels = data->chip_info->num_channels; 1097 + indio_dev->name = name; 1211 1098 indio_dev->modes = INDIO_DIRECT_MODE; 1212 1099 indio_dev->info = &bmc150_accel_info; 1213 1100 1214 1101 if (client->irq < 0) 1215 - client->irq = bmc150_accel_acpi_gpio_probe(client, data); 1102 + client->irq = bmc150_accel_gpio_probe(client, data); 1216 1103 1217 1104 if (client->irq >= 0) { 1218 1105 ret = devm_request_threaded_irq( ··· 1390 1277 }; 1391 1278 1392 1279 static const struct acpi_device_id bmc150_accel_acpi_match[] = { 1393 - {"BSBA0150", 0}, 1394 - {"BMC150A", 0}, 1280 + {"BSBA0150", bmc150}, 1281 + {"BMC150A", bmc150}, 1282 + {"BMI055A", bmi055}, 1283 + {"BMA0255", bma255}, 1284 + {"BMA250E", bma250e}, 1285 + {"BMA222E", bma222e}, 1286 + {"BMA0280", bma280}, 1395 1287 { }, 1396 1288 }; 1397 1289 MODULE_DEVICE_TABLE(acpi, bmc150_accel_acpi_match); 1398 1290 1399 1291 static const struct i2c_device_id bmc150_accel_id[] = { 1400 - {"bmc150_accel", 0}, 1292 + {"bmc150_accel", bmc150}, 1293 + {"bmi055_accel", bmi055}, 1294 + {"bma255", bma255}, 1295 + {"bma250e", bma250e}, 1296 + {"bma222e", bma222e}, 1297 + {"bma280", bma280}, 1401 1298 {} 1402 1299 }; 1403 1300
-1
drivers/iio/accel/hid-sensor-accel-3d.c
··· 419 419 .id_table = hid_accel_3d_ids, 420 420 .driver = { 421 421 .name = KBUILD_MODNAME, 422 - .owner = THIS_MODULE, 423 422 }, 424 423 .probe = hid_accel_3d_probe, 425 424 .remove = hid_accel_3d_remove,
+540 -73
drivers/iio/accel/kxcjk-1013.c
··· 27 27 #include <linux/iio/sysfs.h> 28 28 #include <linux/iio/buffer.h> 29 29 #include <linux/iio/trigger.h> 30 + #include <linux/iio/events.h> 30 31 #include <linux/iio/trigger_consumer.h> 31 32 #include <linux/iio/triggered_buffer.h> 32 33 #include <linux/iio/accel/kxcjk_1013.h> ··· 76 75 77 76 #define KXCJK1013_SLEEP_DELAY_MS 2000 78 77 78 + #define KXCJK1013_REG_INT_SRC2_BIT_ZP BIT(0) 79 + #define KXCJK1013_REG_INT_SRC2_BIT_ZN BIT(1) 80 + #define KXCJK1013_REG_INT_SRC2_BIT_YP BIT(2) 81 + #define KXCJK1013_REG_INT_SRC2_BIT_YN BIT(3) 82 + #define KXCJK1013_REG_INT_SRC2_BIT_XP BIT(4) 83 + #define KXCJK1013_REG_INT_SRC2_BIT_XN BIT(5) 84 + 85 + #define KXCJK1013_DEFAULT_WAKE_THRES 1 86 + 87 + enum kx_chipset { 88 + KXCJK1013, 89 + KXCJ91008, 90 + KXTJ21009, 91 + KX_MAX_CHIPS /* this must be last */ 92 + }; 93 + 79 94 struct kxcjk1013_data { 80 95 struct i2c_client *client; 81 - struct iio_trigger *trig; 82 - bool trig_mode; 96 + struct iio_trigger *dready_trig; 97 + struct iio_trigger *motion_trig; 83 98 struct mutex mutex; 84 99 s16 buffer[8]; 85 100 u8 odr_bits; 86 101 u8 range; 102 + int wake_thres; 103 + int wake_dur; 87 104 bool active_high_intr; 88 - bool trigger_on; 105 + bool dready_trigger_on; 106 + int ev_enable_state; 107 + bool motion_trigger_on; 108 + int64_t timestamp; 109 + enum kx_chipset chipset; 89 110 }; 90 111 91 112 enum kxcjk1013_axis { ··· 141 118 static const struct { 142 119 int odr_bits; 143 120 int usec; 144 - } odr_start_up_times[] = { {0x08, 100000}, {0x09, 100000}, {0x0A, 100000}, 145 - {0x0B, 100000}, { 0, 80000}, {0x01, 41000}, 146 - {0x02, 21000}, {0x03, 11000}, {0x04, 6400}, 147 - {0x05, 3900}, {0x06, 2700}, {0x07, 2100} }; 121 + } odr_start_up_times[KX_MAX_CHIPS][12] = { 122 + /* KXCJK-1013 */ 123 + { 124 + {0x08, 100000}, 125 + {0x09, 100000}, 126 + {0x0A, 100000}, 127 + {0x0B, 100000}, 128 + {0, 80000}, 129 + {0x01, 41000}, 130 + {0x02, 21000}, 131 + {0x03, 11000}, 132 + {0x04, 6400}, 133 + {0x05, 3900}, 134 + {0x06, 2700}, 135 + {0x07, 2100}, 136 + }, 137 + /* KXCJ9-1008 */ 138 + { 139 + {0x08, 100000}, 140 + {0x09, 100000}, 141 + {0x0A, 100000}, 142 + {0x0B, 100000}, 143 + {0, 80000}, 144 + {0x01, 41000}, 145 + {0x02, 21000}, 146 + {0x03, 11000}, 147 + {0x04, 6400}, 148 + {0x05, 3900}, 149 + {0x06, 2700}, 150 + {0x07, 2100}, 151 + }, 152 + /* KXCTJ2-1009 */ 153 + { 154 + {0x08, 1240000}, 155 + {0x09, 621000}, 156 + {0x0A, 309000}, 157 + {0x0B, 151000}, 158 + {0, 80000}, 159 + {0x01, 41000}, 160 + {0x02, 21000}, 161 + {0x03, 11000}, 162 + {0x04, 6000}, 163 + {0x05, 4000}, 164 + {0x06, 3000}, 165 + {0x07, 2000}, 166 + }, 167 + }; 148 168 149 169 static const struct { 150 170 u16 scale; ··· 196 130 } KXCJK1013_scale_table[] = { {9582, 0, 0}, 197 131 {19163, 1, 0}, 198 132 {38326, 0, 1} }; 133 + 134 + static const struct { 135 + int val; 136 + int val2; 137 + int odr_bits; 138 + } wake_odr_data_rate_table[] = { {0, 781000, 0x00}, 139 + {1, 563000, 0x01}, 140 + {3, 125000, 0x02}, 141 + {6, 250000, 0x03}, 142 + {12, 500000, 0x04}, 143 + {25, 0, 0x05}, 144 + {50, 0, 0x06}, 145 + {100, 0, 0x06}, 146 + {200, 0, 0x06}, 147 + {400, 0, 0x06}, 148 + {800, 0, 0x06}, 149 + {1600, 0, 0x06} }; 199 150 200 151 static int kxcjk1013_set_mode(struct kxcjk1013_data *data, 201 152 enum kxcjk1013_mode mode) ··· 322 239 if (ret < 0) 323 240 return ret; 324 241 325 - data->range = KXCJK1013_RANGE_4G; 326 - 327 - 328 242 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_DATA_CTRL); 329 243 if (ret < 0) { 330 244 dev_err(&data->client->dev, "Error reading reg_data_ctrl\n"); ··· 353 273 if (ret < 0) 354 274 return ret; 355 275 276 + data->wake_thres = KXCJK1013_DEFAULT_WAKE_THRES; 277 + 356 278 return 0; 357 279 } 358 280 281 + #ifdef CONFIG_PM_RUNTIME 359 282 static int kxcjk1013_get_startup_times(struct kxcjk1013_data *data) 360 283 { 361 284 int i; 285 + int idx = data->chipset; 362 286 363 - for (i = 0; i < ARRAY_SIZE(odr_start_up_times); ++i) { 364 - if (odr_start_up_times[i].odr_bits == data->odr_bits) 365 - return odr_start_up_times[i].usec; 287 + for (i = 0; i < ARRAY_SIZE(odr_start_up_times[idx]); ++i) { 288 + if (odr_start_up_times[idx][i].odr_bits == data->odr_bits) 289 + return odr_start_up_times[idx][i].usec; 366 290 } 367 291 368 292 return KXCJK1013_MAX_STARTUP_TIME_US; 369 293 } 294 + #endif 370 295 371 296 static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on) 372 297 { ··· 392 307 return 0; 393 308 } 394 309 395 - static int kxcjk1013_chip_setup_interrupt(struct kxcjk1013_data *data, 396 - bool status) 310 + static int kxcjk1013_chip_update_thresholds(struct kxcjk1013_data *data) 311 + { 312 + int ret; 313 + 314 + ret = i2c_smbus_write_byte_data(data->client, 315 + KXCJK1013_REG_WAKE_TIMER, 316 + data->wake_dur); 317 + if (ret < 0) { 318 + dev_err(&data->client->dev, 319 + "Error writing reg_wake_timer\n"); 320 + return ret; 321 + } 322 + 323 + ret = i2c_smbus_write_byte_data(data->client, 324 + KXCJK1013_REG_WAKE_THRES, 325 + data->wake_thres); 326 + if (ret < 0) { 327 + dev_err(&data->client->dev, "Error writing reg_wake_thres\n"); 328 + return ret; 329 + } 330 + 331 + return 0; 332 + } 333 + 334 + static int kxcjk1013_setup_any_motion_interrupt(struct kxcjk1013_data *data, 335 + bool status) 336 + { 337 + int ret; 338 + enum kxcjk1013_mode store_mode; 339 + 340 + ret = kxcjk1013_get_mode(data, &store_mode); 341 + if (ret < 0) 342 + return ret; 343 + 344 + /* This is requirement by spec to change state to STANDBY */ 345 + ret = kxcjk1013_set_mode(data, STANDBY); 346 + if (ret < 0) 347 + return ret; 348 + 349 + ret = kxcjk1013_chip_update_thresholds(data); 350 + if (ret < 0) 351 + return ret; 352 + 353 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_CTRL1); 354 + if (ret < 0) { 355 + dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); 356 + return ret; 357 + } 358 + 359 + if (status) 360 + ret |= KXCJK1013_REG_INT_REG1_BIT_IEN; 361 + else 362 + ret &= ~KXCJK1013_REG_INT_REG1_BIT_IEN; 363 + 364 + ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_INT_CTRL1, 365 + ret); 366 + if (ret < 0) { 367 + dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); 368 + return ret; 369 + } 370 + 371 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); 372 + if (ret < 0) { 373 + dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); 374 + return ret; 375 + } 376 + 377 + if (status) 378 + ret |= KXCJK1013_REG_CTRL1_BIT_WUFE; 379 + else 380 + ret &= ~KXCJK1013_REG_CTRL1_BIT_WUFE; 381 + 382 + ret = i2c_smbus_write_byte_data(data->client, 383 + KXCJK1013_REG_CTRL1, ret); 384 + if (ret < 0) { 385 + dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); 386 + return ret; 387 + } 388 + 389 + if (store_mode == OPERATION) { 390 + ret = kxcjk1013_set_mode(data, OPERATION); 391 + if (ret < 0) 392 + return ret; 393 + } 394 + 395 + return 0; 396 + } 397 + 398 + static int kxcjk1013_setup_new_data_interrupt(struct kxcjk1013_data *data, 399 + bool status) 397 400 { 398 401 int ret; 399 402 enum kxcjk1013_mode store_mode; ··· 554 381 return -EINVAL; 555 382 } 556 383 384 + static int kxcjk1013_convert_wake_odr_to_bit(int val, int val2) 385 + { 386 + int i; 387 + 388 + for (i = 0; i < ARRAY_SIZE(wake_odr_data_rate_table); ++i) { 389 + if (wake_odr_data_rate_table[i].val == val && 390 + wake_odr_data_rate_table[i].val2 == val2) { 391 + return wake_odr_data_rate_table[i].odr_bits; 392 + } 393 + } 394 + 395 + return -EINVAL; 396 + } 397 + 557 398 static int kxcjk1013_set_odr(struct kxcjk1013_data *data, int val, int val2) 558 399 { 559 400 int ret; ··· 595 408 } 596 409 597 410 data->odr_bits = odr_bits; 411 + 412 + odr_bits = kxcjk1013_convert_wake_odr_to_bit(val, val2); 413 + if (odr_bits < 0) 414 + return odr_bits; 415 + 416 + ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_CTRL2, 417 + odr_bits); 418 + if (ret < 0) { 419 + dev_err(&data->client->dev, "Error writing reg_ctrl2\n"); 420 + return ret; 421 + } 598 422 599 423 if (store_mode == OPERATION) { 600 424 ret = kxcjk1013_set_mode(data, OPERATION); ··· 758 560 return ret; 759 561 } 760 562 563 + static int kxcjk1013_read_event(struct iio_dev *indio_dev, 564 + const struct iio_chan_spec *chan, 565 + enum iio_event_type type, 566 + enum iio_event_direction dir, 567 + enum iio_event_info info, 568 + int *val, int *val2) 569 + { 570 + struct kxcjk1013_data *data = iio_priv(indio_dev); 571 + 572 + *val2 = 0; 573 + switch (info) { 574 + case IIO_EV_INFO_VALUE: 575 + *val = data->wake_thres; 576 + break; 577 + case IIO_EV_INFO_PERIOD: 578 + *val = data->wake_dur; 579 + break; 580 + default: 581 + return -EINVAL; 582 + } 583 + 584 + return IIO_VAL_INT; 585 + } 586 + 587 + static int kxcjk1013_write_event(struct iio_dev *indio_dev, 588 + const struct iio_chan_spec *chan, 589 + enum iio_event_type type, 590 + enum iio_event_direction dir, 591 + enum iio_event_info info, 592 + int val, int val2) 593 + { 594 + struct kxcjk1013_data *data = iio_priv(indio_dev); 595 + 596 + if (data->ev_enable_state) 597 + return -EBUSY; 598 + 599 + switch (info) { 600 + case IIO_EV_INFO_VALUE: 601 + data->wake_thres = val; 602 + break; 603 + case IIO_EV_INFO_PERIOD: 604 + data->wake_dur = val; 605 + break; 606 + default: 607 + return -EINVAL; 608 + } 609 + 610 + return 0; 611 + } 612 + 613 + static int kxcjk1013_read_event_config(struct iio_dev *indio_dev, 614 + const struct iio_chan_spec *chan, 615 + enum iio_event_type type, 616 + enum iio_event_direction dir) 617 + { 618 + 619 + struct kxcjk1013_data *data = iio_priv(indio_dev); 620 + 621 + return data->ev_enable_state; 622 + } 623 + 624 + static int kxcjk1013_write_event_config(struct iio_dev *indio_dev, 625 + const struct iio_chan_spec *chan, 626 + enum iio_event_type type, 627 + enum iio_event_direction dir, 628 + int state) 629 + { 630 + struct kxcjk1013_data *data = iio_priv(indio_dev); 631 + int ret; 632 + 633 + if (state && data->ev_enable_state) 634 + return 0; 635 + 636 + mutex_lock(&data->mutex); 637 + 638 + if (!state && data->motion_trigger_on) { 639 + data->ev_enable_state = 0; 640 + mutex_unlock(&data->mutex); 641 + return 0; 642 + } 643 + 644 + /* 645 + * We will expect the enable and disable to do operation in 646 + * in reverse order. This will happen here anyway as our 647 + * resume operation uses sync mode runtime pm calls, the 648 + * suspend operation will be delayed by autosuspend delay 649 + * So the disable operation will still happen in reverse of 650 + * enable operation. When runtime pm is disabled the mode 651 + * is always on so sequence doesn't matter 652 + */ 653 + ret = kxcjk1013_set_power_state(data, state); 654 + if (ret < 0) { 655 + mutex_unlock(&data->mutex); 656 + return ret; 657 + } 658 + 659 + ret = kxcjk1013_setup_any_motion_interrupt(data, state); 660 + if (ret < 0) { 661 + mutex_unlock(&data->mutex); 662 + return ret; 663 + } 664 + 665 + data->ev_enable_state = state; 666 + mutex_unlock(&data->mutex); 667 + 668 + return 0; 669 + } 670 + 761 671 static int kxcjk1013_validate_trigger(struct iio_dev *indio_dev, 762 672 struct iio_trigger *trig) 763 673 { 764 674 struct kxcjk1013_data *data = iio_priv(indio_dev); 765 675 766 - if (data->trig != trig) 676 + if (data->dready_trig != trig && data->motion_trig != trig) 767 677 return -EINVAL; 768 678 769 679 return 0; ··· 892 586 .attrs = kxcjk1013_attributes, 893 587 }; 894 588 589 + static const struct iio_event_spec kxcjk1013_event = { 590 + .type = IIO_EV_TYPE_THRESH, 591 + .dir = IIO_EV_DIR_RISING | IIO_EV_DIR_FALLING, 592 + .mask_separate = BIT(IIO_EV_INFO_VALUE) | 593 + BIT(IIO_EV_INFO_ENABLE) | 594 + BIT(IIO_EV_INFO_PERIOD) 595 + }; 596 + 895 597 #define KXCJK1013_CHANNEL(_axis) { \ 896 598 .type = IIO_ACCEL, \ 897 599 .modified = 1, \ ··· 915 601 .shift = 4, \ 916 602 .endianness = IIO_CPU, \ 917 603 }, \ 604 + .event_spec = &kxcjk1013_event, \ 605 + .num_event_specs = 1 \ 918 606 } 919 607 920 608 static const struct iio_chan_spec kxcjk1013_channels[] = { ··· 930 614 .attrs = &kxcjk1013_attrs_group, 931 615 .read_raw = kxcjk1013_read_raw, 932 616 .write_raw = kxcjk1013_write_raw, 617 + .read_event_value = kxcjk1013_read_event, 618 + .write_event_value = kxcjk1013_write_event, 619 + .write_event_config = kxcjk1013_write_event_config, 620 + .read_event_config = kxcjk1013_read_event_config, 933 621 .validate_trigger = kxcjk1013_validate_trigger, 934 622 .driver_module = THIS_MODULE, 935 623 }; ··· 959 639 mutex_unlock(&data->mutex); 960 640 961 641 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, 962 - pf->timestamp); 642 + data->timestamp); 963 643 err: 964 644 iio_trigger_notify_done(indio_dev->trig); 965 645 ··· 988 668 struct kxcjk1013_data *data = iio_priv(indio_dev); 989 669 int ret; 990 670 991 - if (state && data->trigger_on) 992 - return 0; 993 - 994 671 mutex_lock(&data->mutex); 995 - ret = kxcjk1013_chip_setup_interrupt(data, state); 996 - if (!ret) { 997 - ret = kxcjk1013_set_power_state(data, state); 998 - if (ret < 0) { 999 - mutex_unlock(&data->mutex); 1000 - return ret; 1001 - } 672 + 673 + if (!state && data->ev_enable_state && data->motion_trigger_on) { 674 + data->motion_trigger_on = false; 675 + mutex_unlock(&data->mutex); 676 + return 0; 1002 677 } 1003 - data->trigger_on = state; 678 + 679 + ret = kxcjk1013_set_power_state(data, state); 680 + if (ret < 0) { 681 + mutex_unlock(&data->mutex); 682 + return ret; 683 + } 684 + if (data->motion_trig == trig) 685 + ret = kxcjk1013_setup_any_motion_interrupt(data, state); 686 + else 687 + ret = kxcjk1013_setup_new_data_interrupt(data, state); 688 + if (ret < 0) { 689 + mutex_unlock(&data->mutex); 690 + return ret; 691 + } 692 + if (data->motion_trig == trig) 693 + data->motion_trigger_on = state; 694 + else 695 + data->dready_trigger_on = state; 696 + 1004 697 mutex_unlock(&data->mutex); 1005 698 1006 699 return 0; ··· 1025 692 .owner = THIS_MODULE, 1026 693 }; 1027 694 1028 - static int kxcjk1013_acpi_gpio_probe(struct i2c_client *client, 1029 - struct kxcjk1013_data *data) 695 + static irqreturn_t kxcjk1013_event_handler(int irq, void *private) 696 + { 697 + struct iio_dev *indio_dev = private; 698 + struct kxcjk1013_data *data = iio_priv(indio_dev); 699 + int ret; 700 + 701 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_SRC1); 702 + if (ret < 0) { 703 + dev_err(&data->client->dev, "Error reading reg_int_src1\n"); 704 + goto ack_intr; 705 + } 706 + 707 + if (ret & 0x02) { 708 + ret = i2c_smbus_read_byte_data(data->client, 709 + KXCJK1013_REG_INT_SRC2); 710 + if (ret < 0) { 711 + dev_err(&data->client->dev, 712 + "Error reading reg_int_src2\n"); 713 + goto ack_intr; 714 + } 715 + 716 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_XN) 717 + iio_push_event(indio_dev, 718 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 719 + 0, 720 + IIO_MOD_X, 721 + IIO_EV_TYPE_THRESH, 722 + IIO_EV_DIR_FALLING), 723 + data->timestamp); 724 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_XP) 725 + iio_push_event(indio_dev, 726 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 727 + 0, 728 + IIO_MOD_X, 729 + IIO_EV_TYPE_THRESH, 730 + IIO_EV_DIR_RISING), 731 + data->timestamp); 732 + 733 + 734 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_YN) 735 + iio_push_event(indio_dev, 736 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 737 + 0, 738 + IIO_MOD_Y, 739 + IIO_EV_TYPE_THRESH, 740 + IIO_EV_DIR_FALLING), 741 + data->timestamp); 742 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_YP) 743 + iio_push_event(indio_dev, 744 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 745 + 0, 746 + IIO_MOD_Y, 747 + IIO_EV_TYPE_THRESH, 748 + IIO_EV_DIR_RISING), 749 + data->timestamp); 750 + 751 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_ZN) 752 + iio_push_event(indio_dev, 753 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 754 + 0, 755 + IIO_MOD_Z, 756 + IIO_EV_TYPE_THRESH, 757 + IIO_EV_DIR_FALLING), 758 + data->timestamp); 759 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_ZP) 760 + iio_push_event(indio_dev, 761 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 762 + 0, 763 + IIO_MOD_Z, 764 + IIO_EV_TYPE_THRESH, 765 + IIO_EV_DIR_RISING), 766 + data->timestamp); 767 + } 768 + 769 + ack_intr: 770 + if (data->dready_trigger_on) 771 + return IRQ_HANDLED; 772 + 773 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); 774 + if (ret < 0) 775 + dev_err(&data->client->dev, "Error reading reg_int_rel\n"); 776 + 777 + return IRQ_HANDLED; 778 + } 779 + 780 + static irqreturn_t kxcjk1013_data_rdy_trig_poll(int irq, void *private) 781 + { 782 + struct iio_dev *indio_dev = private; 783 + struct kxcjk1013_data *data = iio_priv(indio_dev); 784 + 785 + data->timestamp = iio_get_time_ns(); 786 + 787 + if (data->dready_trigger_on) 788 + iio_trigger_poll(data->dready_trig); 789 + else if (data->motion_trigger_on) 790 + iio_trigger_poll(data->motion_trig); 791 + 792 + if (data->ev_enable_state) 793 + return IRQ_WAKE_THREAD; 794 + else 795 + return IRQ_HANDLED; 796 + } 797 + 798 + static const char *kxcjk1013_match_acpi_device(struct device *dev, 799 + enum kx_chipset *chipset) 1030 800 { 1031 801 const struct acpi_device_id *id; 802 + id = acpi_match_device(dev->driver->acpi_match_table, dev); 803 + if (!id) 804 + return NULL; 805 + *chipset = (enum kx_chipset)id->driver_data; 806 + 807 + return dev_name(dev); 808 + } 809 + 810 + static int kxcjk1013_gpio_probe(struct i2c_client *client, 811 + struct kxcjk1013_data *data) 812 + { 1032 813 struct device *dev; 1033 814 struct gpio_desc *gpio; 1034 815 int ret; ··· 1151 704 return -EINVAL; 1152 705 1153 706 dev = &client->dev; 1154 - if (!ACPI_HANDLE(dev)) 1155 - return -ENODEV; 1156 - 1157 - id = acpi_match_device(dev->driver->acpi_match_table, dev); 1158 - if (!id) 1159 - return -ENODEV; 1160 707 1161 708 /* data ready gpio interrupt pin */ 1162 709 gpio = devm_gpiod_get_index(dev, "kxcjk1013_int", 0); ··· 1175 734 { 1176 735 struct kxcjk1013_data *data; 1177 736 struct iio_dev *indio_dev; 1178 - struct iio_trigger *trig = NULL; 1179 737 struct kxcjk_1013_platform_data *pdata; 738 + const char *name; 1180 739 int ret; 1181 740 1182 741 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); ··· 1193 752 else 1194 753 data->active_high_intr = true; /* default polarity */ 1195 754 755 + if (id) { 756 + data->chipset = (enum kx_chipset)(id->driver_data); 757 + name = id->name; 758 + } else if (ACPI_HANDLE(&client->dev)) { 759 + name = kxcjk1013_match_acpi_device(&client->dev, 760 + &data->chipset); 761 + } else 762 + return -ENODEV; 763 + 1196 764 ret = kxcjk1013_chip_init(data); 1197 765 if (ret < 0) 1198 766 return ret; ··· 1211 761 indio_dev->dev.parent = &client->dev; 1212 762 indio_dev->channels = kxcjk1013_channels; 1213 763 indio_dev->num_channels = ARRAY_SIZE(kxcjk1013_channels); 1214 - indio_dev->name = KXCJK1013_DRV_NAME; 764 + indio_dev->name = name; 1215 765 indio_dev->modes = INDIO_DIRECT_MODE; 1216 766 indio_dev->info = &kxcjk1013_info; 1217 767 1218 768 if (client->irq < 0) 1219 - client->irq = kxcjk1013_acpi_gpio_probe(client, data); 769 + client->irq = kxcjk1013_gpio_probe(client, data); 1220 770 1221 771 if (client->irq >= 0) { 1222 - trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, 1223 - indio_dev->id); 1224 - if (!trig) 772 + ret = devm_request_threaded_irq(&client->dev, client->irq, 773 + kxcjk1013_data_rdy_trig_poll, 774 + kxcjk1013_event_handler, 775 + IRQF_TRIGGER_RISING, 776 + KXCJK1013_IRQ_NAME, 777 + indio_dev); 778 + if (ret) 779 + return ret; 780 + 781 + data->dready_trig = devm_iio_trigger_alloc(&client->dev, 782 + "%s-dev%d", 783 + indio_dev->name, 784 + indio_dev->id); 785 + if (!data->dready_trig) 1225 786 return -ENOMEM; 1226 787 1227 - data->trig_mode = true; 788 + data->motion_trig = devm_iio_trigger_alloc(&client->dev, 789 + "%s-any-motion-dev%d", 790 + indio_dev->name, 791 + indio_dev->id); 792 + if (!data->motion_trig) 793 + return -ENOMEM; 1228 794 1229 - ret = devm_request_irq(&client->dev, client->irq, 1230 - iio_trigger_generic_data_rdy_poll, 1231 - IRQF_TRIGGER_RISING, 1232 - KXCJK1013_IRQ_NAME, 1233 - trig); 1234 - if (ret) { 1235 - dev_err(&client->dev, "unable to request IRQ\n"); 1236 - goto err_trigger_free; 1237 - } 1238 - 1239 - trig->dev.parent = &client->dev; 1240 - trig->ops = &kxcjk1013_trigger_ops; 1241 - iio_trigger_set_drvdata(trig, indio_dev); 1242 - data->trig = trig; 1243 - indio_dev->trig = trig; 795 + data->dready_trig->dev.parent = &client->dev; 796 + data->dready_trig->ops = &kxcjk1013_trigger_ops; 797 + iio_trigger_set_drvdata(data->dready_trig, indio_dev); 798 + indio_dev->trig = data->dready_trig; 1244 799 iio_trigger_get(indio_dev->trig); 1245 - 1246 - ret = iio_trigger_register(trig); 800 + ret = iio_trigger_register(data->dready_trig); 1247 801 if (ret) 1248 - goto err_trigger_free; 802 + return ret; 803 + 804 + data->motion_trig->dev.parent = &client->dev; 805 + data->motion_trig->ops = &kxcjk1013_trigger_ops; 806 + iio_trigger_set_drvdata(data->motion_trig, indio_dev); 807 + ret = iio_trigger_register(data->motion_trig); 808 + if (ret) { 809 + data->motion_trig = NULL; 810 + goto err_trigger_unregister; 811 + } 1249 812 1250 813 ret = iio_triggered_buffer_setup(indio_dev, 1251 814 &iio_pollfunc_store_time, ··· 1291 828 err_iio_unregister: 1292 829 iio_device_unregister(indio_dev); 1293 830 err_buffer_cleanup: 1294 - if (data->trig_mode) 831 + if (data->dready_trig) 1295 832 iio_triggered_buffer_cleanup(indio_dev); 1296 833 err_trigger_unregister: 1297 - if (data->trig_mode) 1298 - iio_trigger_unregister(trig); 1299 - err_trigger_free: 1300 - if (data->trig_mode) 1301 - iio_trigger_free(trig); 834 + if (data->dready_trig) 835 + iio_trigger_unregister(data->dready_trig); 836 + if (data->motion_trig) 837 + iio_trigger_unregister(data->motion_trig); 1302 838 1303 839 return ret; 1304 840 } ··· 1313 851 1314 852 iio_device_unregister(indio_dev); 1315 853 1316 - if (data->trig_mode) { 854 + if (data->dready_trig) { 1317 855 iio_triggered_buffer_cleanup(indio_dev); 1318 - iio_trigger_unregister(data->trig); 1319 - iio_trigger_free(data->trig); 856 + iio_trigger_unregister(data->dready_trig); 857 + iio_trigger_unregister(data->motion_trig); 1320 858 } 1321 859 1322 860 mutex_lock(&data->mutex); ··· 1348 886 1349 887 mutex_lock(&data->mutex); 1350 888 /* Check, if the suspend occured while active */ 1351 - if (data->trigger_on) 889 + if (data->dready_trigger_on || data->motion_trigger_on || 890 + data->ev_enable_state) 1352 891 ret = kxcjk1013_set_mode(data, OPERATION); 1353 892 mutex_unlock(&data->mutex); 1354 893 ··· 1394 931 }; 1395 932 1396 933 static const struct acpi_device_id kx_acpi_match[] = { 1397 - {"KXCJ1013", 0}, 934 + {"KXCJ1013", KXCJK1013}, 935 + {"KXCJ1008", KXCJ91008}, 936 + {"KXTJ1009", KXTJ21009}, 1398 937 { }, 1399 938 }; 1400 939 MODULE_DEVICE_TABLE(acpi, kx_acpi_match); 1401 940 1402 941 static const struct i2c_device_id kxcjk1013_id[] = { 1403 - {"kxcjk1013", 0}, 942 + {"kxcjk1013", KXCJK1013}, 943 + {"kxcj91008", KXCJ91008}, 944 + {"kxtj21009", KXTJ21009}, 1404 945 {} 1405 946 }; 1406 947
+1 -1
drivers/iio/adc/at91_adc.c
··· 266 266 } 267 267 268 268 /* Handler for classic adc channel eoc trigger */ 269 - void handle_adc_eoc_trigger(int irq, struct iio_dev *idev) 269 + static void handle_adc_eoc_trigger(int irq, struct iio_dev *idev) 270 270 { 271 271 struct at91_adc_state *st = iio_priv(idev); 272 272
-1
drivers/iio/adc/exynos_adc.c
··· 723 723 .remove = exynos_adc_remove, 724 724 .driver = { 725 725 .name = "exynos-adc", 726 - .owner = THIS_MODULE, 727 726 .of_match_table = exynos_adc_match, 728 727 .pm = &exynos_adc_pm_ops, 729 728 },
-1
drivers/iio/adc/lp8788_adc.c
··· 244 244 .remove = lp8788_adc_remove, 245 245 .driver = { 246 246 .name = LP8788_DEV_ADC, 247 - .owner = THIS_MODULE, 248 247 }, 249 248 }; 250 249 module_platform_driver(lp8788_adc_driver);
-1
drivers/iio/adc/rockchip_saradc.c
··· 141 141 struct resource *mem; 142 142 int ret; 143 143 int irq; 144 - u32 rate; 145 144 146 145 if (!np) 147 146 return -ENODEV;
-1
drivers/iio/adc/ti_am335x_adc.c
··· 545 545 static struct platform_driver tiadc_driver = { 546 546 .driver = { 547 547 .name = "TI-am335x-adc", 548 - .owner = THIS_MODULE, 549 548 .pm = TIADC_PM_OPS, 550 549 .of_match_table = ti_adc_dt_ids, 551 550 },
-1
drivers/iio/adc/twl4030-madc.c
··· 883 883 .remove = twl4030_madc_remove, 884 884 .driver = { 885 885 .name = "twl4030_madc", 886 - .owner = THIS_MODULE, 887 886 .of_match_table = of_match_ptr(twl_madc_of_match), 888 887 }, 889 888 };
-1
drivers/iio/adc/twl6030-gpadc.c
··· 994 994 .remove = twl6030_gpadc_remove, 995 995 .driver = { 996 996 .name = DRIVER_NAME, 997 - .owner = THIS_MODULE, 998 997 .pm = &twl6030_gpadc_pm_ops, 999 998 .of_match_table = of_twl6030_match_tbl, 1000 999 },
-1
drivers/iio/adc/vf610_adc.c
··· 698 698 .remove = vf610_adc_remove, 699 699 .driver = { 700 700 .name = DRIVER_NAME, 701 - .owner = THIS_MODULE, 702 701 .of_match_table = vf610_adc_match, 703 702 .pm = &vf610_adc_pm_ops, 704 703 },
-1
drivers/iio/adc/viperboard_adc.c
··· 145 145 static struct platform_driver vprbrd_adc_driver = { 146 146 .driver = { 147 147 .name = "viperboard-adc", 148 - .owner = THIS_MODULE, 149 148 }, 150 149 .probe = vprbrd_adc_probe, 151 150 };
+4 -1
drivers/iio/common/st_sensors/st_sensors_core.c
··· 306 306 if (of_pdata) 307 307 pdata = of_pdata; 308 308 309 - if (pdata) 309 + if (pdata) { 310 310 err = st_sensors_set_drdy_int_pin(indio_dev, pdata); 311 + if (err < 0) 312 + return err; 313 + } 311 314 312 315 err = st_sensors_set_enable(indio_dev, false); 313 316 if (err < 0)
+11
drivers/iio/gyro/Kconfig
··· 50 50 This driver can also be built as a module. If so, the module 51 51 will be called adxrs450. 52 52 53 + config BMG160 54 + tristate "BOSCH BMG160 Gyro Sensor" 55 + depends on I2C 56 + select IIO_TRIGGERED_BUFFER if IIO_BUFFER 57 + help 58 + Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor 59 + driver. This driver also supports BMI055 gyroscope. 60 + 61 + This driver can also be built as a module. If so, the module 62 + will be called bmg160. 63 + 53 64 config HID_SENSOR_GYRO_3D 54 65 depends on HID_SENSOR_HUB 55 66 select IIO_BUFFER
+1
drivers/iio/gyro/Makefile
··· 8 8 obj-$(CONFIG_ADIS16136) += adis16136.o 9 9 obj-$(CONFIG_ADIS16260) += adis16260.o 10 10 obj-$(CONFIG_ADXRS450) += adxrs450.o 11 + obj-$(CONFIG_BMG160) += bmg160.o 11 12 12 13 obj-$(CONFIG_HID_SENSOR_GYRO_3D) += hid-sensor-gyro-3d.o 13 14
+1228
drivers/iio/gyro/bmg160.c
··· 1 + /* 2 + * BMG160 Gyro Sensor driver 3 + * Copyright (c) 2014, Intel Corporation. 4 + * 5 + * This program is free software; you can redistribute it and/or modify it 6 + * under the terms and conditions of the GNU General Public License, 7 + * version 2, as published by the Free Software Foundation. 8 + * 9 + * This program is distributed in the hope it will be useful, but WITHOUT 10 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/module.h> 16 + #include <linux/i2c.h> 17 + #include <linux/interrupt.h> 18 + #include <linux/delay.h> 19 + #include <linux/slab.h> 20 + #include <linux/acpi.h> 21 + #include <linux/gpio/consumer.h> 22 + #include <linux/pm.h> 23 + #include <linux/pm_runtime.h> 24 + #include <linux/iio/iio.h> 25 + #include <linux/iio/sysfs.h> 26 + #include <linux/iio/buffer.h> 27 + #include <linux/iio/trigger.h> 28 + #include <linux/iio/events.h> 29 + #include <linux/iio/trigger_consumer.h> 30 + #include <linux/iio/triggered_buffer.h> 31 + 32 + #define BMG160_DRV_NAME "bmg160" 33 + #define BMG160_IRQ_NAME "bmg160_event" 34 + #define BMG160_GPIO_NAME "gpio_int" 35 + 36 + #define BMG160_REG_CHIP_ID 0x00 37 + #define BMG160_CHIP_ID_VAL 0x0F 38 + 39 + #define BMG160_REG_PMU_LPW 0x11 40 + #define BMG160_MODE_NORMAL 0x00 41 + #define BMG160_MODE_DEEP_SUSPEND 0x20 42 + #define BMG160_MODE_SUSPEND 0x80 43 + 44 + #define BMG160_REG_RANGE 0x0F 45 + 46 + #define BMG160_RANGE_2000DPS 0 47 + #define BMG160_RANGE_1000DPS 1 48 + #define BMG160_RANGE_500DPS 2 49 + #define BMG160_RANGE_250DPS 3 50 + #define BMG160_RANGE_125DPS 4 51 + 52 + #define BMG160_REG_PMU_BW 0x10 53 + #define BMG160_NO_FILTER 0 54 + #define BMG160_DEF_BW 100 55 + 56 + #define BMG160_REG_INT_MAP_0 0x17 57 + #define BMG160_INT_MAP_0_BIT_ANY BIT(1) 58 + 59 + #define BMG160_REG_INT_MAP_1 0x18 60 + #define BMG160_INT_MAP_1_BIT_NEW_DATA BIT(0) 61 + 62 + #define BMG160_REG_INT_RST_LATCH 0x21 63 + #define BMG160_INT_MODE_LATCH_RESET 0x80 64 + #define BMG160_INT_MODE_LATCH_INT 0x0F 65 + #define BMG160_INT_MODE_NON_LATCH_INT 0x00 66 + 67 + #define BMG160_REG_INT_EN_0 0x15 68 + #define BMG160_DATA_ENABLE_INT BIT(7) 69 + 70 + #define BMG160_REG_XOUT_L 0x02 71 + #define BMG160_AXIS_TO_REG(axis) (BMG160_REG_XOUT_L + (axis * 2)) 72 + 73 + #define BMG160_REG_SLOPE_THRES 0x1B 74 + #define BMG160_SLOPE_THRES_MASK 0x0F 75 + 76 + #define BMG160_REG_MOTION_INTR 0x1C 77 + #define BMG160_INT_MOTION_X BIT(0) 78 + #define BMG160_INT_MOTION_Y BIT(1) 79 + #define BMG160_INT_MOTION_Z BIT(2) 80 + #define BMG160_ANY_DUR_MASK 0x30 81 + #define BMG160_ANY_DUR_SHIFT 4 82 + 83 + #define BMG160_REG_INT_STATUS_2 0x0B 84 + #define BMG160_ANY_MOTION_MASK 0x07 85 + 86 + #define BMG160_REG_TEMP 0x08 87 + #define BMG160_TEMP_CENTER_VAL 23 88 + 89 + #define BMG160_MAX_STARTUP_TIME_MS 80 90 + 91 + #define BMG160_AUTO_SUSPEND_DELAY_MS 2000 92 + 93 + struct bmg160_data { 94 + struct i2c_client *client; 95 + struct iio_trigger *dready_trig; 96 + struct iio_trigger *motion_trig; 97 + struct mutex mutex; 98 + s16 buffer[8]; 99 + u8 bw_bits; 100 + u32 dps_range; 101 + int ev_enable_state; 102 + int slope_thres; 103 + bool dready_trigger_on; 104 + bool motion_trigger_on; 105 + int64_t timestamp; 106 + }; 107 + 108 + enum bmg160_axis { 109 + AXIS_X, 110 + AXIS_Y, 111 + AXIS_Z, 112 + }; 113 + 114 + static const struct { 115 + int val; 116 + int bw_bits; 117 + } bmg160_samp_freq_table[] = { {100, 0x07}, 118 + {200, 0x06}, 119 + {400, 0x03}, 120 + {1000, 0x02}, 121 + {2000, 0x01} }; 122 + 123 + static const struct { 124 + int scale; 125 + int dps_range; 126 + } bmg160_scale_table[] = { { 1065, BMG160_RANGE_2000DPS}, 127 + { 532, BMG160_RANGE_1000DPS}, 128 + { 266, BMG160_RANGE_500DPS}, 129 + { 133, BMG160_RANGE_250DPS}, 130 + { 66, BMG160_RANGE_125DPS} }; 131 + 132 + static int bmg160_set_mode(struct bmg160_data *data, u8 mode) 133 + { 134 + int ret; 135 + 136 + ret = i2c_smbus_write_byte_data(data->client, 137 + BMG160_REG_PMU_LPW, mode); 138 + if (ret < 0) { 139 + dev_err(&data->client->dev, "Error writing reg_pmu_lpw\n"); 140 + return ret; 141 + } 142 + 143 + return 0; 144 + } 145 + 146 + static int bmg160_convert_freq_to_bit(int val) 147 + { 148 + int i; 149 + 150 + for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) { 151 + if (bmg160_samp_freq_table[i].val == val) 152 + return bmg160_samp_freq_table[i].bw_bits; 153 + } 154 + 155 + return -EINVAL; 156 + } 157 + 158 + static int bmg160_set_bw(struct bmg160_data *data, int val) 159 + { 160 + int ret; 161 + int bw_bits; 162 + 163 + bw_bits = bmg160_convert_freq_to_bit(val); 164 + if (bw_bits < 0) 165 + return bw_bits; 166 + 167 + ret = i2c_smbus_write_byte_data(data->client, BMG160_REG_PMU_BW, 168 + bw_bits); 169 + if (ret < 0) { 170 + dev_err(&data->client->dev, "Error writing reg_pmu_bw\n"); 171 + return ret; 172 + } 173 + 174 + data->bw_bits = bw_bits; 175 + 176 + return 0; 177 + } 178 + 179 + static int bmg160_chip_init(struct bmg160_data *data) 180 + { 181 + int ret; 182 + 183 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_CHIP_ID); 184 + if (ret < 0) { 185 + dev_err(&data->client->dev, "Error reading reg_chip_id\n"); 186 + return ret; 187 + } 188 + 189 + dev_dbg(&data->client->dev, "Chip Id %x\n", ret); 190 + if (ret != BMG160_CHIP_ID_VAL) { 191 + dev_err(&data->client->dev, "invalid chip %x\n", ret); 192 + return -ENODEV; 193 + } 194 + 195 + ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); 196 + if (ret < 0) 197 + return ret; 198 + 199 + /* Wait upto 500 ms to be ready after changing mode */ 200 + usleep_range(500, 1000); 201 + 202 + /* Set Bandwidth */ 203 + ret = bmg160_set_bw(data, BMG160_DEF_BW); 204 + if (ret < 0) 205 + return ret; 206 + 207 + /* Set Default Range */ 208 + ret = i2c_smbus_write_byte_data(data->client, 209 + BMG160_REG_RANGE, 210 + BMG160_RANGE_500DPS); 211 + if (ret < 0) { 212 + dev_err(&data->client->dev, "Error writing reg_range\n"); 213 + return ret; 214 + } 215 + data->dps_range = BMG160_RANGE_500DPS; 216 + 217 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_SLOPE_THRES); 218 + if (ret < 0) { 219 + dev_err(&data->client->dev, "Error reading reg_slope_thres\n"); 220 + return ret; 221 + } 222 + data->slope_thres = ret; 223 + 224 + /* Set default interrupt mode */ 225 + ret = i2c_smbus_write_byte_data(data->client, 226 + BMG160_REG_INT_RST_LATCH, 227 + BMG160_INT_MODE_LATCH_INT | 228 + BMG160_INT_MODE_LATCH_RESET); 229 + if (ret < 0) { 230 + dev_err(&data->client->dev, 231 + "Error writing reg_motion_intr\n"); 232 + return ret; 233 + } 234 + 235 + return 0; 236 + } 237 + 238 + static int bmg160_set_power_state(struct bmg160_data *data, bool on) 239 + { 240 + #ifdef CONFIG_PM_RUNTIME 241 + int ret; 242 + 243 + if (on) 244 + ret = pm_runtime_get_sync(&data->client->dev); 245 + else { 246 + pm_runtime_mark_last_busy(&data->client->dev); 247 + ret = pm_runtime_put_autosuspend(&data->client->dev); 248 + } 249 + 250 + if (ret < 0) { 251 + dev_err(&data->client->dev, 252 + "Failed: bmg160_set_power_state for %d\n", on); 253 + return ret; 254 + } 255 + #endif 256 + 257 + return 0; 258 + } 259 + 260 + static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data, 261 + bool status) 262 + { 263 + int ret; 264 + 265 + /* Enable/Disable INT_MAP0 mapping */ 266 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_MAP_0); 267 + if (ret < 0) { 268 + dev_err(&data->client->dev, "Error reading reg_int_map0\n"); 269 + return ret; 270 + } 271 + if (status) 272 + ret |= BMG160_INT_MAP_0_BIT_ANY; 273 + else 274 + ret &= ~BMG160_INT_MAP_0_BIT_ANY; 275 + 276 + ret = i2c_smbus_write_byte_data(data->client, 277 + BMG160_REG_INT_MAP_0, 278 + ret); 279 + if (ret < 0) { 280 + dev_err(&data->client->dev, "Error writing reg_int_map0\n"); 281 + return ret; 282 + } 283 + 284 + /* Enable/Disable slope interrupts */ 285 + if (status) { 286 + /* Update slope thres */ 287 + ret = i2c_smbus_write_byte_data(data->client, 288 + BMG160_REG_SLOPE_THRES, 289 + data->slope_thres); 290 + if (ret < 0) { 291 + dev_err(&data->client->dev, 292 + "Error writing reg_slope_thres\n"); 293 + return ret; 294 + } 295 + 296 + ret = i2c_smbus_write_byte_data(data->client, 297 + BMG160_REG_MOTION_INTR, 298 + BMG160_INT_MOTION_X | 299 + BMG160_INT_MOTION_Y | 300 + BMG160_INT_MOTION_Z); 301 + if (ret < 0) { 302 + dev_err(&data->client->dev, 303 + "Error writing reg_motion_intr\n"); 304 + return ret; 305 + } 306 + 307 + /* 308 + * New data interrupt is always non-latched, 309 + * which will have higher priority, so no need 310 + * to set latched mode, we will be flooded anyway with INTR 311 + */ 312 + if (!data->dready_trigger_on) { 313 + ret = i2c_smbus_write_byte_data(data->client, 314 + BMG160_REG_INT_RST_LATCH, 315 + BMG160_INT_MODE_LATCH_INT | 316 + BMG160_INT_MODE_LATCH_RESET); 317 + if (ret < 0) { 318 + dev_err(&data->client->dev, 319 + "Error writing reg_rst_latch\n"); 320 + return ret; 321 + } 322 + } 323 + 324 + ret = i2c_smbus_write_byte_data(data->client, 325 + BMG160_REG_INT_EN_0, 326 + BMG160_DATA_ENABLE_INT); 327 + 328 + } else 329 + ret = i2c_smbus_write_byte_data(data->client, 330 + BMG160_REG_INT_EN_0, 331 + 0); 332 + 333 + if (ret < 0) { 334 + dev_err(&data->client->dev, "Error writing reg_int_en0\n"); 335 + return ret; 336 + } 337 + 338 + return 0; 339 + } 340 + 341 + static int bmg160_setup_new_data_interrupt(struct bmg160_data *data, 342 + bool status) 343 + { 344 + int ret; 345 + 346 + /* Enable/Disable INT_MAP1 mapping */ 347 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_MAP_1); 348 + if (ret < 0) { 349 + dev_err(&data->client->dev, "Error reading reg_int_map1\n"); 350 + return ret; 351 + } 352 + 353 + if (status) 354 + ret |= BMG160_INT_MAP_1_BIT_NEW_DATA; 355 + else 356 + ret &= ~BMG160_INT_MAP_1_BIT_NEW_DATA; 357 + 358 + ret = i2c_smbus_write_byte_data(data->client, 359 + BMG160_REG_INT_MAP_1, 360 + ret); 361 + if (ret < 0) { 362 + dev_err(&data->client->dev, "Error writing reg_int_map1\n"); 363 + return ret; 364 + } 365 + 366 + if (status) { 367 + ret = i2c_smbus_write_byte_data(data->client, 368 + BMG160_REG_INT_RST_LATCH, 369 + BMG160_INT_MODE_NON_LATCH_INT | 370 + BMG160_INT_MODE_LATCH_RESET); 371 + if (ret < 0) { 372 + dev_err(&data->client->dev, 373 + "Error writing reg_rst_latch\n"); 374 + return ret; 375 + } 376 + 377 + ret = i2c_smbus_write_byte_data(data->client, 378 + BMG160_REG_INT_EN_0, 379 + BMG160_DATA_ENABLE_INT); 380 + 381 + } else { 382 + /* Restore interrupt mode */ 383 + ret = i2c_smbus_write_byte_data(data->client, 384 + BMG160_REG_INT_RST_LATCH, 385 + BMG160_INT_MODE_LATCH_INT | 386 + BMG160_INT_MODE_LATCH_RESET); 387 + if (ret < 0) { 388 + dev_err(&data->client->dev, 389 + "Error writing reg_rst_latch\n"); 390 + return ret; 391 + } 392 + 393 + ret = i2c_smbus_write_byte_data(data->client, 394 + BMG160_REG_INT_EN_0, 395 + 0); 396 + } 397 + 398 + if (ret < 0) { 399 + dev_err(&data->client->dev, "Error writing reg_int_en0\n"); 400 + return ret; 401 + } 402 + 403 + return 0; 404 + } 405 + 406 + static int bmg160_get_bw(struct bmg160_data *data, int *val) 407 + { 408 + int i; 409 + 410 + for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) { 411 + if (bmg160_samp_freq_table[i].bw_bits == data->bw_bits) { 412 + *val = bmg160_samp_freq_table[i].val; 413 + return IIO_VAL_INT; 414 + } 415 + } 416 + 417 + return -EINVAL; 418 + } 419 + 420 + static int bmg160_set_scale(struct bmg160_data *data, int val) 421 + { 422 + int ret, i; 423 + 424 + for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) { 425 + if (bmg160_scale_table[i].scale == val) { 426 + ret = i2c_smbus_write_byte_data( 427 + data->client, 428 + BMG160_REG_RANGE, 429 + bmg160_scale_table[i].dps_range); 430 + if (ret < 0) { 431 + dev_err(&data->client->dev, 432 + "Error writing reg_range\n"); 433 + return ret; 434 + } 435 + data->dps_range = bmg160_scale_table[i].dps_range; 436 + return 0; 437 + } 438 + } 439 + 440 + return -EINVAL; 441 + } 442 + 443 + static int bmg160_get_temp(struct bmg160_data *data, int *val) 444 + { 445 + int ret; 446 + 447 + mutex_lock(&data->mutex); 448 + ret = bmg160_set_power_state(data, true); 449 + if (ret < 0) { 450 + mutex_unlock(&data->mutex); 451 + return ret; 452 + } 453 + 454 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_TEMP); 455 + if (ret < 0) { 456 + dev_err(&data->client->dev, "Error reading reg_temp\n"); 457 + bmg160_set_power_state(data, false); 458 + mutex_unlock(&data->mutex); 459 + return ret; 460 + } 461 + 462 + *val = sign_extend32(ret, 7); 463 + ret = bmg160_set_power_state(data, false); 464 + mutex_unlock(&data->mutex); 465 + if (ret < 0) 466 + return ret; 467 + 468 + return IIO_VAL_INT; 469 + } 470 + 471 + static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val) 472 + { 473 + int ret; 474 + 475 + mutex_lock(&data->mutex); 476 + ret = bmg160_set_power_state(data, true); 477 + if (ret < 0) { 478 + mutex_unlock(&data->mutex); 479 + return ret; 480 + } 481 + 482 + ret = i2c_smbus_read_word_data(data->client, BMG160_AXIS_TO_REG(axis)); 483 + if (ret < 0) { 484 + dev_err(&data->client->dev, "Error reading axis %d\n", axis); 485 + bmg160_set_power_state(data, false); 486 + mutex_unlock(&data->mutex); 487 + return ret; 488 + } 489 + 490 + *val = sign_extend32(ret, 15); 491 + ret = bmg160_set_power_state(data, false); 492 + mutex_unlock(&data->mutex); 493 + if (ret < 0) 494 + return ret; 495 + 496 + return IIO_VAL_INT; 497 + } 498 + 499 + static int bmg160_read_raw(struct iio_dev *indio_dev, 500 + struct iio_chan_spec const *chan, 501 + int *val, int *val2, long mask) 502 + { 503 + struct bmg160_data *data = iio_priv(indio_dev); 504 + int ret; 505 + 506 + switch (mask) { 507 + case IIO_CHAN_INFO_RAW: 508 + switch (chan->type) { 509 + case IIO_TEMP: 510 + return bmg160_get_temp(data, val); 511 + case IIO_ANGL_VEL: 512 + if (iio_buffer_enabled(indio_dev)) 513 + return -EBUSY; 514 + else 515 + return bmg160_get_axis(data, chan->scan_index, 516 + val); 517 + default: 518 + return -EINVAL; 519 + } 520 + case IIO_CHAN_INFO_OFFSET: 521 + if (chan->type == IIO_TEMP) { 522 + *val = BMG160_TEMP_CENTER_VAL; 523 + return IIO_VAL_INT; 524 + } else 525 + return -EINVAL; 526 + case IIO_CHAN_INFO_SCALE: 527 + *val = 0; 528 + switch (chan->type) { 529 + case IIO_TEMP: 530 + *val2 = 500000; 531 + return IIO_VAL_INT_PLUS_MICRO; 532 + case IIO_ANGL_VEL: 533 + { 534 + int i; 535 + 536 + for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) { 537 + if (bmg160_scale_table[i].dps_range == 538 + data->dps_range) { 539 + *val2 = bmg160_scale_table[i].scale; 540 + return IIO_VAL_INT_PLUS_MICRO; 541 + } 542 + } 543 + return -EINVAL; 544 + } 545 + default: 546 + return -EINVAL; 547 + } 548 + case IIO_CHAN_INFO_SAMP_FREQ: 549 + *val2 = 0; 550 + mutex_lock(&data->mutex); 551 + ret = bmg160_get_bw(data, val); 552 + mutex_unlock(&data->mutex); 553 + return ret; 554 + default: 555 + return -EINVAL; 556 + } 557 + } 558 + 559 + static int bmg160_write_raw(struct iio_dev *indio_dev, 560 + struct iio_chan_spec const *chan, 561 + int val, int val2, long mask) 562 + { 563 + struct bmg160_data *data = iio_priv(indio_dev); 564 + int ret; 565 + 566 + switch (mask) { 567 + case IIO_CHAN_INFO_SAMP_FREQ: 568 + mutex_lock(&data->mutex); 569 + /* 570 + * Section 4.2 of spec 571 + * In suspend mode, the only supported operations are reading 572 + * registers as well as writing to the (0x14) softreset 573 + * register. Since we will be in suspend mode by default, change 574 + * mode to power on for other writes. 575 + */ 576 + ret = bmg160_set_power_state(data, true); 577 + if (ret < 0) { 578 + mutex_unlock(&data->mutex); 579 + return ret; 580 + } 581 + ret = bmg160_set_bw(data, val); 582 + if (ret < 0) { 583 + bmg160_set_power_state(data, false); 584 + mutex_unlock(&data->mutex); 585 + return ret; 586 + } 587 + ret = bmg160_set_power_state(data, false); 588 + mutex_unlock(&data->mutex); 589 + return ret; 590 + case IIO_CHAN_INFO_SCALE: 591 + if (val) 592 + return -EINVAL; 593 + 594 + mutex_lock(&data->mutex); 595 + /* Refer to comments above for the suspend mode ops */ 596 + ret = bmg160_set_power_state(data, true); 597 + if (ret < 0) { 598 + mutex_unlock(&data->mutex); 599 + return ret; 600 + } 601 + ret = bmg160_set_scale(data, val2); 602 + if (ret < 0) { 603 + bmg160_set_power_state(data, false); 604 + mutex_unlock(&data->mutex); 605 + return ret; 606 + } 607 + ret = bmg160_set_power_state(data, false); 608 + mutex_unlock(&data->mutex); 609 + return ret; 610 + default: 611 + return -EINVAL; 612 + } 613 + 614 + return -EINVAL; 615 + } 616 + 617 + static int bmg160_read_event(struct iio_dev *indio_dev, 618 + const struct iio_chan_spec *chan, 619 + enum iio_event_type type, 620 + enum iio_event_direction dir, 621 + enum iio_event_info info, 622 + int *val, int *val2) 623 + { 624 + struct bmg160_data *data = iio_priv(indio_dev); 625 + 626 + *val2 = 0; 627 + switch (info) { 628 + case IIO_EV_INFO_VALUE: 629 + *val = data->slope_thres & BMG160_SLOPE_THRES_MASK; 630 + break; 631 + default: 632 + return -EINVAL; 633 + } 634 + 635 + return IIO_VAL_INT; 636 + } 637 + 638 + static int bmg160_write_event(struct iio_dev *indio_dev, 639 + const struct iio_chan_spec *chan, 640 + enum iio_event_type type, 641 + enum iio_event_direction dir, 642 + enum iio_event_info info, 643 + int val, int val2) 644 + { 645 + struct bmg160_data *data = iio_priv(indio_dev); 646 + 647 + switch (info) { 648 + case IIO_EV_INFO_VALUE: 649 + if (data->ev_enable_state) 650 + return -EBUSY; 651 + data->slope_thres &= ~BMG160_SLOPE_THRES_MASK; 652 + data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK); 653 + break; 654 + default: 655 + return -EINVAL; 656 + } 657 + 658 + return 0; 659 + } 660 + 661 + static int bmg160_read_event_config(struct iio_dev *indio_dev, 662 + const struct iio_chan_spec *chan, 663 + enum iio_event_type type, 664 + enum iio_event_direction dir) 665 + { 666 + 667 + struct bmg160_data *data = iio_priv(indio_dev); 668 + 669 + return data->ev_enable_state; 670 + } 671 + 672 + static int bmg160_write_event_config(struct iio_dev *indio_dev, 673 + const struct iio_chan_spec *chan, 674 + enum iio_event_type type, 675 + enum iio_event_direction dir, 676 + int state) 677 + { 678 + struct bmg160_data *data = iio_priv(indio_dev); 679 + int ret; 680 + 681 + if (state && data->ev_enable_state) 682 + return 0; 683 + 684 + mutex_lock(&data->mutex); 685 + 686 + if (!state && data->motion_trigger_on) { 687 + data->ev_enable_state = 0; 688 + mutex_unlock(&data->mutex); 689 + return 0; 690 + } 691 + /* 692 + * We will expect the enable and disable to do operation in 693 + * in reverse order. This will happen here anyway as our 694 + * resume operation uses sync mode runtime pm calls, the 695 + * suspend operation will be delayed by autosuspend delay 696 + * So the disable operation will still happen in reverse of 697 + * enable operation. When runtime pm is disabled the mode 698 + * is always on so sequence doesn't matter 699 + */ 700 + ret = bmg160_set_power_state(data, state); 701 + if (ret < 0) { 702 + mutex_unlock(&data->mutex); 703 + return ret; 704 + } 705 + 706 + ret = bmg160_setup_any_motion_interrupt(data, state); 707 + if (ret < 0) { 708 + mutex_unlock(&data->mutex); 709 + return ret; 710 + } 711 + 712 + data->ev_enable_state = state; 713 + mutex_unlock(&data->mutex); 714 + 715 + return 0; 716 + } 717 + 718 + static int bmg160_validate_trigger(struct iio_dev *indio_dev, 719 + struct iio_trigger *trig) 720 + { 721 + struct bmg160_data *data = iio_priv(indio_dev); 722 + 723 + if (data->dready_trig != trig && data->motion_trig != trig) 724 + return -EINVAL; 725 + 726 + return 0; 727 + } 728 + 729 + static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("100 200 400 1000 2000"); 730 + 731 + static IIO_CONST_ATTR(in_anglvel_scale_available, 732 + "0.001065 0.000532 0.000266 0.000133 0.000066"); 733 + 734 + static struct attribute *bmg160_attributes[] = { 735 + &iio_const_attr_sampling_frequency_available.dev_attr.attr, 736 + &iio_const_attr_in_anglvel_scale_available.dev_attr.attr, 737 + NULL, 738 + }; 739 + 740 + static const struct attribute_group bmg160_attrs_group = { 741 + .attrs = bmg160_attributes, 742 + }; 743 + 744 + static const struct iio_event_spec bmg160_event = { 745 + .type = IIO_EV_TYPE_ROC, 746 + .dir = IIO_EV_DIR_RISING | IIO_EV_DIR_FALLING, 747 + .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) | 748 + BIT(IIO_EV_INFO_ENABLE) 749 + }; 750 + 751 + #define BMG160_CHANNEL(_axis) { \ 752 + .type = IIO_ANGL_VEL, \ 753 + .modified = 1, \ 754 + .channel2 = IIO_MOD_##_axis, \ 755 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 756 + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ 757 + BIT(IIO_CHAN_INFO_SAMP_FREQ), \ 758 + .scan_index = AXIS_##_axis, \ 759 + .scan_type = { \ 760 + .sign = 's', \ 761 + .realbits = 16, \ 762 + .storagebits = 16, \ 763 + }, \ 764 + .event_spec = &bmg160_event, \ 765 + .num_event_specs = 1 \ 766 + } 767 + 768 + static const struct iio_chan_spec bmg160_channels[] = { 769 + { 770 + .type = IIO_TEMP, 771 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 772 + BIT(IIO_CHAN_INFO_SCALE) | 773 + BIT(IIO_CHAN_INFO_OFFSET), 774 + .scan_index = -1, 775 + }, 776 + BMG160_CHANNEL(X), 777 + BMG160_CHANNEL(Y), 778 + BMG160_CHANNEL(Z), 779 + IIO_CHAN_SOFT_TIMESTAMP(3), 780 + }; 781 + 782 + static const struct iio_info bmg160_info = { 783 + .attrs = &bmg160_attrs_group, 784 + .read_raw = bmg160_read_raw, 785 + .write_raw = bmg160_write_raw, 786 + .read_event_value = bmg160_read_event, 787 + .write_event_value = bmg160_write_event, 788 + .write_event_config = bmg160_write_event_config, 789 + .read_event_config = bmg160_read_event_config, 790 + .validate_trigger = bmg160_validate_trigger, 791 + .driver_module = THIS_MODULE, 792 + }; 793 + 794 + static irqreturn_t bmg160_trigger_handler(int irq, void *p) 795 + { 796 + struct iio_poll_func *pf = p; 797 + struct iio_dev *indio_dev = pf->indio_dev; 798 + struct bmg160_data *data = iio_priv(indio_dev); 799 + int bit, ret, i = 0; 800 + 801 + mutex_lock(&data->mutex); 802 + for_each_set_bit(bit, indio_dev->buffer->scan_mask, 803 + indio_dev->masklength) { 804 + ret = i2c_smbus_read_word_data(data->client, 805 + BMG160_AXIS_TO_REG(bit)); 806 + if (ret < 0) { 807 + mutex_unlock(&data->mutex); 808 + goto err; 809 + } 810 + data->buffer[i++] = ret; 811 + } 812 + mutex_unlock(&data->mutex); 813 + 814 + iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, 815 + data->timestamp); 816 + err: 817 + iio_trigger_notify_done(indio_dev->trig); 818 + 819 + return IRQ_HANDLED; 820 + } 821 + 822 + static int bmg160_trig_try_reen(struct iio_trigger *trig) 823 + { 824 + struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); 825 + struct bmg160_data *data = iio_priv(indio_dev); 826 + int ret; 827 + 828 + /* new data interrupts don't need ack */ 829 + if (data->dready_trigger_on) 830 + return 0; 831 + 832 + /* Set latched mode interrupt and clear any latched interrupt */ 833 + ret = i2c_smbus_write_byte_data(data->client, 834 + BMG160_REG_INT_RST_LATCH, 835 + BMG160_INT_MODE_LATCH_INT | 836 + BMG160_INT_MODE_LATCH_RESET); 837 + if (ret < 0) { 838 + dev_err(&data->client->dev, "Error writing reg_rst_latch\n"); 839 + return ret; 840 + } 841 + 842 + return 0; 843 + } 844 + 845 + static int bmg160_data_rdy_trigger_set_state(struct iio_trigger *trig, 846 + bool state) 847 + { 848 + struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); 849 + struct bmg160_data *data = iio_priv(indio_dev); 850 + int ret; 851 + 852 + mutex_lock(&data->mutex); 853 + 854 + if (!state && data->ev_enable_state && data->motion_trigger_on) { 855 + data->motion_trigger_on = false; 856 + mutex_unlock(&data->mutex); 857 + return 0; 858 + } 859 + 860 + /* 861 + * Refer to comment in bmg160_write_event_config for 862 + * enable/disable operation order 863 + */ 864 + ret = bmg160_set_power_state(data, state); 865 + if (ret < 0) { 866 + mutex_unlock(&data->mutex); 867 + return ret; 868 + } 869 + if (data->motion_trig == trig) 870 + ret = bmg160_setup_any_motion_interrupt(data, state); 871 + else 872 + ret = bmg160_setup_new_data_interrupt(data, state); 873 + if (ret < 0) { 874 + mutex_unlock(&data->mutex); 875 + return ret; 876 + } 877 + if (data->motion_trig == trig) 878 + data->motion_trigger_on = state; 879 + else 880 + data->dready_trigger_on = state; 881 + 882 + mutex_unlock(&data->mutex); 883 + 884 + return 0; 885 + } 886 + 887 + static const struct iio_trigger_ops bmg160_trigger_ops = { 888 + .set_trigger_state = bmg160_data_rdy_trigger_set_state, 889 + .try_reenable = bmg160_trig_try_reen, 890 + .owner = THIS_MODULE, 891 + }; 892 + 893 + static irqreturn_t bmg160_event_handler(int irq, void *private) 894 + { 895 + struct iio_dev *indio_dev = private; 896 + struct bmg160_data *data = iio_priv(indio_dev); 897 + int ret; 898 + int dir; 899 + 900 + ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_STATUS_2); 901 + if (ret < 0) { 902 + dev_err(&data->client->dev, "Error reading reg_int_status2\n"); 903 + goto ack_intr_status; 904 + } 905 + 906 + if (ret & 0x08) 907 + dir = IIO_EV_DIR_RISING; 908 + else 909 + dir = IIO_EV_DIR_FALLING; 910 + 911 + if (ret & BMG160_ANY_MOTION_MASK) 912 + iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL, 913 + 0, 914 + IIO_MOD_X_OR_Y_OR_Z, 915 + IIO_EV_TYPE_ROC, 916 + dir), 917 + data->timestamp); 918 + 919 + ack_intr_status: 920 + if (!data->dready_trigger_on) { 921 + ret = i2c_smbus_write_byte_data(data->client, 922 + BMG160_REG_INT_RST_LATCH, 923 + BMG160_INT_MODE_LATCH_INT | 924 + BMG160_INT_MODE_LATCH_RESET); 925 + if (ret < 0) 926 + dev_err(&data->client->dev, 927 + "Error writing reg_rst_latch\n"); 928 + } 929 + 930 + return IRQ_HANDLED; 931 + } 932 + 933 + static irqreturn_t bmg160_data_rdy_trig_poll(int irq, void *private) 934 + { 935 + struct iio_dev *indio_dev = private; 936 + struct bmg160_data *data = iio_priv(indio_dev); 937 + 938 + data->timestamp = iio_get_time_ns(); 939 + 940 + if (data->dready_trigger_on) 941 + iio_trigger_poll(data->dready_trig); 942 + else if (data->motion_trigger_on) 943 + iio_trigger_poll(data->motion_trig); 944 + 945 + if (data->ev_enable_state) 946 + return IRQ_WAKE_THREAD; 947 + else 948 + return IRQ_HANDLED; 949 + 950 + } 951 + 952 + static int bmg160_gpio_probe(struct i2c_client *client, 953 + struct bmg160_data *data) 954 + 955 + { 956 + struct device *dev; 957 + struct gpio_desc *gpio; 958 + int ret; 959 + 960 + if (!client) 961 + return -EINVAL; 962 + 963 + dev = &client->dev; 964 + 965 + /* data ready gpio interrupt pin */ 966 + gpio = devm_gpiod_get_index(dev, BMG160_GPIO_NAME, 0); 967 + if (IS_ERR(gpio)) { 968 + dev_err(dev, "acpi gpio get index failed\n"); 969 + return PTR_ERR(gpio); 970 + } 971 + 972 + ret = gpiod_direction_input(gpio); 973 + if (ret) 974 + return ret; 975 + 976 + ret = gpiod_to_irq(gpio); 977 + 978 + dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret); 979 + 980 + return ret; 981 + } 982 + 983 + static const char *bmg160_match_acpi_device(struct device *dev) 984 + { 985 + const struct acpi_device_id *id; 986 + 987 + id = acpi_match_device(dev->driver->acpi_match_table, dev); 988 + if (!id) 989 + return NULL; 990 + 991 + return dev_name(dev); 992 + } 993 + 994 + static int bmg160_probe(struct i2c_client *client, 995 + const struct i2c_device_id *id) 996 + { 997 + struct bmg160_data *data; 998 + struct iio_dev *indio_dev; 999 + int ret; 1000 + const char *name = NULL; 1001 + 1002 + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); 1003 + if (!indio_dev) 1004 + return -ENOMEM; 1005 + 1006 + data = iio_priv(indio_dev); 1007 + i2c_set_clientdata(client, indio_dev); 1008 + data->client = client; 1009 + 1010 + ret = bmg160_chip_init(data); 1011 + if (ret < 0) 1012 + return ret; 1013 + 1014 + mutex_init(&data->mutex); 1015 + 1016 + if (id) 1017 + name = id->name; 1018 + 1019 + if (ACPI_HANDLE(&client->dev)) 1020 + name = bmg160_match_acpi_device(&client->dev); 1021 + 1022 + indio_dev->dev.parent = &client->dev; 1023 + indio_dev->channels = bmg160_channels; 1024 + indio_dev->num_channels = ARRAY_SIZE(bmg160_channels); 1025 + indio_dev->name = name; 1026 + indio_dev->modes = INDIO_DIRECT_MODE; 1027 + indio_dev->info = &bmg160_info; 1028 + 1029 + if (client->irq <= 0) 1030 + client->irq = bmg160_gpio_probe(client, data); 1031 + 1032 + if (client->irq > 0) { 1033 + ret = devm_request_threaded_irq(&client->dev, 1034 + client->irq, 1035 + bmg160_data_rdy_trig_poll, 1036 + bmg160_event_handler, 1037 + IRQF_TRIGGER_RISING, 1038 + BMG160_IRQ_NAME, 1039 + indio_dev); 1040 + if (ret) 1041 + return ret; 1042 + 1043 + data->dready_trig = devm_iio_trigger_alloc(&client->dev, 1044 + "%s-dev%d", 1045 + indio_dev->name, 1046 + indio_dev->id); 1047 + if (!data->dready_trig) 1048 + return -ENOMEM; 1049 + 1050 + data->motion_trig = devm_iio_trigger_alloc(&client->dev, 1051 + "%s-any-motion-dev%d", 1052 + indio_dev->name, 1053 + indio_dev->id); 1054 + if (!data->motion_trig) 1055 + return -ENOMEM; 1056 + 1057 + data->dready_trig->dev.parent = &client->dev; 1058 + data->dready_trig->ops = &bmg160_trigger_ops; 1059 + iio_trigger_set_drvdata(data->dready_trig, indio_dev); 1060 + ret = iio_trigger_register(data->dready_trig); 1061 + if (ret) 1062 + return ret; 1063 + 1064 + data->motion_trig->dev.parent = &client->dev; 1065 + data->motion_trig->ops = &bmg160_trigger_ops; 1066 + iio_trigger_set_drvdata(data->motion_trig, indio_dev); 1067 + ret = iio_trigger_register(data->motion_trig); 1068 + if (ret) { 1069 + data->motion_trig = NULL; 1070 + goto err_trigger_unregister; 1071 + } 1072 + 1073 + ret = iio_triggered_buffer_setup(indio_dev, 1074 + NULL, 1075 + bmg160_trigger_handler, 1076 + NULL); 1077 + if (ret < 0) { 1078 + dev_err(&client->dev, 1079 + "iio triggered buffer setup failed\n"); 1080 + goto err_trigger_unregister; 1081 + } 1082 + } 1083 + 1084 + ret = iio_device_register(indio_dev); 1085 + if (ret < 0) { 1086 + dev_err(&client->dev, "unable to register iio device\n"); 1087 + goto err_buffer_cleanup; 1088 + } 1089 + 1090 + ret = pm_runtime_set_active(&client->dev); 1091 + if (ret) 1092 + goto err_iio_unregister; 1093 + 1094 + pm_runtime_enable(&client->dev); 1095 + pm_runtime_set_autosuspend_delay(&client->dev, 1096 + BMG160_AUTO_SUSPEND_DELAY_MS); 1097 + pm_runtime_use_autosuspend(&client->dev); 1098 + 1099 + return 0; 1100 + 1101 + err_iio_unregister: 1102 + iio_device_unregister(indio_dev); 1103 + err_buffer_cleanup: 1104 + if (data->dready_trig) 1105 + iio_triggered_buffer_cleanup(indio_dev); 1106 + err_trigger_unregister: 1107 + if (data->dready_trig) 1108 + iio_trigger_unregister(data->dready_trig); 1109 + if (data->motion_trig) 1110 + iio_trigger_unregister(data->motion_trig); 1111 + 1112 + return ret; 1113 + } 1114 + 1115 + static int bmg160_remove(struct i2c_client *client) 1116 + { 1117 + struct iio_dev *indio_dev = i2c_get_clientdata(client); 1118 + struct bmg160_data *data = iio_priv(indio_dev); 1119 + 1120 + pm_runtime_disable(&client->dev); 1121 + pm_runtime_set_suspended(&client->dev); 1122 + pm_runtime_put_noidle(&client->dev); 1123 + 1124 + iio_device_unregister(indio_dev); 1125 + 1126 + if (data->dready_trig) { 1127 + iio_triggered_buffer_cleanup(indio_dev); 1128 + iio_trigger_unregister(data->dready_trig); 1129 + iio_trigger_unregister(data->motion_trig); 1130 + } 1131 + 1132 + mutex_lock(&data->mutex); 1133 + bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND); 1134 + mutex_unlock(&data->mutex); 1135 + 1136 + return 0; 1137 + } 1138 + 1139 + #ifdef CONFIG_PM_SLEEP 1140 + static int bmg160_suspend(struct device *dev) 1141 + { 1142 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1143 + struct bmg160_data *data = iio_priv(indio_dev); 1144 + 1145 + mutex_lock(&data->mutex); 1146 + bmg160_set_mode(data, BMG160_MODE_SUSPEND); 1147 + mutex_unlock(&data->mutex); 1148 + 1149 + return 0; 1150 + } 1151 + 1152 + static int bmg160_resume(struct device *dev) 1153 + { 1154 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1155 + struct bmg160_data *data = iio_priv(indio_dev); 1156 + 1157 + mutex_lock(&data->mutex); 1158 + if (data->dready_trigger_on || data->motion_trigger_on || 1159 + data->ev_enable_state) 1160 + bmg160_set_mode(data, BMG160_MODE_NORMAL); 1161 + mutex_unlock(&data->mutex); 1162 + 1163 + return 0; 1164 + } 1165 + #endif 1166 + 1167 + #ifdef CONFIG_PM_RUNTIME 1168 + static int bmg160_runtime_suspend(struct device *dev) 1169 + { 1170 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1171 + struct bmg160_data *data = iio_priv(indio_dev); 1172 + 1173 + return bmg160_set_mode(data, BMG160_MODE_SUSPEND); 1174 + } 1175 + 1176 + static int bmg160_runtime_resume(struct device *dev) 1177 + { 1178 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1179 + struct bmg160_data *data = iio_priv(indio_dev); 1180 + int ret; 1181 + 1182 + ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); 1183 + if (ret < 0) 1184 + return ret; 1185 + 1186 + msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS); 1187 + 1188 + return 0; 1189 + } 1190 + #endif 1191 + 1192 + static const struct dev_pm_ops bmg160_pm_ops = { 1193 + SET_SYSTEM_SLEEP_PM_OPS(bmg160_suspend, bmg160_resume) 1194 + SET_RUNTIME_PM_OPS(bmg160_runtime_suspend, 1195 + bmg160_runtime_resume, NULL) 1196 + }; 1197 + 1198 + static const struct acpi_device_id bmg160_acpi_match[] = { 1199 + {"BMG0160", 0}, 1200 + {"BMI055B", 0}, 1201 + {}, 1202 + }; 1203 + 1204 + MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match); 1205 + 1206 + static const struct i2c_device_id bmg160_id[] = { 1207 + {"bmg160", 0}, 1208 + {"bmi055_gyro", 0}, 1209 + {} 1210 + }; 1211 + 1212 + MODULE_DEVICE_TABLE(i2c, bmg160_id); 1213 + 1214 + static struct i2c_driver bmg160_driver = { 1215 + .driver = { 1216 + .name = BMG160_DRV_NAME, 1217 + .acpi_match_table = ACPI_PTR(bmg160_acpi_match), 1218 + .pm = &bmg160_pm_ops, 1219 + }, 1220 + .probe = bmg160_probe, 1221 + .remove = bmg160_remove, 1222 + .id_table = bmg160_id, 1223 + }; 1224 + module_i2c_driver(bmg160_driver); 1225 + 1226 + MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>"); 1227 + MODULE_LICENSE("GPL v2"); 1228 + MODULE_DESCRIPTION("BMG160 Gyro driver");
-1
drivers/iio/gyro/hid-sensor-gyro-3d.c
··· 416 416 .id_table = hid_gyro_3d_ids, 417 417 .driver = { 418 418 .name = KBUILD_MODNAME, 419 - .owner = THIS_MODULE, 420 419 }, 421 420 .probe = hid_gyro_3d_probe, 422 421 .remove = hid_gyro_3d_remove,
-1
drivers/iio/humidity/dht11.c
··· 281 281 static struct platform_driver dht11_driver = { 282 282 .driver = { 283 283 .name = DRIVER_NAME, 284 - .owner = THIS_MODULE, 285 284 .of_match_table = dht11_dt_ids, 286 285 }, 287 286 .probe = dht11_probe,
+1 -2
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
··· 673 673 674 674 st = iio_priv(indio_dev); 675 675 st->client = client; 676 - pdata = (struct inv_mpu6050_platform_data 677 - *)dev_get_platdata(&client->dev); 676 + pdata = dev_get_platdata(&client->dev); 678 677 if (pdata) 679 678 st->plat_data = *pdata; 680 679 /* power is turned on inside check chip type*/
+10
drivers/iio/light/Kconfig
··· 17 17 This driver can also be built as a module. If so, the module 18 18 will be called adjd_s311. 19 19 20 + config AL3320A 21 + tristate "AL3320A ambient light sensor" 22 + depends on I2C 23 + help 24 + Say Y here if you want to build a driver for the Dyna Image AL3320A 25 + ambient light sensor. 26 + 27 + To compile this driver as a module, choose M here: the 28 + module will be called al3320a. 29 + 20 30 config APDS9300 21 31 tristate "APDS9300 ambient light sensor" 22 32 depends on I2C
+1
drivers/iio/light/Makefile
··· 4 4 5 5 # When adding new entries keep the list in alphabetical order 6 6 obj-$(CONFIG_ADJD_S311) += adjd_s311.o 7 + obj-$(CONFIG_AL3320A) += al3320a.o 7 8 obj-$(CONFIG_APDS9300) += apds9300.o 8 9 obj-$(CONFIG_CM32181) += cm32181.o 9 10 obj-$(CONFIG_CM36651) += cm36651.o
+232
drivers/iio/light/al3320a.c
··· 1 + /* 2 + * AL3320A - Dyna Image Ambient Light Sensor 3 + * 4 + * Copyright (c) 2014, Intel Corporation. 5 + * 6 + * This file is subject to the terms and conditions of version 2 of 7 + * the GNU General Public License. See the file COPYING in the main 8 + * directory of this archive for more details. 9 + * 10 + * IIO driver for AL3320A (7-bit I2C slave address 0x1C). 11 + * 12 + * TODO: interrupt support, thresholds 13 + * 14 + */ 15 + 16 + #include <linux/module.h> 17 + #include <linux/init.h> 18 + #include <linux/i2c.h> 19 + 20 + #include <linux/iio/iio.h> 21 + #include <linux/iio/sysfs.h> 22 + 23 + #define AL3320A_DRV_NAME "al3320a" 24 + 25 + #define AL3320A_REG_CONFIG 0x00 26 + #define AL3320A_REG_STATUS 0x01 27 + #define AL3320A_REG_INT 0x02 28 + #define AL3320A_REG_WAIT 0x06 29 + #define AL3320A_REG_CONFIG_RANGE 0x07 30 + #define AL3320A_REG_PERSIST 0x08 31 + #define AL3320A_REG_MEAN_TIME 0x09 32 + #define AL3320A_REG_ADUMMY 0x0A 33 + #define AL3320A_REG_DATA_LOW 0x22 34 + 35 + #define AL3320A_REG_LOW_THRESH_LOW 0x30 36 + #define AL3320A_REG_LOW_THRESH_HIGH 0x31 37 + #define AL3320A_REG_HIGH_THRESH_LOW 0x32 38 + #define AL3320A_REG_HIGH_THRESH_HIGH 0x33 39 + 40 + #define AL3320A_CONFIG_DISABLE 0x00 41 + #define AL3320A_CONFIG_ENABLE 0x01 42 + 43 + #define AL3320A_GAIN_SHIFT 1 44 + #define AL3320A_GAIN_MASK (BIT(2) | BIT(1)) 45 + 46 + /* chip params default values */ 47 + #define AL3320A_DEFAULT_MEAN_TIME 4 48 + #define AL3320A_DEFAULT_WAIT_TIME 0 /* no waiting */ 49 + 50 + #define AL3320A_SCALE_AVAILABLE "0.512 0.128 0.032 0.01" 51 + 52 + enum al3320a_range { 53 + AL3320A_RANGE_1, /* 33.28 Klx */ 54 + AL3320A_RANGE_2, /* 8.32 Klx */ 55 + AL3320A_RANGE_3, /* 2.08 Klx */ 56 + AL3320A_RANGE_4 /* 0.65 Klx */ 57 + }; 58 + 59 + static const int al3320a_scales[][2] = { 60 + {0, 512000}, {0, 128000}, {0, 32000}, {0, 10000} 61 + }; 62 + 63 + struct al3320a_data { 64 + struct i2c_client *client; 65 + }; 66 + 67 + static const struct iio_chan_spec al3320a_channels[] = { 68 + { 69 + .type = IIO_LIGHT, 70 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 71 + BIT(IIO_CHAN_INFO_SCALE), 72 + } 73 + }; 74 + 75 + static IIO_CONST_ATTR(in_illuminance_scale_available, AL3320A_SCALE_AVAILABLE); 76 + 77 + static struct attribute *al3320a_attributes[] = { 78 + &iio_const_attr_in_illuminance_scale_available.dev_attr.attr, 79 + NULL, 80 + }; 81 + 82 + static const struct attribute_group al3320a_attribute_group = { 83 + .attrs = al3320a_attributes, 84 + }; 85 + 86 + static int al3320a_init(struct al3320a_data *data) 87 + { 88 + int ret; 89 + 90 + /* power on */ 91 + ret = i2c_smbus_write_byte_data(data->client, AL3320A_REG_CONFIG, 92 + AL3320A_CONFIG_ENABLE); 93 + if (ret < 0) 94 + return ret; 95 + 96 + ret = i2c_smbus_write_byte_data(data->client, AL3320A_REG_CONFIG_RANGE, 97 + AL3320A_RANGE_3 << AL3320A_GAIN_SHIFT); 98 + if (ret < 0) 99 + return ret; 100 + 101 + ret = i2c_smbus_write_byte_data(data->client, AL3320A_REG_MEAN_TIME, 102 + AL3320A_DEFAULT_MEAN_TIME); 103 + if (ret < 0) 104 + return ret; 105 + 106 + ret = i2c_smbus_write_byte_data(data->client, AL3320A_REG_WAIT, 107 + AL3320A_DEFAULT_WAIT_TIME); 108 + if (ret < 0) 109 + return ret; 110 + 111 + return 0; 112 + } 113 + 114 + static int al3320a_read_raw(struct iio_dev *indio_dev, 115 + struct iio_chan_spec const *chan, int *val, 116 + int *val2, long mask) 117 + { 118 + struct al3320a_data *data = iio_priv(indio_dev); 119 + int ret; 120 + 121 + switch (mask) { 122 + case IIO_CHAN_INFO_RAW: 123 + /* 124 + * ALS ADC value is stored in two adjacent registers: 125 + * - low byte of output is stored at AL3320A_REG_DATA_LOW 126 + * - high byte of output is stored at AL3320A_REG_DATA_LOW + 1 127 + */ 128 + ret = i2c_smbus_read_word_data(data->client, 129 + AL3320A_REG_DATA_LOW); 130 + if (ret < 0) 131 + return ret; 132 + *val = ret; 133 + return IIO_VAL_INT; 134 + case IIO_CHAN_INFO_SCALE: 135 + ret = i2c_smbus_read_byte_data(data->client, 136 + AL3320A_REG_CONFIG_RANGE); 137 + if (ret < 0) 138 + return ret; 139 + 140 + ret = (ret & AL3320A_GAIN_MASK) >> AL3320A_GAIN_SHIFT; 141 + *val = al3320a_scales[ret][0]; 142 + *val2 = al3320a_scales[ret][1]; 143 + 144 + return IIO_VAL_INT_PLUS_MICRO; 145 + } 146 + return -EINVAL; 147 + } 148 + 149 + static int al3320a_write_raw(struct iio_dev *indio_dev, 150 + struct iio_chan_spec const *chan, int val, 151 + int val2, long mask) 152 + { 153 + struct al3320a_data *data = iio_priv(indio_dev); 154 + int i; 155 + 156 + switch (mask) { 157 + case IIO_CHAN_INFO_SCALE: 158 + for (i = 0; i < ARRAY_SIZE(al3320a_scales); i++) { 159 + if (val == al3320a_scales[i][0] && 160 + val2 == al3320a_scales[i][1]) 161 + return i2c_smbus_write_byte_data(data->client, 162 + AL3320A_REG_CONFIG_RANGE, 163 + i << AL3320A_GAIN_SHIFT); 164 + } 165 + break; 166 + } 167 + return -EINVAL; 168 + } 169 + 170 + static const struct iio_info al3320a_info = { 171 + .driver_module = THIS_MODULE, 172 + .read_raw = al3320a_read_raw, 173 + .write_raw = al3320a_write_raw, 174 + .attrs = &al3320a_attribute_group, 175 + }; 176 + 177 + static int al3320a_probe(struct i2c_client *client, 178 + const struct i2c_device_id *id) 179 + { 180 + struct al3320a_data *data; 181 + struct iio_dev *indio_dev; 182 + int ret; 183 + 184 + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); 185 + if (!indio_dev) 186 + return -ENOMEM; 187 + 188 + data = iio_priv(indio_dev); 189 + i2c_set_clientdata(client, indio_dev); 190 + data->client = client; 191 + 192 + indio_dev->dev.parent = &client->dev; 193 + indio_dev->info = &al3320a_info; 194 + indio_dev->name = AL3320A_DRV_NAME; 195 + indio_dev->channels = al3320a_channels; 196 + indio_dev->num_channels = ARRAY_SIZE(al3320a_channels); 197 + indio_dev->modes = INDIO_DIRECT_MODE; 198 + 199 + ret = al3320a_init(data); 200 + if (ret < 0) { 201 + dev_err(&client->dev, "al3320a chip init failed\n"); 202 + return ret; 203 + } 204 + return devm_iio_device_register(&client->dev, indio_dev); 205 + } 206 + 207 + static int al3320a_remove(struct i2c_client *client) 208 + { 209 + return i2c_smbus_write_byte_data(client, AL3320A_REG_CONFIG, 210 + AL3320A_CONFIG_DISABLE); 211 + } 212 + 213 + static const struct i2c_device_id al3320a_id[] = { 214 + {"al3320a", 0}, 215 + {} 216 + }; 217 + MODULE_DEVICE_TABLE(i2c, al3320a_id); 218 + 219 + static struct i2c_driver al3320a_driver = { 220 + .driver = { 221 + .name = AL3320A_DRV_NAME, 222 + }, 223 + .probe = al3320a_probe, 224 + .remove = al3320a_remove, 225 + .id_table = al3320a_id, 226 + }; 227 + 228 + module_i2c_driver(al3320a_driver); 229 + 230 + MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>"); 231 + MODULE_DESCRIPTION("AL3320A Ambient Light Sensor driver"); 232 + MODULE_LICENSE("GPL v2");
-1
drivers/iio/light/hid-sensor-als.c
··· 381 381 .id_table = hid_als_ids, 382 382 .driver = { 383 383 .name = KBUILD_MODNAME, 384 - .owner = THIS_MODULE, 385 384 }, 386 385 .probe = hid_als_probe, 387 386 .remove = hid_als_remove,
-1
drivers/iio/light/hid-sensor-prox.c
··· 373 373 .id_table = hid_prox_ids, 374 374 .driver = { 375 375 .name = KBUILD_MODNAME, 376 - .owner = THIS_MODULE, 377 376 }, 378 377 .probe = hid_prox_probe, 379 378 .remove = hid_prox_remove,
-1
drivers/iio/light/lm3533-als.c
··· 915 915 static struct platform_driver lm3533_als_driver = { 916 916 .driver = { 917 917 .name = "lm3533-als", 918 - .owner = THIS_MODULE, 919 918 }, 920 919 .probe = lm3533_als_probe, 921 920 .remove = lm3533_als_remove,
+5 -5
drivers/iio/magnetometer/ak8975.c
··· 477 477 }; 478 478 MODULE_DEVICE_TABLE(acpi, ak_acpi_match); 479 479 480 - static char *ak8975_match_acpi_device(struct device *dev, 481 - enum asahi_compass_chipset *chipset) 480 + static const char *ak8975_match_acpi_device(struct device *dev, 481 + enum asahi_compass_chipset *chipset) 482 482 { 483 483 const struct acpi_device_id *id; 484 484 ··· 487 487 return NULL; 488 488 *chipset = (int)id->driver_data; 489 489 490 - return (char *)dev_name(dev); 490 + return dev_name(dev); 491 491 } 492 492 493 493 static int ak8975_probe(struct i2c_client *client, ··· 497 497 struct iio_dev *indio_dev; 498 498 int eoc_gpio; 499 499 int err; 500 - char *name = NULL; 500 + const char *name = NULL; 501 501 502 502 /* Grab and set up the supplied GPIO. */ 503 503 if (client->dev.platform_data) ··· 539 539 if (id) { 540 540 data->chipset = 541 541 (enum asahi_compass_chipset)(id->driver_data); 542 - name = (char *) id->name; 542 + name = id->name; 543 543 } else if (ACPI_HANDLE(&client->dev)) 544 544 name = ak8975_match_acpi_device(&client->dev, &data->chipset); 545 545 else
-1
drivers/iio/magnetometer/hid-sensor-magn-3d.c
··· 530 530 .id_table = hid_magn_3d_ids, 531 531 .driver = { 532 532 .name = KBUILD_MODNAME, 533 - .owner = THIS_MODULE, 534 533 }, 535 534 .probe = hid_magn_3d_probe, 536 535 .remove = hid_magn_3d_remove,
-1
drivers/iio/orientation/hid-sensor-incl-3d.c
··· 437 437 .id_table = hid_incl_3d_ids, 438 438 .driver = { 439 439 .name = KBUILD_MODNAME, 440 - .owner = THIS_MODULE, 441 440 }, 442 441 .probe = hid_incl_3d_probe, 443 442 .remove = hid_incl_3d_remove,
-1
drivers/iio/orientation/hid-sensor-rotation.c
··· 334 334 .id_table = hid_dev_rot_ids, 335 335 .driver = { 336 336 .name = KBUILD_MODNAME, 337 - .owner = THIS_MODULE, 338 337 }, 339 338 .probe = hid_dev_rot_probe, 340 339 .remove = hid_dev_rot_remove,
-1
drivers/iio/pressure/hid-sensor-press.c
··· 382 382 .id_table = hid_press_ids, 383 383 .driver = { 384 384 .name = KBUILD_MODNAME, 385 - .owner = THIS_MODULE, 386 385 }, 387 386 .probe = hid_press_probe, 388 387 .remove = hid_press_remove,
-1
drivers/iio/trigger/iio-trig-interrupt.c
··· 109 109 .remove = iio_interrupt_trigger_remove, 110 110 .driver = { 111 111 .name = "iio_interrupt_trigger", 112 - .owner = THIS_MODULE, 113 112 }, 114 113 }; 115 114
+1 -1
drivers/staging/iio/adc/ad7606_core.c
··· 140 140 return count; 141 141 } 142 142 143 - static IIO_DEVICE_ATTR(in_voltage_range, S_IRUGO | S_IWUSR, \ 143 + static IIO_DEVICE_ATTR(in_voltage_range, S_IRUGO | S_IWUSR, 144 144 ad7606_show_range, ad7606_store_range, 0); 145 145 static IIO_CONST_ATTR(in_voltage_range_available, "5000 10000"); 146 146
+179 -26
drivers/staging/iio/light/isl29018.c
··· 1 1 /* 2 - * A iio driver for the light sensor ISL 29018. 2 + * A iio driver for the light sensor ISL 29018/29023/29035. 3 3 * 4 4 * IIO driver for monitoring ambient light intensity in luxi, proximity 5 5 * sensing and infrared sensing. ··· 30 30 #include <linux/slab.h> 31 31 #include <linux/iio/iio.h> 32 32 #include <linux/iio/sysfs.h> 33 + #include <linux/acpi.h> 33 34 34 35 #define CONVERSION_TIME_MS 100 35 36 ··· 59 58 #define ISL29018_TEST_SHIFT 0 60 59 #define ISL29018_TEST_MASK (0xFF << ISL29018_TEST_SHIFT) 61 60 61 + #define ISL29035_REG_DEVICE_ID 0x0F 62 + #define ISL29035_DEVICE_ID_SHIFT 0x03 63 + #define ISL29035_DEVICE_ID_MASK (0x7 << ISL29035_DEVICE_ID_SHIFT) 64 + #define ISL29035_DEVICE_ID 0x5 65 + #define ISL29035_BOUT_SHIFT 0x07 66 + #define ISL29035_BOUT_MASK (0x01 << ISL29035_BOUT_SHIFT) 67 + 62 68 struct isl29018_chip { 63 69 struct device *dev; 64 70 struct regmap *regmap; 65 71 struct mutex lock; 72 + int type; 66 73 unsigned int lux_scale; 67 74 unsigned int lux_uscale; 68 75 unsigned int range; ··· 416 407 return ret; 417 408 } 418 409 410 + #define ISL29018_LIGHT_CHANNEL { \ 411 + .type = IIO_LIGHT, \ 412 + .indexed = 1, \ 413 + .channel = 0, \ 414 + .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | \ 415 + BIT(IIO_CHAN_INFO_CALIBSCALE), \ 416 + } 417 + 418 + #define ISL29018_IR_CHANNEL { \ 419 + .type = IIO_INTENSITY, \ 420 + .modified = 1, \ 421 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 422 + .channel2 = IIO_MOD_LIGHT_IR, \ 423 + } 424 + 425 + #define ISL29018_PROXIMITY_CHANNEL { \ 426 + .type = IIO_PROXIMITY, \ 427 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 428 + } 429 + 419 430 static const struct iio_chan_spec isl29018_channels[] = { 420 - { 421 - .type = IIO_LIGHT, 422 - .indexed = 1, 423 - .channel = 0, 424 - .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | 425 - BIT(IIO_CHAN_INFO_CALIBSCALE), 426 - }, { 427 - .type = IIO_INTENSITY, 428 - .modified = 1, 429 - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), 430 - .channel2 = IIO_MOD_LIGHT_IR, 431 - }, { 432 - /* Unindexed in current ABI. But perhaps it should be. */ 433 - .type = IIO_PROXIMITY, 434 - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), 435 - } 431 + ISL29018_LIGHT_CHANNEL, 432 + ISL29018_IR_CHANNEL, 433 + ISL29018_PROXIMITY_CHANNEL, 434 + }; 435 + 436 + static const struct iio_chan_spec isl29023_channels[] = { 437 + ISL29018_LIGHT_CHANNEL, 438 + ISL29018_IR_CHANNEL, 436 439 }; 437 440 438 441 static IIO_DEVICE_ATTR(range, S_IRUGO | S_IWUSR, show_range, store_range, 0); ··· 468 447 NULL 469 448 }; 470 449 471 - static const struct attribute_group isl29108_group = { 450 + static struct attribute *isl29023_attributes[] = { 451 + ISL29018_DEV_ATTR(range), 452 + ISL29018_CONST_ATTR(range_available), 453 + ISL29018_DEV_ATTR(adc_resolution), 454 + ISL29018_CONST_ATTR(adc_resolution_available), 455 + NULL 456 + }; 457 + 458 + static const struct attribute_group isl29018_group = { 472 459 .attrs = isl29018_attributes, 460 + }; 461 + 462 + static const struct attribute_group isl29023_group = { 463 + .attrs = isl29023_attributes, 464 + }; 465 + 466 + static int isl29035_detect(struct isl29018_chip *chip) 467 + { 468 + int status; 469 + unsigned int id; 470 + 471 + status = regmap_read(chip->regmap, ISL29035_REG_DEVICE_ID, &id); 472 + if (status < 0) { 473 + dev_err(chip->dev, 474 + "Error reading ID register with error %d\n", 475 + status); 476 + return status; 477 + } 478 + 479 + id = (id & ISL29035_DEVICE_ID_MASK) >> ISL29035_DEVICE_ID_SHIFT; 480 + 481 + if (id != ISL29035_DEVICE_ID) 482 + return -ENODEV; 483 + 484 + /* clear out brownout bit */ 485 + return regmap_update_bits(chip->regmap, ISL29035_REG_DEVICE_ID, 486 + ISL29035_BOUT_MASK, 0); 487 + } 488 + 489 + enum { 490 + isl29018, 491 + isl29023, 492 + isl29035, 473 493 }; 474 494 475 495 static int isl29018_chip_init(struct isl29018_chip *chip) ··· 518 456 int status; 519 457 unsigned int new_adc_bit; 520 458 unsigned int new_range; 459 + 460 + if (chip->type == isl29035) { 461 + status = isl29035_detect(chip); 462 + if (status < 0) 463 + return status; 464 + } 521 465 522 466 /* Code added per Intersil Application Note 1534: 523 467 * When VDD sinks to approximately 1.8V or below, some of ··· 578 510 return 0; 579 511 } 580 512 581 - static const struct iio_info isl29108_info = { 582 - .attrs = &isl29108_group, 513 + static const struct iio_info isl29018_info = { 514 + .attrs = &isl29018_group, 515 + .driver_module = THIS_MODULE, 516 + .read_raw = &isl29018_read_raw, 517 + .write_raw = &isl29018_write_raw, 518 + }; 519 + 520 + static const struct iio_info isl29023_info = { 521 + .attrs = &isl29023_group, 583 522 .driver_module = THIS_MODULE, 584 523 .read_raw = &isl29018_read_raw, 585 524 .write_raw = &isl29018_write_raw, ··· 599 524 case ISL29018_REG_ADD_DATA_MSB: 600 525 case ISL29018_REG_ADD_COMMAND1: 601 526 case ISL29018_REG_TEST: 527 + case ISL29035_REG_DEVICE_ID: 602 528 return true; 603 529 default: 604 530 return false; ··· 619 543 .cache_type = REGCACHE_RBTREE, 620 544 }; 621 545 546 + /* isl29035_regmap_config: regmap configuration for ISL29035 */ 547 + static const struct regmap_config isl29035_regmap_config = { 548 + .reg_bits = 8, 549 + .val_bits = 8, 550 + .volatile_reg = is_volatile_reg, 551 + .max_register = ISL29035_REG_DEVICE_ID, 552 + .num_reg_defaults_raw = ISL29035_REG_DEVICE_ID + 1, 553 + .cache_type = REGCACHE_RBTREE, 554 + }; 555 + 556 + struct chip_info { 557 + const struct iio_chan_spec *channels; 558 + int num_channels; 559 + const struct iio_info *indio_info; 560 + const struct regmap_config *regmap_cfg; 561 + }; 562 + 563 + static const struct chip_info chip_info_tbl[] = { 564 + [isl29018] = { 565 + .channels = isl29018_channels, 566 + .num_channels = ARRAY_SIZE(isl29018_channels), 567 + .indio_info = &isl29018_info, 568 + .regmap_cfg = &isl29018_regmap_config, 569 + }, 570 + [isl29023] = { 571 + .channels = isl29023_channels, 572 + .num_channels = ARRAY_SIZE(isl29023_channels), 573 + .indio_info = &isl29023_info, 574 + .regmap_cfg = &isl29018_regmap_config, 575 + }, 576 + [isl29035] = { 577 + .channels = isl29023_channels, 578 + .num_channels = ARRAY_SIZE(isl29023_channels), 579 + .indio_info = &isl29023_info, 580 + .regmap_cfg = &isl29035_regmap_config, 581 + }, 582 + }; 583 + 584 + static const char *isl29018_match_acpi_device(struct device *dev, int *data) 585 + { 586 + const struct acpi_device_id *id; 587 + 588 + id = acpi_match_device(dev->driver->acpi_match_table, dev); 589 + 590 + if (!id) 591 + return NULL; 592 + 593 + *data = (int) id->driver_data; 594 + 595 + return dev_name(dev); 596 + } 597 + 622 598 static int isl29018_probe(struct i2c_client *client, 623 599 const struct i2c_device_id *id) 624 600 { 625 601 struct isl29018_chip *chip; 626 602 struct iio_dev *indio_dev; 627 603 int err; 604 + const char *name = NULL; 605 + int dev_id = 0; 628 606 629 607 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); 630 608 if (indio_dev == NULL) { ··· 690 560 i2c_set_clientdata(client, indio_dev); 691 561 chip->dev = &client->dev; 692 562 563 + if (id) { 564 + name = id->name; 565 + dev_id = id->driver_data; 566 + } 567 + 568 + if (ACPI_HANDLE(&client->dev)) 569 + name = isl29018_match_acpi_device(&client->dev, &dev_id); 570 + 693 571 mutex_init(&chip->lock); 694 572 573 + chip->type = dev_id; 695 574 chip->lux_scale = 1; 696 575 chip->lux_uscale = 0; 697 576 chip->range = 1000; 698 577 chip->adc_bit = 16; 699 578 chip->suspended = false; 700 579 701 - chip->regmap = devm_regmap_init_i2c(client, &isl29018_regmap_config); 580 + chip->regmap = devm_regmap_init_i2c(client, 581 + chip_info_tbl[dev_id].regmap_cfg); 702 582 if (IS_ERR(chip->regmap)) { 703 583 err = PTR_ERR(chip->regmap); 704 584 dev_err(chip->dev, "regmap initialization failed: %d\n", err); ··· 719 579 if (err) 720 580 return err; 721 581 722 - indio_dev->info = &isl29108_info; 723 - indio_dev->channels = isl29018_channels; 724 - indio_dev->num_channels = ARRAY_SIZE(isl29018_channels); 725 - indio_dev->name = id->name; 582 + indio_dev->info = chip_info_tbl[dev_id].indio_info; 583 + indio_dev->channels = chip_info_tbl[dev_id].channels; 584 + indio_dev->num_channels = chip_info_tbl[dev_id].num_channels; 585 + indio_dev->name = name; 726 586 indio_dev->dev.parent = &client->dev; 727 587 indio_dev->modes = INDIO_DIRECT_MODE; 728 588 err = devm_iio_device_register(&client->dev, indio_dev); ··· 772 632 #define ISL29018_PM_OPS NULL 773 633 #endif 774 634 635 + static const struct acpi_device_id isl29018_acpi_match[] = { 636 + {"ISL29018", isl29018}, 637 + {"ISL29023", isl29023}, 638 + {"ISL29035", isl29035}, 639 + {}, 640 + }; 641 + MODULE_DEVICE_TABLE(acpi, isl29018_acpi_match); 642 + 775 643 static const struct i2c_device_id isl29018_id[] = { 776 - {"isl29018", 0}, 644 + {"isl29018", isl29018}, 645 + {"isl29023", isl29023}, 646 + {"isl29035", isl29035}, 777 647 {} 778 648 }; 779 649 ··· 791 641 792 642 static const struct of_device_id isl29018_of_match[] = { 793 643 { .compatible = "isil,isl29018", }, 644 + { .compatible = "isil,isl29023", }, 645 + { .compatible = "isil,isl29035", }, 794 646 { }, 795 647 }; 796 648 MODULE_DEVICE_TABLE(of, isl29018_of_match); ··· 801 649 .class = I2C_CLASS_HWMON, 802 650 .driver = { 803 651 .name = "isl29018", 652 + .acpi_match_table = ACPI_PTR(isl29018_acpi_match), 804 653 .pm = ISL29018_PM_OPS, 805 654 .owner = THIS_MODULE, 806 655 .of_match_table = isl29018_of_match,