Lines Matching refs: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_get_sync(&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,
373 pm_runtime_put_noidle(&data->client->dev);
380 if (data->als_ps_need_en) {
381 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
384 data->als_ps_need_en = false;
387 if (data->pxs_ps_need_en) {
388 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
391 data->pxs_ps_need_en = false;
399 static inline bool rpr0521_is_triggered(struct rpr0521_data *data)
404 ret = regmap_read(data->regmap, RPR0521_REG_INTERRUPT, ®);
419 struct rpr0521_data *data = iio_priv(indio_dev);
421 data->irq_timestamp = iio_get_time_ns(indio_dev);
434 struct rpr0521_data *data = iio_priv(indio_dev);
436 if (rpr0521_is_triggered(data)) {
437 iio_trigger_poll_chained(data->drdy_trigger0);
460 struct rpr0521_data *data = iio_priv(indio_dev);
464 if (iio_trigger_using_own(indio_dev) && data->irq_timestamp) {
465 pf->timestamp = data->irq_timestamp;
466 data->irq_timestamp = 0;
472 err = regmap_bulk_read(data->regmap, RPR0521_REG_PXS_DATA,
473 data->scan.channels,
477 &data->scan, pf->timestamp);
479 dev_err(&data->client->dev,
488 static int rpr0521_write_int_enable(struct rpr0521_data *data)
493 err = regmap_update_bits(data->regmap, RPR0521_REG_PXS_CTRL,
497 dev_err(&data->client->dev, "PS control reg write fail.\n");
502 err = regmap_write(data->regmap, RPR0521_REG_INTERRUPT,
508 dev_err(&data->client->dev, "Interrupt setup write fail.\n");
515 static int rpr0521_write_int_disable(struct rpr0521_data *data)
518 return regmap_write(data->regmap, RPR0521_REG_INTERRUPT,
526 * measurement data is ready to be read.
532 struct rpr0521_data *data = iio_priv(indio_dev);
536 err = rpr0521_write_int_enable(data);
538 err = rpr0521_write_int_disable(data);
540 dev_err(&data->client->dev, "rpr0521_pxs_drdy_set_state failed\n");
553 struct rpr0521_data *data = iio_priv(indio_dev);
555 mutex_lock(&data->lock);
556 err = rpr0521_set_power_state(data, true,
558 mutex_unlock(&data->lock);
560 dev_err(&data->client->dev, "_buffer_preenable fail\n");
568 struct rpr0521_data *data = iio_priv(indio_dev);
570 mutex_lock(&data->lock);
571 err = rpr0521_set_power_state(data, false,
573 mutex_unlock(&data->lock);
575 dev_err(&data->client->dev, "_buffer_postdisable fail\n");
585 static int rpr0521_get_gain(struct rpr0521_data *data, int chan,
590 ret = regmap_read(data->regmap, rpr0521_gain[chan].reg, ®);
601 static int rpr0521_set_gain(struct rpr0521_data *data, int chan,
617 return regmap_update_bits(data->regmap, rpr0521_gain[chan].reg,
622 static int rpr0521_read_samp_freq(struct rpr0521_data *data,
628 ret = regmap_read(data->regmap, RPR0521_REG_MODE_CTRL, ®);
652 static int rpr0521_write_samp_freq_common(struct rpr0521_data *data,
682 return regmap_update_bits(data->regmap,
688 static int rpr0521_read_ps_offset(struct rpr0521_data *data, int *offset)
693 ret = regmap_bulk_read(data->regmap,
697 dev_err(&data->client->dev, "Failed to read PS OFFSET register\n");
705 static int rpr0521_write_ps_offset(struct rpr0521_data *data, int offset)
711 ret = regmap_raw_write(data->regmap,
715 dev_err(&data->client->dev, "Failed to write PS OFFSET register\n");
726 struct rpr0521_data *data = iio_priv(indio_dev);
743 mutex_lock(&data->lock);
744 ret = rpr0521_set_power_state(data, true, device_mask);
748 ret = regmap_bulk_read(data->regmap,
752 rpr0521_set_power_state(data, false, device_mask);
756 ret = rpr0521_set_power_state(data, false, device_mask);
759 mutex_unlock(&data->lock);
769 mutex_lock(&data->lock);
770 ret = rpr0521_get_gain(data, chan->address, val, val2);
771 mutex_unlock(&data->lock);
778 mutex_lock(&data->lock);
779 ret = rpr0521_read_samp_freq(data, chan->type, val, val2);
780 mutex_unlock(&data->lock);
787 mutex_lock(&data->lock);
788 ret = rpr0521_read_ps_offset(data, val);
789 mutex_unlock(&data->lock);
804 struct rpr0521_data *data = iio_priv(indio_dev);
809 mutex_lock(&data->lock);
810 ret = rpr0521_set_gain(data, chan->address, val, val2);
811 mutex_unlock(&data->lock);
816 mutex_lock(&data->lock);
817 ret = rpr0521_write_samp_freq_common(data, chan->type,
819 mutex_unlock(&data->lock);
824 mutex_lock(&data->lock);
825 ret = rpr0521_write_ps_offset(data, val);
826 mutex_unlock(&data->lock);
841 static int rpr0521_init(struct rpr0521_data *data)
846 ret = regmap_read(data->regmap, RPR0521_REG_ID, &id);
848 dev_err(&data->client->dev, "Failed to read REG_ID register\n");
853 dev_err(&data->client->dev, "Wrong id, got %x, expected %x\n",
859 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
868 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
871 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
876 data->irq_timestamp = 0;
881 static int rpr0521_poweroff(struct rpr0521_data *data)
886 ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
894 data->als_dev_en = false;
895 data->pxs_dev_en = false;
901 ret = regmap_read(data->regmap, RPR0521_REG_INTERRUPT, &tmp);
903 dev_err(&data->client->dev, "Failed to reset int pin.\n");
936 struct rpr0521_data *data;
941 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
951 data = iio_priv(indio_dev);
953 data->client = client;
954 data->regmap = regmap;
956 mutex_init(&data->lock);
964 ret = rpr0521_init(data);
986 data->drdy_trigger0 = devm_iio_trigger_alloc(
989 if (!data->drdy_trigger0) {
993 data->drdy_trigger0->dev.parent = indio_dev->dev.parent;
994 data->drdy_trigger0->ops = &rpr0521_trigger_ops;
996 iio_trigger_set_drvdata(data->drdy_trigger0, indio_dev);
1010 data->drdy_trigger0);
1044 rpr0521_poweroff(data);
1068 struct rpr0521_data *data = iio_priv(indio_dev);
1071 mutex_lock(&data->lock);
1073 if (!data->als_need_dis)
1074 data->als_ps_need_en = data->als_dev_en;
1075 if (!data->pxs_need_dis)
1076 data->pxs_ps_need_en = data->pxs_dev_en;
1079 ret = rpr0521_poweroff(data);
1080 regcache_mark_dirty(data->regmap);
1081 mutex_unlock(&data->lock);
1089 struct rpr0521_data *data = iio_priv(indio_dev);
1092 regcache_sync(data->regmap);
1093 if (data->als_ps_need_en) {
1094 ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
1097 data->als_ps_need_en = false;
1100 if (data->pxs_ps_need_en) {
1101 ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
1104 data->pxs_ps_need_en = false;