Lines Matching full:st

60 #define TI_ADS7950_MAN_CMD_SETTINGS(st) \  argument
61 (TI_ADS7950_MAN_CMD(TI_ADS7950_CR_WRITE | st->cmd_settings_bitmask))
63 #define TI_ADS7950_GPIO_CMD_SETTINGS(st) \ argument
64 (TI_ADS7950_GPIO_CMD(st->gpio_cmd_settings_bitmask))
286 struct ti_ads7950_state *st = iio_priv(indio_dev); in ti_ads7950_update_scan_mode() local
292 st->tx_buf[len++] = cmd; in ti_ads7950_update_scan_mode()
295 /* Data for the 1st channel is not returned until the 3rd transfer */ in ti_ads7950_update_scan_mode()
296 st->tx_buf[len++] = 0; in ti_ads7950_update_scan_mode()
297 st->tx_buf[len++] = 0; in ti_ads7950_update_scan_mode()
299 st->ring_xfer.len = len * 2; in ti_ads7950_update_scan_mode()
308 struct ti_ads7950_state *st = iio_priv(indio_dev); in ti_ads7950_trigger_handler() local
311 mutex_lock(&st->slock); in ti_ads7950_trigger_handler()
312 ret = spi_sync(st->spi, &st->ring_msg); in ti_ads7950_trigger_handler()
316 iio_push_to_buffers_with_timestamp(indio_dev, &st->rx_buf[2], in ti_ads7950_trigger_handler()
320 mutex_unlock(&st->slock); in ti_ads7950_trigger_handler()
328 struct ti_ads7950_state *st = iio_priv(indio_dev); in ti_ads7950_scan_direct() local
331 mutex_lock(&st->slock); in ti_ads7950_scan_direct()
333 st->single_tx = cmd; in ti_ads7950_scan_direct()
335 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_scan_direct()
339 ret = st->single_rx; in ti_ads7950_scan_direct()
342 mutex_unlock(&st->slock); in ti_ads7950_scan_direct()
347 static int ti_ads7950_get_range(struct ti_ads7950_state *st) in ti_ads7950_get_range() argument
351 if (st->vref_mv) { in ti_ads7950_get_range()
352 vref = st->vref_mv; in ti_ads7950_get_range()
354 vref = regulator_get_voltage(st->reg); in ti_ads7950_get_range()
361 if (st->cmd_settings_bitmask & TI_ADS7950_CR_RANGE_5V) in ti_ads7950_get_range()
371 struct ti_ads7950_state *st = iio_priv(indio_dev); in ti_ads7950_read_raw() local
388 ret = ti_ads7950_get_range(st); in ti_ads7950_read_raw()
409 struct ti_ads7950_state *st = gpiochip_get_data(chip); in ti_ads7950_set() local
412 mutex_lock(&st->slock); in ti_ads7950_set()
415 st->cmd_settings_bitmask |= BIT(offset); in ti_ads7950_set()
417 st->cmd_settings_bitmask &= ~BIT(offset); in ti_ads7950_set()
419 st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st); in ti_ads7950_set()
420 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_set()
422 mutex_unlock(&st->slock); in ti_ads7950_set()
429 struct ti_ads7950_state *st = gpiochip_get_data(chip); in ti_ads7950_get() local
432 mutex_lock(&st->slock); in ti_ads7950_get()
435 if (st->gpio_cmd_settings_bitmask & BIT(offset)) { in ti_ads7950_get()
436 ret = st->cmd_settings_bitmask & BIT(offset); in ti_ads7950_get()
441 st->cmd_settings_bitmask |= TI_ADS7950_CR_GPIO_DATA; in ti_ads7950_get()
442 st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st); in ti_ads7950_get()
443 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_get()
447 ret = ((st->single_rx >> 12) & BIT(offset)) ? 1 : 0; in ti_ads7950_get()
450 st->cmd_settings_bitmask &= ~TI_ADS7950_CR_GPIO_DATA; in ti_ads7950_get()
451 st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st); in ti_ads7950_get()
452 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_get()
457 mutex_unlock(&st->slock); in ti_ads7950_get()
465 struct ti_ads7950_state *st = gpiochip_get_data(chip); in ti_ads7950_get_direction() local
468 return !(st->gpio_cmd_settings_bitmask & BIT(offset)); in ti_ads7950_get_direction()
474 struct ti_ads7950_state *st = gpiochip_get_data(chip); in _ti_ads7950_set_direction() local
477 mutex_lock(&st->slock); in _ti_ads7950_set_direction()
480 if (input && (st->gpio_cmd_settings_bitmask & BIT(offset))) in _ti_ads7950_set_direction()
481 st->gpio_cmd_settings_bitmask &= ~BIT(offset); in _ti_ads7950_set_direction()
482 else if (!input && !(st->gpio_cmd_settings_bitmask & BIT(offset))) in _ti_ads7950_set_direction()
483 st->gpio_cmd_settings_bitmask |= BIT(offset); in _ti_ads7950_set_direction()
487 st->single_tx = TI_ADS7950_GPIO_CMD_SETTINGS(st); in _ti_ads7950_set_direction()
488 ret = spi_sync(st->spi, &st->scan_single_msg); in _ti_ads7950_set_direction()
491 mutex_unlock(&st->slock); in _ti_ads7950_set_direction()
514 static int ti_ads7950_init_hw(struct ti_ads7950_state *st) in ti_ads7950_init_hw() argument
518 mutex_lock(&st->slock); in ti_ads7950_init_hw()
522 st->cmd_settings_bitmask = TI_ADS7950_CR_RANGE_5V; in ti_ads7950_init_hw()
523 st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st); in ti_ads7950_init_hw()
524 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_init_hw()
529 st->gpio_cmd_settings_bitmask = 0x0; in ti_ads7950_init_hw()
530 st->single_tx = TI_ADS7950_GPIO_CMD_SETTINGS(st); in ti_ads7950_init_hw()
531 ret = spi_sync(st->spi, &st->scan_single_msg); in ti_ads7950_init_hw()
534 mutex_unlock(&st->slock); in ti_ads7950_init_hw()
541 struct ti_ads7950_state *st; in ti_ads7950_probe() local
554 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ti_ads7950_probe()
558 st = iio_priv(indio_dev); in ti_ads7950_probe()
562 st->spi = spi; in ti_ads7950_probe()
573 spi_message_init(&st->ring_msg); in ti_ads7950_probe()
575 st->ring_xfer.tx_buf = &st->tx_buf[0]; in ti_ads7950_probe()
576 st->ring_xfer.rx_buf = &st->rx_buf[0]; in ti_ads7950_probe()
579 spi_message_add_tail(&st->ring_xfer, &st->ring_msg); in ti_ads7950_probe()
590 st->scan_single_xfer[0].tx_buf = &st->single_tx; in ti_ads7950_probe()
591 st->scan_single_xfer[0].len = 2; in ti_ads7950_probe()
592 st->scan_single_xfer[0].cs_change = 1; in ti_ads7950_probe()
593 st->scan_single_xfer[1].tx_buf = &st->single_tx; in ti_ads7950_probe()
594 st->scan_single_xfer[1].len = 2; in ti_ads7950_probe()
595 st->scan_single_xfer[1].cs_change = 1; in ti_ads7950_probe()
596 st->scan_single_xfer[2].rx_buf = &st->single_rx; in ti_ads7950_probe()
597 st->scan_single_xfer[2].len = 2; in ti_ads7950_probe()
599 spi_message_init_with_transfers(&st->scan_single_msg, in ti_ads7950_probe()
600 st->scan_single_xfer, 3); in ti_ads7950_probe()
604 st->vref_mv = TI_ADS7950_VA_MV_ACPI_DEFAULT; in ti_ads7950_probe()
606 mutex_init(&st->slock); in ti_ads7950_probe()
608 st->reg = devm_regulator_get(&spi->dev, "vref"); in ti_ads7950_probe()
609 if (IS_ERR(st->reg)) { in ti_ads7950_probe()
610 ret = dev_err_probe(&spi->dev, PTR_ERR(st->reg), in ti_ads7950_probe()
615 ret = regulator_enable(st->reg); in ti_ads7950_probe()
628 ret = ti_ads7950_init_hw(st); in ti_ads7950_probe()
641 st->chip.label = dev_name(&st->spi->dev); in ti_ads7950_probe()
642 st->chip.parent = &st->spi->dev; in ti_ads7950_probe()
643 st->chip.owner = THIS_MODULE; in ti_ads7950_probe()
644 st->chip.can_sleep = true; in ti_ads7950_probe()
645 st->chip.base = -1; in ti_ads7950_probe()
646 st->chip.ngpio = TI_ADS7950_NUM_GPIOS; in ti_ads7950_probe()
647 st->chip.get_direction = ti_ads7950_get_direction; in ti_ads7950_probe()
648 st->chip.direction_input = ti_ads7950_direction_input; in ti_ads7950_probe()
649 st->chip.direction_output = ti_ads7950_direction_output; in ti_ads7950_probe()
650 st->chip.get = ti_ads7950_get; in ti_ads7950_probe()
651 st->chip.set = ti_ads7950_set; in ti_ads7950_probe()
653 ret = gpiochip_add_data(&st->chip, st); in ti_ads7950_probe()
666 regulator_disable(st->reg); in ti_ads7950_probe()
668 mutex_destroy(&st->slock); in ti_ads7950_probe()
676 struct ti_ads7950_state *st = iio_priv(indio_dev); in ti_ads7950_remove() local
678 gpiochip_remove(&st->chip); in ti_ads7950_remove()
681 regulator_disable(st->reg); in ti_ads7950_remove()
682 mutex_destroy(&st->slock); in ti_ads7950_remove()