Lines Matching refs:st
280 static int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val) in sca3000_write_reg() argument
282 st->tx[0] = SCA3000_WRITE_REG(address); in sca3000_write_reg()
283 st->tx[1] = val; in sca3000_write_reg()
284 return spi_write(st->us, st->tx, 2); in sca3000_write_reg()
287 static int sca3000_read_data_short(struct sca3000_state *st, in sca3000_read_data_short() argument
294 .tx_buf = st->tx, in sca3000_read_data_short()
297 .rx_buf = st->rx, in sca3000_read_data_short()
300 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data_short()
302 return spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data_short()
311 static int sca3000_reg_lock_on(struct sca3000_state *st) in sca3000_reg_lock_on() argument
315 ret = sca3000_read_data_short(st, SCA3000_REG_STATUS_ADDR, 1); in sca3000_reg_lock_on()
319 return !(st->rx[0] & SCA3000_LOCKED); in sca3000_reg_lock_on()
330 static int __sca3000_unlock_reg_lock(struct sca3000_state *st) in __sca3000_unlock_reg_lock() argument
336 .tx_buf = st->tx, in __sca3000_unlock_reg_lock()
340 .tx_buf = st->tx + 2, in __sca3000_unlock_reg_lock()
343 .tx_buf = st->tx + 4, in __sca3000_unlock_reg_lock()
346 st->tx[0] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
347 st->tx[1] = 0x00; in __sca3000_unlock_reg_lock()
348 st->tx[2] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
349 st->tx[3] = 0x50; in __sca3000_unlock_reg_lock()
350 st->tx[4] = SCA3000_WRITE_REG(SCA3000_REG_UNLOCK_ADDR); in __sca3000_unlock_reg_lock()
351 st->tx[5] = 0xA0; in __sca3000_unlock_reg_lock()
353 return spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in __sca3000_unlock_reg_lock()
367 static int sca3000_write_ctrl_reg(struct sca3000_state *st, in sca3000_write_ctrl_reg() argument
373 ret = sca3000_reg_lock_on(st); in sca3000_write_ctrl_reg()
377 ret = __sca3000_unlock_reg_lock(st); in sca3000_write_ctrl_reg()
383 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_SEL_ADDR, sel); in sca3000_write_ctrl_reg()
388 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_DATA_ADDR, val); in sca3000_write_ctrl_reg()
401 static int sca3000_read_ctrl_reg(struct sca3000_state *st, in sca3000_read_ctrl_reg() argument
406 ret = sca3000_reg_lock_on(st); in sca3000_read_ctrl_reg()
410 ret = __sca3000_unlock_reg_lock(st); in sca3000_read_ctrl_reg()
415 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_SEL_ADDR, ctrl_reg); in sca3000_read_ctrl_reg()
418 ret = sca3000_read_data_short(st, SCA3000_REG_CTRL_DATA_ADDR, 1); in sca3000_read_ctrl_reg()
421 return st->rx[0]; in sca3000_read_ctrl_reg()
435 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_print_rev() local
437 mutex_lock(&st->lock); in sca3000_print_rev()
438 ret = sca3000_read_data_short(st, SCA3000_REG_REVID_ADDR, 1); in sca3000_print_rev()
443 st->rx[0] & SCA3000_REG_REVID_MAJOR_MASK, in sca3000_print_rev()
444 st->rx[0] & SCA3000_REG_REVID_MINOR_MASK); in sca3000_print_rev()
446 mutex_unlock(&st->lock); in sca3000_print_rev()
457 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_show_available_3db_freqs() local
460 len = sprintf(buf, "%d", st->info->measurement_mode_3db_freq); in sca3000_show_available_3db_freqs()
461 if (st->info->option_mode_1) in sca3000_show_available_3db_freqs()
463 st->info->option_mode_1_3db_freq); in sca3000_show_available_3db_freqs()
464 if (st->info->option_mode_2) in sca3000_show_available_3db_freqs()
466 st->info->option_mode_2_3db_freq); in sca3000_show_available_3db_freqs()
568 static inline int __sca3000_get_base_freq(struct sca3000_state *st, in __sca3000_get_base_freq() argument
574 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()
601 static int sca3000_read_raw_samp_freq(struct sca3000_state *st, int *val) in sca3000_read_raw_samp_freq() argument
605 ret = __sca3000_get_base_freq(st, st->info, val); in sca3000_read_raw_samp_freq()
609 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_read_raw_samp_freq()
635 static int sca3000_write_raw_samp_freq(struct sca3000_state *st, int val) in sca3000_write_raw_samp_freq() argument
639 ret = __sca3000_get_base_freq(st, st->info, &base_freq); in sca3000_write_raw_samp_freq()
643 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_write_raw_samp_freq()
656 return sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_write_raw_samp_freq()
660 static int sca3000_read_3db_freq(struct sca3000_state *st, int *val) in sca3000_read_3db_freq() argument
664 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_3db_freq()
669 st->rx[0] &= SCA3000_REG_MODE_MODE_MASK; in sca3000_read_3db_freq()
670 switch (st->rx[0]) { in sca3000_read_3db_freq()
672 *val = st->info->measurement_mode_3db_freq; in sca3000_read_3db_freq()
677 *val = st->info->option_mode_1_3db_freq; in sca3000_read_3db_freq()
680 *val = st->info->option_mode_2_3db_freq; in sca3000_read_3db_freq()
687 static int sca3000_write_3db_freq(struct sca3000_state *st, int val) in sca3000_write_3db_freq() argument
692 if (val == st->info->measurement_mode_3db_freq) in sca3000_write_3db_freq()
694 else if (st->info->option_mode_1 && in sca3000_write_3db_freq()
695 (val == st->info->option_mode_1_3db_freq)) in sca3000_write_3db_freq()
697 else if (st->info->option_mode_2 && in sca3000_write_3db_freq()
698 (val == st->info->option_mode_2_3db_freq)) in sca3000_write_3db_freq()
702 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_write_3db_freq()
706 st->rx[0] &= ~SCA3000_REG_MODE_MODE_MASK; in sca3000_write_3db_freq()
707 st->rx[0] |= (mode & SCA3000_REG_MODE_MODE_MASK); in sca3000_write_3db_freq()
709 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, st->rx[0]); in sca3000_write_3db_freq()
718 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_raw() local
724 mutex_lock(&st->lock); in sca3000_read_raw()
726 if (st->mo_det_use_count) { in sca3000_read_raw()
727 mutex_unlock(&st->lock); in sca3000_read_raw()
731 ret = sca3000_read_data_short(st, address, 2); in sca3000_read_raw()
733 mutex_unlock(&st->lock); in sca3000_read_raw()
736 *val = (be16_to_cpup((__be16 *)st->rx) >> 3) & 0x1FFF; in sca3000_read_raw()
741 ret = sca3000_read_data_short(st, in sca3000_read_raw()
745 mutex_unlock(&st->lock); in sca3000_read_raw()
748 *val = ((st->rx[0] & 0x3F) << 3) | in sca3000_read_raw()
749 ((st->rx[1] & 0xE0) >> 5); 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()
876 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_value() local
880 mutex_lock(&st->lock); in sca3000_read_event_value()
881 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_value()
883 mutex_unlock(&st->lock); in sca3000_read_event_value()
889 ARRAY_SIZE(st->info->mot_det_mult_y)) in sca3000_read_event_value()
890 *val += st->info->mot_det_mult_y[i]; in sca3000_read_event_value()
893 ARRAY_SIZE(st->info->mot_det_mult_xz)) in sca3000_read_event_value()
894 *val += st->info->mot_det_mult_xz[i]; in sca3000_read_event_value()
926 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_value() local
932 i = ARRAY_SIZE(st->info->mot_det_mult_y); in sca3000_write_event_value()
934 if (val >= st->info->mot_det_mult_y[--i]) { in sca3000_write_event_value()
936 val -= st->info->mot_det_mult_y[i]; in sca3000_write_event_value()
939 i = ARRAY_SIZE(st->info->mot_det_mult_xz); in sca3000_write_event_value()
941 if (val >= st->info->mot_det_mult_xz[--i]) { in sca3000_write_event_value()
943 val -= st->info->mot_det_mult_xz[i]; in sca3000_write_event_value()
947 mutex_lock(&st->lock); in sca3000_write_event_value()
948 ret = sca3000_write_ctrl_reg(st, in sca3000_write_event_value()
951 mutex_unlock(&st->lock); in sca3000_write_event_value()
966 static int sca3000_read_data(struct sca3000_state *st, in sca3000_read_data() argument
975 .tx_buf = st->tx, in sca3000_read_data()
982 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data()
983 ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data()
985 dev_err(get_device(&st->us->dev), "problem reading register"); in sca3000_read_data()
999 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_ring_int_process() local
1002 mutex_lock(&st->lock); in sca3000_ring_int_process()
1005 ret = sca3000_read_data_short(st, SCA3000_REG_BUF_COUNT_ADDR, in sca3000_ring_int_process()
1009 num_available = st->rx[0]; in sca3000_ring_int_process()
1014 ret = sca3000_read_data(st, SCA3000_REG_RING_OUT_ADDR, st->rx, in sca3000_ring_int_process()
1026 iio_push_to_buffers(indio_dev, st->rx + i * 3 * 2); in sca3000_ring_int_process()
1030 mutex_unlock(&st->lock); in sca3000_ring_int_process()
1048 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_event_handler() local
1056 mutex_lock(&st->lock); in sca3000_event_handler()
1057 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_event_handler()
1058 val = st->rx[0]; in sca3000_event_handler()
1059 mutex_unlock(&st->lock); in sca3000_event_handler()
1113 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_config() local
1116 mutex_lock(&st->lock); in sca3000_read_event_config()
1118 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_event_config()
1124 ret = !!(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_read_event_config()
1133 if ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_read_event_config()
1137 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_config()
1150 mutex_unlock(&st->lock); in sca3000_read_event_config()
1157 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_freefall_set_state() local
1161 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_freefall_set_state()
1166 if (state && !(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1167 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1168 st->rx[0] | SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1170 else if (!state && (st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1171 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1172 st->rx[0] & ~SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1180 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_motion_detect_set_state() local
1187 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_motion_detect_set_state()
1193 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1199 st->mo_det_use_count++; in sca3000_motion_detect_set_state()
1201 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1207 st->mo_det_use_count--; in sca3000_motion_detect_set_state()
1211 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_motion_detect_set_state()
1215 if ((st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1216 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1218 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1219 (st->rx[0] & ~SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1222 else if (!(st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1223 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1225 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1226 st->rx[0] & SCA3000_REG_MODE_MODE_MASK); in sca3000_motion_detect_set_state()
1252 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_config() local
1255 mutex_lock(&st->lock); in sca3000_write_event_config()
1272 mutex_unlock(&st->lock); in sca3000_write_event_config()
1294 struct sca3000_state *st = iio_priv(indio_dev); in __sca3000_hw_ring_state_set() local
1297 mutex_lock(&st->lock); in __sca3000_hw_ring_state_set()
1298 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_hw_ring_state_set()
1303 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1305 (st->rx[0] | SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1307 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1309 (st->rx[0] & ~SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1311 mutex_unlock(&st->lock); in __sca3000_hw_ring_state_set()
1328 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_preenable() local
1330 mutex_lock(&st->lock); in sca3000_hw_ring_preenable()
1333 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_preenable()
1336 ret = sca3000_write_reg(st, in sca3000_hw_ring_preenable()
1338 st->rx[0] | SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_preenable()
1342 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1347 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1355 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_postdisable() local
1362 mutex_lock(&st->lock); in sca3000_hw_ring_postdisable()
1364 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_postdisable()
1367 ret = sca3000_write_reg(st, in sca3000_hw_ring_postdisable()
1369 st->rx[0] & ~SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_postdisable()
1371 mutex_unlock(&st->lock); in sca3000_hw_ring_postdisable()
1388 static int sca3000_clean_setup(struct sca3000_state *st) in sca3000_clean_setup() argument
1392 mutex_lock(&st->lock); in sca3000_clean_setup()
1394 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_clean_setup()
1399 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_clean_setup()
1402 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL, in sca3000_clean_setup()
1408 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_clean_setup()
1411 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_clean_setup()
1420 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_clean_setup()
1423 ret = sca3000_write_reg(st, in sca3000_clean_setup()
1434 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_clean_setup()
1437 ret = sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_clean_setup()
1438 (st->rx[0] & SCA3000_MODE_PROT_MASK)); in sca3000_clean_setup()
1441 mutex_unlock(&st->lock); in sca3000_clean_setup()
1458 struct sca3000_state *st; in sca3000_probe() local
1461 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in sca3000_probe()
1465 st = iio_priv(indio_dev); in sca3000_probe()
1467 st->us = spi; in sca3000_probe()
1468 mutex_init(&st->lock); in sca3000_probe()
1469 st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi) in sca3000_probe()
1475 if (st->info->temp_output) { in sca3000_probe()
1500 ret = sca3000_clean_setup(st); in sca3000_probe()
1517 static int sca3000_stop_all_interrupts(struct sca3000_state *st) in sca3000_stop_all_interrupts() argument
1521 mutex_lock(&st->lock); in sca3000_stop_all_interrupts()
1522 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_stop_all_interrupts()
1525 ret = sca3000_write_reg(st, SCA3000_REG_INT_MASK_ADDR, in sca3000_stop_all_interrupts()
1526 (st->rx[0] & in sca3000_stop_all_interrupts()
1531 mutex_unlock(&st->lock); in sca3000_stop_all_interrupts()
1538 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_remove() local
1543 sca3000_stop_all_interrupts(st); in sca3000_remove()