linux/drivers/leds
Linus Torvalds 5143840cef gpio updates for v6.15-rc1
GPIO core:
 - add sanitization of return values of GPIO provider callbacks so that invalid
   ones don't get propagated to user-space
 - add new variants of the line setter callbacks for GPIO providers that return
   an integer and allow to indicate driver errors to the GPIO core
 - change the interface of all gpiod_set_value() variants to return an integer
   thus becoming able to indicate failures in the underlying layer to callers
 - drop unneeded ERR_CAST in gpiolib-acpi
 - use for_each_if() where applicable
 - provide gpiod_multi_set_value_cansleep() as a new, simpler interface to
   gpiod_set_array_value_cansleep() and use it across several drivers treewide
 - reduce the number of atomic reads of the descriptor flags in gpiolib debugfs
   code
 - simplify for_each_hwgpio_in_range() and for_each_requested_gpio_in_range()
 - add support for three-cell GPIO specifiers in GPIO OF code
 - don't build HTE (hardware timestamp engine) GPIO code with the HTE subsystem
   disabled in Kconfig
 - unduplicate calls to gpiod_direction_input_nonotify()
 - rework the handling of the valid_mask property of GPIO chips: don't allow
   drivers to set it as it should only be handled by GPIO core and start
   actually enforcing it in GPIO core for *all* drivers, not only the ones
   implementing a custom request() callback
 - get the `ngpios` property from the fwnode of the GPIO chip, not its device in
   order to handle multi-bank GPIO chips
 
 Driver improvements:
 - convert a part of the GPIO drivers under drivers/gpio/ to using the new value
   setter callbacks
 - convert several drivers to using automatic lock guards from cleanup.h
 - allow building gpio-bt8xx with COMPILE_TEST=y
 - refactor gpio-74x164 (use devres, cleanup helpers, __counted_by() and bits.h
   macros)
 - refactor gpio-latch (use generic device properties, lock guards and some
   local variables for better readability)
 - refactor gpio-xilinx (improve the usage of the bitmap API)
 - support multiple virtual GPIO controller instances in gpio-virtio
 - allow gpio-regmap to use the standard `ngpios` property from GPIOLIB
 - factor out the common code for synchronous probing of virtual GPIO devices
   into its own library
 - use str_enable_disable(), str_high_low() and other string helpers where
   applicable
 - extend the gpio-mmio abstraction layer to allow calling into the pinctrl
   back-end when setting direction
 - convert gpio-vf610 to using the gpio-mmio library
 - use more devres in gpio-adnp
 - add support for reset-gpios in gpio-pcf857x
 - add support for more models to gpio-loongson-64bit
 
 DT bindings:
 - add new compatibles to gpio-vf610 and gpio-loongson
 - add missing gpio-ranges property to gpio-mvebu
 - add reset-gpios to nxp,pcf8575
 - enable gpio-hog parsing in ast2400-gpio
 
 Misc:
 - coding style improvements
 - kerneldoc fixes
 - includes reordering
 - updates to the TODO list
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEFp3rbAvDxGAT0sefEacuoBRx13IFAmfigbMACgkQEacuoBRx
 13IX7Q/9GohFf6WvjJ4eKUJqmYcQdES/PVPdHUUVpDTMkuljUbkEmDXwu3qjWF+t
 mD7Co2Fk9sndQrmAI2YqWzDObzNHn/TLhDY8WVVzvJdL7kABPchJ6ZfJ9J92SEcU
 3KbaFnih+q6M4EcM3P30pnkYEAdZ6y5mbOAB4zFCqlf3qAUGIaC2phxN767ucu/m
 kQRQInwFs5lt3H/LfJ4lplUmMF4+x64pb19tRvo/vErtuaiU61Vhu4tFbgIe3d2R
 otTqmKuZwTUZCwFsZY1DVIcF00CxxIH5riZ/S+ejkWqETsSZUSbp48q2jpWeKnrG
 n8Op6zaOrXJEDTqBK+Uxp7vvO62GV7KrcI2JvTIHmriiTYxAGhRgGMzd6swZA9Ha
 EvnDwx742iNclB3KbL3eXbGWVxxjkTiDQvEHRHB73121jjM3py+HzSmb5OZdqOMr
 NPDIAZKr5RdXdx6CXTEVDqy4+aubSyPt2AFiD9T3kiwwOeqvBmEGSda6cT89gVEJ
 QccHNWG8/91xargLyllc9eiSiN4SLqj0Pdw9IkjIQi9zoF3te5QSNdezbEPTqhAk
 Ybp4krWJFunfsbERYfZ14H841oJk1a2rAYpEET2EQzhRlGS3zOJWGOjqQPE5g319
 3gjEEQRtm2UMKv+zUsijG4BBBgbOtkWOUihCob05lzsOPw3GwKI=
 =h7Hv
 -----END PGP SIGNATURE-----

Merge tag 'gpio-updates-for-v6.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux

Pull gpio updates from Bartosz Golaszewski:
 "There are no new drivers this time but several changes to the core
  GPIO framework and various driver updates.

  This release cycle, we're starting a relatively straightforward but
  tedious rework of the GPIO consumer API: for historical reasons, the
  gpiod_set_value() variants would return void. Not only that but the
  GPIO provider interface does not even allow drivers to return a value
  to GPIO core. This is because initial GPIO controllers would be MMIO
  based and could not fail. We've had I2C, SPI and USB controllers for
  years too but no way of indicating failures to callers.

  This changes the consumer interface, adds new provider callbacks and
  starts converting the drivers under drivers/gpio/ to using them. Once
  this gets upstream, we'll keep on converting GPIO drivers that live
  elsewhere and once there are no more users of the old callbacks, we'll
  remove them and rename the new ones to the previous name. I imagine
  the last step would happen in one sweeping change like what you did
  for the remove_new() -> remove() renaming.

  We've also addressed an issue where invalid return values from GPIO
  drivers would get propagated to user-space by adding some
  GPIO-core-level sanitization. Again: not a complex change but way
  overdue.

  Other than that: lots of driver and core refactoring, DT-bindings
  changes and some other minor changes like coding style fixes or header
  reordering.

  GPIO core:
   - add sanitization of return values of GPIO provider callbacks so
     that invalid ones don't get propagated to user-space
   - add new variants of the line setter callbacks for GPIO providers
     that return an integer and allow to indicate driver errors to the
     GPIO core
   - change the interface of all gpiod_set_value() variants to return an
     integer thus becoming able to indicate failures in the underlying
     layer to callers
   - drop unneeded ERR_CAST in gpiolib-acpi
   - use for_each_if() where applicable
   - provide gpiod_multi_set_value_cansleep() as a new, simpler
     interface to gpiod_set_array_value_cansleep() and use it across
     several drivers treewide
   - reduce the number of atomic reads of the descriptor flags in
     gpiolib debugfs code
   - simplify for_each_hwgpio_in_range() and
     for_each_requested_gpio_in_range()
   - add support for three-cell GPIO specifiers in GPIO OF code
   - don't build HTE (hardware timestamp engine) GPIO code with the HTE
     subsystem disabled in Kconfig
   - unduplicate calls to gpiod_direction_input_nonotify()
   - rework the handling of the valid_mask property of GPIO chips: don't
     allow drivers to set it as it should only be handled by GPIO core
     and start actually enforcing it in GPIO core for *all* drivers, not
     only the ones implementing a custom request() callback
   - get the `ngpios` property from the fwnode of the GPIO chip, not its
     device in order to handle multi-bank GPIO chips

  Driver improvements:
   - convert a part of the GPIO drivers under drivers/gpio/ to using the
     new value setter callbacks
   - convert several drivers to using automatic lock guards from
     cleanup.h
   - allow building gpio-bt8xx with COMPILE_TEST=y
   - refactor gpio-74x164 (use devres, cleanup helpers, __counted_by()
     and bits.h macros)
   - refactor gpio-latch (use generic device properties, lock guards and
     some local variables for better readability)
   - refactor gpio-xilinx (improve the usage of the bitmap API)
   - support multiple virtual GPIO controller instances in gpio-virtio
   - allow gpio-regmap to use the standard `ngpios` property from
     GPIOLIB
   - factor out the common code for synchronous probing of virtual GPIO
     devices into its own library
   - use str_enable_disable(), str_high_low() and other string helpers
     where applicable
   - extend the gpio-mmio abstraction layer to allow calling into the
     pinctrl back-end when setting direction
   - convert gpio-vf610 to using the gpio-mmio library
   - use more devres in gpio-adnp
   - add support for reset-gpios in gpio-pcf857x
   - add support for more models to gpio-loongson-64bit

  DT bindings:
   - add new compatibles to gpio-vf610 and gpio-loongson
   - add missing gpio-ranges property to gpio-mvebu
   - add reset-gpios to nxp,pcf8575
   - enable gpio-hog parsing in ast2400-gpio

  Misc:
   - coding style improvements
   - kerneldoc fixes
   - includes reordering
   - updates to the TODO list"

* tag 'gpio-updates-for-v6.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: (119 commits)
  gpio: TODO: add an item to track reworking the sysfs interface
  gpio: TODO: add an item to track the conversion to the new value setters
  gpio: TODO: add delimiters between tasks for better readability
  gpio: TODO: remove the pinctrl integration task
  gpio: TODO: remove task duplication
  gpio: TODO: remove the item about the new debugfs interface
  gpio: da9055: use new line value setter callbacks
  gpio: da9052: use new line value setter callbacks
  gpio: cs5535: use new line value setter callbacks
  gpio: crystalcove: use new line value setter callbacks
  gpio: cros-ec: use new line value setter callbacks
  gpio: creg-snps: use new line value setter callbacks
  gpio: cgbc: use new line value setter callbacks
  gpio: bt8xx: use new line value setter callbacks
  gpio: bt8xx: use lock guards
  gpio: bt8xx: allow to build the module with COMPILE_TEST=y
  gpio: bd9571mwv: use new line value setter callbacks
  gpio: bd71828: use new line value setter callbacks
  gpio: bd71815: use new line value setter callbacks
  gpio: bcm-kona: use new line value setter callbacks
  ...
2025-03-25 20:05:43 -07:00
..
blink leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
flash module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
rgb leds: pwm-multicolor: Disable PWM when going to suspend 2024-12-17 15:04:46 +00:00
simple leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
trigger leds: trigger: pattern: Switch to use hrtimer_setup() 2025-02-18 11:19:05 +01:00
Kconfig - Allow struct bin_attribute instances to be placed in read-only memory for enhanced protection. 2025-01-22 09:19:36 -08:00
led-class-flash.c leds: flash: Remove unused local leds.h 2024-10-09 15:37:33 +01:00
led-class-multicolor.c leds: multicolor: Remove unused local leds.h 2024-10-09 15:37:34 +01:00
led-class.c leds: triggers: Constify 'struct bin_attribute' 2025-01-09 11:09:09 +00:00
led-core.c leds: Introduce ordered workqueue for LEDs events instead of system_wq 2024-11-06 08:11:19 +00:00
led-triggers.c leds: triggers: Constify 'struct bin_attribute' 2025-01-09 11:09:09 +00:00
leds-88pm860x.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-acer-a500.c leds: Add driver for Acer Iconia Tab A500 2020-09-26 21:56:42 +02:00
leds-adp5520.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-an30259a.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-apu.c leds: apu: Remove duplicate DMI lookup data 2024-04-12 09:47:15 +01:00
leds-ariel.c leds: Explicitly include correct DT includes 2023-07-28 10:02:32 +01:00
leds-aw200xx.c leds: aw200xx: don't use return with gpiod_set_value() variants 2025-02-26 11:17:39 +01:00
leds-aw2013.c leds: aw2013: Simplify with scoped for each OF child loop 2024-08-22 14:23:03 +01:00
leds-bcm6328.c leds: bcm6328: Replace divide condition with comparison for shift value 2024-10-31 16:22:23 +00:00
leds-bcm6358.c leds: bcm6358: Simplify with scoped for each OF child loop 2024-08-22 14:23:05 +01:00
leds-bd2606mvv.c leds: bd2606mvv: Fix device child node usage in bd2606mvv_probe() 2024-08-01 13:40:07 +01:00
leds-bd2802.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-blinkm.c leds: Add multicolor support to BlinkM LED driver 2024-08-01 13:40:02 +01:00
leds-cht-wcove.c leds: cht-wcove: Use devm_led_classdev_register() to avoid memory leak 2025-01-09 10:57:16 +00:00
leds-clevo-mail.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-cobalt-qube.c
leds-cobalt-raq.c
leds-cpcap.c leds: Explicitly include correct DT includes 2023-07-28 10:02:32 +01:00
leds-cr0014114.c leds: cr0014114: Switch to device_for_each_child_node_scoped() 2024-10-09 15:16:59 +01:00
leds-cros_ec.c leds: Add ChromeOS EC driver 2024-06-21 11:41:46 +01:00
leds-da903x.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-da9052.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-dac124s085.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
leds-el15203000.c leds: el15203000: Switch to device_for_each_child_node_scoped() 2024-10-09 15:17:06 +01:00
leds-expresswire.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
leds-gpio-register.c leds: leds-gpio-register: Reorganize kerneldoc parameter names 2024-10-10 14:42:33 +01:00
leds-gpio.c - Removed unused local header files from various drivers. 2024-11-22 16:25:20 -08:00
leds-hp6xx.c
leds-ip30.c leds: ip30: Convert to devm_platform_ioremap_resource() 2023-07-28 09:26:21 +01:00
leds-ipaq-micro.c
leds-is31fl32xx.c leds: is31fl32xx: Simplify with scoped for each OF child loop 2024-08-22 14:23:06 +01:00
leds-is31fl319x.c leds: is31fl319x: Use device_for_each_child_node_scoped() to access child nodes 2024-08-01 13:40:08 +01:00
leds-lm355x.c leds: Switch i2c drivers back to use .probe() 2023-05-25 12:16:22 +01:00
leds-lm3530.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-lm3532.c leds: lm3532: Switch to device_for_each_child_node_scoped() 2024-10-09 15:17:20 +01:00
leds-lm3533.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-lm3642.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-lm3692x.c leds: lm392x: Convert to use maple tree register cache 2023-11-01 11:29:02 +00:00
leds-lm3697.c leds: lm3697: Switch to device_for_each_child_node_scoped() 2024-10-09 15:17:27 +01:00
leds-lm36274.c leds: lm36274: Add missed property.h 2021-05-30 23:03:48 +02:00
leds-locomo.c ARM: pxa: split up mach/hardware.h 2022-04-19 16:27:05 +02:00
leds-lp50xx.c leds: lp50xx: Remove unused local leds.h 2024-10-09 15:37:34 +01:00
leds-lp55xx-common.c leds: lp55xx: Remove redundant test for invalid channel number 2024-10-31 15:01:01 +00:00
leds-lp55xx-common.h leds: lp55xx: Use devm_clk_get_enabled() helpers 2024-08-22 14:48:24 +01:00
leds-lp3944.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-lp3952.c leds: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-06-21 11:57:11 +01:00
leds-lp5521.c leds: leds-lp55xx: Convert mutex lock/unlock to guard API 2024-07-11 12:46:25 +01:00
leds-lp5523.c leds: leds-lp55xx: Convert mutex lock/unlock to guard API 2024-07-11 12:46:25 +01:00
leds-lp5562.c leds: lp5562: Add multicolor brightness control 2024-10-15 12:58:41 +01:00
leds-lp5569.c leds: leds-lp5569: Enable chip after chip configuration 2024-07-12 08:32:37 +01:00
leds-lp8501.c leds: leds-lp55xx: Drop deprecated defines 2024-06-26 17:08:31 +01:00
leds-lp8788.c
leds-lp8860.c leds: lp8860: Write full EEPROM, not only half of it 2024-12-11 12:18:48 +00:00
leds-lp8864.c leds: lp8864: Add support for Texas Instruments LP8864, LP8864S, LP8866 LED-backlights 2025-01-09 10:43:34 +00:00
leds-lt3593.c leds: lt3593: Put fwnode in any case during ->probe() 2021-08-03 23:49:31 +02:00
leds-max5970.c leds: max5970: Fix unreleased fwnode_handle in probe function 2024-11-06 08:13:14 +00:00
leds-max8997.c leds: max8997: Don't error if there is no pdata 2022-10-22 11:55:03 +02:00
leds-max77650.c leds: max77650: Switch to device_for_each_child_node_scoped() 2024-10-09 15:18:29 +01:00
leds-mc13783.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-menf21bmc.c
leds-mlxcpld.c leds: leds-mlxcpld: Fix struct mlxcpld_led_priv member name 2024-03-07 08:48:16 +00:00
leds-mlxreg.c leds: mlxreg: Use devm_mutex_init() for mutex initialization 2024-04-11 17:35:18 +01:00
leds-mt6323.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-net48xx.c
leds-netxbig.c leds: netxbig: Fix an OF node reference leak in netxbig_leds_get_of_pdata() 2024-12-17 15:01:11 +00:00
leds-nic78bx.c leds: nic78bx: Use devm API to cleanup module's resources 2024-04-11 17:35:13 +01:00
leds-ns2.c leds: ns2: Switch to device_for_each_child_node_scoped() 2024-10-09 15:18:37 +01:00
leds-ot200.c
leds-pca955x.c leds: pca955x: Cleanup OF/ID table terminators 2023-11-01 11:28:55 +00:00
leds-pca963x.c leds: pca963x: Switch to device_for_each_child_node_scoped() 2024-10-09 15:18:44 +01:00
leds-pca995x.c leds: pca995x: Fix device child node usage in pca995x_probe() 2024-08-16 17:01:19 +01:00
leds-pca9532.c leds: pca9532: Remove irrelevant blink configuration error message 2024-08-30 09:01:08 +01:00
leds-pm8058.c leds: Explicitly include correct DT includes 2023-07-28 10:02:32 +01:00
leds-powernv.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-pwm.c leds: pwm: Add optional DT property default-brightness 2024-11-12 12:14:00 +00:00
leds-qnap-mcu.c leds: Add driver for LEDs from qnap-mcu devices 2024-12-17 13:14:38 +00:00
leds-rb532.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-regulator.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-sc27xx-bltc.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-spi-byte.c leds: spi-byte: Move OF ID table closer to their user 2024-06-26 16:56:07 +01:00
leds-ss4200.c leds: ss4200: Fix the wrong format specifier for 'blinking' 2024-11-12 14:39:26 +00:00
leds-st1202.c leds: leds-st1202: Fix NULL pointer access on race condition 2025-02-28 09:18:37 +00:00
leds-sun50i-a100.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-sunfire.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-syscon.c leds: syscon: Support 'reg' in addition to 'offset' for register address 2023-12-13 11:28:26 +00:00
leds-tca6507.c leds: tca6507: Switch to device_for_each_child_node_scoped() 2024-10-09 15:19:09 +01:00
leds-ti-lmu-common.c leds: Explicitly include correct DT includes 2023-07-28 10:02:32 +01:00
leds-tlc591xx.c leds: tlc591xx: Replace of_node_put to __free 2024-06-26 16:56:09 +01:00
leds-tps6105x.c leds: tps6105x: add driver for MFD chip LED mode 2019-12-21 20:10:02 +01:00
leds-turris-omnia.c Driver core and debugfs updates 2025-01-28 12:25:12 -08:00
leds-upboard.c leds: Add AAEON UP board LED driver 2024-12-17 13:17:55 +00:00
leds-wm831x-status.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-wm8350.c leds: Switch back to struct platform_driver::remove() 2024-10-15 09:58:10 +01:00
leds-wrap.c
leds.h leds: triggers: Constify 'struct bin_attribute' 2025-01-09 11:09:09 +00:00
Makefile - Allow struct bin_attribute instances to be placed in read-only memory for enhanced protection. 2025-01-22 09:19:36 -08:00
TODO leds: TODO: Add documentation about possible subsystem improvements 2020-09-30 19:15:33 +02:00
uleds.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00