[PATCH v7 0/2] iio: adc: add MAX40080 current-sense amplifier driver

Stefan Popa <[email protected]>
Newsgroups org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
This series adds support for the MAX40080, a bidirectional current-sense
amplifier with an integrated 12-bit ADC.

The driver is placed in IIO rather than hwmon because:
  - IIO's scale/raw model naturally exposes the selectable gain ranges and
    lets userspace apply the correct scale per range.
  - Buffered capture support is planned for a follow-up series -- each
    conversion returns a matched current+voltage pair, which maps cleanly
    to IIO's buffered/triggered model.

Changes since v6:
  - Add types.h include (Andy).
  - Remove dead code: i2c_smbus_read_i2c_block_data can't return partial
    reads, so remove the ret != sizeof(buf) check (David).
  - Remove dead code: iv variable initialization not needed as
    max40080_read_iv always writes to *iv before returning (David).

Changes since v5:
  - Fix datasheet URL format in binding -- use stable link without /en/
    path component (Jonathan, Siratul).
  - Use 'adi' compatible prefix instead of 'maxim' -- MAX40080 is an ADI
    product (Conor).
  - Split MAINTAINERS into binding and driver patches (Siratul).
  - Add datasheet link in driver header comment (Siratul).
  - Fix comment style: capital first letter + period (Siratul).
  - Fix register defines: add register name prefix (CFG_, FIFO_CFG_, IV_)
    and use designated initializers for csa_gain array (Jonathan).
  - Define MAX40080_ADC_RES_BITS and use BIT() for shift (Jonathan).
  - Use lowercase 'mV' in defines (Siratul).
  - Use C99 loop variable declarations (Siratul).
  - Remove braces from single-statement if blocks (Siratul).
  - Declaration and initialization in same statement (Siratul).
  - Use IIO_VAL_FRACTIONAL_LOG2 for voltage scale (Jonathan).
  - Remove unused i2c_set_clientdata call (Jonathan).
  - Use defines instead of magic numbers for range default (Jonathan).

Changes since v4:
  - Initialize tmp = 0 in max40080_read_iv() before read_poll_timeout to
    avoid using potentially uninitialized value in the condition check
    (Sashiko, Jonathan).
  - Simplify max40080_get_oversampling_ratio() to use cached value instead
    of reading from the device (Jonathan).
  - Remove DMA-safe buffer from struct -- I2C layer already bounces data
    internally for i2c_smbus_* calls (Jonathan).
  - Make shunt-resistor-micro-ohms required in DT binding. The default
    1 Ohm was arbitrary and rarely correct for real hardware (Jonathan).
  - Remove PM ops entirely. Having only resume without suspend was flagged
    as "papering over" possible power loss issues (Jonathan).
  - Remove the {} scope around propname, declare it at function top (Andy).
  - Remove mod_devicetable.h include -- i2c.h provides necessary types
    (Jonathan).

Changes since v3:
  - Removed all regmap usage -- regmap doesn't support SMBus PEC or Quick
    Command, both required by this device (Nuno).
  - Fixed locking: max40080_update_bits() now takes the lock internally,
    and callers update cached state after the call returns (Nuno).
  - Consistent comment style: capital first letter + period (Andy).
  - Use propname variable to deduplicate "shunt-resistor-micro-ohms" (Andy).
  - Return IIO_VAL_* inline instead of break + return pattern (Nuno).

Changes since v2:
  - Added shunt-resistor-micro-ohms DT property with default value.
  - Use single-shot mode with SMBus Quick Command trigger for correlated
    current/voltage reads.
  - Precompute current scale per range at probe time.

Link: https://lore.kernel.org/linux-iio/[email protected]/ [v6]
Link: https://lore.kernel.org/linux-iio/[email protected]/ [v5]
Link: https://lore.kernel.org/linux-iio/[email protected]/ [v4]
Link: https://lore.kernel.org/linux-iio/[email protected]/ [v3]
Link: https://lore.kernel.org/linux-iio/[email protected]/ [v2]
Link: https://lore.kernel.org/linux-iio/[email protected]/ [v1]

Stefan Popa (2):
  dt-bindings: iio: adc: add adi,max40080
  iio: adc: add MAX40080 current-sense amplifier driver

 .../bindings/iio/adc/adi,max40080.yaml        |  65 ++
 MAINTAINERS                                   |   9 +
 drivers/iio/adc/Kconfig                       |  11 +
 drivers/iio/adc/Makefile                      |   1 +
 drivers/iio/adc/max40080.c                    | 572 ++++++++++++++++++
 5 files changed, 658 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max40080.yaml
 create mode 100644 drivers/iio/adc/max40080.c

--
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.