Lines Matching +full:svdd +full:- +full:supply

1 // SPDX-License-Identifier: GPL-2.0
8 * linux-driver-SX9310_NoSmartHSensing>.
220 len += scnprintf(buf + len, PAGE_SIZE - len, "%d.%d ", in sx9310_show_samp_freq_avail()
223 buf[len - 1] = '\n'; in sx9310_show_samp_freq_avail()
288 if ((data->chan_read | data->chan_event) != channels) { in sx9310_update_chan_en()
289 ret = regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_update_chan_en()
295 data->chan_read = chan_read; in sx9310_update_chan_en()
296 data->chan_event = chan_event; in sx9310_update_chan_en()
302 return sx9310_update_chan_en(data, data->chan_read | BIT(channel), in sx9310_get_read_channel()
303 data->chan_event); in sx9310_get_read_channel()
308 return sx9310_update_chan_en(data, data->chan_read & ~BIT(channel), in sx9310_put_read_channel()
309 data->chan_event); in sx9310_put_read_channel()
314 return sx9310_update_chan_en(data, data->chan_read, in sx9310_get_event_channel()
315 data->chan_event | BIT(channel)); in sx9310_get_event_channel()
320 return sx9310_update_chan_en(data, data->chan_read, in sx9310_put_event_channel()
321 data->chan_event & ~BIT(channel)); in sx9310_put_event_channel()
326 if (!data->client->irq) in sx9310_enable_irq()
328 return regmap_update_bits(data->regmap, SX9310_REG_IRQ_MSK, irq, irq); in sx9310_enable_irq()
333 if (!data->client->irq) in sx9310_disable_irq()
335 return regmap_update_bits(data->regmap, SX9310_REG_IRQ_MSK, irq, 0); in sx9310_disable_irq()
343 ret = regmap_write(data->regmap, SX9310_REG_SENSOR_SEL, chan->channel); in sx9310_read_prox_data()
347 return regmap_bulk_read(data->regmap, chan->address, val, sizeof(*val)); in sx9310_read_prox_data()
359 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &val); in sx9310_wait_for_sample()
376 mutex_lock(&data->mutex); in sx9310_read_proximity()
378 ret = sx9310_get_read_channel(data, chan->channel); in sx9310_read_proximity()
386 mutex_unlock(&data->mutex); in sx9310_read_proximity()
388 if (data->client->irq) { in sx9310_read_proximity()
389 ret = wait_for_completion_interruptible(&data->completion); in sx9310_read_proximity()
390 reinit_completion(&data->completion); in sx9310_read_proximity()
395 mutex_lock(&data->mutex); in sx9310_read_proximity()
405 chan->address == SX9310_REG_DIFF_MSB ? 11 : 15); in sx9310_read_proximity()
411 ret = sx9310_put_read_channel(data, chan->channel); in sx9310_read_proximity()
415 mutex_unlock(&data->mutex); in sx9310_read_proximity()
422 sx9310_put_read_channel(data, chan->channel); in sx9310_read_proximity()
424 mutex_unlock(&data->mutex); in sx9310_read_proximity()
434 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &regval); in sx9310_read_samp_freq()
452 if (chan->type != IIO_PROXIMITY) in sx9310_read_raw()
453 return -EINVAL; in sx9310_read_raw()
467 return -EINVAL; in sx9310_read_raw()
481 return -EINVAL; in sx9310_set_samp_freq()
483 mutex_lock(&data->mutex); in sx9310_set_samp_freq()
486 data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_set_samp_freq()
490 mutex_unlock(&data->mutex); in sx9310_set_samp_freq()
501 if (chan->type != IIO_PROXIMITY) in sx9310_write_raw()
502 return -EINVAL; in sx9310_write_raw()
505 return -EINVAL; in sx9310_write_raw()
515 if (data->trigger_enabled) in sx9310_irq_handler()
516 iio_trigger_poll(data->trig); in sx9310_irq_handler()
535 ret = regmap_read(data->regmap, SX9310_REG_STAT0, &val); in sx9310_push_events()
537 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in sx9310_push_events()
545 prox_changed = (data->chan_prox_stat ^ val) & data->chan_event; in sx9310_push_events()
557 data->chan_prox_stat = val; in sx9310_push_events()
567 mutex_lock(&data->mutex); in sx9310_irq_thread_handler()
569 ret = regmap_read(data->regmap, SX9310_REG_IRQ_SRC, &val); in sx9310_irq_thread_handler()
571 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in sx9310_irq_thread_handler()
579 complete(&data->completion); in sx9310_irq_thread_handler()
582 mutex_unlock(&data->mutex); in sx9310_irq_thread_handler()
594 return !!(data->chan_event & BIT(chan->channel)); in sx9310_read_event_config()
607 if (!!(data->chan_event & BIT(chan->channel)) == state) in sx9310_write_event_config()
610 mutex_lock(&data->mutex); in sx9310_write_event_config()
612 ret = sx9310_get_event_channel(data, chan->channel); in sx9310_write_event_config()
615 if (!(data->chan_event & ~BIT(chan->channel))) { in sx9310_write_event_config()
618 sx9310_put_event_channel(data, chan->channel); in sx9310_write_event_config()
621 ret = sx9310_put_event_channel(data, chan->channel); in sx9310_write_event_config()
624 if (!data->chan_event) { in sx9310_write_event_config()
627 sx9310_get_event_channel(data, chan->channel); in sx9310_write_event_config()
632 mutex_unlock(&data->mutex); in sx9310_write_event_config()
659 mutex_lock(&data->mutex); in sx9310_set_trigger_state()
663 else if (!data->chan_read) in sx9310_set_trigger_state()
668 data->trigger_enabled = state; in sx9310_set_trigger_state()
671 mutex_unlock(&data->mutex); in sx9310_set_trigger_state()
683 struct iio_dev *indio_dev = pf->indio_dev; in sx9310_trigger_handler()
688 mutex_lock(&data->mutex); in sx9310_trigger_handler()
690 for_each_set_bit(bit, indio_dev->active_scan_mask, in sx9310_trigger_handler()
691 indio_dev->masklength) { in sx9310_trigger_handler()
692 ret = sx9310_read_prox_data(data, &indio_dev->channels[bit], in sx9310_trigger_handler()
697 data->buffer.channels[i++] = val; in sx9310_trigger_handler()
700 iio_push_to_buffers_with_timestamp(indio_dev, &data->buffer, in sx9310_trigger_handler()
701 pf->timestamp); in sx9310_trigger_handler()
704 mutex_unlock(&data->mutex); in sx9310_trigger_handler()
706 iio_trigger_notify_done(indio_dev->trig); in sx9310_trigger_handler()
717 mutex_lock(&data->mutex); in sx9310_buffer_preenable()
718 for_each_set_bit(bit, indio_dev->active_scan_mask, in sx9310_buffer_preenable()
719 indio_dev->masklength) in sx9310_buffer_preenable()
720 __set_bit(indio_dev->channels[bit].channel, &channels); in sx9310_buffer_preenable()
722 ret = sx9310_update_chan_en(data, channels, data->chan_event); in sx9310_buffer_preenable()
723 mutex_unlock(&data->mutex); in sx9310_buffer_preenable()
732 mutex_lock(&data->mutex); in sx9310_buffer_postdisable()
733 ret = sx9310_update_chan_en(data, 0, data->chan_event); in sx9310_buffer_postdisable()
734 mutex_unlock(&data->mutex); in sx9310_buffer_postdisable()
798 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &ctrl0); in sx9310_init_compensation()
803 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_init_compensation()
808 ret = regmap_read_poll_timeout(data->regmap, SX9310_REG_STAT1, val, in sx9310_init_compensation()
812 if (ret == -ETIMEDOUT) in sx9310_init_compensation()
813 dev_err(&data->client->dev, in sx9310_init_compensation()
819 regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_init_compensation()
830 ret = regmap_write(data->regmap, SX9310_REG_RESET, SX9310_SOFT_RESET); in sx9310_init_device()
834 usleep_range(1000, 2000); /* power-up time is ~1ms. */ in sx9310_init_device()
837 ret = regmap_read(data->regmap, SX9310_REG_IRQ_SRC, &val); in sx9310_init_device()
844 ret = regmap_write(data->regmap, initval->reg, initval->def); in sx9310_init_device()
861 return -ENODEV; in sx9310_set_indio_dev_name()
866 indio_dev->name = "sx9310"; in sx9310_set_indio_dev_name()
869 indio_dev->name = "sx9311"; in sx9310_set_indio_dev_name()
873 return -ENODEV; in sx9310_set_indio_dev_name()
883 regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies); in sx9310_regulator_disable()
889 struct device *dev = &client->dev; in sx9310_probe()
895 return -ENOMEM; in sx9310_probe()
898 data->client = client; in sx9310_probe()
899 data->supplies[0].supply = "vdd"; in sx9310_probe()
900 data->supplies[1].supply = "svdd"; in sx9310_probe()
901 mutex_init(&data->mutex); in sx9310_probe()
902 init_completion(&data->completion); in sx9310_probe()
904 data->regmap = devm_regmap_init_i2c(client, &sx9310_regmap_config); in sx9310_probe()
905 if (IS_ERR(data->regmap)) in sx9310_probe()
906 return PTR_ERR(data->regmap); in sx9310_probe()
908 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), in sx9310_probe()
909 data->supplies); in sx9310_probe()
913 ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies); in sx9310_probe()
923 ret = regmap_read(data->regmap, SX9310_REG_WHOAMI, &data->whoami); in sx9310_probe()
929 ret = sx9310_set_indio_dev_name(dev, indio_dev, data->whoami); in sx9310_probe()
933 ACPI_COMPANION_SET(&indio_dev->dev, ACPI_COMPANION(dev)); in sx9310_probe()
934 indio_dev->channels = sx9310_channels; in sx9310_probe()
935 indio_dev->num_channels = ARRAY_SIZE(sx9310_channels); in sx9310_probe()
936 indio_dev->info = &sx9310_info; in sx9310_probe()
937 indio_dev->modes = INDIO_DIRECT_MODE; in sx9310_probe()
944 if (client->irq) { in sx9310_probe()
945 ret = devm_request_threaded_irq(dev, client->irq, in sx9310_probe()
953 data->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", in sx9310_probe()
954 indio_dev->name, in sx9310_probe()
955 indio_dev->id); in sx9310_probe()
956 if (!data->trig) in sx9310_probe()
957 return -ENOMEM; in sx9310_probe()
959 data->trig->dev.parent = dev; in sx9310_probe()
960 data->trig->ops = &sx9310_trigger_ops; in sx9310_probe()
961 iio_trigger_set_drvdata(data->trig, indio_dev); in sx9310_probe()
963 ret = devm_iio_trigger_register(dev, data->trig); in sx9310_probe()
985 disable_irq_nosync(data->client->irq); in sx9310_suspend()
987 mutex_lock(&data->mutex); in sx9310_suspend()
988 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_suspend()
989 &data->suspend_ctrl0); in sx9310_suspend()
993 ctrl0 = data->suspend_ctrl0 & ~SX9310_REG_PROX_CTRL0_SENSOREN_MASK; in sx9310_suspend()
994 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_suspend()
998 ret = regmap_write(data->regmap, SX9310_REG_PAUSE, 0); in sx9310_suspend()
1001 mutex_unlock(&data->mutex); in sx9310_suspend()
1011 mutex_lock(&data->mutex); in sx9310_resume()
1012 ret = regmap_write(data->regmap, SX9310_REG_PAUSE, 1); in sx9310_resume()
1016 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_resume()
1017 data->suspend_ctrl0); in sx9310_resume()
1020 mutex_unlock(&data->mutex); in sx9310_resume()
1024 enable_irq(data->client->irq); in sx9310_resume()