Lines Matching refs:msa311

327 	.name = "msa311",
349 * @lock: Protects msa311 device state between setup and data access routines
351 * @chip_name: Chip name in the format "msa311-%02x" % partid
402 * @msa311: MSA311 internal private state
405 * This function should be called under msa311->lock.
409 static int msa311_get_odr(struct msa311_priv *msa311, unsigned int *odr)
413 err = regmap_field_read(msa311->fields[F_ODR], odr);
430 * @msa311: MSA311 internal private state
433 * This function should be called under msa311->lock. Possible ODR values:
449 static int msa311_set_odr(struct msa311_priv *msa311, unsigned int odr)
451 struct device *dev = msa311->dev;
456 err = regmap_field_read(msa311->fields[F_PWR_MODE], &pwr_mode);
475 return regmap_field_write(msa311->fields[F_ODR], odr);
480 * @msa311: MSA311 internal private state
485 static int msa311_wait_for_next_data(struct msa311_priv *msa311)
488 struct device *dev = msa311->dev;
494 err = msa311_get_odr(msa311, &odr);
502 * After msa311 resuming is done, we need to wait for data
523 * @msa311: MSA311 internal private state
526 * This function should be called under msa311->lock.
530 static int msa311_set_pwr_mode(struct msa311_priv *msa311, unsigned int mode)
532 struct device *dev = msa311->dev;
541 err = regmap_field_read(msa311->fields[F_PWR_MODE], &prev_mode);
545 err = regmap_field_write(msa311->fields[F_PWR_MODE], mode);
552 return msa311_wait_for_next_data(msa311);
559 * @msa311: MSA311 internal private state
563 * This function should be called under msa311->lock.
568 static int msa311_get_axis(struct msa311_priv *msa311,
572 struct device *dev = msa311->dev;
584 return regmap_bulk_read(msa311->regs, axis_reg, axis, sizeof(*axis));
591 struct msa311_priv *msa311 = iio_priv(indio_dev);
592 struct device *dev = msa311->dev;
604 mutex_lock(&msa311->lock);
605 err = msa311_get_axis(msa311, chan, &axis);
606 mutex_unlock(&msa311->lock);
631 struct msa311_priv *msa311 = iio_priv(indio_dev);
632 struct device *dev = msa311->dev;
636 mutex_lock(&msa311->lock);
637 err = regmap_field_read(msa311->fields[F_FS], &fs);
638 mutex_unlock(&msa311->lock);
653 struct msa311_priv *msa311 = iio_priv(indio_dev);
654 struct device *dev = msa311->dev;
658 mutex_lock(&msa311->lock);
659 err = msa311_get_odr(msa311, &odr);
660 mutex_unlock(&msa311->lock);
719 struct msa311_priv *msa311 = iio_priv(indio_dev);
720 struct device *dev = msa311->dev;
736 mutex_lock(&msa311->lock);
737 err = regmap_field_write(msa311->fields[F_FS], fs);
738 mutex_unlock(&msa311->lock);
753 struct msa311_priv *msa311 = iio_priv(indio_dev);
754 struct device *dev = msa311->dev;
775 mutex_lock(&msa311->lock);
776 err = msa311_set_odr(msa311, odr);
777 mutex_unlock(&msa311->lock);
812 struct msa311_priv *msa311 = iio_priv(indio_dev);
813 struct device *dev = msa311->dev;
816 if (reg > regmap_get_max_register(msa311->regs))
823 mutex_lock(&msa311->lock);
826 err = regmap_read(msa311->regs, reg, readval);
828 err = regmap_write(msa311->regs, reg, writeval);
830 mutex_unlock(&msa311->lock);
844 struct msa311_priv *msa311 = iio_priv(indio_dev);
845 struct device *dev = msa311->dev;
852 struct msa311_priv *msa311 = iio_priv(indio_dev);
853 struct device *dev = msa311->dev;
864 struct msa311_priv *msa311 = iio_priv(indio_dev);
865 struct device *dev = msa311->dev;
868 mutex_lock(&msa311->lock);
869 err = regmap_field_write(msa311->fields[F_NEW_DATA_INT_EN], state);
870 mutex_unlock(&msa311->lock);
888 struct msa311_priv *msa311 = iio_priv(pf->indio_dev);
891 struct device *dev = msa311->dev;
901 mutex_lock(&msa311->lock);
907 err = msa311_get_axis(msa311, chan, &axis);
909 mutex_unlock(&msa311->lock);
918 mutex_unlock(&msa311->lock);
931 struct msa311_priv *msa311 = iio_priv(p);
933 struct device *dev = msa311->dev;
936 mutex_lock(&msa311->lock);
943 err = regmap_field_read(msa311->fields[F_NEW_DATA_INT_EN],
946 mutex_unlock(&msa311->lock);
954 iio_trigger_poll_nested(msa311->new_data_trig);
976 static int msa311_check_partid(struct msa311_priv *msa311)
978 struct device *dev = msa311->dev;
982 err = regmap_read(msa311->regs, MSA311_PARTID_REG, &partid);
990 msa311->chip_name = devm_kasprintf(dev, GFP_KERNEL,
991 "msa311-%02x", partid);
992 if (!msa311->chip_name)
998 static int msa311_soft_reset(struct msa311_priv *msa311)
1000 struct device *dev = msa311->dev;
1003 err = regmap_write(msa311->regs, MSA311_SOFT_RESET_REG,
1012 static int msa311_chip_init(struct msa311_priv *msa311)
1014 struct device *dev = msa311->dev;
1018 err = regmap_write(msa311->regs, MSA311_RANGE_REG, MSA311_FS_16G);
1023 err = regmap_bulk_write(msa311->regs, MSA311_INT_SET_0_REG,
1030 err = regmap_bulk_write(msa311->regs, MSA311_INT_MAP_0_REG,
1037 err = regmap_update_bits(msa311->regs, MSA311_ODR_REG,
1044 err = msa311_set_odr(msa311, MSA311_ODR_125_HZ);
1052 static int msa311_setup_interrupts(struct msa311_priv *msa311)
1054 struct device *dev = msa311->dev;
1066 msa311->chip_name, indio_dev);
1070 trig = devm_iio_trigger_alloc(dev, "%s-new-data", msa311->chip_name);
1075 msa311->new_data_trig = trig;
1076 msa311->new_data_trig->ops = &msa311_new_data_trig_ops;
1077 iio_trigger_set_drvdata(msa311->new_data_trig, indio_dev);
1079 err = devm_iio_trigger_register(dev, msa311->new_data_trig);
1084 err = regmap_field_write(msa311->fields[F_INT1_OD],
1090 err = regmap_field_write(msa311->fields[F_INT1_LVL],
1096 err = regmap_field_write(msa311->fields[F_LATCH_INT],
1102 err = regmap_field_write(msa311->fields[F_RESET_INT], 1);
1107 err = regmap_field_write(msa311->fields[F_INT1_NEW_DATA], 1);
1115 static int msa311_regmap_init(struct msa311_priv *msa311)
1117 struct regmap_field **fields = msa311->fields;
1118 struct device *dev = msa311->dev;
1128 msa311->regs = regmap;
1132 msa311->regs,
1134 if (IS_ERR(msa311->fields[i]))
1135 return dev_err_probe(dev, PTR_ERR(msa311->fields[i]),
1142 static void msa311_powerdown(void *msa311)
1144 msa311_set_pwr_mode(msa311, MSA311_PWR_MODE_SUSPEND);
1150 struct msa311_priv *msa311;
1154 indio_dev = devm_iio_device_alloc(dev, sizeof(*msa311));
1159 msa311 = iio_priv(indio_dev);
1160 msa311->dev = dev;
1163 err = msa311_regmap_init(msa311);
1167 mutex_init(&msa311->lock);
1173 err = msa311_check_partid(msa311);
1177 err = msa311_soft_reset(msa311);
1181 err = msa311_set_pwr_mode(msa311, MSA311_PWR_MODE_NORMAL);
1196 err = devm_add_action_or_reset(dev, msa311_powerdown, msa311);
1212 err = msa311_chip_init(msa311);
1219 indio_dev->name = msa311->chip_name;
1230 err = msa311_setup_interrupts(msa311);
1247 struct msa311_priv *msa311 = iio_priv(indio_dev);
1250 mutex_lock(&msa311->lock);
1251 err = msa311_set_pwr_mode(msa311, MSA311_PWR_MODE_SUSPEND);
1252 mutex_unlock(&msa311->lock);
1263 struct msa311_priv *msa311 = iio_priv(indio_dev);
1266 mutex_lock(&msa311->lock);
1267 err = msa311_set_pwr_mode(msa311, MSA311_PWR_MODE_NORMAL);
1268 mutex_unlock(&msa311->lock);
1280 { .name = "msa311" },
1286 { .compatible = "memsensing,msa311" },
1293 .name = "msa311",