Lines Matching full:st

277 static int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val)  in sca3000_write_reg()  argument
279 st->tx[0] = SCA3000_WRITE_REG(address); in sca3000_write_reg()
280 st->tx[1] = val; in sca3000_write_reg()
281 return spi_write(st->us, st->tx, 2); in sca3000_write_reg()
284 static int sca3000_read_data_short(struct sca3000_state *st, in sca3000_read_data_short() argument
291 .tx_buf = st->tx, in sca3000_read_data_short()
294 .rx_buf = st->rx, in sca3000_read_data_short()
297 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data_short()
299 return spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data_short()
304 * @st: Driver specific device instance data.
308 static int sca3000_reg_lock_on(struct sca3000_state *st) in sca3000_reg_lock_on() argument
312 ret = sca3000_read_data_short(st, SCA3000_REG_STATUS_ADDR, 1); in sca3000_reg_lock_on()
316 return !(st->rx[0] & SCA3000_LOCKED); in sca3000_reg_lock_on()
321 * @st: Driver specific device instance data.
327 static int __sca3000_unlock_reg_lock(struct sca3000_state *st) in __sca3000_unlock_reg_lock() argument
333 .tx_buf = st->tx, in __sca3000_unlock_reg_lock()
337 .tx_buf = st->tx + 2, in __sca3000_unlock_reg_lock()
340 .tx_buf = st->tx + 4, in __sca3000_unlock_reg_lock()
343 st->tx[0] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
344 st->tx[1] = 0x00; in __sca3000_unlock_reg_lock()
345 st->tx[2] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
346 st->tx[3] = 0x50; in __sca3000_unlock_reg_lock()
347 st->tx[4] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
348 st->tx[5] = 0xA0; in __sca3000_unlock_reg_lock()
350 return spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in __sca3000_unlock_reg_lock()
355 * @st: Driver specific device instance data.
364 static int sca3000_write_ctrl_reg(struct sca3000_state *st, in sca3000_write_ctrl_reg() argument
370 ret = sca3000_reg_lock_on(st); in sca3000_write_ctrl_reg()
374 ret = __sca3000_unlock_reg_lock(st); in sca3000_write_ctrl_reg()
380 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_SEL_ADDR, sel); in sca3000_write_ctrl_reg()
385 return sca3000_write_reg(st, SCA3000_REG_CTRL_DATA_ADDR, val); in sca3000_write_ctrl_reg()
390 * @st: Driver specific device instance data.
395 static int sca3000_read_ctrl_reg(struct sca3000_state *st, in sca3000_read_ctrl_reg() argument
400 ret = sca3000_reg_lock_on(st); in sca3000_read_ctrl_reg()
404 ret = __sca3000_unlock_reg_lock(st); in sca3000_read_ctrl_reg()
409 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_SEL_ADDR, ctrl_reg); in sca3000_read_ctrl_reg()
412 ret = sca3000_read_data_short(st, SCA3000_REG_CTRL_DATA_ADDR, 1); in sca3000_read_ctrl_reg()
415 return st->rx[0]; in sca3000_read_ctrl_reg()
427 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_print_rev() local
429 mutex_lock(&st->lock); in sca3000_print_rev()
430 ret = sca3000_read_data_short(st, SCA3000_REG_REVID_ADDR, 1); in sca3000_print_rev()
435 st->rx[0] & SCA3000_REG_REVID_MAJOR_MASK, in sca3000_print_rev()
436 st->rx[0] & SCA3000_REG_REVID_MINOR_MASK); in sca3000_print_rev()
438 mutex_unlock(&st->lock); in sca3000_print_rev()
449 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_show_available_3db_freqs() local
452 len = sprintf(buf, "%d", st->info->measurement_mode_3db_freq); in sca3000_show_available_3db_freqs()
453 if (st->info->option_mode_1) in sca3000_show_available_3db_freqs()
455 st->info->option_mode_1_3db_freq); in sca3000_show_available_3db_freqs()
456 if (st->info->option_mode_2) in sca3000_show_available_3db_freqs()
458 st->info->option_mode_2_3db_freq); in sca3000_show_available_3db_freqs()
561 * @st: Private driver specific device instance specific state.
567 static inline int __sca3000_get_base_freq(struct sca3000_state *st, in __sca3000_get_base_freq() argument
573 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_get_base_freq()
577 switch (SCA3000_REG_MODE_MODE_MASK & st->rx[0]) { in __sca3000_get_base_freq()
595 * @st: Private driver specific device instance specific state.
600 static int sca3000_read_raw_samp_freq(struct sca3000_state *st, int *val) in sca3000_read_raw_samp_freq() argument
604 ret = __sca3000_get_base_freq(st, st->info, val); in sca3000_read_raw_samp_freq()
608 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_read_raw_samp_freq()
629 * @st: Private driver specific device instance specific state.
634 static int sca3000_write_raw_samp_freq(struct sca3000_state *st, int val) in sca3000_write_raw_samp_freq() argument
638 ret = __sca3000_get_base_freq(st, st->info, &base_freq); in sca3000_write_raw_samp_freq()
642 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_write_raw_samp_freq()
655 return sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_write_raw_samp_freq()
659 static int sca3000_read_3db_freq(struct sca3000_state *st, int *val) in sca3000_read_3db_freq() argument
663 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_3db_freq()
668 st->rx[0] &= SCA3000_REG_MODE_MODE_MASK; in sca3000_read_3db_freq()
669 switch (st->rx[0]) { in sca3000_read_3db_freq()
671 *val = st->info->measurement_mode_3db_freq; in sca3000_read_3db_freq()
676 *val = st->info->option_mode_1_3db_freq; in sca3000_read_3db_freq()
679 *val = st->info->option_mode_2_3db_freq; in sca3000_read_3db_freq()
686 static int sca3000_write_3db_freq(struct sca3000_state *st, int val) in sca3000_write_3db_freq() argument
691 if (val == st->info->measurement_mode_3db_freq) in sca3000_write_3db_freq()
693 else if (st->info->option_mode_1 && in sca3000_write_3db_freq()
694 (val == st->info->option_mode_1_3db_freq)) in sca3000_write_3db_freq()
696 else if (st->info->option_mode_2 && in sca3000_write_3db_freq()
697 (val == st->info->option_mode_2_3db_freq)) in sca3000_write_3db_freq()
701 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_write_3db_freq()
705 st->rx[0] &= ~SCA3000_REG_MODE_MODE_MASK; in sca3000_write_3db_freq()
706 st->rx[0] |= (mode & SCA3000_REG_MODE_MODE_MASK); in sca3000_write_3db_freq()
708 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, st->rx[0]); in sca3000_write_3db_freq()
717 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_raw() local
723 mutex_lock(&st->lock); in sca3000_read_raw()
725 if (st->mo_det_use_count) { in sca3000_read_raw()
726 mutex_unlock(&st->lock); in sca3000_read_raw()
730 ret = sca3000_read_data_short(st, address, 2); in sca3000_read_raw()
732 mutex_unlock(&st->lock); in sca3000_read_raw()
735 *val = sign_extend32(be16_to_cpup((__be16 *)st->rx) >> in sca3000_read_raw()
740 ret = sca3000_read_data_short(st, in sca3000_read_raw()
744 mutex_unlock(&st->lock); in sca3000_read_raw()
747 *val = (be16_to_cpup((__be16 *)st->rx) >> in sca3000_read_raw()
751 mutex_unlock(&st->lock); in sca3000_read_raw()
756 *val2 = st->info->scale; in sca3000_read_raw()
765 mutex_lock(&st->lock); in sca3000_read_raw()
766 ret = sca3000_read_raw_samp_freq(st, val); in sca3000_read_raw()
767 mutex_unlock(&st->lock); in sca3000_read_raw()
770 mutex_lock(&st->lock); in sca3000_read_raw()
771 ret = sca3000_read_3db_freq(st, val); in sca3000_read_raw()
772 mutex_unlock(&st->lock); in sca3000_read_raw()
783 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_raw() local
790 mutex_lock(&st->lock); in sca3000_write_raw()
791 ret = sca3000_write_raw_samp_freq(st, val); in sca3000_write_raw()
792 mutex_unlock(&st->lock); in sca3000_write_raw()
797 mutex_lock(&st->lock); in sca3000_write_raw()
798 ret = sca3000_write_3db_freq(st, val); in sca3000_write_raw()
799 mutex_unlock(&st->lock); in sca3000_write_raw()
824 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_av_freq() local
827 mutex_lock(&st->lock); in sca3000_read_av_freq()
828 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_av_freq()
829 val = st->rx[0]; in sca3000_read_av_freq()
830 mutex_unlock(&st->lock); in sca3000_read_av_freq()
837 st->info->measurement_mode_freq, in sca3000_read_av_freq()
838 st->info->measurement_mode_freq / 2, in sca3000_read_av_freq()
839 st->info->measurement_mode_freq / 4); in sca3000_read_av_freq()
843 st->info->option_mode_1_freq, in sca3000_read_av_freq()
844 st->info->option_mode_1_freq / 2, in sca3000_read_av_freq()
845 st->info->option_mode_1_freq / 4); in sca3000_read_av_freq()
849 st->info->option_mode_2_freq, in sca3000_read_av_freq()
850 st->info->option_mode_2_freq / 2, in sca3000_read_av_freq()
851 st->info->option_mode_2_freq / 4); in sca3000_read_av_freq()
873 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_value() local
879 mutex_lock(&st->lock); in sca3000_read_event_value()
880 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_value()
882 mutex_unlock(&st->lock); in sca3000_read_event_value()
888 ARRAY_SIZE(st->info->mot_det_mult_y)) in sca3000_read_event_value()
889 *val += st->info->mot_det_mult_y[i]; in sca3000_read_event_value()
892 ARRAY_SIZE(st->info->mot_det_mult_xz)) in sca3000_read_event_value()
893 *val += st->info->mot_det_mult_xz[i]; in sca3000_read_event_value()
925 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_value() local
931 i = ARRAY_SIZE(st->info->mot_det_mult_y); in sca3000_write_event_value()
933 if (val >= st->info->mot_det_mult_y[--i]) { in sca3000_write_event_value()
935 val -= st->info->mot_det_mult_y[i]; in sca3000_write_event_value()
938 i = ARRAY_SIZE(st->info->mot_det_mult_xz); in sca3000_write_event_value()
940 if (val >= st->info->mot_det_mult_xz[--i]) { in sca3000_write_event_value()
942 val -= st->info->mot_det_mult_xz[i]; in sca3000_write_event_value()
946 mutex_lock(&st->lock); in sca3000_write_event_value()
947 ret = sca3000_write_ctrl_reg(st, in sca3000_write_event_value()
950 mutex_unlock(&st->lock); in sca3000_write_event_value()
965 static int sca3000_read_data(struct sca3000_state *st, in sca3000_read_data() argument
974 .tx_buf = st->tx, in sca3000_read_data()
981 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data()
982 ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data()
984 dev_err(&st->us->dev, "problem reading register\n"); in sca3000_read_data()
998 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_ring_int_process() local
1001 mutex_lock(&st->lock); in sca3000_ring_int_process()
1004 ret = sca3000_read_data_short(st, SCA3000_REG_BUF_COUNT_ADDR, in sca3000_ring_int_process()
1008 num_available = st->rx[0]; in sca3000_ring_int_process()
1013 ret = sca3000_read_data(st, SCA3000_REG_RING_OUT_ADDR, st->rx, in sca3000_ring_int_process()
1025 iio_push_to_buffers(indio_dev, st->rx + i * 3 * 2); in sca3000_ring_int_process()
1029 mutex_unlock(&st->lock); in sca3000_ring_int_process()
1047 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_event_handler() local
1055 mutex_lock(&st->lock); in sca3000_event_handler()
1056 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_event_handler()
1057 val = st->rx[0]; in sca3000_event_handler()
1058 mutex_unlock(&st->lock); in sca3000_event_handler()
1112 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_config() local
1115 mutex_lock(&st->lock); in sca3000_read_event_config()
1117 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_event_config()
1123 ret = !!(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_read_event_config()
1132 if ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_read_event_config()
1136 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_config()
1149 mutex_unlock(&st->lock); in sca3000_read_event_config()
1156 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_freefall_set_state() local
1160 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_freefall_set_state()
1165 if (state && !(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1166 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1167 st->rx[0] | SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1169 else if (!state && (st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1170 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1171 st->rx[0] & ~SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1179 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_motion_detect_set_state() local
1186 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_motion_detect_set_state()
1192 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1198 st->mo_det_use_count++; in sca3000_motion_detect_set_state()
1200 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1206 st->mo_det_use_count--; in sca3000_motion_detect_set_state()
1210 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_motion_detect_set_state()
1214 if ((st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1215 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1217 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1218 (st->rx[0] & ~SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1221 else if (!(st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1222 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1224 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1225 st->rx[0] & SCA3000_REG_MODE_MODE_MASK); in sca3000_motion_detect_set_state()
1251 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_config() local
1254 mutex_lock(&st->lock); in sca3000_write_event_config()
1271 mutex_unlock(&st->lock); in sca3000_write_event_config()
1279 struct sca3000_state *st = iio_priv(indio_dev); in __sca3000_hw_ring_state_set() local
1282 mutex_lock(&st->lock); in __sca3000_hw_ring_state_set()
1283 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_hw_ring_state_set()
1288 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1290 (st->rx[0] | SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1292 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1294 (st->rx[0] & ~SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1296 mutex_unlock(&st->lock); in __sca3000_hw_ring_state_set()
1313 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_preenable() local
1315 mutex_lock(&st->lock); in sca3000_hw_ring_preenable()
1318 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_preenable()
1321 ret = sca3000_write_reg(st, in sca3000_hw_ring_preenable()
1323 st->rx[0] | SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_preenable()
1327 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1332 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1340 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_postdisable() local
1347 mutex_lock(&st->lock); in sca3000_hw_ring_postdisable()
1349 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_postdisable()
1352 ret = sca3000_write_reg(st, in sca3000_hw_ring_postdisable()
1354 st->rx[0] & ~SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_postdisable()
1356 mutex_unlock(&st->lock); in sca3000_hw_ring_postdisable()
1367 * @st: Device instance specific private data structure
1373 static int sca3000_clean_setup(struct sca3000_state *st) in sca3000_clean_setup() argument
1377 mutex_lock(&st->lock); in sca3000_clean_setup()
1379 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_clean_setup()
1384 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_clean_setup()
1387 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL, in sca3000_clean_setup()
1393 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_clean_setup()
1396 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_clean_setup()
1405 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_clean_setup()
1408 ret = sca3000_write_reg(st, in sca3000_clean_setup()
1419 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_clean_setup()
1422 ret = sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_clean_setup()
1423 (st->rx[0] & SCA3000_MODE_PROT_MASK)); in sca3000_clean_setup()
1426 mutex_unlock(&st->lock); in sca3000_clean_setup()
1443 struct sca3000_state *st; in sca3000_probe() local
1446 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in sca3000_probe()
1450 st = iio_priv(indio_dev); in sca3000_probe()
1452 st->us = spi; in sca3000_probe()
1453 mutex_init(&st->lock); in sca3000_probe()
1454 st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi) in sca3000_probe()
1459 if (st->info->temp_output) { in sca3000_probe()
1484 ret = sca3000_clean_setup(st); in sca3000_probe()
1501 static int sca3000_stop_all_interrupts(struct sca3000_state *st) in sca3000_stop_all_interrupts() argument
1505 mutex_lock(&st->lock); in sca3000_stop_all_interrupts()
1506 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_stop_all_interrupts()
1509 ret = sca3000_write_reg(st, SCA3000_REG_INT_MASK_ADDR, in sca3000_stop_all_interrupts()
1510 (st->rx[0] & in sca3000_stop_all_interrupts()
1515 mutex_unlock(&st->lock); in sca3000_stop_all_interrupts()
1522 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_remove() local
1527 sca3000_stop_all_interrupts(st); in sca3000_remove()