Lines Matching +full:max14001 +full:- +full:max14002

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
3 * Analog Devices MAX14001/MAX14002 ADC driver
5 * Copyright (C) 2023-2025 Analog Devices Inc.
9 …* Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/MAX14001-MAX14002
30 /* MAX14001 Registers Address */
63 * The following buffers will be bit-reversed during device
65 * LSB-first.
89 .tx_buf = &st->spi_tx_buffer, in max14001_read()
90 .len = sizeof(st->spi_tx_buffer), in max14001_read()
93 .rx_buf = &st->spi_rx_buffer, in max14001_read()
94 .len = sizeof(st->spi_rx_buffer), in max14001_read()
101 * Prepare SPI transmit buffer 16 bit-value and reverse bit order in max14001_read()
102 * to align with the LSB-first input on SDI port in order to meet in max14001_read()
108 if (st->spi_hw_has_lsb_first) in max14001_read()
109 st->spi_tx_buffer.le = cpu_to_le16(addr); in max14001_read()
111 st->spi_tx_buffer.be = cpu_to_be16(bitrev16(addr)); in max14001_read()
113 ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers)); in max14001_read()
118 * Convert received 16-bit value to cpu-endian format and reverse in max14001_read()
122 if (st->spi_hw_has_lsb_first) in max14001_read()
123 data = le16_to_cpu(st->spi_rx_buffer.le); in max14001_read()
125 data = bitrev16(be16_to_cpu(st->spi_rx_buffer.be)); in max14001_read()
137 * Prepare SPI transmit buffer 16 bit-value and reverse bit order in max14001_write()
138 * to align with the LSB-first input on SDI port in order to meet in max14001_write()
146 if (st->spi_hw_has_lsb_first) in max14001_write()
147 st->spi_tx_buffer.le = cpu_to_le16(addr); in max14001_write()
149 st->spi_tx_buffer.be = cpu_to_be16(bitrev16(addr)); in max14001_write()
151 return spi_write(st->spi, &st->spi_tx_buffer, sizeof(st->spi_tx_buffer)); in max14001_write()
178 ret = regmap_read(st->regmap, reg, &val); in max14001_write_verification_reg()
216 return regmap_read(st->regmap, reg, readval); in max14001_debugfs_reg_access()
218 return regmap_write(st->regmap, reg, writeval); in max14001_debugfs_reg_access()
230 ret = regmap_read(st->regmap, MAX14001_REG_ADC, val); in max14001_read_raw()
236 *val = st->vref_mV; in max14001_read_raw()
241 return -EINVAL; in max14001_read_raw()
293 struct device *dev = &spi->dev; in max14001_probe()
301 return -ENOMEM; in max14001_probe()
304 st->spi = spi; in max14001_probe()
305 st->spi_hw_has_lsb_first = spi->mode & SPI_LSB_FIRST; in max14001_probe()
306 st->chip_info = spi_get_device_match_data(spi); in max14001_probe()
307 if (!st->chip_info) in max14001_probe()
308 return -EINVAL; in max14001_probe()
310 indio_dev->name = st->chip_info->name; in max14001_probe()
311 indio_dev->info = &max14001_info; in max14001_probe()
312 indio_dev->channels = max14001_channel; in max14001_probe()
313 indio_dev->num_channels = ARRAY_SIZE(max14001_channel); in max14001_probe()
314 indio_dev->modes = INDIO_DIRECT_MODE; in max14001_probe()
316 st->regmap = devm_regmap_init(dev, NULL, st, &max14001_regmap_config); in max14001_probe()
317 if (IS_ERR(st->regmap)) in max14001_probe()
318 return dev_err_probe(dev, PTR_ERR(st->regmap), "Failed to initialize regmap\n"); in max14001_probe()
329 if (ret < 0 && ret != -ENODEV) in max14001_probe()
332 if (ret == -ENODEV) in max14001_probe()
336 st->vref_mV = ret / (MICRO / MILLI); in max14001_probe()
340 * Configure the MAX14001/MAX14002 to use an external voltage in max14001_probe()
343 ret = regmap_set_bits(st->regmap, MAX14001_REG_CFG, in max14001_probe()
358 .name = "max14001",
362 .name = "max14002",
366 { "max14001", (kernel_ulong_t)&max14001_chip_info },
367 { "max14002", (kernel_ulong_t)&max14002_chip_info },
372 { .compatible = "adi,max14001", .data = &max14001_chip_info },
373 { .compatible = "adi,max14002", .data = &max14002_chip_info },
380 .name = "max14001",
390 MODULE_DESCRIPTION("Analog Devices MAX14001/MAX14002 ADCs driver");