linux/drivers/iio/gyro/st_gyro_i2c.c
<<
>>
Prefs
   1/*
   2 * STMicroelectronics gyroscopes driver
   3 *
   4 * Copyright 2012-2013 STMicroelectronics Inc.
   5 *
   6 * Denis Ciocca <denis.ciocca@st.com>
   7 *
   8 * Licensed under the GPL-2.
   9 */
  10
  11#include <linux/kernel.h>
  12#include <linux/module.h>
  13#include <linux/slab.h>
  14#include <linux/i2c.h>
  15#include <linux/iio/iio.h>
  16
  17#include <linux/iio/common/st_sensors.h>
  18#include <linux/iio/common/st_sensors_i2c.h>
  19#include "st_gyro.h"
  20
  21static int st_gyro_i2c_probe(struct i2c_client *client,
  22                                                const struct i2c_device_id *id)
  23{
  24        struct iio_dev *indio_dev;
  25        struct st_sensor_data *gdata;
  26        int err;
  27
  28        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*gdata));
  29        if (!indio_dev)
  30                return -ENOMEM;
  31
  32        gdata = iio_priv(indio_dev);
  33        gdata->dev = &client->dev;
  34
  35        st_sensors_i2c_configure(indio_dev, client, gdata);
  36
  37        err = st_gyro_common_probe(indio_dev,
  38                                (struct st_sensors_platform_data *)&gyro_pdata);
  39        if (err < 0)
  40                return err;
  41
  42        return 0;
  43}
  44
  45static int st_gyro_i2c_remove(struct i2c_client *client)
  46{
  47        st_gyro_common_remove(i2c_get_clientdata(client));
  48
  49        return 0;
  50}
  51
  52static const struct i2c_device_id st_gyro_id_table[] = {
  53        { L3G4200D_GYRO_DEV_NAME },
  54        { LSM330D_GYRO_DEV_NAME },
  55        { LSM330DL_GYRO_DEV_NAME },
  56        { LSM330DLC_GYRO_DEV_NAME },
  57        { L3GD20_GYRO_DEV_NAME },
  58        { L3GD20H_GYRO_DEV_NAME },
  59        { L3G4IS_GYRO_DEV_NAME },
  60        { LSM330_GYRO_DEV_NAME },
  61        {},
  62};
  63MODULE_DEVICE_TABLE(i2c, st_gyro_id_table);
  64
  65static struct i2c_driver st_gyro_driver = {
  66        .driver = {
  67                .owner = THIS_MODULE,
  68                .name = "st-gyro-i2c",
  69        },
  70        .probe = st_gyro_i2c_probe,
  71        .remove = st_gyro_i2c_remove,
  72        .id_table = st_gyro_id_table,
  73};
  74module_i2c_driver(st_gyro_driver);
  75
  76MODULE_AUTHOR("Denis Ciocca <denis.ciocca@st.com>");
  77MODULE_DESCRIPTION("STMicroelectronics gyroscopes i2c driver");
  78MODULE_LICENSE("GPL v2");
  79