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 ret = sca3000_write_reg(st, SCA3000_REG_CTRL_DATA_ADDR, val); in sca3000_write_ctrl_reg()
393 * @st: Driver specific device instance data.
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()
559 * @st: Private driver specific device instance specific state.
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()
593 * @st: Private driver specific device instance specific state.
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()
627 * @st: Private driver specific device instance specific state.
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()
738 ret = sca3000_read_data_short(st, in sca3000_read_raw()
742 mutex_unlock(&st->lock); in sca3000_read_raw()
745 *val = ((st->rx[0] & 0x3F) << 3) | in sca3000_read_raw()
746 ((st->rx[1] & 0xE0) >> 5); in sca3000_read_raw()
748 mutex_unlock(&st->lock); in sca3000_read_raw()
753 *val2 = st->info->scale; in sca3000_read_raw()
762 mutex_lock(&st->lock); in sca3000_read_raw()
763 ret = sca3000_read_raw_samp_freq(st, val); in sca3000_read_raw()
764 mutex_unlock(&st->lock); in sca3000_read_raw()
767 mutex_lock(&st->lock); in sca3000_read_raw()
768 ret = sca3000_read_3db_freq(st, val); in sca3000_read_raw()
769 mutex_unlock(&st->lock); in sca3000_read_raw()
780 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_raw() local
787 mutex_lock(&st->lock); in sca3000_write_raw()
788 ret = sca3000_write_raw_samp_freq(st, val); in sca3000_write_raw()
789 mutex_unlock(&st->lock); in sca3000_write_raw()
794 mutex_lock(&st->lock); in sca3000_write_raw()
795 ret = sca3000_write_3db_freq(st, val); in sca3000_write_raw()
796 mutex_unlock(&st->lock); in sca3000_write_raw()
821 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_av_freq() local
824 mutex_lock(&st->lock); in sca3000_read_av_freq()
825 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_av_freq()
826 val = st->rx[0]; in sca3000_read_av_freq()
827 mutex_unlock(&st->lock); in sca3000_read_av_freq()
834 st->info->measurement_mode_freq, in sca3000_read_av_freq()
835 st->info->measurement_mode_freq / 2, in sca3000_read_av_freq()
836 st->info->measurement_mode_freq / 4); in sca3000_read_av_freq()
840 st->info->option_mode_1_freq, in sca3000_read_av_freq()
841 st->info->option_mode_1_freq / 2, in sca3000_read_av_freq()
842 st->info->option_mode_1_freq / 4); in sca3000_read_av_freq()
846 st->info->option_mode_2_freq, in sca3000_read_av_freq()
847 st->info->option_mode_2_freq / 2, in sca3000_read_av_freq()
848 st->info->option_mode_2_freq / 4); in sca3000_read_av_freq()
872 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_value() local
878 mutex_lock(&st->lock); in sca3000_read_event_value()
879 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_value()
881 mutex_unlock(&st->lock); in sca3000_read_event_value()
887 ARRAY_SIZE(st->info->mot_det_mult_y)) in sca3000_read_event_value()
888 *val += st->info->mot_det_mult_y[i]; in sca3000_read_event_value()
891 ARRAY_SIZE(st->info->mot_det_mult_xz)) in sca3000_read_event_value()
892 *val += st->info->mot_det_mult_xz[i]; in sca3000_read_event_value()
924 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_value() local
930 i = ARRAY_SIZE(st->info->mot_det_mult_y); in sca3000_write_event_value()
932 if (val >= st->info->mot_det_mult_y[--i]) { in sca3000_write_event_value()
934 val -= st->info->mot_det_mult_y[i]; in sca3000_write_event_value()
937 i = ARRAY_SIZE(st->info->mot_det_mult_xz); in sca3000_write_event_value()
939 if (val >= st->info->mot_det_mult_xz[--i]) { in sca3000_write_event_value()
941 val -= st->info->mot_det_mult_xz[i]; in sca3000_write_event_value()
945 mutex_lock(&st->lock); in sca3000_write_event_value()
946 ret = sca3000_write_ctrl_reg(st, in sca3000_write_event_value()
949 mutex_unlock(&st->lock); in sca3000_write_event_value()
964 static int sca3000_read_data(struct sca3000_state *st, in sca3000_read_data() argument
973 .tx_buf = st->tx, in sca3000_read_data()
980 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data()
981 ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data()
983 dev_err(&st->us->dev, "problem reading register\n"); in sca3000_read_data()
997 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_ring_int_process() local
1000 mutex_lock(&st->lock); in sca3000_ring_int_process()
1003 ret = sca3000_read_data_short(st, SCA3000_REG_BUF_COUNT_ADDR, in sca3000_ring_int_process()
1007 num_available = st->rx[0]; in sca3000_ring_int_process()
1012 ret = sca3000_read_data(st, SCA3000_REG_RING_OUT_ADDR, st->rx, in sca3000_ring_int_process()
1024 iio_push_to_buffers(indio_dev, st->rx + i * 3 * 2); in sca3000_ring_int_process()
1028 mutex_unlock(&st->lock); in sca3000_ring_int_process()
1046 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_event_handler() local
1054 mutex_lock(&st->lock); in sca3000_event_handler()
1055 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_event_handler()
1056 val = st->rx[0]; in sca3000_event_handler()
1057 mutex_unlock(&st->lock); in sca3000_event_handler()
1111 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_config() local
1114 mutex_lock(&st->lock); in sca3000_read_event_config()
1116 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_event_config()
1122 ret = !!(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_read_event_config()
1131 if ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_read_event_config()
1135 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_config()
1148 mutex_unlock(&st->lock); in sca3000_read_event_config()
1155 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_freefall_set_state() local
1159 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_freefall_set_state()
1164 if (state && !(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1165 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1166 st->rx[0] | SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1168 else if (!state && (st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1169 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1170 st->rx[0] & ~SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1178 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_motion_detect_set_state() local
1185 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_motion_detect_set_state()
1191 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1197 st->mo_det_use_count++; in sca3000_motion_detect_set_state()
1199 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1205 st->mo_det_use_count--; in sca3000_motion_detect_set_state()
1209 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_motion_detect_set_state()
1213 if ((st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1214 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1216 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1217 (st->rx[0] & ~SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1220 else if (!(st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1221 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1223 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1224 st->rx[0] & SCA3000_REG_MODE_MODE_MASK); in sca3000_motion_detect_set_state()
1250 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_config() local
1253 mutex_lock(&st->lock); in sca3000_write_event_config()
1270 mutex_unlock(&st->lock); in sca3000_write_event_config()
1292 struct sca3000_state *st = iio_priv(indio_dev); in __sca3000_hw_ring_state_set() local
1295 mutex_lock(&st->lock); in __sca3000_hw_ring_state_set()
1296 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_hw_ring_state_set()
1301 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1303 (st->rx[0] | SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1305 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1307 (st->rx[0] & ~SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1309 mutex_unlock(&st->lock); in __sca3000_hw_ring_state_set()
1326 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_preenable() local
1328 mutex_lock(&st->lock); in sca3000_hw_ring_preenable()
1331 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_preenable()
1334 ret = sca3000_write_reg(st, in sca3000_hw_ring_preenable()
1336 st->rx[0] | SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_preenable()
1340 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1345 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1353 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_postdisable() local
1360 mutex_lock(&st->lock); in sca3000_hw_ring_postdisable()
1362 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_postdisable()
1365 ret = sca3000_write_reg(st, in sca3000_hw_ring_postdisable()
1367 st->rx[0] & ~SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_postdisable()
1369 mutex_unlock(&st->lock); in sca3000_hw_ring_postdisable()
1380 * @st: Device instance specific private data structure
1386 static int sca3000_clean_setup(struct sca3000_state *st) in sca3000_clean_setup() argument
1390 mutex_lock(&st->lock); in sca3000_clean_setup()
1392 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_clean_setup()
1397 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_clean_setup()
1400 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL, in sca3000_clean_setup()
1406 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_clean_setup()
1409 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_clean_setup()
1418 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_clean_setup()
1421 ret = sca3000_write_reg(st, in sca3000_clean_setup()
1432 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_clean_setup()
1435 ret = sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_clean_setup()
1436 (st->rx[0] & SCA3000_MODE_PROT_MASK)); in sca3000_clean_setup()
1439 mutex_unlock(&st->lock); in sca3000_clean_setup()
1456 struct sca3000_state *st; in sca3000_probe() local
1459 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in sca3000_probe()
1463 st = iio_priv(indio_dev); in sca3000_probe()
1465 st->us = spi; in sca3000_probe()
1466 mutex_init(&st->lock); in sca3000_probe()
1467 st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi) in sca3000_probe()
1472 if (st->info->temp_output) { in sca3000_probe()
1497 ret = sca3000_clean_setup(st); in sca3000_probe()
1514 static int sca3000_stop_all_interrupts(struct sca3000_state *st) in sca3000_stop_all_interrupts() argument
1518 mutex_lock(&st->lock); in sca3000_stop_all_interrupts()
1519 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_stop_all_interrupts()
1522 ret = sca3000_write_reg(st, SCA3000_REG_INT_MASK_ADDR, in sca3000_stop_all_interrupts()
1523 (st->rx[0] & in sca3000_stop_all_interrupts()
1528 mutex_unlock(&st->lock); in sca3000_stop_all_interrupts()
1535 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_remove() local
1540 sca3000_stop_all_interrupts(st); in sca3000_remove()