Commit a425990f authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'iio-for-6.15a' of...

Merge tag 'iio-for-6.15a' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-next

Jonathan writes:

IIO: New device support, features and cleanup for the 6.15 cycle.

The usual mixture of new drivers, support in existing drivers for new
devices, a range of features and general subsystem cleanup.

Two merges of immutable branches in here:
* SPI offload support. Culmination of a long effort to bring the ability
  to offload triggered sequences of SPI operations to specific hardware,
  allow high datarate acquisition over an SPI bus (if you have the right
  hardware / FPGA firmware)
* GPIO set-array-helper - enables code simplification.

New device support
==================

adi,ad3552r-hs:
- Add support for AD3541r and AD3542r via newly supported FPGA HDL.
adi,ad4030
- New driver supporting the AD4030, AD4630 AD4630-16, AD4640-24, AD4632-16,
  AD4632-24 1 and 2 channel high precision SPI ADCs.
adi,ad4851
- New driver and backend support for the AD4851, AD4852, AD4853, AD4854,
  AD4855, AD4846, AD4857, AD4858 and AD4858I high speed multichannel
  simultaneous sampling ADCs.
adi,ad7191
- New driver for this 24-bit ADC for precision bridge applications,
adi,ad7380
- Add support for the adaq4381-4 which is a 14-bit version of the
  already supported adaq4380-1
adi,adis16550
- New driver using the ADIS library (which needed extensions) for this
  IMU.
brcm,apds9160
- New driver for this proximity and ambient light sensor.
dynaimage,al3000a
- New driver for this illuminance sensor.
mcube,mc3230
- Add support for the mc3510c accelerometer with a different scale to existing
  supported parts (some rework preceded this)
nxp,imx93
- Add compatibles for imx94 and imx95 which are fully compatible with imx93.
rockchip,saradc
- Add support for the RK3528 ADC
- Add support for the RK3562 ADC
silab,si7210
- New driver to support this I2C Hall effect magnetic position sensor.
ti,ads7138
- New driver supporting the ADS7128 and AD7138 I2C ADCs.

Staging driver drop
===================

adi,adis16240
- Drop this impact sensor. Interesting part but complex hence never left
  staging due to ABI challenges. No longer readily available so drop driver.

New features
============

Documentation
- A really nice overview document introduce ADC terminology and how
  it maps to IIO.
core
- New description for FAULT events, used in the ad7173.
- filter_type ABI used in ad4130.
buffer-dmaengine
- Split DMA channel request from buffer allocation (for SPI offload)
- Add a new _with_handle setup variant. (for SPI offload)
adi,adf4371
- Add control of reference clock type and support for frequency doubling
  where appropriate.
adi,ad4695
- Support SPI offload.
- Support oversampling control.
adi,ad5791
- Support SPI offload.
adi,ad7124
- Add channel calibration support.
adi,ad7380:
- Alert support (threshold interrupts)
- SPI offload support.
adi,ad7606
- Support writing registers when using backend enabling software control
  of modes.
adi,ad7944
- Support SPI offload.
adi,ad9832
- Use devm_regulator_get_enable() to simplify code.
adi,ad9834
- Use devm_regulator_get_enable() to simplify code.
adi,adxl345
- Improve IRQ handling code.
- Add debug access to registers.
bosch,bmi270
- Add temperature channel support.
- Add data ready trigger.
google,cross_ec
- Add trace events.
mcube,mc3230
- Add mount matrix support
- Add an OF match table.

Cleanup and minor bug fixes
===========================

Tree wide:
- Stop using iio_device_claim_direct_scoped() and introduce sparse friendly
  iio_device_claim/release_direct()

  The conditional scoped cleanup has proved hard to deal with, requiring
  workarounds for various compiler issues and in is rather non-intuitive
  so abandon that experiment. One of the attractions of that approach was
  that it made it much harder to have unbalanced   claim/release bugs so
  instead introduce a conditional-lock style boolean returning new pair
  of functions. These are inline in the header and have __acquire and
  __release calls allowing sparse to detect lack of balance.  There are
  occasional false positives but so far those have reflected complex code
  paths that benefited from cleanup anyway.
  The first set of driver conversions are in this pull request, more to
  follow next cycle. Various related cleanup in drivers.
  Removal of the _scoped code is completed and the definition removed.
- Use of str_enable_disable() and similar helpers.
- Don't set regmap cache to REGCACHE_NONE as that's the default anyway.
- Change some caches from RBTREE to MAPLE reflecting best practice.
- Use the new gpiod_multi_set_value_cansleep()
- Make sure to grab direct mode for some calibrations paths.
- Avoid using memcmp on structures when checking for matching channel configs.
  Instead just match field by field.
dt-bindings:
- Fix up indentation inconsistencies.
gts-helper:
- Simplify building of available scale table.
adi,ad-sigma-delta
- Make sure to disable channel after calibration done.
- Add error handling in configuring channel during calibration.
adi,ad2s1201
- use a bitmap_write() rather than directly accessing underlying storage.
adi,ad3552r-hs
- Fix a wrong error message.
- Make sure to use instruction mode for configuration.
adi,ad4695
- Add a conversion to ensure exit from conversion mode.
- Use custom regmap to handle required sclk rate change.
- Fix an out of bounds array access
- Simplify oversampling ratio handling.
adi,ad4851
- Fix a sign bug.
adi,ad5791
- Fix wrong exported number of storage bits.
adi,ad7124
- Disable all channels at probe to avoid strange initial configurations.
adi,ad7173
- Rework to allow static const struct ad_sigma_delta without need
  to make a copy.
adi,ad7623
- Drop a BSD license tag that the authors consider unnecessary.
adi,ad7768-1
- Fix channels sign description exposed to user space.
- Set MOSI idle state to avoid accidental device reset.
- Avoid some overkill locking.
adi,axi-dac
- Check if device interface is busy when enabling data stream.
- Add control of bus mode.
bosch,bmi270
- Move a struct definition to a c file as only used there.
vishay,veml6030
- Enable regmap cache to reduce bus traffic.
- Fix ABI bug around scale reporting.
vishay,vem6075
- Check array bounds to harden against broken hardware.

Various other minor tweaks and fixes not called out.

*

* tag 'iio-for-6.15a' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio: (223 commits)
  doc: iio: ad7380: describe offload support
  iio: ad7380: add support for SPI offload
  iio: light: Add check for array bounds in veml6075_read_int_time_ms
  iio: adc: ti-ads7924 Drop unnecessary function parameters
  staging: iio: ad9834: Use devm_regulator_get_enable()
  staging: iio: ad9832: Use devm_regulator_get_enable()
  iio: gyro: bmg160_spi: add of_match_table
  dt-bindings: iio: adc: Add i.MX94 and i.MX95 support
  iio: adc: ad7768-1: remove unnecessary locking
  Documentation: ABI: add wideband filter type to sysfs-bus-iio
  iio: adc: ad7768-1: set MOSI idle state to prevent accidental reset
  iio: adc: ad7768-1: Fix conversion result sign
  iio: adc: ad7124: Benefit of dev = indio_dev->dev.parent in ad7124_parse_channel_config()
  iio: adc: ad7124: Implement system calibration
  iio: adc: ad7124: Implement internal calibration at probe time
  iio: adc: ad_sigma_delta: Add error checking for ad_sigma_delta_set_channel()
  iio: adc: ad4130: Adapt internal names to match official filter_type ABI
  iio: adc: ad7173: Fix comparison of channel configs
  iio: adc: ad7124: Fix comparison of channel configs
  iio: adc: ad4130: Fix comparison of channel setups
  ...
parents 34ff7999 8dbeb413
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -2268,7 +2268,7 @@ Description:
		representing the sensor unique ID number.

What:		/sys/bus/iio/devices/iio:deviceX/filter_type_available
What:		/sys/bus/iio/devices/iio:deviceX/in_voltage-voltage_filter_mode_available
What:		/sys/bus/iio/devices/iio:deviceX/in_voltage-voltage_filter_type_available
KernelVersion:	6.1
Contact:	linux-iio@vger.kernel.org
Description:
@@ -2290,6 +2290,16 @@ Description:
		* "sinc3+pf2" - Sinc3 + device specific Post Filter 2.
		* "sinc3+pf3" - Sinc3 + device specific Post Filter 3.
		* "sinc3+pf4" - Sinc3 + device specific Post Filter 4.
		* "wideband" - filter with wideband low ripple passband
		  and sharp transition band.

What:		/sys/bus/iio/devices/iio:deviceX/filter_type
What:		/sys/bus/iio/devices/iio:deviceX/in_voltageY-voltageZ_filter_type
KernelVersion:	6.1
Contact:	linux-iio@vger.kernel.org
Description:
		Specifies which filter type apply to the channel. The possible
		values are given by the filter_type_available attribute.

What:		/sys/.../events/in_proximity_thresh_either_runningperiod
KernelVersion:	6.6
+20 −0
Original line number Diff line number Diff line
What:		/sys/bus/iio/devices/iio:deviceX/in_voltage-voltage_filter_mode_available
KernelVersion:  6.2
Contact:	linux-iio@vger.kernel.org
Description:
		Reading returns a list with the possible filter modes.

		This ABI is only kept for backwards compatibility and the values
		returned are identical to filter_type_available attribute
		documented in Documentation/ABI/testing/sysfs-bus-iio. Please,
		use filter_type_available like ABI to provide filter options for
		new drivers.

What:		/sys/bus/iio/devices/iio:deviceX/in_voltageY-voltageZ_filter_mode
KernelVersion:  6.2
Contact:	linux-iio@vger.kernel.org
Description:
		This ABI is only kept for backwards compatibility and the values
		returned are identical to in_voltageY-voltageZ_filter_type
		attribute documented in Documentation/ABI/testing/sysfs-bus-iio.
		Please, use in_voltageY-voltageZ_filter_type for new drivers.
+110 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright 2024 Analog Devices Inc.
# Copyright 2024 BayLibre, SAS.
%YAML 1.2
---
$id: http://devicetree.org/schemas/iio/adc/adi,ad4030.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices AD4030 and AD4630 ADC families

maintainers:
  - Michael Hennerich <michael.hennerich@analog.com>
  - Nuno Sa <nuno.sa@analog.com>

description: |
  Analog Devices AD4030 single channel and AD4630/AD4632 dual channel precision
  SAR ADC families

  * https://www.analog.com/media/en/technical-documentation/data-sheets/ad4030-24-4032-24.pdf
  * https://www.analog.com/media/en/technical-documentation/data-sheets/ad4630-24_ad4632-24.pdf
  * https://www.analog.com/media/en/technical-documentation/data-sheets/ad4630-16-4632-16.pdf

properties:
  compatible:
    enum:
      - adi,ad4030-24
      - adi,ad4032-24
      - adi,ad4630-16
      - adi,ad4630-24
      - adi,ad4632-16
      - adi,ad4632-24

  reg:
    maxItems: 1

  spi-max-frequency:
    maximum: 102040816

  spi-rx-bus-width:
    enum: [1, 2, 4]

  vdd-5v-supply: true
  vdd-1v8-supply: true
  vio-supply: true

  ref-supply:
    description:
      Optional External unbuffered reference. Used when refin-supply is not
      connected.

  refin-supply:
    description:
      Internal buffered Reference. Used when ref-supply is not connected.

  cnv-gpios:
    description:
      The Convert Input (CNV). It initiates the sampling conversions.
    maxItems: 1

  reset-gpios:
    description:
      The Reset Input (/RST). Used for asynchronous device reset.
    maxItems: 1

  interrupts:
    description:
      The BUSY pin is used to signal that the conversions results are available
      to be transferred when in SPI Clocking Mode. This nodes should be
      connected to an interrupt that is triggered when the BUSY line goes low.
    maxItems: 1

  interrupt-names:
    const: busy

required:
  - compatible
  - reg
  - vdd-5v-supply
  - vdd-1v8-supply
  - vio-supply
  - cnv-gpios

oneOf:
  - required:
      - ref-supply
  - required:
      - refin-supply

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        adc@0 {
            compatible = "adi,ad4030-24";
            reg = <0>;
            spi-max-frequency = <80000000>;
            vdd-5v-supply = <&supply_5V>;
            vdd-1v8-supply = <&supply_1_8V>;
            vio-supply = <&supply_1_8V>;
            ref-supply = <&supply_5V>;
            cnv-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
        };
    };
+13 −0
Original line number Diff line number Diff line
@@ -84,6 +84,10 @@ properties:
    description: The Reset Input (RESET). Should be configured GPIO_ACTIVE_LOW.
    maxItems: 1

  pwms:
    description: PWM signal connected to the CNV pin.
    maxItems: 1

  interrupts:
    minItems: 1
    items:
@@ -106,6 +110,15 @@ properties:
      The first cell is the GPn number: 0 to 3.
      The second cell takes standard GPIO flags.

  '#trigger-source-cells':
    description: |
      First cell indicates the output signal: 0 = BUSY, 1 = ALERT.
      Second cell indicates which GPn pin is used: 0, 2 or 3.

      For convenience, macros for these values are available in
      dt-bindings/iio/adc/adi,ad4695.h.
    const: 2

  "#address-cells":
    const: 1

+153 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright 2024 Analog Devices Inc.
%YAML 1.2
---
$id: http://devicetree.org/schemas/iio/adc/adi,ad4851.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices AD485X family

maintainers:
  - Sergiu Cuciurean <sergiu.cuciurean@analog.com>
  - Dragos Bogdan <dragos.bogdan@analog.com>
  - Antoniu Miclaus <antoniu.miclaus@analog.com>

description: |
  Analog Devices AD485X fully buffered, 8-channel simultaneous sampling,
  16/20-bit, 1 MSPS data acquisition system (DAS) with differential, wide
  common-mode range inputs.

  https://www.analog.com/media/en/technical-documentation/data-sheets/ad4855.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad4856.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad4857.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad4858.pdf

$ref: /schemas/spi/spi-peripheral-props.yaml#

properties:
  compatible:
    enum:
      - adi,ad4851
      - adi,ad4852
      - adi,ad4853
      - adi,ad4854
      - adi,ad4855
      - adi,ad4856
      - adi,ad4857
      - adi,ad4858
      - adi,ad4858i

  reg:
    maxItems: 1

  vcc-supply: true

  vee-supply: true

  vdd-supply: true

  vddh-supply: true

  vddl-supply: true

  vio-supply: true

  vrefbuf-supply: true

  vrefio-supply: true

  pwms:
    description: PWM connected to the CNV pin.
    maxItems: 1

  io-backends:
    maxItems: 1

  pd-gpios:
    maxItems: 1

  spi-max-frequency:
    maximum: 25000000

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

patternProperties:
  "^channel(@[0-7])?$":
    $ref: adc.yaml
    type: object
    description: Represents the channels which are connected to the ADC.

    properties:
      reg:
        description:
          The channel number, as specified in the datasheet (from 0 to 7).
        minimum: 0
        maximum: 7

      diff-channels:
        description:
          Each channel can be configured as a bipolar differential channel.
          The ADC uses the same positive and negative inputs for this.
          This property must be specified as 'reg' (or the channel number) for
          both positive and negative inputs (i.e. diff-channels = <reg reg>).
          Since the configuration is bipolar differential, the 'bipolar'
          property is required.
        items:
          minimum: 0
          maximum: 7

      bipolar: true

    required:
      - reg

    additionalProperties: false

required:
  - compatible
  - reg
  - vcc-supply
  - vee-supply
  - vdd-supply
  - vio-supply
  - pwms

unevaluatedProperties: false

examples:
  - |
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        adc@0{
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "adi,ad4858";
            reg = <0>;
            spi-max-frequency = <10000000>;
            vcc-supply = <&vcc>;
            vdd-supply = <&vdd>;
            vee-supply = <&vee>;
            vddh-supply = <&vddh>;
            vddl-supply = <&vddl>;
            vio-supply = <&vio>;
            pwms = <&pwm_gen 0 0>;
            io-backends = <&iio_backend>;

            channel@0 {
              reg = <0>;
              diff-channels = <0 0>;
              bipolar;
            };

            channel@1 {
              reg = <1>;
            };
        };
    };
...
Loading