Lines Matching +full:iio +full:- +full:consumer

1 // SPDX-License-Identifier: GPL-2.0-only
3 * af8133j.c - Voltafield AF8133J magnetometer driver
10 #include <linux/gpio/consumer.h>
15 #include <linux/regulator/consumer.h>
17 #include <linux/iio/iio.h>
18 #include <linux/iio/trigger_consumer.h>
19 #include <linux/iio/triggered_buffer.h>
68 return &data->orientation; in af8133j_get_mount_matrix()
103 struct device *dev = &data->client->dev; in af8133j_product_check()
107 ret = regmap_read(data->regmap, AF8133J_REG_PCODE, &val); in af8133j_product_check()
123 struct device *dev = &data->client->dev; in af8133j_reset()
126 if (data->reset_gpiod) { in af8133j_reset()
128 gpiod_set_value_cansleep(data->reset_gpiod, 1); in af8133j_reset()
130 gpiod_set_value_cansleep(data->reset_gpiod, 0); in af8133j_reset()
133 ret = regmap_write(data->regmap, AF8133J_REG_SWR, in af8133j_reset()
145 if (data->range == AF8133J_REG_RANGE_22G) { in af8133j_reset()
146 ret = regmap_write(data->regmap, AF8133J_REG_RANGE, data->range); in af8133j_reset()
156 gpiod_set_value_cansleep(data->reset_gpiod, 1); in af8133j_power_down()
157 regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies); in af8133j_power_down()
162 struct device *dev = &data->client->dev; in af8133j_power_up()
165 ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies); in af8133j_power_up()
171 gpiod_set_value_cansleep(data->reset_gpiod, 0); in af8133j_power_up()
190 ret = regmap_write(data->regmap, in af8133j_take_measurement()
196 ret = regmap_read_poll_timeout(data->regmap, AF8133J_REG_STATUS, val, in af8133j_take_measurement()
202 ret = regmap_write(data->regmap, in af8133j_take_measurement()
212 struct device *dev = &data->client->dev; in af8133j_read_measurement()
220 * trigger attached and IIO core keeps trying to do measurements. in af8133j_read_measurement()
222 if (ret != -EACCES) in af8133j_read_measurement()
227 scoped_guard(mutex, &data->mutex) { in af8133j_read_measurement()
232 ret = regmap_bulk_read(data->regmap, AF8133J_REG_OUT, in af8133j_read_measurement()
262 *val = sign_extend32(le16_to_cpu(buf[chan->address]), in af8133j_read_raw()
263 chan->scan_type.realbits - 1); in af8133j_read_raw()
268 if (data->range == AF8133J_REG_RANGE_12G) in af8133j_read_raw()
275 return -EINVAL; in af8133j_read_raw()
291 return -EINVAL; in af8133j_read_avail()
298 struct device *dev = &data->client->dev; in af8133j_set_scale()
307 return -EINVAL; in af8133j_set_scale()
312 * When suspended, just store the new range to data->range to be in af8133j_set_scale()
316 scoped_guard(mutex, &data->mutex) in af8133j_set_scale()
317 ret = regmap_write(data->regmap, in af8133j_set_scale()
323 data->range = range; in af8133j_set_scale()
337 return -EINVAL; in af8133j_write_raw()
358 struct iio_dev *indio_dev = pf->indio_dev; in af8133j_trigger_handler()
375 iio_trigger_notify_done(indio_dev->trig); in af8133j_trigger_handler()
391 if (!pm_runtime_status_suspended(&data->client->dev)) in af8133j_power_down_action()
397 struct device *dev = &client->dev; in af8133j_probe()
405 return -ENOMEM; in af8133j_probe()
414 data->client = client; in af8133j_probe()
415 data->regmap = regmap; in af8133j_probe()
416 data->range = AF8133J_REG_RANGE_12G; in af8133j_probe()
417 mutex_init(&data->mutex); in af8133j_probe()
419 data->reset_gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); in af8133j_probe()
420 if (IS_ERR(data->reset_gpiod)) in af8133j_probe()
421 return dev_err_probe(dev, PTR_ERR(data->reset_gpiod), in af8133j_probe()
425 data->supplies[i].supply = af8133j_supply_names[i]; in af8133j_probe()
426 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), in af8133j_probe()
427 data->supplies); in af8133j_probe()
431 ret = iio_read_mount_matrix(dev, &data->orientation); in af8133j_probe()
458 indio_dev->info = &af8133j_info; in af8133j_probe()
459 indio_dev->name = "af8133j"; in af8133j_probe()
460 indio_dev->channels = af8133j_channels; in af8133j_probe()
461 indio_dev->num_channels = ARRAY_SIZE(af8133j_channels); in af8133j_probe()
462 indio_dev->modes = INDIO_DIRECT_MODE; in af8133j_probe()
467 return dev_err_probe(&client->dev, ret, in af8133j_probe()
468 "Failed to setup iio triggered buffer\n"); in af8133j_probe()
472 return dev_err_probe(dev, ret, "Failed to register iio device"); in af8133j_probe()