BayLibre contributions to Linux v6.13
Linus released Linux 6.13 on January 19, 2025. Once more, BayLibre was among the top 20 companies that contributed to the Linux kernel (LWN. Here are some of the areas we worked on.
IIO
In order for the write_event_config
callback’s signature to match that of the user input handling iio_ev_state_store()
function, Julien Stephan updated it. The user input is transformed into a bool and sent to the write_event_config
. Thus, an int argument is not necessary. He could also get rid of several input checks in drivers by changing the former to bool.
Two dedicated macros for non-differential channels and one generic macro are available in the IIO subsystem for creating event identifiers. It made no sense to expect differential channels to use the generic macro. Julien updated the descriptions of the existing macros to make their usage more explicit and introduced a special helper macro for differential channels to improve clarity.
The IIO subsystem has macros to create event identifiers: one generic macro and two specific ones for non-differential channels. Differential channels were expected to use the generic macro, which wasn’t intuitive. To improve clarity, Julien introduced a dedicated helper macro for differential channels and updated the descriptions of the existing macros to make their usage more explicit.
Analog Devices
All ADI drivers that could make use of the new devm_regulator_get_enable_read_voltage()
helper function have been converted, thanks to the efforts of David Lechner. In addition, he performed a few minor ADI driver cleanups and fixes.
To get the ad7124 driver to function on the DE10-Nano Development Kit, Uwe Kleine-König began resolving several bugs in the driver itself and the ad_sigma_delta shim used by it.
Trevor Gamblin resolved an issue on the ad4695 where the device failed to correctly exit conversion mode, potentially leading to data corruption with sequential buffered reads.
Additionally, Trevor added a new driver for the 16-Bit 6MSPS Differential ADC, AD7625.
Guillaume Stols added support for the parallel interface using the IIO backend framework and PWM triggering in the ad7606 ADC driver along with a few minor fixes.
Work on adding support for AD7606-C16 and AD7606-C18 was done by Alexandru Ardelean. These are two relatively recent additions to the ADI AD7606 chip family. 16-bit precision is supported by the C16, and 18-bit precision by the C18. Only 16-bit precision were supported by the Linux driver up until this point. Additionally, these new devices support a more sophisticated SoftwareMode that allows distinct voltage ranges to be defined for each channel. Before code supporting these two devices could be added, the ad7606 driver had to undergo some rework.
In addition to the aforementioned upgrades, Alexandru expanded the functionality of the driver to accommodate AD7607, AD7608, and AD7609.
Alexandru found and fixed a bug while he was working on the ad7606 driver. While debugging, he also discovered an approximately 9-year-old bug in the generic find_closest()
macro. Only a small number of iio and hwmon drivers were impacted by this bug. Additionally, Alexandru added a unit test to prevent regressions in the future.
Julien Stephan added support for two more compatible chips, ADAQ4380-4 and ADAQ4370-4, and corrected the oversampling formula in the ad7380 driver.
The AD3552r is a SPI-controlled, 16-bit, dual-channel, 33 MUPS DAC. A specific QSPI + DDR interface (double data rate) must be available at the controller side in order to achieve the maximum speed of 33MUPS. To support this, ADI developed a dedicated FPGA HDL for AXI DACs. To support it, Angelo Dureghello expanded the driver and the DAC backend module that manages the HDL.
Axel Haslam enhanced the devicetree bindings and driver for the ad5791 digital/analog converter.
PWM
Working on the PWM framework, Uwe Kleine-König added new waveform consumer API functions. Additionally, he implemented waveform callbacks for a number of drivers (such as axi-pwmgen), which made it possible to express and meet the requirements for high-speed ADC readings.
He handled the PWM subsystem’s review and maintenance as usual.
PM
In order to support multiple system-wide low-power states, Kevin Hilman added support for utilizing PM QoS constraints to communicate with the power-management co-processor on TI AM62x SoCs. Kevin also continues to maintain legacy OMAP SoCs where various cleanups and new features keep coming in.
To support suspend/resume on am62 SoCs, Markus Schneider-Pargmann submitted patches that were authored by several individuals.
I2C
In multiple patches, Uwe attempts to eliminate null assignments of i2c_device_id::driver_data
in order to eventually eliminate a large number of casts pertaining to i2c_device_id
. This work will continue into the next release as it is not completed in this one.
Misc
Nicolas Pitre went over his years-old implementations of do_div() for 32-bit systems, both generic and ARM-specific; in particular, he focused on changing constant divisors into reciprocal multiplications. More optimization and numerous simplifications that were added to upstream Linux were still possible.
A number of patches that Uwe Kleine-König submitted improve small aspects he noticed during his routine work on the kernel, specifically in the areas of SPI, GPIO, UAPI, and other subsystems.
Additionally, Uwe provided clarification regarding “GPL” and “Proprietary” licensing. This came about as a consequence of the GPL conversation with Tuxedo and was also discussed on LWN.
Uwe kept working on moving drivers to the less error-prone platform_driver::remove()
. Linus completed this work here.
Summary
Type | Count |
---|---|
Authored | 208 |
Co-developed-by | 1 |
Signed-off-by | 9 |
Acked-by | 8 |
Reviewed-by | 51 |
Tested-by | 15 |
Suggested-by | 3 |