bma180.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. /*
  2. * bma180.c - IIO driver for Bosch BMA180 triaxial acceleration sensor
  3. *
  4. * Copyright 2013 Oleksandr Kravchenko <x0199363@ti.com>
  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. #include <linux/module.h>
  11. #include <linux/i2c.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/delay.h>
  14. #include <linux/of.h>
  15. #include <linux/bitops.h>
  16. #include <linux/slab.h>
  17. #include <linux/string.h>
  18. #include <linux/iio/iio.h>
  19. #include <linux/iio/sysfs.h>
  20. #include <linux/iio/buffer.h>
  21. #include <linux/iio/trigger.h>
  22. #include <linux/iio/trigger_consumer.h>
  23. #include <linux/iio/triggered_buffer.h>
  24. #define BMA180_DRV_NAME "bma180"
  25. #define BMA180_IRQ_NAME "bma180_event"
  26. /* Register set */
  27. #define BMA180_CHIP_ID 0x00 /* Need to distinguish BMA180 from other */
  28. #define BMA180_ACC_X_LSB 0x02 /* First of 6 registers of accel data */
  29. #define BMA180_CTRL_REG0 0x0d
  30. #define BMA180_RESET 0x10
  31. #define BMA180_BW_TCS 0x20
  32. #define BMA180_CTRL_REG3 0x21
  33. #define BMA180_TCO_Z 0x30
  34. #define BMA180_OFFSET_LSB1 0x35
  35. /* BMA180_CTRL_REG0 bits */
  36. #define BMA180_DIS_WAKE_UP BIT(0) /* Disable wake up mode */
  37. #define BMA180_SLEEP BIT(1) /* 1 - chip will sleep */
  38. #define BMA180_EE_W BIT(4) /* Unlock writing to addr from 0x20 */
  39. #define BMA180_RESET_INT BIT(6) /* Reset pending interrupts */
  40. /* BMA180_CTRL_REG3 bits */
  41. #define BMA180_NEW_DATA_INT BIT(1) /* Intr every new accel data is ready */
  42. /* BMA180_OFFSET_LSB1 skipping mode bit */
  43. #define BMA180_SMP_SKIP BIT(0)
  44. /* Bit masks for registers bit fields */
  45. #define BMA180_RANGE 0x0e /* Range of measured accel values*/
  46. #define BMA180_BW 0xf0 /* Accel bandwidth */
  47. #define BMA180_MODE_CONFIG 0x03 /* Config operation modes */
  48. /* We have to write this value in reset register to do soft reset */
  49. #define BMA180_RESET_VAL 0xb6
  50. #define BMA_180_ID_REG_VAL 0x03
  51. /* Chip power modes */
  52. #define BMA180_LOW_NOISE 0x00
  53. #define BMA180_LOW_POWER 0x03
  54. #define BMA180_LOW_NOISE_STR "low_noise"
  55. #define BMA180_LOW_POWER_STR "low_power"
  56. /* Defaults values */
  57. #define BMA180_DEF_PMODE 0
  58. #define BMA180_DEF_BW 20
  59. #define BMA180_DEF_SCALE 250
  60. /* Available values for sysfs */
  61. #define BMA180_FLP_FREQ_AVAILABLE \
  62. "10 20 40 75 150 300"
  63. #define BMA180_SCALE_AVAILABLE \
  64. "0.000130 0.000190 0.000250 0.000380 0.000500 0.000990 0.001980"
  65. struct bma180_data {
  66. struct i2c_client *client;
  67. struct iio_trigger *trig;
  68. struct mutex mutex;
  69. int sleep_state;
  70. int scale;
  71. int bw;
  72. int pmode;
  73. char *buff;
  74. };
  75. enum bma180_axis {
  76. AXIS_X,
  77. AXIS_Y,
  78. AXIS_Z,
  79. };
  80. static int bw_table[] = { 10, 20, 40, 75, 150, 300 }; /* Hz */
  81. static int scale_table[] = { 130, 190, 250, 380, 500, 990, 1980 };
  82. static int bma180_get_acc_reg(struct bma180_data *data, enum bma180_axis axis)
  83. {
  84. u8 reg = BMA180_ACC_X_LSB + axis * 2;
  85. int ret;
  86. if (data->sleep_state)
  87. return -EBUSY;
  88. ret = i2c_smbus_read_word_data(data->client, reg);
  89. if (ret < 0)
  90. dev_err(&data->client->dev,
  91. "failed to read accel_%c registers\n", 'x' + axis);
  92. return ret;
  93. }
  94. static int bma180_set_bits(struct bma180_data *data, u8 reg, u8 mask, u8 val)
  95. {
  96. int ret = i2c_smbus_read_byte_data(data->client, reg);
  97. u8 reg_val = (ret & ~mask) | (val << (ffs(mask) - 1));
  98. if (ret < 0)
  99. return ret;
  100. return i2c_smbus_write_byte_data(data->client, reg, reg_val);
  101. }
  102. static int bma180_reset_intr(struct bma180_data *data)
  103. {
  104. int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_RESET_INT, 1);
  105. if (ret)
  106. dev_err(&data->client->dev, "failed to reset interrupt\n");
  107. return ret;
  108. }
  109. static int bma180_set_new_data_intr_state(struct bma180_data *data, int state)
  110. {
  111. u8 reg_val = state ? BMA180_NEW_DATA_INT : 0x00;
  112. int ret = i2c_smbus_write_byte_data(data->client, BMA180_CTRL_REG3,
  113. reg_val);
  114. if (ret)
  115. goto err;
  116. ret = bma180_reset_intr(data);
  117. if (ret)
  118. goto err;
  119. return 0;
  120. err:
  121. dev_err(&data->client->dev,
  122. "failed to set new data interrupt state %d\n", state);
  123. return ret;
  124. }
  125. static int bma180_set_sleep_state(struct bma180_data *data, int state)
  126. {
  127. int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_SLEEP, state);
  128. if (ret) {
  129. dev_err(&data->client->dev,
  130. "failed to set sleep state %d\n", state);
  131. return ret;
  132. }
  133. data->sleep_state = state;
  134. return 0;
  135. }
  136. static int bma180_set_ee_writing_state(struct bma180_data *data, int state)
  137. {
  138. int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_EE_W, state);
  139. if (ret)
  140. dev_err(&data->client->dev,
  141. "failed to set ee writing state %d\n", state);
  142. return ret;
  143. }
  144. static int bma180_set_bw(struct bma180_data *data, int val)
  145. {
  146. int ret, i;
  147. if (data->sleep_state)
  148. return -EBUSY;
  149. for (i = 0; i < ARRAY_SIZE(bw_table); ++i) {
  150. if (bw_table[i] == val) {
  151. ret = bma180_set_bits(data,
  152. BMA180_BW_TCS, BMA180_BW, i);
  153. if (ret) {
  154. dev_err(&data->client->dev,
  155. "failed to set bandwidth\n");
  156. return ret;
  157. }
  158. data->bw = val;
  159. return 0;
  160. }
  161. }
  162. return -EINVAL;
  163. }
  164. static int bma180_set_scale(struct bma180_data *data, int val)
  165. {
  166. int ret, i;
  167. if (data->sleep_state)
  168. return -EBUSY;
  169. for (i = 0; i < ARRAY_SIZE(scale_table); ++i)
  170. if (scale_table[i] == val) {
  171. ret = bma180_set_bits(data,
  172. BMA180_OFFSET_LSB1, BMA180_RANGE, i);
  173. if (ret) {
  174. dev_err(&data->client->dev,
  175. "failed to set scale\n");
  176. return ret;
  177. }
  178. data->scale = val;
  179. return 0;
  180. }
  181. return -EINVAL;
  182. }
  183. static int bma180_set_pmode(struct bma180_data *data, int mode)
  184. {
  185. u8 reg_val = mode ? BMA180_LOW_POWER : BMA180_LOW_NOISE;
  186. int ret = bma180_set_bits(data, BMA180_TCO_Z, BMA180_MODE_CONFIG,
  187. reg_val);
  188. if (ret) {
  189. dev_err(&data->client->dev, "failed to set power mode\n");
  190. return ret;
  191. }
  192. data->pmode = mode;
  193. return 0;
  194. }
  195. static int bma180_soft_reset(struct bma180_data *data)
  196. {
  197. int ret = i2c_smbus_write_byte_data(data->client,
  198. BMA180_RESET, BMA180_RESET_VAL);
  199. if (ret)
  200. dev_err(&data->client->dev, "failed to reset the chip\n");
  201. return ret;
  202. }
  203. static int bma180_chip_init(struct bma180_data *data)
  204. {
  205. /* Try to read chip_id register. It must return 0x03. */
  206. int ret = i2c_smbus_read_byte_data(data->client, BMA180_CHIP_ID);
  207. if (ret < 0)
  208. goto err;
  209. if (ret != BMA_180_ID_REG_VAL) {
  210. ret = -ENODEV;
  211. goto err;
  212. }
  213. ret = bma180_soft_reset(data);
  214. if (ret)
  215. goto err;
  216. /*
  217. * No serial transaction should occur within minimum 10 us
  218. * after soft_reset command
  219. */
  220. msleep(20);
  221. ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_DIS_WAKE_UP, 1);
  222. if (ret)
  223. goto err;
  224. ret = bma180_set_ee_writing_state(data, 1);
  225. if (ret)
  226. goto err;
  227. ret = bma180_set_new_data_intr_state(data, 0);
  228. if (ret)
  229. goto err;
  230. ret = bma180_set_bits(data, BMA180_OFFSET_LSB1, BMA180_SMP_SKIP, 1);
  231. if (ret)
  232. goto err;
  233. ret = bma180_set_pmode(data, BMA180_DEF_PMODE);
  234. if (ret)
  235. goto err;
  236. ret = bma180_set_bw(data, BMA180_DEF_BW);
  237. if (ret)
  238. goto err;
  239. ret = bma180_set_scale(data, BMA180_DEF_SCALE);
  240. if (ret)
  241. goto err;
  242. return 0;
  243. err:
  244. dev_err(&data->client->dev, "failed to init the chip\n");
  245. return ret;
  246. }
  247. static void bma180_chip_disable(struct bma180_data *data)
  248. {
  249. if (bma180_set_new_data_intr_state(data, 0))
  250. goto err;
  251. if (bma180_set_ee_writing_state(data, 0))
  252. goto err;
  253. if (bma180_set_sleep_state(data, 1))
  254. goto err;
  255. return;
  256. err:
  257. dev_err(&data->client->dev, "failed to disable the chip\n");
  258. }
  259. static IIO_CONST_ATTR(in_accel_filter_low_pass_3db_frequency_available,
  260. BMA180_FLP_FREQ_AVAILABLE);
  261. static IIO_CONST_ATTR(in_accel_scale_available, BMA180_SCALE_AVAILABLE);
  262. static struct attribute *bma180_attributes[] = {
  263. &iio_const_attr_in_accel_filter_low_pass_3db_frequency_available.dev_attr.attr,
  264. &iio_const_attr_in_accel_scale_available.dev_attr.attr,
  265. NULL,
  266. };
  267. static const struct attribute_group bma180_attrs_group = {
  268. .attrs = bma180_attributes,
  269. };
  270. static int bma180_read_raw(struct iio_dev *indio_dev,
  271. struct iio_chan_spec const *chan, int *val, int *val2,
  272. long mask)
  273. {
  274. struct bma180_data *data = iio_priv(indio_dev);
  275. int ret;
  276. switch (mask) {
  277. case IIO_CHAN_INFO_RAW:
  278. mutex_lock(&data->mutex);
  279. if (iio_buffer_enabled(indio_dev))
  280. ret = -EBUSY;
  281. else
  282. ret = bma180_get_acc_reg(data, chan->scan_index);
  283. mutex_unlock(&data->mutex);
  284. if (ret < 0)
  285. return ret;
  286. *val = (s16)ret >> chan->scan_type.shift;
  287. return IIO_VAL_INT;
  288. case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
  289. *val = data->bw;
  290. return IIO_VAL_INT;
  291. case IIO_CHAN_INFO_SCALE:
  292. *val = 0;
  293. *val2 = data->scale;
  294. return IIO_VAL_INT_PLUS_MICRO;
  295. default:
  296. return -EINVAL;
  297. }
  298. }
  299. static int bma180_write_raw(struct iio_dev *indio_dev,
  300. struct iio_chan_spec const *chan, int val, int val2, long mask)
  301. {
  302. struct bma180_data *data = iio_priv(indio_dev);
  303. int ret;
  304. switch (mask) {
  305. case IIO_CHAN_INFO_SCALE:
  306. if (val)
  307. return -EINVAL;
  308. mutex_lock(&data->mutex);
  309. ret = bma180_set_scale(data, val2);
  310. mutex_unlock(&data->mutex);
  311. return ret;
  312. case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
  313. mutex_lock(&data->mutex);
  314. ret = bma180_set_bw(data, val);
  315. mutex_unlock(&data->mutex);
  316. return ret;
  317. default:
  318. return -EINVAL;
  319. }
  320. }
  321. static int bma180_update_scan_mode(struct iio_dev *indio_dev,
  322. const unsigned long *scan_mask)
  323. {
  324. struct bma180_data *data = iio_priv(indio_dev);
  325. if (data->buff)
  326. devm_kfree(&indio_dev->dev, data->buff);
  327. data->buff = devm_kzalloc(&indio_dev->dev,
  328. indio_dev->scan_bytes, GFP_KERNEL);
  329. if (!data->buff)
  330. return -ENOMEM;
  331. return 0;
  332. }
  333. static const struct iio_info bma180_info = {
  334. .attrs = &bma180_attrs_group,
  335. .read_raw = bma180_read_raw,
  336. .write_raw = bma180_write_raw,
  337. .update_scan_mode = bma180_update_scan_mode,
  338. .driver_module = THIS_MODULE,
  339. };
  340. static const char * const bma180_power_modes[] = {
  341. BMA180_LOW_NOISE_STR,
  342. BMA180_LOW_POWER_STR,
  343. };
  344. static int bma180_get_power_mode(struct iio_dev *indio_dev,
  345. const struct iio_chan_spec *chan)
  346. {
  347. struct bma180_data *data = iio_priv(indio_dev);
  348. return data->pmode;
  349. }
  350. static int bma180_set_power_mode(struct iio_dev *indio_dev,
  351. const struct iio_chan_spec *chan, unsigned int mode)
  352. {
  353. struct bma180_data *data = iio_priv(indio_dev);
  354. int ret;
  355. mutex_lock(&data->mutex);
  356. ret = bma180_set_pmode(data, mode);
  357. mutex_unlock(&data->mutex);
  358. return ret;
  359. }
  360. static const struct iio_enum bma180_power_mode_enum = {
  361. .items = bma180_power_modes,
  362. .num_items = ARRAY_SIZE(bma180_power_modes),
  363. .get = bma180_get_power_mode,
  364. .set = bma180_set_power_mode,
  365. };
  366. static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
  367. IIO_ENUM("power_mode", true, &bma180_power_mode_enum),
  368. IIO_ENUM_AVAILABLE("power_mode", &bma180_power_mode_enum),
  369. { },
  370. };
  371. #define BMA180_CHANNEL(_index) { \
  372. .type = IIO_ACCEL, \
  373. .indexed = 1, \
  374. .channel = (_index), \
  375. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  376. BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
  377. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
  378. .scan_index = (_index), \
  379. .scan_type = IIO_ST('s', 14, 16, 2), \
  380. .ext_info = bma180_ext_info, \
  381. }
  382. static const struct iio_chan_spec bma180_channels[] = {
  383. BMA180_CHANNEL(AXIS_X),
  384. BMA180_CHANNEL(AXIS_Y),
  385. BMA180_CHANNEL(AXIS_Z),
  386. IIO_CHAN_SOFT_TIMESTAMP(4),
  387. };
  388. static irqreturn_t bma180_trigger_handler(int irq, void *p)
  389. {
  390. struct iio_poll_func *pf = p;
  391. struct iio_dev *indio_dev = pf->indio_dev;
  392. struct bma180_data *data = iio_priv(indio_dev);
  393. int bit, ret, i = 0;
  394. mutex_lock(&data->mutex);
  395. if (indio_dev->scan_timestamp) {
  396. ret = indio_dev->scan_bytes / sizeof(s64) - 1;
  397. ((s64 *)data->buff)[ret] = iio_get_time_ns();
  398. }
  399. for_each_set_bit(bit, indio_dev->buffer->scan_mask,
  400. indio_dev->masklength) {
  401. ret = bma180_get_acc_reg(data, bit);
  402. if (ret < 0) {
  403. mutex_unlock(&data->mutex);
  404. goto err;
  405. }
  406. ((s16 *)data->buff)[i++] = ret;
  407. }
  408. mutex_unlock(&data->mutex);
  409. iio_push_to_buffers(indio_dev, (u8 *)data->buff);
  410. err:
  411. iio_trigger_notify_done(indio_dev->trig);
  412. return IRQ_HANDLED;
  413. }
  414. static int bma180_data_rdy_trigger_set_state(struct iio_trigger *trig,
  415. bool state)
  416. {
  417. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  418. struct bma180_data *data = iio_priv(indio_dev);
  419. return bma180_set_new_data_intr_state(data, state);
  420. }
  421. static int bma180_trig_try_reen(struct iio_trigger *trig)
  422. {
  423. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  424. struct bma180_data *data = iio_priv(indio_dev);
  425. return bma180_reset_intr(data);
  426. }
  427. static const struct iio_trigger_ops bma180_trigger_ops = {
  428. .set_trigger_state = bma180_data_rdy_trigger_set_state,
  429. .try_reenable = bma180_trig_try_reen,
  430. .owner = THIS_MODULE,
  431. };
  432. static int bma180_probe(struct i2c_client *client,
  433. const struct i2c_device_id *id)
  434. {
  435. struct bma180_data *data;
  436. struct iio_dev *indio_dev;
  437. struct iio_trigger *trig;
  438. int ret;
  439. indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
  440. if (!indio_dev)
  441. return -ENOMEM;
  442. data = iio_priv(indio_dev);
  443. i2c_set_clientdata(client, indio_dev);
  444. data->client = client;
  445. ret = bma180_chip_init(data);
  446. if (ret < 0)
  447. goto err_chip_disable;
  448. mutex_init(&data->mutex);
  449. indio_dev->dev.parent = &client->dev;
  450. indio_dev->channels = bma180_channels;
  451. indio_dev->num_channels = ARRAY_SIZE(bma180_channels);
  452. indio_dev->name = BMA180_DRV_NAME;
  453. indio_dev->modes = INDIO_DIRECT_MODE;
  454. indio_dev->info = &bma180_info;
  455. trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, indio_dev->id);
  456. if (!trig) {
  457. ret = -ENOMEM;
  458. goto err_chip_disable;
  459. }
  460. ret = devm_request_irq(&client->dev, client->irq,
  461. iio_trigger_generic_data_rdy_poll,
  462. IRQF_TRIGGER_RISING, BMA180_IRQ_NAME, trig);
  463. if (ret) {
  464. dev_err(&client->dev, "unable to request IRQ\n");
  465. goto err_trigger_free;
  466. }
  467. trig->dev.parent = &client->dev;
  468. trig->ops = &bma180_trigger_ops;
  469. iio_trigger_set_drvdata(trig, indio_dev);
  470. data->trig = trig;
  471. indio_dev->trig = trig;
  472. ret = iio_trigger_register(trig);
  473. if (ret)
  474. goto err_trigger_free;
  475. ret = iio_triggered_buffer_setup(indio_dev, NULL,
  476. bma180_trigger_handler, NULL);
  477. if (ret < 0) {
  478. dev_err(&client->dev, "unable to setup iio triggered buffer\n");
  479. goto err_trigger_unregister;
  480. }
  481. ret = iio_device_register(indio_dev);
  482. if (ret < 0) {
  483. dev_err(&client->dev, "unable to register iio device\n");
  484. goto err_buffer_cleanup;
  485. }
  486. return 0;
  487. err_buffer_cleanup:
  488. iio_triggered_buffer_cleanup(indio_dev);
  489. err_trigger_unregister:
  490. iio_trigger_unregister(trig);
  491. err_trigger_free:
  492. iio_trigger_free(trig);
  493. err_chip_disable:
  494. bma180_chip_disable(data);
  495. return ret;
  496. }
  497. static int bma180_remove(struct i2c_client *client)
  498. {
  499. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  500. struct bma180_data *data = iio_priv(indio_dev);
  501. iio_device_unregister(indio_dev);
  502. iio_triggered_buffer_cleanup(indio_dev);
  503. iio_trigger_unregister(data->trig);
  504. iio_trigger_free(data->trig);
  505. mutex_lock(&data->mutex);
  506. bma180_chip_disable(data);
  507. mutex_unlock(&data->mutex);
  508. return 0;
  509. }
  510. #ifdef CONFIG_PM_SLEEP
  511. static int bma180_suspend(struct device *dev)
  512. {
  513. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  514. struct bma180_data *data = iio_priv(indio_dev);
  515. int ret;
  516. mutex_lock(&data->mutex);
  517. ret = bma180_set_sleep_state(data, 1);
  518. mutex_unlock(&data->mutex);
  519. return ret;
  520. }
  521. static int bma180_resume(struct device *dev)
  522. {
  523. struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
  524. struct bma180_data *data = iio_priv(indio_dev);
  525. int ret;
  526. mutex_lock(&data->mutex);
  527. ret = bma180_set_sleep_state(data, 0);
  528. mutex_unlock(&data->mutex);
  529. return ret;
  530. }
  531. static SIMPLE_DEV_PM_OPS(bma180_pm_ops, bma180_suspend, bma180_resume);
  532. #define BMA180_PM_OPS (&bma180_pm_ops)
  533. #else
  534. #define BMA180_PM_OPS NULL
  535. #endif
  536. static struct i2c_device_id bma180_id[] = {
  537. { BMA180_DRV_NAME, 0 },
  538. { }
  539. };
  540. MODULE_DEVICE_TABLE(i2c, bma180_id);
  541. static struct i2c_driver bma180_driver = {
  542. .driver = {
  543. .name = BMA180_DRV_NAME,
  544. .owner = THIS_MODULE,
  545. .pm = BMA180_PM_OPS,
  546. },
  547. .probe = bma180_probe,
  548. .remove = bma180_remove,
  549. .id_table = bma180_id,
  550. };
  551. module_i2c_driver(bma180_driver);
  552. MODULE_AUTHOR("Kravchenko Oleksandr <x0199363@ti.com>");
  553. MODULE_AUTHOR("Texas Instruments, Inc.");
  554. MODULE_DESCRIPTION("Bosch BMA180 triaxial acceleration sensor");
  555. MODULE_LICENSE("GPL");