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()
572 static inline int __sca3000_get_base_freq(struct sca3000_state *st, in __sca3000_get_base_freq() argument
578 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_get_base_freq()
581 switch (SCA3000_REG_MODE_MODE_MASK & st->rx[0]) { in __sca3000_get_base_freq()
605 static int sca3000_read_raw_samp_freq(struct sca3000_state *st, int *val) in sca3000_read_raw_samp_freq() argument
609 ret = __sca3000_get_base_freq(st, st->info, val); in sca3000_read_raw_samp_freq()
613 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_read_raw_samp_freq()
639 static int sca3000_write_raw_samp_freq(struct sca3000_state *st, int val) in sca3000_write_raw_samp_freq() argument
643 ret = __sca3000_get_base_freq(st, st->info, &base_freq); in sca3000_write_raw_samp_freq()
647 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_write_raw_samp_freq()
660 return sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_write_raw_samp_freq()
664 static int sca3000_read_3db_freq(struct sca3000_state *st, int *val) in sca3000_read_3db_freq() argument
668 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_3db_freq()
673 st->rx[0] &= SCA3000_REG_MODE_MODE_MASK; in sca3000_read_3db_freq()
674 switch (st->rx[0]) { in sca3000_read_3db_freq()
676 *val = st->info->measurement_mode_3db_freq; in sca3000_read_3db_freq()
681 *val = st->info->option_mode_1_3db_freq; in sca3000_read_3db_freq()
684 *val = st->info->option_mode_2_3db_freq; in sca3000_read_3db_freq()
691 static int sca3000_write_3db_freq(struct sca3000_state *st, int val) in sca3000_write_3db_freq() argument
696 if (val == st->info->measurement_mode_3db_freq) in sca3000_write_3db_freq()
698 else if (st->info->option_mode_1 && in sca3000_write_3db_freq()
699 (val == st->info->option_mode_1_3db_freq)) in sca3000_write_3db_freq()
701 else if (st->info->option_mode_2 && in sca3000_write_3db_freq()
702 (val == st->info->option_mode_2_3db_freq)) in sca3000_write_3db_freq()
706 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_write_3db_freq()
710 st->rx[0] &= ~SCA3000_REG_MODE_MODE_MASK; in sca3000_write_3db_freq()
711 st->rx[0] |= (mode & SCA3000_REG_MODE_MODE_MASK); in sca3000_write_3db_freq()
713 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, st->rx[0]); in sca3000_write_3db_freq()
722 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_raw() local
728 mutex_lock(&st->lock); in sca3000_read_raw()
730 if (st->mo_det_use_count) { in sca3000_read_raw()
731 mutex_unlock(&st->lock); in sca3000_read_raw()
735 ret = sca3000_read_data_short(st, address, 2); in sca3000_read_raw()
737 mutex_unlock(&st->lock); in sca3000_read_raw()
740 *val = sign_extend32(be16_to_cpup((__be16 *)st->rx) >> in sca3000_read_raw()
745 ret = sca3000_read_data_short(st, in sca3000_read_raw()
749 mutex_unlock(&st->lock); in sca3000_read_raw()
752 *val = (be16_to_cpup((__be16 *)st->rx) >> in sca3000_read_raw()
756 mutex_unlock(&st->lock); in sca3000_read_raw()
761 *val2 = st->info->scale; in sca3000_read_raw()
770 mutex_lock(&st->lock); in sca3000_read_raw()
771 ret = sca3000_read_raw_samp_freq(st, val); in sca3000_read_raw()
772 mutex_unlock(&st->lock); in sca3000_read_raw()
775 mutex_lock(&st->lock); in sca3000_read_raw()
776 ret = sca3000_read_3db_freq(st, val); in sca3000_read_raw()
777 mutex_unlock(&st->lock); in sca3000_read_raw()
788 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_raw() local
795 mutex_lock(&st->lock); in sca3000_write_raw()
796 ret = sca3000_write_raw_samp_freq(st, val); in sca3000_write_raw()
797 mutex_unlock(&st->lock); in sca3000_write_raw()
802 mutex_lock(&st->lock); in sca3000_write_raw()
803 ret = sca3000_write_3db_freq(st, val); in sca3000_write_raw()
804 mutex_unlock(&st->lock); in sca3000_write_raw()
829 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_av_freq() local
832 mutex_lock(&st->lock); in sca3000_read_av_freq()
833 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_av_freq()
834 val = st->rx[0]; in sca3000_read_av_freq()
835 mutex_unlock(&st->lock); in sca3000_read_av_freq()
842 st->info->measurement_mode_freq, in sca3000_read_av_freq()
843 st->info->measurement_mode_freq / 2, in sca3000_read_av_freq()
844 st->info->measurement_mode_freq / 4); in sca3000_read_av_freq()
848 st->info->option_mode_1_freq, in sca3000_read_av_freq()
849 st->info->option_mode_1_freq / 2, in sca3000_read_av_freq()
850 st->info->option_mode_1_freq / 4); in sca3000_read_av_freq()
854 st->info->option_mode_2_freq, in sca3000_read_av_freq()
855 st->info->option_mode_2_freq / 2, in sca3000_read_av_freq()
856 st->info->option_mode_2_freq / 4); in sca3000_read_av_freq()
880 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_value() local
886 mutex_lock(&st->lock); in sca3000_read_event_value()
887 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_value()
889 mutex_unlock(&st->lock); in sca3000_read_event_value()
895 ARRAY_SIZE(st->info->mot_det_mult_y)) in sca3000_read_event_value()
896 *val += st->info->mot_det_mult_y[i]; in sca3000_read_event_value()
899 ARRAY_SIZE(st->info->mot_det_mult_xz)) in sca3000_read_event_value()
900 *val += st->info->mot_det_mult_xz[i]; in sca3000_read_event_value()
932 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_value() local
938 i = ARRAY_SIZE(st->info->mot_det_mult_y); in sca3000_write_event_value()
940 if (val >= st->info->mot_det_mult_y[--i]) { in sca3000_write_event_value()
942 val -= st->info->mot_det_mult_y[i]; in sca3000_write_event_value()
945 i = ARRAY_SIZE(st->info->mot_det_mult_xz); in sca3000_write_event_value()
947 if (val >= st->info->mot_det_mult_xz[--i]) { in sca3000_write_event_value()
949 val -= st->info->mot_det_mult_xz[i]; in sca3000_write_event_value()
953 mutex_lock(&st->lock); in sca3000_write_event_value()
954 ret = sca3000_write_ctrl_reg(st, in sca3000_write_event_value()
957 mutex_unlock(&st->lock); in sca3000_write_event_value()
972 static int sca3000_read_data(struct sca3000_state *st, in sca3000_read_data() argument
981 .tx_buf = st->tx, in sca3000_read_data()
988 st->tx[0] = SCA3000_READ_REG(reg_address_high); in sca3000_read_data()
989 ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer)); in sca3000_read_data()
991 dev_err(&st->us->dev, "problem reading register\n"); in sca3000_read_data()
1005 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_ring_int_process() local
1008 mutex_lock(&st->lock); in sca3000_ring_int_process()
1011 ret = sca3000_read_data_short(st, SCA3000_REG_BUF_COUNT_ADDR, in sca3000_ring_int_process()
1015 num_available = st->rx[0]; in sca3000_ring_int_process()
1020 ret = sca3000_read_data(st, SCA3000_REG_RING_OUT_ADDR, st->rx, in sca3000_ring_int_process()
1032 iio_push_to_buffers(indio_dev, st->rx + i * 3 * 2); in sca3000_ring_int_process()
1036 mutex_unlock(&st->lock); in sca3000_ring_int_process()
1054 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_event_handler() local
1062 mutex_lock(&st->lock); in sca3000_event_handler()
1063 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_event_handler()
1064 val = st->rx[0]; in sca3000_event_handler()
1065 mutex_unlock(&st->lock); in sca3000_event_handler()
1119 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_read_event_config() local
1122 mutex_lock(&st->lock); in sca3000_read_event_config()
1124 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_read_event_config()
1130 ret = !!(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_read_event_config()
1139 if ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_read_event_config()
1143 ret = sca3000_read_ctrl_reg(st, in sca3000_read_event_config()
1156 mutex_unlock(&st->lock); in sca3000_read_event_config()
1163 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_freefall_set_state() local
1167 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_freefall_set_state()
1172 if (state && !(st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1173 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1174 st->rx[0] | SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1176 else if (!state && (st->rx[0] & SCA3000_REG_MODE_FREE_FALL_DETECT)) in sca3000_freefall_set_state()
1177 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_freefall_set_state()
1178 st->rx[0] & ~SCA3000_REG_MODE_FREE_FALL_DETECT); in sca3000_freefall_set_state()
1186 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_motion_detect_set_state() local
1193 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); 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()
1207 ret = sca3000_write_ctrl_reg(st, in sca3000_motion_detect_set_state()
1213 st->mo_det_use_count--; in sca3000_motion_detect_set_state()
1217 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_motion_detect_set_state()
1221 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()
1228 else if (!(st->mo_det_use_count) && in sca3000_motion_detect_set_state()
1229 ((st->rx[0] & SCA3000_REG_MODE_MODE_MASK) in sca3000_motion_detect_set_state()
1231 return sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_motion_detect_set_state()
1232 st->rx[0] & SCA3000_REG_MODE_MODE_MASK); in sca3000_motion_detect_set_state()
1258 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_write_event_config() local
1261 mutex_lock(&st->lock); in sca3000_write_event_config()
1278 mutex_unlock(&st->lock); in sca3000_write_event_config()
1286 struct sca3000_state *st = iio_priv(indio_dev); in __sca3000_hw_ring_state_set() local
1289 mutex_lock(&st->lock); in __sca3000_hw_ring_state_set()
1290 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in __sca3000_hw_ring_state_set()
1295 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1297 (st->rx[0] | SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1299 ret = sca3000_write_reg(st, in __sca3000_hw_ring_state_set()
1301 (st->rx[0] & ~SCA3000_REG_MODE_RING_BUF_ENABLE)); in __sca3000_hw_ring_state_set()
1303 mutex_unlock(&st->lock); in __sca3000_hw_ring_state_set()
1320 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_preenable() local
1322 mutex_lock(&st->lock); in sca3000_hw_ring_preenable()
1325 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_preenable()
1328 ret = sca3000_write_reg(st, in sca3000_hw_ring_preenable()
1330 st->rx[0] | SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_preenable()
1334 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1339 mutex_unlock(&st->lock); in sca3000_hw_ring_preenable()
1347 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_hw_ring_postdisable() local
1354 mutex_lock(&st->lock); in sca3000_hw_ring_postdisable()
1356 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_hw_ring_postdisable()
1359 ret = sca3000_write_reg(st, in sca3000_hw_ring_postdisable()
1361 st->rx[0] & ~SCA3000_REG_INT_MASK_RING_HALF); in sca3000_hw_ring_postdisable()
1363 mutex_unlock(&st->lock); in sca3000_hw_ring_postdisable()
1380 static int sca3000_clean_setup(struct sca3000_state *st) in sca3000_clean_setup() argument
1384 mutex_lock(&st->lock); in sca3000_clean_setup()
1386 ret = sca3000_read_data_short(st, SCA3000_REG_INT_STATUS_ADDR, 1); in sca3000_clean_setup()
1391 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL); in sca3000_clean_setup()
1394 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL, in sca3000_clean_setup()
1400 ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); in sca3000_clean_setup()
1403 ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL, in sca3000_clean_setup()
1412 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_clean_setup()
1415 ret = sca3000_write_reg(st, in sca3000_clean_setup()
1426 ret = sca3000_read_data_short(st, SCA3000_REG_MODE_ADDR, 1); in sca3000_clean_setup()
1429 ret = sca3000_write_reg(st, SCA3000_REG_MODE_ADDR, in sca3000_clean_setup()
1430 (st->rx[0] & SCA3000_MODE_PROT_MASK)); in sca3000_clean_setup()
1433 mutex_unlock(&st->lock); in sca3000_clean_setup()
1450 struct sca3000_state *st; in sca3000_probe() local
1453 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in sca3000_probe()
1457 st = iio_priv(indio_dev); in sca3000_probe()
1459 st->us = spi; in sca3000_probe()
1460 mutex_init(&st->lock); in sca3000_probe()
1461 st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi) in sca3000_probe()
1466 if (st->info->temp_output) { in sca3000_probe()
1491 ret = sca3000_clean_setup(st); in sca3000_probe()
1508 static int sca3000_stop_all_interrupts(struct sca3000_state *st) in sca3000_stop_all_interrupts() argument
1512 mutex_lock(&st->lock); in sca3000_stop_all_interrupts()
1513 ret = sca3000_read_data_short(st, SCA3000_REG_INT_MASK_ADDR, 1); in sca3000_stop_all_interrupts()
1516 ret = sca3000_write_reg(st, SCA3000_REG_INT_MASK_ADDR, in sca3000_stop_all_interrupts()
1517 (st->rx[0] & in sca3000_stop_all_interrupts()
1522 mutex_unlock(&st->lock); in sca3000_stop_all_interrupts()
1529 struct sca3000_state *st = iio_priv(indio_dev); in sca3000_remove() local
1534 sca3000_stop_all_interrupts(st); in sca3000_remove()