Lines Matching +full:reg +full:- +full:names

1 // SPDX-License-Identifier: GPL-2.0-only
6 * Copyright 2012-2020 Analog Devices Inc.
21 #include <linux/iio/buffer-dmaengine.h>
23 #include <linux/fpga/adi-axi-common.h>
24 #include <linux/iio/adc/adi-axi-adc.h>
92 unsigned int reg, in adi_axi_adc_write() argument
95 iowrite32(val, st->regs + reg); in adi_axi_adc_write()
99 unsigned int reg) in adi_axi_adc_read() argument
101 return ioread32(st->regs + reg); in adi_axi_adc_read()
113 if (device_property_read_string(dev, "dma-names", &dma_name)) in adi_axi_adc_config_dma_buffer()
116 buffer = devm_iio_dmaengine_buffer_alloc(indio_dev->dev.parent, in adi_axi_adc_config_dma_buffer()
121 indio_dev->modes |= INDIO_BUFFER_HARDWARE; in adi_axi_adc_config_dma_buffer()
132 struct adi_axi_adc_conv *conv = &st->client->conv; in adi_axi_adc_read_raw()
134 if (!conv->read_raw) in adi_axi_adc_read_raw()
135 return -EOPNOTSUPP; in adi_axi_adc_read_raw()
137 return conv->read_raw(conv, chan, val, val2, mask); in adi_axi_adc_read_raw()
145 struct adi_axi_adc_conv *conv = &st->client->conv; in adi_axi_adc_write_raw()
147 if (!conv->write_raw) in adi_axi_adc_write_raw()
148 return -EOPNOTSUPP; in adi_axi_adc_write_raw()
150 return conv->write_raw(conv, chan, val, val2, mask); in adi_axi_adc_write_raw()
157 struct adi_axi_adc_conv *conv = &st->client->conv; in adi_axi_adc_update_scan_mode()
160 for (i = 0; i < conv->chip_info->num_channels; i++) { in adi_axi_adc_update_scan_mode()
186 return ERR_PTR(-ENOMEM); in adi_axi_adc_conv_register()
190 cl->dev = get_device(dev); in adi_axi_adc_conv_register()
192 list_add_tail(&cl->entry, &registered_clients); in adi_axi_adc_conv_register()
196 return &cl->conv; in adi_axi_adc_conv_register()
205 list_del(&cl->entry); in adi_axi_adc_conv_unregister()
206 put_device(cl->dev); in adi_axi_adc_conv_unregister()
226 return ERR_PTR(-ENOMEM); in devm_adi_axi_adc_conv_register()
247 struct adi_axi_adc_conv *conv = &st->client->conv; in in_voltage_scale_available_show()
251 for (i = 0; i < conv->chip_info->num_scales; i++) { in in_voltage_scale_available_show()
252 const unsigned int *s = conv->chip_info->scale_table[i]; in in_voltage_scale_available_show()
254 len += scnprintf(buf + len, PAGE_SIZE - len, in in_voltage_scale_available_show()
257 buf[len - 1] = '\n'; in in_voltage_scale_available_show()
282 struct adi_axi_adc_conv *conv = &st->client->conv; in axi_adc_attr_is_visible()
286 if (!conv->chip_info->num_scales) in axi_adc_attr_is_visible()
288 return attr->mode; in axi_adc_attr_is_visible()
290 return attr->mode; in axi_adc_attr_is_visible()
318 return ERR_PTR(-ENODEV); in adi_axi_adc_attach_client()
320 cln = of_parse_phandle(dev->of_node, "adi,adc-dev", 0); in adi_axi_adc_attach_client()
322 dev_err(dev, "No 'adi,adc-dev' node defined\n"); in adi_axi_adc_attach_client()
323 return ERR_PTR(-ENODEV); in adi_axi_adc_attach_client()
329 if (!cl->dev) in adi_axi_adc_attach_client()
332 if (cl->dev->of_node != cln) in adi_axi_adc_attach_client()
335 if (!try_module_get(cl->dev->driver->owner)) { in adi_axi_adc_attach_client()
337 return ERR_PTR(-ENODEV); in adi_axi_adc_attach_client()
340 get_device(cl->dev); in adi_axi_adc_attach_client()
341 cl->info = info; in adi_axi_adc_attach_client()
348 return ERR_PTR(-EPROBE_DEFER); in adi_axi_adc_attach_client()
354 struct adi_axi_adc_conv *conv = &st->client->conv; in adi_axi_adc_setup_channels()
357 if (conv->preenable_setup) { in adi_axi_adc_setup_channels()
358 ret = conv->preenable_setup(conv); in adi_axi_adc_setup_channels()
363 for (i = 0; i < conv->chip_info->num_channels; i++) { in adi_axi_adc_setup_channels()
385 put_device(cl->dev); in adi_axi_adc_cleanup()
386 module_put(cl->dev->driver->owner); in adi_axi_adc_cleanup()
398 cl = adi_axi_adc_attach_client(&pdev->dev); in adi_axi_adc_probe()
402 ret = devm_add_action_or_reset(&pdev->dev, adi_axi_adc_cleanup, cl); in adi_axi_adc_probe()
406 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); in adi_axi_adc_probe()
408 return -ENOMEM; in adi_axi_adc_probe()
411 st->client = cl; in adi_axi_adc_probe()
412 cl->state = st; in adi_axi_adc_probe()
413 mutex_init(&st->lock); in adi_axi_adc_probe()
415 st->regs = devm_platform_ioremap_resource(pdev, 0); in adi_axi_adc_probe()
416 if (IS_ERR(st->regs)) in adi_axi_adc_probe()
417 return PTR_ERR(st->regs); in adi_axi_adc_probe()
419 conv = &st->client->conv; in adi_axi_adc_probe()
425 if (cl->info->version > ver) { in adi_axi_adc_probe()
426 dev_err(&pdev->dev, in adi_axi_adc_probe()
428 ADI_AXI_PCORE_VER_MAJOR(cl->info->version), in adi_axi_adc_probe()
429 ADI_AXI_PCORE_VER_MINOR(cl->info->version), in adi_axi_adc_probe()
430 ADI_AXI_PCORE_VER_PATCH(cl->info->version), in adi_axi_adc_probe()
434 return -ENODEV; in adi_axi_adc_probe()
437 indio_dev->info = &adi_axi_adc_info; in adi_axi_adc_probe()
438 indio_dev->name = "adi-axi-adc"; in adi_axi_adc_probe()
439 indio_dev->modes = INDIO_DIRECT_MODE; in adi_axi_adc_probe()
440 indio_dev->num_channels = conv->chip_info->num_channels; in adi_axi_adc_probe()
441 indio_dev->channels = conv->chip_info->channels; in adi_axi_adc_probe()
443 ret = adi_axi_adc_config_dma_buffer(&pdev->dev, indio_dev); in adi_axi_adc_probe()
447 ret = adi_axi_adc_setup_channels(&pdev->dev, st); in adi_axi_adc_probe()
451 ret = devm_iio_device_register(&pdev->dev, indio_dev); in adi_axi_adc_probe()
455 dev_info(&pdev->dev, "AXI ADC IP core (%d.%.2d.%c) probed\n", in adi_axi_adc_probe()
465 { .compatible = "adi,axi-adc-10.0.a", .data = &adi_axi_adc_10_0_a_info },