Lines Matching +full:adc +full:- +full:clk
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Analog Devices Generic AXI ADC IP core
6 * Copyright 2012-2020 Analog Devices Inc.
10 #include <linux/clk.h>
21 #include <linux/fpga/adi-axi-common.h>
24 #include <linux/iio/buffer-dmaengine.h>
33 /* ADC controls */
40 /* ADC Channel controls */
69 ret = regmap_set_bits(st->regmap, ADI_AXI_REG_RSTN, in axi_adc_enable()
75 return regmap_set_bits(st->regmap, ADI_AXI_REG_RSTN, in axi_adc_enable()
83 regmap_write(st->regmap, ADI_AXI_REG_RSTN, 0); in axi_adc_disable()
92 if (!data->enable) in axi_adc_data_format_set()
93 return regmap_clear_bits(st->regmap, in axi_adc_data_format_set()
98 if (data->sign_extend) in axi_adc_data_format_set()
100 if (data->type == IIO_BACKEND_OFFSET_BINARY) in axi_adc_data_format_set()
103 return regmap_update_bits(st->regmap, ADI_AXI_REG_CHAN_CTRL(chan), in axi_adc_data_format_set()
111 return regmap_set_bits(st->regmap, ADI_AXI_REG_CHAN_CTRL(chan), in axi_adc_chan_enable()
119 return regmap_clear_bits(st->regmap, ADI_AXI_REG_CHAN_CTRL(chan), in axi_adc_chan_disable()
131 if (device_property_read_string(st->dev, "dma-names", &dma_name)) in axi_adc_request_buffer()
134 buffer = iio_dmaengine_buffer_alloc(st->dev, dma_name); in axi_adc_request_buffer()
136 dev_err(st->dev, "Could not get DMA buffer, %ld\n", in axi_adc_request_buffer()
141 indio_dev->modes |= INDIO_BUFFER_HARDWARE; in axi_adc_request_buffer()
178 struct clk *clk; in adi_axi_adc_probe() local
181 st = devm_kzalloc(&pdev->dev, sizeof(*st), GFP_KERNEL); in adi_axi_adc_probe()
183 return -ENOMEM; in adi_axi_adc_probe()
189 st->dev = &pdev->dev; in adi_axi_adc_probe()
190 st->regmap = devm_regmap_init_mmio(&pdev->dev, base, in adi_axi_adc_probe()
192 if (IS_ERR(st->regmap)) in adi_axi_adc_probe()
193 return PTR_ERR(st->regmap); in adi_axi_adc_probe()
195 expected_ver = device_get_match_data(&pdev->dev); in adi_axi_adc_probe()
197 return -ENODEV; in adi_axi_adc_probe()
199 clk = devm_clk_get_enabled(&pdev->dev, NULL); in adi_axi_adc_probe()
200 if (IS_ERR(clk)) in adi_axi_adc_probe()
201 return PTR_ERR(clk); in adi_axi_adc_probe()
207 ret = regmap_write(st->regmap, ADI_AXI_REG_RSTN, 0); in adi_axi_adc_probe()
211 ret = regmap_read(st->regmap, ADI_AXI_REG_VERSION, &ver); in adi_axi_adc_probe()
216 dev_err(&pdev->dev, in adi_axi_adc_probe()
224 return -ENODEV; in adi_axi_adc_probe()
227 ret = devm_iio_backend_register(&pdev->dev, &adi_axi_adc_generic, st); in adi_axi_adc_probe()
231 dev_info(&pdev->dev, "AXI ADC IP core (%d.%.2d.%c) probed\n", in adi_axi_adc_probe()
243 { .compatible = "adi,axi-adc-10.0.a", .data = &adi_axi_adc_10_0_a_info },
258 MODULE_DESCRIPTION("Analog Devices Generic AXI ADC IP core driver");