Lines Matching defs:data
200 * Note that the read will put garbage data into
230 /* Order of the channel data in buffer */
293 static int rpr0521_als_enable(struct rpr0521_data *data, u8 status)
297 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
304 data->als_dev_en = true;
306 data->als_dev_en = false;
311 static int rpr0521_pxs_enable(struct rpr0521_data *data, u8 status)
315 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
322 data->pxs_dev_en = true;
324 data->pxs_dev_en = false;
332 * @data: rpr0521 device private data
339 static int rpr0521_set_power_state(struct rpr0521_data *data, bool on,
346 data->als_ps_need_en = on;
347 data->als_need_dis = !on;
351 data->pxs_ps_need_en = on;
352 data->pxs_need_dis = !on;
363 ret = pm_runtime_resume_and_get(&data->client->dev);
365 pm_runtime_mark_last_busy(&data->client->dev);
366 ret = pm_runtime_put_autosuspend(&data->client->dev);
369 dev_err(&data->client->dev,
377 if (data->als_ps_need_en) {
378 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
381 data->als_ps_need_en = false;
384 if (data->pxs_ps_need_en) {
385 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
388 data->pxs_ps_need_en = false;
396 static inline bool rpr0521_is_triggered(struct rpr0521_data *data)
401 ret = regmap_read(data->regmap, RPR0521_REG_INTERRUPT, ®);
416 struct rpr0521_data *data = iio_priv(indio_dev);
418 data->irq_timestamp = iio_get_time_ns(indio_dev);
431 struct rpr0521_data *data = iio_priv(indio_dev);
433 if (rpr0521_is_triggered(data)) {
434 iio_trigger_poll_nested(data->drdy_trigger0);
457 struct rpr0521_data *data = iio_priv(indio_dev);
461 if (iio_trigger_using_own(indio_dev) && data->irq_timestamp) {
462 pf->timestamp = data->irq_timestamp;
463 data->irq_timestamp = 0;
469 err = regmap_bulk_read(data->regmap, RPR0521_REG_PXS_DATA,
470 data->scan.channels,
474 &data->scan, pf->timestamp);
476 dev_err(&data->client->dev,
485 static int rpr0521_write_int_enable(struct rpr0521_data *data)
490 err = regmap_update_bits(data->regmap, RPR0521_REG_PXS_CTRL,
494 dev_err(&data->client->dev, "PS control reg write fail.\n");
499 err = regmap_write(data->regmap, RPR0521_REG_INTERRUPT,
505 dev_err(&data->client->dev, "Interrupt setup write fail.\n");
512 static int rpr0521_write_int_disable(struct rpr0521_data *data)
515 return regmap_write(data->regmap, RPR0521_REG_INTERRUPT,
523 * measurement data is ready to be read.
529 struct rpr0521_data *data = iio_priv(indio_dev);
533 err = rpr0521_write_int_enable(data);
535 err = rpr0521_write_int_disable(data);
537 dev_err(&data->client->dev, "rpr0521_pxs_drdy_set_state failed\n");
550 struct rpr0521_data *data = iio_priv(indio_dev);
552 mutex_lock(&data->lock);
553 err = rpr0521_set_power_state(data, true,
555 mutex_unlock(&data->lock);
557 dev_err(&data->client->dev, "_buffer_preenable fail\n");
565 struct rpr0521_data *data = iio_priv(indio_dev);
567 mutex_lock(&data->lock);
568 err = rpr0521_set_power_state(data, false,
570 mutex_unlock(&data->lock);
572 dev_err(&data->client->dev, "_buffer_postdisable fail\n");
582 static int rpr0521_get_gain(struct rpr0521_data *data, int chan,
587 ret = regmap_read(data->regmap, rpr0521_gain[chan].reg, ®);
598 static int rpr0521_set_gain(struct rpr0521_data *data, int chan,
614 return regmap_update_bits(data->regmap, rpr0521_gain[chan].reg,
619 static int rpr0521_read_samp_freq(struct rpr0521_data *data,
625 ret = regmap_read(data->regmap, RPR0521_REG_MODE_CTRL, ®);
649 static int rpr0521_write_samp_freq_common(struct rpr0521_data *data,
679 return regmap_update_bits(data->regmap,
685 static int rpr0521_read_ps_offset(struct rpr0521_data *data, int *offset)
690 ret = regmap_bulk_read(data->regmap,
694 dev_err(&data->client->dev, "Failed to read PS OFFSET register\n");
702 static int rpr0521_write_ps_offset(struct rpr0521_data *data, int offset)
708 ret = regmap_raw_write(data->regmap,
712 dev_err(&data->client->dev, "Failed to write PS OFFSET register\n");
723 struct rpr0521_data *data = iio_priv(indio_dev);
740 mutex_lock(&data->lock);
741 ret = rpr0521_set_power_state(data, true, device_mask);
745 ret = regmap_bulk_read(data->regmap,
749 rpr0521_set_power_state(data, false, device_mask);
753 ret = rpr0521_set_power_state(data, false, device_mask);
756 mutex_unlock(&data->lock);
766 mutex_lock(&data->lock);
767 ret = rpr0521_get_gain(data, chan->address, val, val2);
768 mutex_unlock(&data->lock);
775 mutex_lock(&data->lock);
776 ret = rpr0521_read_samp_freq(data, chan->type, val, val2);
777 mutex_unlock(&data->lock);
784 mutex_lock(&data->lock);
785 ret = rpr0521_read_ps_offset(data, val);
786 mutex_unlock(&data->lock);
801 struct rpr0521_data *data = iio_priv(indio_dev);
806 mutex_lock(&data->lock);
807 ret = rpr0521_set_gain(data, chan->address, val, val2);
808 mutex_unlock(&data->lock);
813 mutex_lock(&data->lock);
814 ret = rpr0521_write_samp_freq_common(data, chan->type,
816 mutex_unlock(&data->lock);
821 mutex_lock(&data->lock);
822 ret = rpr0521_write_ps_offset(data, val);
823 mutex_unlock(&data->lock);
838 static int rpr0521_init(struct rpr0521_data *data)
843 ret = regmap_read(data->regmap, RPR0521_REG_ID, &id);
845 dev_err(&data->client->dev, "Failed to read REG_ID register\n");
850 dev_err(&data->client->dev, "Wrong id, got %x, expected %x\n",
856 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
865 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
868 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
873 data->irq_timestamp = 0;
878 static int rpr0521_poweroff(struct rpr0521_data *data)
883 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
891 data->als_dev_en = false;
892 data->pxs_dev_en = false;
898 ret = regmap_read(data->regmap, RPR0521_REG_INTERRUPT, &tmp);
900 dev_err(&data->client->dev, "Failed to reset int pin.\n");
932 struct rpr0521_data *data;
937 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
947 data = iio_priv(indio_dev);
949 data->client = client;
950 data->regmap = regmap;
952 mutex_init(&data->lock);
960 ret = rpr0521_init(data);
982 data->drdy_trigger0 = devm_iio_trigger_alloc(
985 if (!data->drdy_trigger0) {
989 data->drdy_trigger0->ops = &rpr0521_trigger_ops;
991 iio_trigger_set_drvdata(data->drdy_trigger0, indio_dev);
1005 data->drdy_trigger0);
1038 rpr0521_poweroff(data);
1058 struct rpr0521_data *data = iio_priv(indio_dev);
1061 mutex_lock(&data->lock);
1063 if (!data->als_need_dis)
1064 data->als_ps_need_en = data->als_dev_en;
1065 if (!data->pxs_need_dis)
1066 data->pxs_ps_need_en = data->pxs_dev_en;
1069 ret = rpr0521_poweroff(data);
1070 regcache_mark_dirty(data->regmap);
1071 mutex_unlock(&data->lock);
1079 struct rpr0521_data *data = iio_priv(indio_dev);
1082 regcache_sync(data->regmap);
1083 if (data->als_ps_need_en) {
1084 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
1087 data->als_ps_need_en = false;
1090 if (data->pxs_ps_need_en) {
1091 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
1094 data->pxs_ps_need_en = false;