Lines Matching refs: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()
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()
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()
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 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_DATA_ADDR, val); in sca3000_write_ctrl_reg()
398 static int sca3000_read_ctrl_reg(struct sca3000_state *st, in sca3000_read_ctrl_reg() argument
403 ret = sca3000_reg_lock_on(st); in sca3000_read_ctrl_reg()
407 ret = __sca3000_unlock_reg_lock(st); in sca3000_read_ctrl_reg()
412 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_SEL_ADDR, ctrl_reg); in sca3000_read_ctrl_reg()
415 ret = sca3000_read_data_short(st, SCA3000_REG_CTRL_DATA_ADDR, 1); in sca3000_read_ctrl_reg()
418 return st->rx[0]; in sca3000_read_ctrl_reg()
432 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_print_rev() local
434 mutex_lock(&st->lock); in sca3000_print_rev()
435 ret = sca3000_read_data_short(st, SCA3000_REG_REVID_ADDR, 1); in sca3000_print_rev()
440 st->rx[0] & SCA3000_REG_REVID_MAJOR_MASK, in sca3000_print_rev()
441 st->rx[0] & SCA3000_REG_REVID_MINOR_MASK); in sca3000_print_rev()
443 mutex_unlock(&st->lock); in sca3000_print_rev()
454 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_show_available_3db_freqs() local
457 len = sprintf(buf, "%d", st->info->measurement_mode_3db_freq); in sca3000_show_available_3db_freqs()
458 if (st->info->option_mode_1) in sca3000_show_available_3db_freqs()
460 st->info->option_mode_1_3db_freq); in sca3000_show_available_3db_freqs()
461 if (st->info->option_mode_2) in sca3000_show_available_3db_freqs()
463 st->info->option_mode_2_3db_freq); in sca3000_show_available_3db_freqs()
565 static inline int __sca3000_get_base_freq(struct sca3000_state *st, in __sca3000_get_base_freq() argument
571 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_get_base_freq()
574 switch (SCA3000_REG_MODE_MODE_MASK & st->rx[0]) { in __sca3000_get_base_freq()
598 static int sca3000_read_raw_samp_freq(struct sca3000_state *st, int *val) in sca3000_read_raw_samp_freq() argument
602 ret = __sca3000_get_base_freq(st, st->info, val); in sca3000_read_raw_samp_freq()
606 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_read_raw_samp_freq()
632 static int sca3000_write_raw_samp_freq(struct sca3000_state *st, int val) in sca3000_write_raw_samp_freq() argument
636 ret = __sca3000_get_base_freq(st, st->info, &base_freq); in sca3000_write_raw_samp_freq()
640 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_write_raw_samp_freq()
653 return sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_write_raw_samp_freq()
657 static int sca3000_read_3db_freq(struct sca3000_state *st, int *val) in sca3000_read_3db_freq() argument
661 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_3db_freq()
666 st->rx[0] &= SCA3000_REG_MODE_MODE_MASK; in sca3000_read_3db_freq()
667 switch (st->rx[0]) { in sca3000_read_3db_freq()
669 *val = st->info->measurement_mode_3db_freq; in sca3000_read_3db_freq()
674 *val = st->info->option_mode_1_3db_freq; in sca3000_read_3db_freq()
677 *val = st->info->option_mode_2_3db_freq; in sca3000_read_3db_freq()
684 static int sca3000_write_3db_freq(struct sca3000_state *st, int val) in sca3000_write_3db_freq() argument
689 if (val == st->info->measurement_mode_3db_freq) in sca3000_write_3db_freq()
691 else if (st->info->option_mode_1 && in sca3000_write_3db_freq()
692 (val == st->info->option_mode_1_3db_freq)) in sca3000_write_3db_freq()
694 else if (st->info->option_mode_2 && in sca3000_write_3db_freq()
695 (val == st->info->option_mode_2_3db_freq)) in sca3000_write_3db_freq()
699 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_write_3db_freq()
703 st->rx[0] &= ~SCA3000_REG_MODE_MODE_MASK; in sca3000_write_3db_freq()
704 st->rx[0] |= (mode & SCA3000_REG_MODE_MODE_MASK); in sca3000_write_3db_freq()
706 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, st->rx[0]); in sca3000_write_3db_freq()
715 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_raw() local
721 mutex_lock(&st->lock); in sca3000_read_raw()
723 if (st->mo_det_use_count) { in sca3000_read_raw()
724 mutex_unlock(&st->lock); in sca3000_read_raw()
728 ret = sca3000_read_data_short(st, address, 2); in sca3000_read_raw()
730 mutex_unlock(&st->lock); in sca3000_read_raw()
733 *val = (be16_to_cpup((__be16 *)st->rx) >> 3) & 0x1FFF; in sca3000_read_raw()
737 ret = sca3000_read_data_short(st, in sca3000_read_raw()
741 mutex_unlock(&st->lock); in sca3000_read_raw()
744 *val = ((st->rx[0] & 0x3F) << 3) | in sca3000_read_raw()
745 ((st->rx[1] & 0xE0) >> 5); in sca3000_read_raw()
747 mutex_unlock(&st->lock); in sca3000_read_raw()
752 *val2 = st->info->scale; in sca3000_read_raw()
761 mutex_lock(&st->lock); in sca3000_read_raw()
762 ret = sca3000_read_raw_samp_freq(st, val); in sca3000_read_raw()
763 mutex_unlock(&st->lock); in sca3000_read_raw()
766 mutex_lock(&st->lock); in sca3000_read_raw()
767 ret = sca3000_read_3db_freq(st, val); in sca3000_read_raw()
768 mutex_unlock(&st->lock); in sca3000_read_raw()
779 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_raw() local
786 mutex_lock(&st->lock); in sca3000_write_raw()
787 ret = sca3000_write_raw_samp_freq(st, val); in sca3000_write_raw()
788 mutex_unlock(&st->lock); in sca3000_write_raw()
793 mutex_lock(&st->lock); in sca3000_write_raw()
794 ret = sca3000_write_3db_freq(st, val); in sca3000_write_raw()
795 mutex_unlock(&st->lock); in sca3000_write_raw()
820 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_av_freq() local
823 mutex_lock(&st->lock); in sca3000_read_av_freq()
824 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_av_freq()
825 val = st->rx[0]; in sca3000_read_av_freq()
826 mutex_unlock(&st->lock); in sca3000_read_av_freq()
833 st->info->measurement_mode_freq, in sca3000_read_av_freq()
834 st->info->measurement_mode_freq / 2, in sca3000_read_av_freq()
835 st->info->measurement_mode_freq / 4); in sca3000_read_av_freq()
839 st->info->option_mode_1_freq, in sca3000_read_av_freq()
840 st->info->option_mode_1_freq / 2, in sca3000_read_av_freq()
841 st->info->option_mode_1_freq / 4); in sca3000_read_av_freq()
845 st->info->option_mode_2_freq, in sca3000_read_av_freq()
846 st->info->option_mode_2_freq / 2, in sca3000_read_av_freq()
847 st->info->option_mode_2_freq / 4); in sca3000_read_av_freq()
871 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_value() local
877 mutex_lock(&st->lock); in sca3000_read_event_value()
878 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_value()
880 mutex_unlock(&st->lock); in sca3000_read_event_value()
886 ARRAY_SIZE(st->info->mot_det_mult_y)) in sca3000_read_event_value()
887 *val += st->info->mot_det_mult_y[i]; in sca3000_read_event_value()
890 ARRAY_SIZE(st->info->mot_det_mult_xz)) in sca3000_read_event_value()
891 *val += st->info->mot_det_mult_xz[i]; in sca3000_read_event_value()
923 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_value() local
929 i = ARRAY_SIZE(st->info->mot_det_mult_y); in sca3000_write_event_value()
931 if (val >= st->info->mot_det_mult_y[--i]) { in sca3000_write_event_value()
933 val -= st->info->mot_det_mult_y[i]; in sca3000_write_event_value()
936 i = ARRAY_SIZE(st->info->mot_det_mult_xz); in sca3000_write_event_value()
938 if (val >= st->info->mot_det_mult_xz[--i]) { in sca3000_write_event_value()
940 val -= st->info->mot_det_mult_xz[i]; in sca3000_write_event_value()
944 mutex_lock(&st->lock); in sca3000_write_event_value()
945 ret = sca3000_write_ctrl_reg(st, in sca3000_write_event_value()
948 mutex_unlock(&st->lock); in sca3000_write_event_value()
963 static int sca3000_read_data(struct sca3000_state *st, in sca3000_read_data() argument
972 .tx_buf = st->tx, in sca3000_read_data()
979 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data()
980 ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data()
982 dev_err(&st->us->dev, "problem reading register\n"); in sca3000_read_data()
996 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_ring_int_process() local
999 mutex_lock(&st->lock); in sca3000_ring_int_process()
1002 ret = sca3000_read_data_short(st, SCA3000_REG_BUF_COUNT_ADDR, in sca3000_ring_int_process()
1006 num_available = st->rx[0]; in sca3000_ring_int_process()
1011 ret = sca3000_read_data(st, SCA3000_REG_RING_OUT_ADDR, st->rx, in sca3000_ring_int_process()
1023 iio_push_to_buffers(indio_dev, st->rx + i * 3 * 2); in sca3000_ring_int_process()
1027 mutex_unlock(&st->lock); in sca3000_ring_int_process()
1045 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_event_handler() local
1053 mutex_lock(&st->lock); in sca3000_event_handler()
1054 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_event_handler()
1055 val = st->rx[0]; in sca3000_event_handler()
1056 mutex_unlock(&st->lock); in sca3000_event_handler()
1110 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_config() local
1113 mutex_lock(&st->lock); in sca3000_read_event_config()
1115 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_event_config()
1121 ret = !!(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_read_event_config()
1130 if ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_read_event_config()
1134 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_config()
1147 mutex_unlock(&st->lock); in sca3000_read_event_config()
1154 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_freefall_set_state() local
1158 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_freefall_set_state()
1163 if (state && !(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1164 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1165 st->rx[0] | SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1167 else if (!state && (st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1168 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1169 st->rx[0] & ~SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1177 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_motion_detect_set_state() local
1184 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_motion_detect_set_state()
1190 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1196 st->mo_det_use_count++; in sca3000_motion_detect_set_state()
1198 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1204 st->mo_det_use_count--; in sca3000_motion_detect_set_state()
1208 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_motion_detect_set_state()
1212 if ((st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1213 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1215 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1216 (st->rx[0] & ~SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1219 else if (!(st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1220 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1222 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1223 st->rx[0] & SCA3000_REG_MODE_MODE_MASK); in sca3000_motion_detect_set_state()
1249 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_config() local
1252 mutex_lock(&st->lock); in sca3000_write_event_config()
1269 mutex_unlock(&st->lock); in sca3000_write_event_config()
1277 struct sca3000_state *st = iio_priv(indio_dev); in __sca3000_hw_ring_state_set() local
1280 mutex_lock(&st->lock); in __sca3000_hw_ring_state_set()
1281 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_hw_ring_state_set()
1286 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1288 (st->rx[0] | SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1290 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1292 (st->rx[0] & ~SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1294 mutex_unlock(&st->lock); in __sca3000_hw_ring_state_set()
1311 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_preenable() local
1313 mutex_lock(&st->lock); in sca3000_hw_ring_preenable()
1316 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_preenable()
1319 ret = sca3000_write_reg(st, in sca3000_hw_ring_preenable()
1321 st->rx[0] | SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_preenable()
1325 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1330 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1338 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_postdisable() local
1345 mutex_lock(&st->lock); in sca3000_hw_ring_postdisable()
1347 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_postdisable()
1350 ret = sca3000_write_reg(st, in sca3000_hw_ring_postdisable()
1352 st->rx[0] & ~SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_postdisable()
1354 mutex_unlock(&st->lock); in sca3000_hw_ring_postdisable()
1371 static int sca3000_clean_setup(struct sca3000_state *st) in sca3000_clean_setup() argument
1375 mutex_lock(&st->lock); in sca3000_clean_setup()
1377 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_clean_setup()
1382 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_clean_setup()
1385 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL, in sca3000_clean_setup()
1391 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_clean_setup()
1394 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_clean_setup()
1403 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_clean_setup()
1406 ret = sca3000_write_reg(st, in sca3000_clean_setup()
1417 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_clean_setup()
1420 ret = sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_clean_setup()
1421 (st->rx[0] & SCA3000_MODE_PROT_MASK)); in sca3000_clean_setup()
1424 mutex_unlock(&st->lock); in sca3000_clean_setup()
1441 struct sca3000_state *st; in sca3000_probe() local
1444 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in sca3000_probe()
1448 st = iio_priv(indio_dev); in sca3000_probe()
1450 st->us = spi; in sca3000_probe()
1451 mutex_init(&st->lock); in sca3000_probe()
1452 st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi) in sca3000_probe()
1457 if (st->info->temp_output) { in sca3000_probe()
1483 ret = sca3000_clean_setup(st); in sca3000_probe()
1500 static int sca3000_stop_all_interrupts(struct sca3000_state *st) in sca3000_stop_all_interrupts() argument
1504 mutex_lock(&st->lock); in sca3000_stop_all_interrupts()
1505 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_stop_all_interrupts()
1508 ret = sca3000_write_reg(st, SCA3000_REG_INT_MASK_ADDR, in sca3000_stop_all_interrupts()
1509 (st->rx[0] & in sca3000_stop_all_interrupts()
1514 mutex_unlock(&st->lock); in sca3000_stop_all_interrupts()
1521 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_remove() local
1526 sca3000_stop_all_interrupts(st); in sca3000_remove()