root/drivers/iio/gyro/mpu3050.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #include <linux/iio/iio.h>
   3 #include <linux/mutex.h>
   4 #include <linux/regmap.h>
   5 #include <linux/regulator/consumer.h>
   6 #include <linux/i2c.h>
   7 
   8 /**
   9  * enum mpu3050_fullscale - indicates the full range of the sensor in deg/sec
  10  */
  11 enum mpu3050_fullscale {
  12         FS_250_DPS = 0,
  13         FS_500_DPS,
  14         FS_1000_DPS,
  15         FS_2000_DPS,
  16 };
  17 
  18 /**
  19  * enum mpu3050_lpf - indicates the low pass filter width
  20  */
  21 enum mpu3050_lpf {
  22         /* This implicity sets sample frequency to 8 kHz */
  23         LPF_256_HZ_NOLPF = 0,
  24         /* All others sets the sample frequency to 1 kHz */
  25         LPF_188_HZ,
  26         LPF_98_HZ,
  27         LPF_42_HZ,
  28         LPF_20_HZ,
  29         LPF_10_HZ,
  30         LPF_5_HZ,
  31         LPF_2100_HZ_NOLPF,
  32 };
  33 
  34 enum mpu3050_axis {
  35         AXIS_X = 0,
  36         AXIS_Y,
  37         AXIS_Z,
  38         AXIS_MAX,
  39 };
  40 
  41 /**
  42  * struct mpu3050 - instance state container for the device
  43  * @dev: parent device for this instance
  44  * @orientation: mounting matrix, flipped axis etc
  45  * @map: regmap to reach the registers
  46  * @lock: serialization lock to marshal all requests
  47  * @irq: the IRQ used for this device
  48  * @regs: the regulators to power this device
  49  * @fullscale: the current fullscale setting for the device
  50  * @lpf: digital low pass filter setting for the device
  51  * @divisor: base frequency divider: divides 8 or 1 kHz
  52  * @calibration: the three signed 16-bit calibration settings that
  53  * get written into the offset registers for each axis to compensate
  54  * for DC offsets
  55  * @trig: trigger for the MPU-3050 interrupt, if present
  56  * @hw_irq_trigger: hardware interrupt trigger is in use
  57  * @irq_actl: interrupt is active low
  58  * @irq_latch: latched IRQ, this means that it is a level IRQ
  59  * @irq_opendrain: the interrupt line shall be configured open drain
  60  * @pending_fifo_footer: tells us if there is a pending footer in the FIFO
  61  * that we have to read out first when handling the FIFO
  62  * @hw_timestamp: latest hardware timestamp from the trigger IRQ, when in
  63  * use
  64  * @i2cmux: an I2C mux reflecting the fact that this sensor is a hub with
  65  * a pass-through I2C interface coming out of it: this device needs to be
  66  * powered up in order to reach devices on the other side of this mux
  67  */
  68 struct mpu3050 {
  69         struct device *dev;
  70         struct iio_mount_matrix orientation;
  71         struct regmap *map;
  72         struct mutex lock;
  73         int irq;
  74         struct regulator_bulk_data regs[2];
  75         enum mpu3050_fullscale fullscale;
  76         enum mpu3050_lpf lpf;
  77         u8 divisor;
  78         s16 calibration[3];
  79         struct iio_trigger *trig;
  80         bool hw_irq_trigger;
  81         bool irq_actl;
  82         bool irq_latch;
  83         bool irq_opendrain;
  84         bool pending_fifo_footer;
  85         s64 hw_timestamp;
  86         struct i2c_mux_core *i2cmux;
  87 };
  88 
  89 /* Probe called from different transports */
  90 int mpu3050_common_probe(struct device *dev,
  91                          struct regmap *map,
  92                          int irq,
  93                          const char *name);
  94 int mpu3050_common_remove(struct device *dev);
  95 
  96 /* PM ops */
  97 extern const struct dev_pm_ops mpu3050_dev_pm_ops;

/* [<][>][^][v][top][bottom][index][help] */