mpu3050 178 drivers/iio/gyro/mpu3050-core.c static unsigned int mpu3050_get_freq(struct mpu3050 *mpu3050) mpu3050 182 drivers/iio/gyro/mpu3050-core.c if (mpu3050->lpf == MPU3050_DLPF_CFG_256HZ_NOLPF2) mpu3050 186 drivers/iio/gyro/mpu3050-core.c freq /= (mpu3050->divisor + 1); mpu3050 191 drivers/iio/gyro/mpu3050-core.c static int mpu3050_start_sampling(struct mpu3050 *mpu3050) mpu3050 198 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM, mpu3050 204 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM, mpu3050 212 drivers/iio/gyro/mpu3050-core.c raw_val[i] = cpu_to_be16(mpu3050->calibration[i]); mpu3050 214 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_write(mpu3050->map, MPU3050_X_OFFS_USR_H, raw_val, mpu3050 220 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_DLPF_FS_SYNC, mpu3050 222 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale << MPU3050_FS_SHIFT | mpu3050 223 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf << MPU3050_DLPF_CFG_SHIFT); mpu3050 228 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_SMPLRT_DIV, mpu3050->divisor); mpu3050 237 drivers/iio/gyro/mpu3050-core.c msleep(50 + 1000 / mpu3050_get_freq(mpu3050)); mpu3050 242 drivers/iio/gyro/mpu3050-core.c static int mpu3050_set_8khz_samplerate(struct mpu3050 *mpu3050) mpu3050 248 drivers/iio/gyro/mpu3050-core.c lpf = mpu3050->lpf; mpu3050 249 drivers/iio/gyro/mpu3050-core.c divisor = mpu3050->divisor; mpu3050 251 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf = LPF_256_HZ_NOLPF; /* 8 kHz base frequency */ mpu3050 252 drivers/iio/gyro/mpu3050-core.c mpu3050->divisor = 0; /* Divide by 1 */ mpu3050 253 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_start_sampling(mpu3050); mpu3050 255 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf = lpf; mpu3050 256 drivers/iio/gyro/mpu3050-core.c mpu3050->divisor = divisor; mpu3050 266 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 283 drivers/iio/gyro/mpu3050-core.c *val = mpu3050->calibration[chan->scan_index-1]; mpu3050 289 drivers/iio/gyro/mpu3050-core.c *val = mpu3050_get_freq(mpu3050); mpu3050 306 drivers/iio/gyro/mpu3050-core.c *val = mpu3050_fs_precision[mpu3050->fullscale] * 2; mpu3050 314 drivers/iio/gyro/mpu3050-core.c pm_runtime_get_sync(mpu3050->dev); mpu3050 315 drivers/iio/gyro/mpu3050-core.c mutex_lock(&mpu3050->lock); mpu3050 317 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_set_8khz_samplerate(mpu3050); mpu3050 323 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, MPU3050_TEMP_H, mpu3050 326 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, mpu3050 336 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, mpu3050 341 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, mpu3050 361 drivers/iio/gyro/mpu3050-core.c mutex_unlock(&mpu3050->lock); mpu3050 362 drivers/iio/gyro/mpu3050-core.c pm_runtime_mark_last_busy(mpu3050->dev); mpu3050 363 drivers/iio/gyro/mpu3050-core.c pm_runtime_put_autosuspend(mpu3050->dev); mpu3050 372 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 393 drivers/iio/gyro/mpu3050-core.c mpu3050->calibration[chan->scan_index-1] = val; mpu3050 408 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf = LPF_256_HZ_NOLPF; mpu3050 409 drivers/iio/gyro/mpu3050-core.c mpu3050->divisor = DIV_ROUND_CLOSEST(8000, val) - 1; mpu3050 413 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf = LPF_188_HZ; mpu3050 414 drivers/iio/gyro/mpu3050-core.c mpu3050->divisor = DIV_ROUND_CLOSEST(1000, val) - 1; mpu3050 429 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_2000_DPS; mpu3050 440 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_250_DPS; mpu3050 443 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_500_DPS; mpu3050 446 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_1000_DPS; mpu3050 449 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_2000_DPS; mpu3050 462 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 481 drivers/iio/gyro/mpu3050-core.c timestamp = mpu3050->hw_timestamp; mpu3050 485 drivers/iio/gyro/mpu3050-core.c mutex_lock(&mpu3050->lock); mpu3050 488 drivers/iio/gyro/mpu3050-core.c if (mpu3050->hw_irq_trigger) { mpu3050 495 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, mpu3050 504 drivers/iio/gyro/mpu3050-core.c dev_info(mpu3050->dev, mpu3050 508 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, mpu3050 515 drivers/iio/gyro/mpu3050-core.c dev_info(mpu3050->dev, "error resetting FIFO\n"); mpu3050 518 drivers/iio/gyro/mpu3050-core.c mpu3050->pending_fifo_footer = false; mpu3050 522 drivers/iio/gyro/mpu3050-core.c dev_dbg(mpu3050->dev, mpu3050 539 drivers/iio/gyro/mpu3050-core.c if (mpu3050->pending_fifo_footer) { mpu3050 549 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, mpu3050 554 drivers/iio/gyro/mpu3050-core.c dev_dbg(mpu3050->dev, mpu3050 569 drivers/iio/gyro/mpu3050-core.c mpu3050->pending_fifo_footer = true; mpu3050 576 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, mpu3050 586 drivers/iio/gyro/mpu3050-core.c dev_dbg(mpu3050->dev, mpu3050 617 drivers/iio/gyro/mpu3050-core.c dev_dbg(mpu3050->dev, mpu3050 623 drivers/iio/gyro/mpu3050-core.c ret = regmap_bulk_read(mpu3050->map, MPU3050_TEMP_H, &hw_values, mpu3050 626 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, mpu3050 634 drivers/iio/gyro/mpu3050-core.c mutex_unlock(&mpu3050->lock); mpu3050 642 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 644 drivers/iio/gyro/mpu3050-core.c pm_runtime_get_sync(mpu3050->dev); mpu3050 647 drivers/iio/gyro/mpu3050-core.c if (!mpu3050->hw_irq_trigger) mpu3050 648 drivers/iio/gyro/mpu3050-core.c return mpu3050_set_8khz_samplerate(mpu3050); mpu3050 655 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 657 drivers/iio/gyro/mpu3050-core.c pm_runtime_mark_last_busy(mpu3050->dev); mpu3050 658 drivers/iio/gyro/mpu3050-core.c pm_runtime_put_autosuspend(mpu3050->dev); mpu3050 674 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 676 drivers/iio/gyro/mpu3050-core.c return &mpu3050->orientation; mpu3050 760 drivers/iio/gyro/mpu3050-core.c static int mpu3050_read_mem(struct mpu3050 *mpu3050, mpu3050 768 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, mpu3050 774 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, mpu3050 780 drivers/iio/gyro/mpu3050-core.c return regmap_bulk_read(mpu3050->map, mpu3050 786 drivers/iio/gyro/mpu3050-core.c static int mpu3050_hw_init(struct mpu3050 *mpu3050) mpu3050 792 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, mpu3050 800 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, mpu3050 808 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, mpu3050 815 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_read_mem(mpu3050, mpu3050 828 drivers/iio/gyro/mpu3050-core.c dev_info(mpu3050->dev, mpu3050 847 drivers/iio/gyro/mpu3050-core.c static int mpu3050_power_up(struct mpu3050 *mpu3050) mpu3050 851 drivers/iio/gyro/mpu3050-core.c ret = regulator_bulk_enable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs); mpu3050 853 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "cannot enable regulators\n"); mpu3050 863 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM, mpu3050 866 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error setting power mode\n"); mpu3050 874 drivers/iio/gyro/mpu3050-core.c static int mpu3050_power_down(struct mpu3050 *mpu3050) mpu3050 885 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM, mpu3050 888 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error putting to sleep\n"); mpu3050 890 drivers/iio/gyro/mpu3050-core.c ret = regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs); mpu3050 892 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error disabling regulators\n"); mpu3050 901 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 903 drivers/iio/gyro/mpu3050-core.c if (!mpu3050->hw_irq_trigger) mpu3050 907 drivers/iio/gyro/mpu3050-core.c mpu3050->hw_timestamp = iio_get_time_ns(indio_dev); mpu3050 916 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 921 drivers/iio/gyro/mpu3050-core.c ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val); mpu3050 923 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error reading IRQ status\n"); mpu3050 943 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 950 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, mpu3050 954 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error disabling IRQ\n"); mpu3050 957 drivers/iio/gyro/mpu3050-core.c ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val); mpu3050 959 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error clearing IRQ status\n"); mpu3050 962 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN, 0); mpu3050 964 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error disabling FIFO\n"); mpu3050 966 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_USR_CTRL, mpu3050 969 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error resetting FIFO\n"); mpu3050 971 drivers/iio/gyro/mpu3050-core.c pm_runtime_mark_last_busy(mpu3050->dev); mpu3050 972 drivers/iio/gyro/mpu3050-core.c pm_runtime_put_autosuspend(mpu3050->dev); mpu3050 973 drivers/iio/gyro/mpu3050-core.c mpu3050->hw_irq_trigger = false; mpu3050 978 drivers/iio/gyro/mpu3050-core.c pm_runtime_get_sync(mpu3050->dev); mpu3050 979 drivers/iio/gyro/mpu3050-core.c mpu3050->hw_irq_trigger = true; mpu3050 982 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN, 0); mpu3050 987 drivers/iio/gyro/mpu3050-core.c ret = regmap_update_bits(mpu3050->map, MPU3050_USR_CTRL, mpu3050 995 drivers/iio/gyro/mpu3050-core.c mpu3050->pending_fifo_footer = false; mpu3050 998 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_FIFO_EN, mpu3050 1008 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_start_sampling(mpu3050); mpu3050 1013 drivers/iio/gyro/mpu3050-core.c ret = regmap_read(mpu3050->map, MPU3050_INT_STATUS, &val); mpu3050 1015 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, "error clearing IRQ status\n"); mpu3050 1020 drivers/iio/gyro/mpu3050-core.c if (mpu3050->irq_actl) mpu3050 1022 drivers/iio/gyro/mpu3050-core.c if (mpu3050->irq_latch) mpu3050 1024 drivers/iio/gyro/mpu3050-core.c if (mpu3050->irq_opendrain) mpu3050 1027 drivers/iio/gyro/mpu3050-core.c ret = regmap_write(mpu3050->map, MPU3050_INT_CFG, val); mpu3050 1041 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 1045 drivers/iio/gyro/mpu3050-core.c mpu3050->trig = devm_iio_trigger_alloc(&indio_dev->dev, mpu3050 1049 drivers/iio/gyro/mpu3050-core.c if (!mpu3050->trig) mpu3050 1053 drivers/iio/gyro/mpu3050-core.c if (of_property_read_bool(mpu3050->dev->of_node, "drive-open-drain")) mpu3050 1054 drivers/iio/gyro/mpu3050-core.c mpu3050->irq_opendrain = true; mpu3050 1068 drivers/iio/gyro/mpu3050-core.c mpu3050->irq_actl = true; mpu3050 1073 drivers/iio/gyro/mpu3050-core.c mpu3050->irq_latch = true; mpu3050 1084 drivers/iio/gyro/mpu3050-core.c mpu3050->irq_latch = true; mpu3050 1085 drivers/iio/gyro/mpu3050-core.c mpu3050->irq_actl = true; mpu3050 1100 drivers/iio/gyro/mpu3050-core.c if (mpu3050->irq_opendrain) mpu3050 1107 drivers/iio/gyro/mpu3050-core.c mpu3050->trig->name, mpu3050 1108 drivers/iio/gyro/mpu3050-core.c mpu3050->trig); mpu3050 1110 drivers/iio/gyro/mpu3050-core.c dev_err(mpu3050->dev, mpu3050 1115 drivers/iio/gyro/mpu3050-core.c mpu3050->irq = irq; mpu3050 1116 drivers/iio/gyro/mpu3050-core.c mpu3050->trig->dev.parent = mpu3050->dev; mpu3050 1117 drivers/iio/gyro/mpu3050-core.c mpu3050->trig->ops = &mpu3050_trigger_ops; mpu3050 1118 drivers/iio/gyro/mpu3050-core.c iio_trigger_set_drvdata(mpu3050->trig, indio_dev); mpu3050 1120 drivers/iio/gyro/mpu3050-core.c ret = iio_trigger_register(mpu3050->trig); mpu3050 1124 drivers/iio/gyro/mpu3050-core.c indio_dev->trig = iio_trigger_get(mpu3050->trig); mpu3050 1135 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050; mpu3050 1139 drivers/iio/gyro/mpu3050-core.c indio_dev = devm_iio_device_alloc(dev, sizeof(*mpu3050)); mpu3050 1142 drivers/iio/gyro/mpu3050-core.c mpu3050 = iio_priv(indio_dev); mpu3050 1144 drivers/iio/gyro/mpu3050-core.c mpu3050->dev = dev; mpu3050 1145 drivers/iio/gyro/mpu3050-core.c mpu3050->map = map; mpu3050 1146 drivers/iio/gyro/mpu3050-core.c mutex_init(&mpu3050->lock); mpu3050 1148 drivers/iio/gyro/mpu3050-core.c mpu3050->fullscale = FS_2000_DPS; mpu3050 1150 drivers/iio/gyro/mpu3050-core.c mpu3050->lpf = MPU3050_DLPF_CFG_188HZ; mpu3050 1151 drivers/iio/gyro/mpu3050-core.c mpu3050->divisor = 99; mpu3050 1154 drivers/iio/gyro/mpu3050-core.c ret = iio_read_mount_matrix(dev, "mount-matrix", &mpu3050->orientation); mpu3050 1159 drivers/iio/gyro/mpu3050-core.c mpu3050->regs[0].supply = mpu3050_reg_vdd; mpu3050 1160 drivers/iio/gyro/mpu3050-core.c mpu3050->regs[1].supply = mpu3050_reg_vlogic; mpu3050 1161 drivers/iio/gyro/mpu3050-core.c ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(mpu3050->regs), mpu3050 1162 drivers/iio/gyro/mpu3050-core.c mpu3050->regs); mpu3050 1168 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_power_up(mpu3050); mpu3050 1197 drivers/iio/gyro/mpu3050-core.c ret = mpu3050_hw_init(mpu3050); mpu3050 1250 drivers/iio/gyro/mpu3050-core.c mpu3050_power_down(mpu3050); mpu3050 1259 drivers/iio/gyro/mpu3050-core.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 1265 drivers/iio/gyro/mpu3050-core.c if (mpu3050->irq) mpu3050 1266 drivers/iio/gyro/mpu3050-core.c free_irq(mpu3050->irq, mpu3050); mpu3050 1268 drivers/iio/gyro/mpu3050-core.c mpu3050_power_down(mpu3050); mpu3050 19 drivers/iio/gyro/mpu3050-i2c.c struct mpu3050 *mpu3050 = i2c_mux_priv(mux); mpu3050 22 drivers/iio/gyro/mpu3050-i2c.c pm_runtime_get_sync(mpu3050->dev); mpu3050 28 drivers/iio/gyro/mpu3050-i2c.c struct mpu3050 *mpu3050 = i2c_mux_priv(mux); mpu3050 30 drivers/iio/gyro/mpu3050-i2c.c pm_runtime_mark_last_busy(mpu3050->dev); mpu3050 31 drivers/iio/gyro/mpu3050-i2c.c pm_runtime_put_autosuspend(mpu3050->dev); mpu3050 40 drivers/iio/gyro/mpu3050-i2c.c struct mpu3050 *mpu3050; mpu3050 64 drivers/iio/gyro/mpu3050-i2c.c mpu3050 = iio_priv(dev_get_drvdata(&client->dev)); mpu3050 65 drivers/iio/gyro/mpu3050-i2c.c mpu3050->i2cmux = i2c_mux_alloc(client->adapter, &client->dev, mpu3050 70 drivers/iio/gyro/mpu3050-i2c.c if (!mpu3050->i2cmux) mpu3050 73 drivers/iio/gyro/mpu3050-i2c.c mpu3050->i2cmux->priv = mpu3050; mpu3050 75 drivers/iio/gyro/mpu3050-i2c.c i2c_mux_add_adapter(mpu3050->i2cmux, 0, 0, 0); mpu3050 84 drivers/iio/gyro/mpu3050-i2c.c struct mpu3050 *mpu3050 = iio_priv(indio_dev); mpu3050 86 drivers/iio/gyro/mpu3050-i2c.c if (mpu3050->i2cmux) mpu3050 87 drivers/iio/gyro/mpu3050-i2c.c i2c_mux_del_adapters(mpu3050->i2cmux);