drivers/iio/gyro/mpu3050-core.c
1000
ret = regmap_set_bits(mpu3050->map, MPU3050_USR_CTRL,
drivers/iio/gyro/mpu3050-core.c
1006
mpu3050->pending_fifo_footer = false;
drivers/iio/gyro/mpu3050-core.c
1009
ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN,
drivers/iio/gyro/mpu3050-core.c
1019
ret = mpu3050_start_sampling(mpu3050);
drivers/iio/gyro/mpu3050-core.c
1024
ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val);
drivers/iio/gyro/mpu3050-core.c
1026
dev_err(mpu3050->dev, "error clearing IRQ status\n");
drivers/iio/gyro/mpu3050-core.c
1031
if (mpu3050->irq_actl)
drivers/iio/gyro/mpu3050-core.c
1033
if (mpu3050->irq_latch)
drivers/iio/gyro/mpu3050-core.c
1035
if (mpu3050->irq_opendrain)
drivers/iio/gyro/mpu3050-core.c
1038
ret = regmap_write(mpu3050->map, MPU3050_INT_CFG, val);
drivers/iio/gyro/mpu3050-core.c
1052
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
1053
struct device *dev = mpu3050->dev;
drivers/iio/gyro/mpu3050-core.c
1057
mpu3050->trig = devm_iio_trigger_alloc(&indio_dev->dev,
drivers/iio/gyro/mpu3050-core.c
1061
if (!mpu3050->trig)
drivers/iio/gyro/mpu3050-core.c
1065
mpu3050->irq_opendrain = device_property_read_bool(dev, "drive-open-drain");
drivers/iio/gyro/mpu3050-core.c
1079
mpu3050->irq_actl = true;
drivers/iio/gyro/mpu3050-core.c
1084
mpu3050->irq_latch = true;
drivers/iio/gyro/mpu3050-core.c
1095
mpu3050->irq_latch = true;
drivers/iio/gyro/mpu3050-core.c
1096
mpu3050->irq_actl = true;
drivers/iio/gyro/mpu3050-core.c
1111
if (mpu3050->irq_opendrain)
drivers/iio/gyro/mpu3050-core.c
1118
mpu3050->trig->name,
drivers/iio/gyro/mpu3050-core.c
1119
mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1125
mpu3050->irq = irq;
drivers/iio/gyro/mpu3050-core.c
1126
mpu3050->trig->dev.parent = dev;
drivers/iio/gyro/mpu3050-core.c
1127
mpu3050->trig->ops = &mpu3050_trigger_ops;
drivers/iio/gyro/mpu3050-core.c
1128
iio_trigger_set_drvdata(mpu3050->trig, indio_dev);
drivers/iio/gyro/mpu3050-core.c
1130
ret = iio_trigger_register(mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1134
indio_dev->trig = iio_trigger_get(mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1139
free_irq(mpu3050->irq, mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1150
struct mpu3050 *mpu3050;
drivers/iio/gyro/mpu3050-core.c
1154
indio_dev = devm_iio_device_alloc(dev, sizeof(*mpu3050));
drivers/iio/gyro/mpu3050-core.c
1157
mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
1159
mpu3050->dev = dev;
drivers/iio/gyro/mpu3050-core.c
1160
mpu3050->map = map;
drivers/iio/gyro/mpu3050-core.c
1161
mutex_init(&mpu3050->lock);
drivers/iio/gyro/mpu3050-core.c
1163
mpu3050->fullscale = FS_2000_DPS;
drivers/iio/gyro/mpu3050-core.c
1165
mpu3050->lpf = MPU3050_DLPF_CFG_188HZ;
drivers/iio/gyro/mpu3050-core.c
1166
mpu3050->divisor = 99;
drivers/iio/gyro/mpu3050-core.c
1169
ret = iio_read_mount_matrix(dev, &mpu3050->orientation);
drivers/iio/gyro/mpu3050-core.c
1174
mpu3050->regs[0].supply = mpu3050_reg_vdd;
drivers/iio/gyro/mpu3050-core.c
1175
mpu3050->regs[1].supply = mpu3050_reg_vlogic;
drivers/iio/gyro/mpu3050-core.c
1176
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(mpu3050->regs),
drivers/iio/gyro/mpu3050-core.c
1177
mpu3050->regs);
drivers/iio/gyro/mpu3050-core.c
1181
ret = mpu3050_power_up(mpu3050);
drivers/iio/gyro/mpu3050-core.c
1210
ret = mpu3050_hw_init(mpu3050);
drivers/iio/gyro/mpu3050-core.c
1264
free_irq(mpu3050->irq, mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1267
mpu3050_power_down(mpu3050);
drivers/iio/gyro/mpu3050-core.c
1275
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
1281
if (mpu3050->irq)
drivers/iio/gyro/mpu3050-core.c
1282
free_irq(mpu3050->irq, mpu3050->trig);
drivers/iio/gyro/mpu3050-core.c
1284
mpu3050_power_down(mpu3050);
drivers/iio/gyro/mpu3050-core.c
180
static unsigned int mpu3050_get_freq(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
184
if (mpu3050->lpf == MPU3050_DLPF_CFG_256HZ_NOLPF2)
drivers/iio/gyro/mpu3050-core.c
188
freq /= (mpu3050->divisor + 1);
drivers/iio/gyro/mpu3050-core.c
193
static int mpu3050_start_sampling(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
200
ret = regmap_set_bits(mpu3050->map, MPU3050_PWR_MGM,
drivers/iio/gyro/mpu3050-core.c
206
ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM,
drivers/iio/gyro/mpu3050-core.c
214
raw_val[i] = cpu_to_be16(mpu3050->calibration[i]);
drivers/iio/gyro/mpu3050-core.c
216
ret = regmap_bulk_write(mpu3050->map, MPU3050_X_OFFS_USR_H, raw_val,
drivers/iio/gyro/mpu3050-core.c
222
ret = regmap_write(mpu3050->map, MPU3050_DLPF_FS_SYNC,
drivers/iio/gyro/mpu3050-core.c
224
mpu3050->fullscale << MPU3050_FS_SHIFT |
drivers/iio/gyro/mpu3050-core.c
225
mpu3050->lpf << MPU3050_DLPF_CFG_SHIFT);
drivers/iio/gyro/mpu3050-core.c
230
ret = regmap_write(mpu3050->map, MPU3050_SMPLRT_DIV, mpu3050->divisor);
drivers/iio/gyro/mpu3050-core.c
239
msleep(50 + 1000 / mpu3050_get_freq(mpu3050));
drivers/iio/gyro/mpu3050-core.c
244
static int mpu3050_set_8khz_samplerate(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
250
lpf = mpu3050->lpf;
drivers/iio/gyro/mpu3050-core.c
251
divisor = mpu3050->divisor;
drivers/iio/gyro/mpu3050-core.c
253
mpu3050->lpf = LPF_256_HZ_NOLPF; /* 8 kHz base frequency */
drivers/iio/gyro/mpu3050-core.c
254
mpu3050->divisor = 0; /* Divide by 1 */
drivers/iio/gyro/mpu3050-core.c
255
ret = mpu3050_start_sampling(mpu3050);
drivers/iio/gyro/mpu3050-core.c
257
mpu3050->lpf = lpf;
drivers/iio/gyro/mpu3050-core.c
258
mpu3050->divisor = divisor;
drivers/iio/gyro/mpu3050-core.c
268
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
294
*val = mpu3050->calibration[chan->scan_index-1];
drivers/iio/gyro/mpu3050-core.c
300
*val = mpu3050_get_freq(mpu3050);
drivers/iio/gyro/mpu3050-core.c
317
*val = mpu3050_fs_precision[mpu3050->fullscale] * 2;
drivers/iio/gyro/mpu3050-core.c
325
ret = pm_runtime_resume_and_get(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
328
mutex_lock(&mpu3050->lock);
drivers/iio/gyro/mpu3050-core.c
330
ret = mpu3050_set_8khz_samplerate(mpu3050);
drivers/iio/gyro/mpu3050-core.c
336
ret = regmap_bulk_read(mpu3050->map, MPU3050_TEMP_H,
drivers/iio/gyro/mpu3050-core.c
339
dev_err(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
349
ret = regmap_bulk_read(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
354
dev_err(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
374
mutex_unlock(&mpu3050->lock);
drivers/iio/gyro/mpu3050-core.c
375
pm_runtime_put_autosuspend(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
384
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
405
mpu3050->calibration[chan->scan_index-1] = val;
drivers/iio/gyro/mpu3050-core.c
420
mpu3050->lpf = LPF_256_HZ_NOLPF;
drivers/iio/gyro/mpu3050-core.c
421
mpu3050->divisor = DIV_ROUND_CLOSEST(8000, val) - 1;
drivers/iio/gyro/mpu3050-core.c
425
mpu3050->lpf = LPF_188_HZ;
drivers/iio/gyro/mpu3050-core.c
426
mpu3050->divisor = DIV_ROUND_CLOSEST(1000, val) - 1;
drivers/iio/gyro/mpu3050-core.c
441
mpu3050->fullscale = FS_2000_DPS;
drivers/iio/gyro/mpu3050-core.c
452
mpu3050->fullscale = FS_250_DPS;
drivers/iio/gyro/mpu3050-core.c
455
mpu3050->fullscale = FS_500_DPS;
drivers/iio/gyro/mpu3050-core.c
458
mpu3050->fullscale = FS_1000_DPS;
drivers/iio/gyro/mpu3050-core.c
461
mpu3050->fullscale = FS_2000_DPS;
drivers/iio/gyro/mpu3050-core.c
474
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
490
timestamp = mpu3050->hw_timestamp;
drivers/iio/gyro/mpu3050-core.c
494
mutex_lock(&mpu3050->lock);
drivers/iio/gyro/mpu3050-core.c
497
if (mpu3050->hw_irq_trigger) {
drivers/iio/gyro/mpu3050-core.c
504
ret = regmap_bulk_read(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
513
dev_info(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
517
ret = regmap_set_bits(mpu3050->map, MPU3050_USR_CTRL,
drivers/iio/gyro/mpu3050-core.c
521
dev_info(mpu3050->dev, "error resetting FIFO\n");
drivers/iio/gyro/mpu3050-core.c
524
mpu3050->pending_fifo_footer = false;
drivers/iio/gyro/mpu3050-core.c
528
dev_dbg(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
545
if (mpu3050->pending_fifo_footer) {
drivers/iio/gyro/mpu3050-core.c
555
ret = regmap_bulk_read(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
562
dev_dbg(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
578
mpu3050->pending_fifo_footer = true;
drivers/iio/gyro/mpu3050-core.c
585
ret = regmap_bulk_read(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
595
dev_dbg(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
626
dev_dbg(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
632
ret = regmap_bulk_read(mpu3050->map, MPU3050_TEMP_H, scan.chans,
drivers/iio/gyro/mpu3050-core.c
635
dev_err(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
643
mutex_unlock(&mpu3050->lock);
drivers/iio/gyro/mpu3050-core.c
651
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
654
ret = pm_runtime_resume_and_get(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
659
if (!mpu3050->hw_irq_trigger) {
drivers/iio/gyro/mpu3050-core.c
660
ret = mpu3050_set_8khz_samplerate(mpu3050);
drivers/iio/gyro/mpu3050-core.c
662
pm_runtime_put_autosuspend(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
670
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
672
pm_runtime_put_autosuspend(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
686
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
688
return &mpu3050->orientation;
drivers/iio/gyro/mpu3050-core.c
772
static int mpu3050_read_mem(struct mpu3050 *mpu3050,
drivers/iio/gyro/mpu3050-core.c
780
ret = regmap_write(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
786
ret = regmap_write(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
792
return regmap_bulk_read(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
798
static int mpu3050_hw_init(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
805
ret = regmap_set_bits(mpu3050->map, MPU3050_PWR_MGM,
drivers/iio/gyro/mpu3050-core.c
811
ret = regmap_update_bits(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
819
ret = regmap_write(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
826
ret = mpu3050_read_mem(mpu3050,
drivers/iio/gyro/mpu3050-core.c
841
dev_info(mpu3050->dev,
drivers/iio/gyro/mpu3050-core.c
860
static int mpu3050_power_up(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
864
ret = regulator_bulk_enable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs);
drivers/iio/gyro/mpu3050-core.c
866
dev_err(mpu3050->dev, "cannot enable regulators\n");
drivers/iio/gyro/mpu3050-core.c
876
ret = regmap_clear_bits(mpu3050->map, MPU3050_PWR_MGM,
drivers/iio/gyro/mpu3050-core.c
879
regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs);
drivers/iio/gyro/mpu3050-core.c
880
dev_err(mpu3050->dev, "error setting power mode\n");
drivers/iio/gyro/mpu3050-core.c
888
static int mpu3050_power_down(struct mpu3050 *mpu3050)
drivers/iio/gyro/mpu3050-core.c
899
ret = regmap_set_bits(mpu3050->map, MPU3050_PWR_MGM,
drivers/iio/gyro/mpu3050-core.c
902
dev_err(mpu3050->dev, "error putting to sleep\n");
drivers/iio/gyro/mpu3050-core.c
904
ret = regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs);
drivers/iio/gyro/mpu3050-core.c
906
dev_err(mpu3050->dev, "error disabling regulators\n");
drivers/iio/gyro/mpu3050-core.c
915
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
917
if (!mpu3050->hw_irq_trigger)
drivers/iio/gyro/mpu3050-core.c
921
mpu3050->hw_timestamp = iio_get_time_ns(indio_dev);
drivers/iio/gyro/mpu3050-core.c
930
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
935
ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val);
drivers/iio/gyro/mpu3050-core.c
937
dev_err(mpu3050->dev, "error reading IRQ status\n");
drivers/iio/gyro/mpu3050-core.c
957
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-core.c
964
ret = regmap_write(mpu3050->map,
drivers/iio/gyro/mpu3050-core.c
968
dev_err(mpu3050->dev, "error disabling IRQ\n");
drivers/iio/gyro/mpu3050-core.c
971
ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val);
drivers/iio/gyro/mpu3050-core.c
973
dev_err(mpu3050->dev, "error clearing IRQ status\n");
drivers/iio/gyro/mpu3050-core.c
976
ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN, 0);
drivers/iio/gyro/mpu3050-core.c
978
dev_err(mpu3050->dev, "error disabling FIFO\n");
drivers/iio/gyro/mpu3050-core.c
980
ret = regmap_write(mpu3050->map, MPU3050_USR_CTRL,
drivers/iio/gyro/mpu3050-core.c
983
dev_err(mpu3050->dev, "error resetting FIFO\n");
drivers/iio/gyro/mpu3050-core.c
985
pm_runtime_put_autosuspend(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
986
mpu3050->hw_irq_trigger = false;
drivers/iio/gyro/mpu3050-core.c
991
pm_runtime_get_sync(mpu3050->dev);
drivers/iio/gyro/mpu3050-core.c
992
mpu3050->hw_irq_trigger = true;
drivers/iio/gyro/mpu3050-core.c
995
ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN, 0);
drivers/iio/gyro/mpu3050-i2c.c
19
struct mpu3050 *mpu3050 = i2c_mux_priv(mux);
drivers/iio/gyro/mpu3050-i2c.c
22
return pm_runtime_resume_and_get(mpu3050->dev);
drivers/iio/gyro/mpu3050-i2c.c
27
struct mpu3050 *mpu3050 = i2c_mux_priv(mux);
drivers/iio/gyro/mpu3050-i2c.c
29
pm_runtime_put_autosuspend(mpu3050->dev);
drivers/iio/gyro/mpu3050-i2c.c
38
struct mpu3050 *mpu3050;
drivers/iio/gyro/mpu3050-i2c.c
62
mpu3050 = iio_priv(dev_get_drvdata(&client->dev));
drivers/iio/gyro/mpu3050-i2c.c
63
mpu3050->i2cmux = i2c_mux_alloc(client->adapter, &client->dev,
drivers/iio/gyro/mpu3050-i2c.c
68
if (!mpu3050->i2cmux)
drivers/iio/gyro/mpu3050-i2c.c
71
mpu3050->i2cmux->priv = mpu3050;
drivers/iio/gyro/mpu3050-i2c.c
73
i2c_mux_add_adapter(mpu3050->i2cmux, 0, 0);
drivers/iio/gyro/mpu3050-i2c.c
82
struct mpu3050 *mpu3050 = iio_priv(indio_dev);
drivers/iio/gyro/mpu3050-i2c.c
84
if (mpu3050->i2cmux)
drivers/iio/gyro/mpu3050-i2c.c
85
i2c_mux_del_adapters(mpu3050->i2cmux);