Lines Matching refs:st

127 	const struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
129 return &st->orientation;
168 static int inv_icm42600_set_pwr_mgmt0(struct inv_icm42600_state *st,
173 enum inv_icm42600_sensor_mode oldgyro = st->conf.gyro.mode;
174 enum inv_icm42600_sensor_mode oldaccel = st->conf.accel.mode;
175 bool oldtemp = st->conf.temp_en;
188 ret = regmap_write(st->map, INV_ICM42600_REG_PWR_MGMT0, val);
192 st->conf.gyro.mode = gyro;
193 st->conf.accel.mode = accel;
194 st->conf.temp_en = temp;
233 int inv_icm42600_set_accel_conf(struct inv_icm42600_state *st,
237 struct inv_icm42600_sensor_conf *oldconf = &st->conf.accel;
255 ret = regmap_write(st->map, INV_ICM42600_REG_ACCEL_CONFIG0, val);
265 INV_ICM42600_GYRO_ACCEL_CONFIG0_GYRO_FILT(st->conf.gyro.filter);
266 ret = regmap_write(st->map, INV_ICM42600_REG_GYRO_ACCEL_CONFIG0, val);
273 return inv_icm42600_set_pwr_mgmt0(st, st->conf.gyro.mode, conf->mode,
274 st->conf.temp_en, sleep_ms);
277 int inv_icm42600_set_gyro_conf(struct inv_icm42600_state *st,
281 struct inv_icm42600_sensor_conf *oldconf = &st->conf.gyro;
299 ret = regmap_write(st->map, INV_ICM42600_REG_GYRO_CONFIG0, val);
308 val = INV_ICM42600_GYRO_ACCEL_CONFIG0_ACCEL_FILT(st->conf.accel.filter) |
310 ret = regmap_write(st->map, INV_ICM42600_REG_GYRO_ACCEL_CONFIG0, val);
317 return inv_icm42600_set_pwr_mgmt0(st, conf->mode, st->conf.accel.mode,
318 st->conf.temp_en, sleep_ms);
323 int inv_icm42600_set_temp_conf(struct inv_icm42600_state *st, bool enable,
326 return inv_icm42600_set_pwr_mgmt0(st, st->conf.gyro.mode,
327 st->conf.accel.mode, enable,
334 struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
337 mutex_lock(&st->lock);
340 ret = regmap_read(st->map, reg, readval);
342 ret = regmap_write(st->map, reg, writeval);
344 mutex_unlock(&st->lock);
349 static int inv_icm42600_set_conf(struct inv_icm42600_state *st,
360 ret = regmap_write(st->map, INV_ICM42600_REG_PWR_MGMT0, val);
367 ret = regmap_write(st->map, INV_ICM42600_REG_GYRO_CONFIG0, val);
374 ret = regmap_write(st->map, INV_ICM42600_REG_ACCEL_CONFIG0, val);
381 ret = regmap_write(st->map, INV_ICM42600_REG_GYRO_ACCEL_CONFIG0, val);
386 st->conf = *conf;
393 * @st: driver internal state
398 static int inv_icm42600_setup(struct inv_icm42600_state *st,
401 const struct inv_icm42600_hw *hw = &inv_icm42600_hw[st->chip];
402 const struct device *dev = regmap_get_device(st->map);
407 ret = regmap_read(st->map, INV_ICM42600_REG_WHOAMI, &val);
415 st->name = hw->name;
418 ret = regmap_write(st->map, INV_ICM42600_REG_DEVICE_CONFIG,
424 ret = regmap_read(st->map, INV_ICM42600_REG_INT_STATUS, &val);
433 ret = bus_setup(st);
438 ret = regmap_update_bits(st->map, INV_ICM42600_REG_INTF_CONFIG0,
444 return inv_icm42600_set_conf(st, hw->conf);
449 struct inv_icm42600_state *st = _data;
451 st->timestamp.gyro = iio_get_time_ns(st->indio_gyro);
452 st->timestamp.accel = iio_get_time_ns(st->indio_accel);
459 struct inv_icm42600_state *st = _data;
460 struct device *dev = regmap_get_device(st->map);
464 mutex_lock(&st->lock);
466 ret = regmap_read(st->map, INV_ICM42600_REG_INT_STATUS, &status);
476 ret = inv_icm42600_buffer_fifo_read(st, 0);
481 ret = inv_icm42600_buffer_fifo_parse(st);
487 mutex_unlock(&st->lock);
493 * @st: driver internal state
500 static int inv_icm42600_irq_init(struct inv_icm42600_state *st, int irq,
503 struct device *dev = regmap_get_device(st->map);
530 ret = regmap_write(st->map, INV_ICM42600_REG_INT_CONFIG, val);
535 ret = regmap_update_bits(st->map, INV_ICM42600_REG_INT_CONFIG1,
542 "inv_icm42600", st);
545 static int inv_icm42600_timestamp_setup(struct inv_icm42600_state *st)
552 return regmap_update_bits(st->map, INV_ICM42600_REG_TMST_CONFIG,
556 static int inv_icm42600_enable_regulator_vddio(struct inv_icm42600_state *st)
560 ret = regulator_enable(st->vddio_supply);
572 struct inv_icm42600_state *st = _data;
573 const struct device *dev = regmap_get_device(st->map);
576 ret = regulator_disable(st->vdd_supply);
583 struct inv_icm42600_state *st = _data;
584 const struct device *dev = regmap_get_device(st->map);
587 ret = regulator_disable(st->vddio_supply);
604 struct inv_icm42600_state *st;
628 st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);
629 if (!st)
632 dev_set_drvdata(dev, st);
633 mutex_init(&st->lock);
634 st->chip = chip;
635 st->map = regmap;
637 ret = iio_read_mount_matrix(dev, &st->orientation);
643 st->vdd_supply = devm_regulator_get(dev, "vdd");
644 if (IS_ERR(st->vdd_supply))
645 return PTR_ERR(st->vdd_supply);
647 st->vddio_supply = devm_regulator_get(dev, "vddio");
648 if (IS_ERR(st->vddio_supply))
649 return PTR_ERR(st->vddio_supply);
651 ret = regulator_enable(st->vdd_supply);
656 ret = devm_add_action_or_reset(dev, inv_icm42600_disable_vdd_reg, st);
660 ret = inv_icm42600_enable_regulator_vddio(st);
664 ret = devm_add_action_or_reset(dev, inv_icm42600_disable_vddio_reg, st);
669 ret = inv_icm42600_setup(st, bus_setup);
673 ret = inv_icm42600_timestamp_setup(st);
677 ret = inv_icm42600_buffer_init(st);
681 st->indio_gyro = inv_icm42600_gyro_init(st);
682 if (IS_ERR(st->indio_gyro))
683 return PTR_ERR(st->indio_gyro);
685 st->indio_accel = inv_icm42600_accel_init(st);
686 if (IS_ERR(st->indio_accel))
687 return PTR_ERR(st->indio_accel);
689 ret = inv_icm42600_irq_init(st, irq, irq_type, open_drain);
713 struct inv_icm42600_state *st = dev_get_drvdata(dev);
716 mutex_lock(&st->lock);
718 st->suspended.gyro = st->conf.gyro.mode;
719 st->suspended.accel = st->conf.accel.mode;
720 st->suspended.temp = st->conf.temp_en;
727 if (st->fifo.on) {
728 ret = regmap_write(st->map, INV_ICM42600_REG_FIFO_CONFIG,
734 ret = inv_icm42600_set_pwr_mgmt0(st, INV_ICM42600_SENSOR_MODE_OFF,
740 regulator_disable(st->vddio_supply);
743 mutex_unlock(&st->lock);
753 struct inv_icm42600_state *st = dev_get_drvdata(dev);
756 mutex_lock(&st->lock);
758 ret = inv_icm42600_enable_regulator_vddio(st);
767 ret = inv_icm42600_set_pwr_mgmt0(st, st->suspended.gyro,
768 st->suspended.accel,
769 st->suspended.temp, NULL);
774 if (st->fifo.on)
775 ret = regmap_write(st->map, INV_ICM42600_REG_FIFO_CONFIG,
779 mutex_unlock(&st->lock);
786 struct inv_icm42600_state *st = dev_get_drvdata(dev);
789 mutex_lock(&st->lock);
792 ret = inv_icm42600_set_pwr_mgmt0(st, INV_ICM42600_SENSOR_MODE_OFF,
798 regulator_disable(st->vddio_supply);
801 mutex_unlock(&st->lock);
808 struct inv_icm42600_state *st = dev_get_drvdata(dev);
811 mutex_lock(&st->lock);
813 ret = inv_icm42600_enable_regulator_vddio(st);
815 mutex_unlock(&st->lock);