Lines Matching +full:loop +full:- +full:powered

1 // SPDX-License-Identifier: GPL-2.0-only
34 * - get device out of low power mode,
35 * - setup hardware sampling period,
36 * - at end of period, upon data ready interrupt: pop pressure samples out of
38 * - when no longer needed, stop sampling process by putting device into
70 /* 200 ms should be enough for the longest conversion time in one-shot mode. */
78 * struct zpa2326_frequency - Hardware sampling frequency descriptor
102 ARRAY_SIZE(zpa2326_sampling_frequencies) - 1]; in zpa2326_highest_frequency()
106 * struct zpa2326_private - Per-device internal private state
116 * @waken: Flag indicating whether or not device has just been powered on.
138 dev_err(idev->dev.parent, fmt "\n", ##__VA_ARGS__)
141 dev_warn(idev->dev.parent, fmt "\n", ##__VA_ARGS__)
144 dev_dbg(idev->dev.parent, fmt "\n", ##__VA_ARGS__)
210 * zpa2326_enable_device() - Enable device, i.e. get out of low power mode.
223 iio_priv(indio_dev))->regmap, in zpa2326_enable_device()
236 * zpa2326_sleep() - Disable device, i.e. switch to low power mode.
249 iio_priv(indio_dev))->regmap, in zpa2326_sleep()
262 * zpa2326_reset_device() - Reset device to default hardware state.
275 iio_priv(indio_dev))->regmap, in zpa2326_reset_device()
290 * zpa2326_start_oneshot() - Start a single sampling cycle, i.e. in one shot
304 iio_priv(indio_dev))->regmap, in zpa2326_start_oneshot()
320 * zpa2326_power_on() - Power on device to allow subsequent configuration.
336 err = regulator_enable(private->vref); in zpa2326_power_on()
340 err = regulator_enable(private->vdd); in zpa2326_power_on()
344 zpa2326_dbg(indio_dev, "powered on"); in zpa2326_power_on()
359 regulator_disable(private->vdd); in zpa2326_power_on()
361 regulator_disable(private->vref); in zpa2326_power_on()
363 zpa2326_dbg(indio_dev, "powered off"); in zpa2326_power_on()
369 * zpa2326_power_off() - Power off device, i.e. disable attached power
379 regulator_disable(private->vdd); in zpa2326_power_off()
380 regulator_disable(private->vref); in zpa2326_power_off()
382 zpa2326_dbg(indio_dev, "powered off"); in zpa2326_power_off()
386 * zpa2326_config_oneshot() - Setup device for one shot / on demand mode.
406 iio_priv(indio_dev))->regmap; in zpa2326_config_oneshot()
411 err = regmap_write(regs, ZPA2326_CTRL_REG3_REG, freq->odr); in zpa2326_config_oneshot()
421 dev_err(indio_dev->dev.parent, in zpa2326_config_oneshot()
427 zpa2326_dbg(indio_dev, "one shot mode setup @%dHz", freq->hz); in zpa2326_config_oneshot()
433 * zpa2326_clear_fifo() - Clear remaining entries in hardware FIFO.
448 iio_priv(indio_dev))->regmap; in zpa2326_clear_fifo()
482 min_count--; in zpa2326_clear_fifo()
503 * zpa2326_dequeue_pressure() - Retrieve the most recent pressure sample from
516 iio_priv(indio_dev))->regmap; in zpa2326_dequeue_pressure()
519 int cleared = -1; in zpa2326_dequeue_pressure()
541 return zpa2326_clear_fifo(indio_dev, ZPA2326_FIFO_DEPTH - 1); in zpa2326_dequeue_pressure()
573 * zpa2326_fill_sample_buffer() - Enqueue new channel samples to IIO buffer.
589 if (test_bit(0, indio_dev->active_scan_mask)) { in zpa2326_fill_sample_buffer()
599 if (test_bit(1, indio_dev->active_scan_mask)) { in zpa2326_fill_sample_buffer()
601 err = regmap_bulk_read(private->regmap, ZPA2326_TEMP_OUT_L_REG, in zpa2326_fill_sample_buffer()
612 * - by hardware interrupt handler if interrupt is available: see in zpa2326_fill_sample_buffer()
614 * - or oneshot completion polling machinery : see in zpa2326_fill_sample_buffer()
620 private->timestamp); in zpa2326_fill_sample_buffer()
632 return -EAGAIN; in zpa2326_runtime_suspend()
655 * zpa2326_resume() - Request the PM layer to power supply the device.
659 * < 0 - a negative error code meaning failure ;
660 * 0 - success, device has just been powered up ;
661 * 1 - success, device was already powered.
667 err = pm_runtime_get_sync(indio_dev->dev.parent); in zpa2326_resume()
669 pm_runtime_put(indio_dev->dev.parent); in zpa2326_resume()
687 * zpa2326_suspend() - Schedule a power down using autosuspend feature of PM
696 struct device *parent = indio_dev->dev.parent; in zpa2326_suspend()
738 * zpa2326_handle_irq() - Process hardware interrupts.
754 iio_priv(indio_dev))->timestamp = iio_get_time_ns(indio_dev); in zpa2326_handle_irq()
761 * zpa2326_handle_threaded_irq() - Interrupt bottom-half handler.
776 * configured in one-shot mode either by an external trigger or the IIO read_raw
783 * %IRQ_NONE - no consistent interrupt happened ;
784 * %IRQ_HANDLED - there was new samples available.
803 * status de-asserts interrupt line. in zpa2326_handle_threaded_irq()
805 priv->result = regmap_read(priv->regmap, ZPA2326_INT_SOURCE_REG, &val); in zpa2326_handle_threaded_irq()
806 if (priv->result < 0) { in zpa2326_handle_threaded_irq()
827 priv->result = -ENODATA; in zpa2326_handle_threaded_irq()
832 iio_trigger_poll_nested(priv->trigger); in zpa2326_handle_threaded_irq()
848 complete(&priv->data_ready); in zpa2326_handle_threaded_irq()
854 * zpa2326_wait_oneshot_completion() - Wait for oneshot data ready interrupt.
869 &private->data_ready, ZPA2326_CONVERSION_JIFFIES); in zpa2326_wait_oneshot_completion()
875 return private->result; in zpa2326_wait_oneshot_completion()
878 regmap_read(private->regmap, ZPA2326_INT_SOURCE_REG, &val); in zpa2326_wait_oneshot_completion()
884 return -ETIME; in zpa2326_wait_oneshot_completion()
888 return -ERESTARTSYS; in zpa2326_wait_oneshot_completion()
898 private->irq = irq; in zpa2326_init_managed_irq()
909 init_completion(&private->data_ready); in zpa2326_init_managed_irq()
928 * zpa2326_poll_oneshot_completion() - Actively poll for one shot data ready.
931 * Loop over registers content to detect end of sampling cycle. Used when DT
940 iio_priv(indio_dev))->regmap; in zpa2326_poll_oneshot_completion()
947 * At least, 100 ms is needed for the device to complete its one-shot in zpa2326_poll_oneshot_completion()
951 return -ERESTARTSYS; in zpa2326_poll_oneshot_completion()
960 /* One-shot bit self clears at conversion end. */ in zpa2326_poll_oneshot_completion()
965 err = -ETIME; in zpa2326_poll_oneshot_completion()
983 err = -ENODATA; in zpa2326_poll_oneshot_completion()
996 * zpa2326_fetch_raw_sample() - Retrieve a raw sample and convert it to CPU
1009 iio_priv(indio_dev))->regmap; in zpa2326_fetch_raw_sample()
1038 /* Temperature is a 16 bits wide little-endian signed int. */ in zpa2326_fetch_raw_sample()
1044 return -EINVAL; in zpa2326_fetch_raw_sample()
1049 * zpa2326_sample_oneshot() - Perform a complete one shot sampling cycle.
1064 return -EBUSY; in zpa2326_sample_oneshot()
1095 ret = zpa2326_config_oneshot(indio_dev, priv->irq); in zpa2326_sample_oneshot()
1106 if (priv->irq > 0) in zpa2326_sample_oneshot()
1126 * zpa2326_trigger_handler() - Perform an IIO buffered sampling round in one
1132 * Bottom-half handler called by the IIO trigger to which our device is
1149 * %IRQ_NONE - no consistent interrupt happened ;
1150 * %IRQ_HANDLED - there was new samples available.
1155 data)->indio_dev; in zpa2326_trigger_handler()
1172 if (priv->irq <= 0) { in zpa2326_trigger_handler()
1178 priv->timestamp = iio_get_time_ns(indio_dev); in zpa2326_trigger_handler()
1195 iio_trigger_notify_done(indio_dev->trig); in zpa2326_trigger_handler()
1201 * zpa2326_preenable_buffer() - Prepare device for configuring triggered
1218 /* Tell zpa2326_postenable_buffer() if we have just been powered on. */ in zpa2326_preenable_buffer()
1220 iio_priv(indio_dev))->waken = iio_priv(indio_dev); in zpa2326_preenable_buffer()
1226 * zpa2326_postenable_buffer() - Configure device for triggered sampling.
1229 * Basically setup one-shot mode if plugging external trigger.
1246 if (!priv->waken) { in zpa2326_postenable_buffer()
1259 if (!iio_trigger_using_own(indio_dev) && priv->waken) { in zpa2326_postenable_buffer()
1262 * powered up: reconfigure one-shot mode. in zpa2326_postenable_buffer()
1264 err = zpa2326_config_oneshot(indio_dev, priv->irq); in zpa2326_postenable_buffer()
1289 * zpa2326_set_trigger_state() - Start / stop continuous sampling.
1303 trig->dev.parent); in zpa2326_set_trigger_state()
1322 disable_irq(priv->irq); in zpa2326_set_trigger_state()
1328 err = regmap_write(priv->regmap, ZPA2326_CTRL_REG3_REG, in zpa2326_set_trigger_state()
1329 zpa2326_highest_frequency()->odr); in zpa2326_set_trigger_state()
1338 err = regmap_read(priv->regmap, ZPA2326_INT_SOURCE_REG, &val); in zpa2326_set_trigger_state()
1343 * Re-enable interrupts only if we can guarantee the device will in zpa2326_set_trigger_state()
1347 enable_irq(priv->irq); in zpa2326_set_trigger_state()
1356 if (priv->waken) { in zpa2326_set_trigger_state()
1358 err = regmap_write(priv->regmap, ZPA2326_CTRL_REG1_REG, in zpa2326_set_trigger_state()
1366 err = regmap_write(priv->regmap, ZPA2326_CTRL_REG3_REG, in zpa2326_set_trigger_state()
1368 priv->frequency->odr); in zpa2326_set_trigger_state()
1373 priv->frequency->hz); in zpa2326_set_trigger_state()
1384 * zpa2326_init_managed_trigger() - Create interrupt driven / hardware trigger
1409 trigger = devm_iio_trigger_alloc(parent, "%s-dev%d", in zpa2326_init_managed_trigger()
1410 indio_dev->name, in zpa2326_init_managed_trigger()
1413 return -ENOMEM; in zpa2326_init_managed_trigger()
1416 trigger->ops = &zpa2326_trigger_ops; in zpa2326_init_managed_trigger()
1418 private->trigger = trigger; in zpa2326_init_managed_trigger()
1431 return ((struct zpa2326_private *)iio_priv(indio_dev))->frequency->hz; in zpa2326_get_frequency()
1444 return -EINVAL; in zpa2326_set_frequency()
1448 return -EBUSY; in zpa2326_set_frequency()
1450 priv->frequency = &zpa2326_sampling_frequencies[freq]; in zpa2326_set_frequency()
1477 return zpa2326_sample_oneshot(indio_dev, chan->type, val); in zpa2326_read_raw()
1480 switch (chan->type) { in zpa2326_read_raw()
1493 * Temp[degC] = Tempcode * 0.00649 - 176.83 in zpa2326_read_raw()
1497 * Hence, to produce a temperature in milli-degrees in zpa2326_read_raw()
1502 * Offset = -176.83 / 0.00649 in zpa2326_read_raw()
1510 return -EINVAL; in zpa2326_read_raw()
1514 switch (chan->type) { in zpa2326_read_raw()
1516 *val = -17683000; in zpa2326_read_raw()
1521 return -EINVAL; in zpa2326_read_raw()
1529 return -EINVAL; in zpa2326_read_raw()
1540 return -EINVAL; in zpa2326_write_raw()
1595 indio_dev->modes = INDIO_DIRECT_MODE; in zpa2326_create_managed_iiodev()
1596 indio_dev->channels = zpa2326_channels; in zpa2326_create_managed_iiodev()
1597 indio_dev->num_channels = ARRAY_SIZE(zpa2326_channels); in zpa2326_create_managed_iiodev()
1598 indio_dev->name = name; in zpa2326_create_managed_iiodev()
1599 indio_dev->info = &zpa2326_info; in zpa2326_create_managed_iiodev()
1617 return -ENOMEM; in zpa2326_probe()
1621 priv->vref = devm_regulator_get(parent, "vref"); in zpa2326_probe()
1622 if (IS_ERR(priv->vref)) in zpa2326_probe()
1623 return PTR_ERR(priv->vref); in zpa2326_probe()
1625 priv->vdd = devm_regulator_get(parent, "vdd"); in zpa2326_probe()
1626 if (IS_ERR(priv->vdd)) in zpa2326_probe()
1627 return PTR_ERR(priv->vdd); in zpa2326_probe()
1630 priv->frequency = zpa2326_highest_frequency(); in zpa2326_probe()
1637 priv->regmap = regmap; in zpa2326_probe()
1665 err = -ENODEV; in zpa2326_probe()
1705 zpa2326_fini_runtime(indio_dev->dev.parent); in zpa2326_remove()