1. 26 Jun, 2024 15 commits
    • Hans de Goede's avatar
      leds: trigger: input-events: Rewrite to fix a serious locking issue · a031c814
      Hans de Goede authored
      The input subsystem registers LEDs with default triggers while holding
      the input_lock and input_register_handler() takes the input_lock this
      means that a triggers activate method cannot directly call
      input_register_handler() as the old ledtrig-input-events code is doing.
      
      The initial implementation of the input-events trigger mainly did not use
      the simple LED trigger mechanism because that mechanism had an issue with
      the initial state of a newly activated LED not matching the last
      led_trigger_event() call for the trigger. This issue has been fixed in
      commit 822c91e7 ("leds: trigger: Store brightness set by
      led_trigger_event()").
      
      Rewrite the "input-events" trigger to use the simple LED trigger mechanism,
      registering a single input_handler at module_init() time and using
      led_trigger_event() to set the brightness for all LEDs controlled by this
      trigger.
      
      Compared to the old code this looses the ability for the user to configure
      a different brightness for the on state then LED_FULL, this is standard for
      simple LED triggers and since this trigger is only in for-leds-next ATM
      losing that functionality is not a regression.
      
      This also changes the configurability of the LED off timeout from a per
      LED setting to a global setting (runtime modifiable module-parameter).
      
      Switching to registering a single input_handler at module_init() time fixes
      the following locking issue reported by lockdep:
      
      [ 2840.220145] usb 1-1.3: new low-speed USB device number 3 using xhci_hcd
      [ 2840.307172] usb 1-1.3: New USB device found, idVendor=0603, idProduct=0002, bcdDevice= 2.21
      [ 2840.307375] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
      [ 2840.307423] usb 1-1.3: Product: USB Composite Device
      [ 2840.307456] usb 1-1.3: Manufacturer: SINO WEALTH
      [ 2840.333985] input: SINO WEALTH USB Composite Device as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.3/1-1.3:1.0/0003:0603:0002.0007/input/input19
      
      [ 2840.386545] ======================================================
      [ 2840.386549] WARNING: possible circular locking dependency detected
      [ 2840.386554] 6.10.0-rc1+ #97 Tainted: G         C  E
      [ 2840.386558] ------------------------------------------------------
      [ 2840.386562] kworker/1:1/52 is trying to acquire lock:
      [ 2840.386566] ffff98fcf1629300 (&led_cdev->led_access){+.+.}-{3:3}, at: led_classdev_register_ext+0x1c6/0x380
      [ 2840.386590]
                     but task is already holding lock:
      [ 2840.386593] ffffffff88130cc8 (input_mutex){+.+.}-{3:3}, at: input_register_device.cold+0x47/0x150
      [ 2840.386608]
                     which lock already depends on the new lock.
      
      [ 2840.386611]
                     the existing dependency chain (in reverse order) is:
      [ 2840.386615]
                     -> #3 (input_mutex){+.+.}-{3:3}:
      [ 2840.386624]        __mutex_lock+0x8c/0xc10
      [ 2840.386634]        input_register_handler+0x1c/0xf0
      [ 2840.386641]        0xffffffffc142c437
      [ 2840.386655]        led_trigger_set+0x1e1/0x2e0
      [ 2840.386661]        led_trigger_register+0x170/0x1b0
      [ 2840.386666]        do_one_initcall+0x5e/0x3a0
      [ 2840.386675]        do_init_module+0x60/0x220
      [ 2840.386683]        __do_sys_init_module+0x15f/0x190
      [ 2840.386689]        do_syscall_64+0x93/0x180
      [ 2840.386696]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
      [ 2840.386705]
                     -> #2 (&led_cdev->trigger_lock){+.+.}-{3:3}:
      [ 2840.386714]        down_write+0x3b/0xd0
      [ 2840.386720]        led_trigger_register+0x12c/0x1b0
      [ 2840.386725]        rfkill_register+0xec/0x340 [rfkill]
      [ 2840.386739]        wiphy_register+0x82a/0x930 [cfg80211]
      [ 2840.386907]        brcmf_cfg80211_attach+0xcbd/0x1430 [brcmfmac]
      [ 2840.386952]        brcmf_attach+0x1ba/0x4c0 [brcmfmac]
      [ 2840.386991]        brcmf_pcie_setup+0x899/0xc70 [brcmfmac]
      [ 2840.387030]        brcmf_fw_request_done+0x13b/0x180 [brcmfmac]
      [ 2840.387070]        request_firmware_work_func+0x3b/0x70
      [ 2840.387078]        process_one_work+0x21a/0x590
      [ 2840.387085]        worker_thread+0x1d1/0x3e0
      [ 2840.387090]        kthread+0xee/0x120
      [ 2840.387096]        ret_from_fork+0x30/0x50
      [ 2840.387105]        ret_from_fork_asm+0x1a/0x30
      [ 2840.387112]
                     -> #1 (leds_list_lock){++++}-{3:3}:
      [ 2840.387123]        down_write+0x3b/0xd0
      [ 2840.387129]        led_classdev_register_ext+0x29e/0x380
      [ 2840.387134]        0xffffffffc0e6b74c
      [ 2840.387143]        platform_probe+0x40/0xa0
      [ 2840.387151]        really_probe+0xde/0x340
      [ 2840.387157]        __driver_probe_device+0x78/0x110
      [ 2840.387162]        driver_probe_device+0x1f/0xa0
      [ 2840.387168]        __driver_attach+0xba/0x1c0
      [ 2840.387173]        bus_for_each_dev+0x6b/0xb0
      [ 2840.387180]        bus_add_driver+0x111/0x1f0
      [ 2840.387185]        driver_register+0x6e/0xc0
      [ 2840.387191]        do_one_initcall+0x5e/0x3a0
      [ 2840.387197]        do_init_module+0x60/0x220
      [ 2840.387204]        __do_sys_init_module+0x15f/0x190
      [ 2840.387210]        do_syscall_64+0x93/0x180
      [ 2840.387217]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
      [ 2840.387224]
                     -> #0 (&led_cdev->led_access){+.+.}-{3:3}:
      [ 2840.387233]        __lock_acquire+0x11c6/0x1f20
      [ 2840.387239]        lock_acquire+0xc8/0x2b0
      [ 2840.387244]        __mutex_lock+0x8c/0xc10
      [ 2840.387251]        led_classdev_register_ext+0x1c6/0x380
      [ 2840.387256]        input_leds_connect+0x139/0x260
      [ 2840.387262]        input_attach_handler.isra.0+0x75/0x90
      [ 2840.387268]        input_register_device.cold+0xa1/0x150
      [ 2840.387274]        hidinput_connect+0x848/0xb00
      [ 2840.387280]        hid_connect+0x567/0x5a0
      [ 2840.387288]        hid_hw_start+0x3f/0x60
      [ 2840.387294]        hid_device_probe+0x10d/0x190
      [ 2840.387298]        really_probe+0xde/0x340
      [ 2840.387304]        __driver_probe_device+0x78/0x110
      [ 2840.387309]        driver_probe_device+0x1f/0xa0
      [ 2840.387314]        __device_attach_driver+0x85/0x110
      [ 2840.387320]        bus_for_each_drv+0x78/0xc0
      [ 2840.387326]        __device_attach+0xb0/0x1b0
      [ 2840.387332]        bus_probe_device+0x94/0xb0
      [ 2840.387337]        device_add+0x64a/0x860
      [ 2840.387343]        hid_add_device+0xe5/0x240
      [ 2840.387349]        usbhid_probe+0x4bb/0x600
      [ 2840.387356]        usb_probe_interface+0xea/0x2b0
      [ 2840.387363]        really_probe+0xde/0x340
      [ 2840.387368]        __driver_probe_device+0x78/0x110
      [ 2840.387373]        driver_probe_device+0x1f/0xa0
      [ 2840.387378]        __device_attach_driver+0x85/0x110
      [ 2840.387383]        bus_for_each_drv+0x78/0xc0
      [ 2840.387390]        __device_attach+0xb0/0x1b0
      [ 2840.387395]        bus_probe_device+0x94/0xb0
      [ 2840.387400]        device_add+0x64a/0x860
      [ 2840.387405]        usb_set_configuration+0x5e8/0x880
      [ 2840.387411]        usb_generic_driver_probe+0x3e/0x60
      [ 2840.387418]        usb_probe_device+0x3d/0x120
      [ 2840.387423]        really_probe+0xde/0x340
      [ 2840.387428]        __driver_probe_device+0x78/0x110
      [ 2840.387434]        driver_probe_device+0x1f/0xa0
      [ 2840.387439]        __device_attach_driver+0x85/0x110
      [ 2840.387444]        bus_for_each_drv+0x78/0xc0
      [ 2840.387451]        __device_attach+0xb0/0x1b0
      [ 2840.387456]        bus_probe_device+0x94/0xb0
      [ 2840.387461]        device_add+0x64a/0x860
      [ 2840.387466]        usb_new_device.cold+0x141/0x38f
      [ 2840.387473]        hub_event+0x1166/0x1980
      [ 2840.387479]        process_one_work+0x21a/0x590
      [ 2840.387484]        worker_thread+0x1d1/0x3e0
      [ 2840.387488]        kthread+0xee/0x120
      [ 2840.387493]        ret_from_fork+0x30/0x50
      [ 2840.387500]        ret_from_fork_asm+0x1a/0x30
      [ 2840.387506]
                     other info that might help us debug this:
      
      [ 2840.387509] Chain exists of:
                       &led_cdev->led_access --> &led_cdev->trigger_lock --> input_mutex
      
      [ 2840.387520]  Possible unsafe locking scenario:
      
      [ 2840.387523]        CPU0                    CPU1
      [ 2840.387526]        ----                    ----
      [ 2840.387529]   lock(input_mutex);
      [ 2840.387534]                                lock(&led_cdev->trigger_lock);
      [ 2840.387540]                                lock(input_mutex);
      [ 2840.387545]   lock(&led_cdev->led_access);
      [ 2840.387550]
                      *** DEADLOCK ***
      
      [ 2840.387552] 7 locks held by kworker/1:1/52:
      [ 2840.387557]  #0: ffff98fcc1d07148 ((wq_completion)usb_hub_wq){+.+.}-{0:0}, at: process_one_work+0x4af/0x590
      [ 2840.387570]  #1: ffffb67e00213e60 ((work_completion)(&hub->events)){+.+.}-{0:0}, at: process_one_work+0x1d5/0x590
      [ 2840.387583]  #2: ffff98fcc6582190 (&dev->mutex){....}-{3:3}, at: hub_event+0x57/0x1980
      [ 2840.387596]  #3: ffff98fccb3c6990 (&dev->mutex){....}-{3:3}, at: __device_attach+0x26/0x1b0
      [ 2840.387610]  #4: ffff98fcc5260960 (&dev->mutex){....}-{3:3}, at: __device_attach+0x26/0x1b0
      [ 2840.387622]  #5: ffff98fce3999a20 (&dev->mutex){....}-{3:3}, at: __device_attach+0x26/0x1b0
      [ 2840.387635]  #6: ffffffff88130cc8 (input_mutex){+.+.}-{3:3}, at: input_register_device.cold+0x47/0x150
      [ 2840.387649]
                     stack backtrace:
      [ 2840.387653] CPU: 1 PID: 52 Comm: kworker/1:1 Tainted: G         C  E      6.10.0-rc1+ #97
      [ 2840.387659] Hardware name: Xiaomi Inc Mipad2/Mipad, BIOS MIPad-P4.X64.0043.R03.1603071414 03/07/2016
      [ 2840.387665] Workqueue: usb_hub_wq hub_event
      [ 2840.387674] Call Trace:
      [ 2840.387681]  <TASK>
      [ 2840.387689]  dump_stack_lvl+0x68/0x90
      [ 2840.387700]  check_noncircular+0x10d/0x120
      [ 2840.387710]  ? register_lock_class+0x38/0x480
      [ 2840.387717]  ? check_noncircular+0x74/0x120
      [ 2840.387727]  __lock_acquire+0x11c6/0x1f20
      [ 2840.387736]  lock_acquire+0xc8/0x2b0
      [ 2840.387743]  ? led_classdev_register_ext+0x1c6/0x380
      [ 2840.387753]  __mutex_lock+0x8c/0xc10
      [ 2840.387760]  ? led_classdev_register_ext+0x1c6/0x380
      [ 2840.387766]  ? _raw_spin_unlock_irqrestore+0x35/0x60
      [ 2840.387773]  ? klist_next+0x158/0x160
      [ 2840.387781]  ? led_classdev_register_ext+0x1c6/0x380
      [ 2840.387787]  ? lockdep_init_map_type+0x58/0x250
      [ 2840.387796]  ? led_classdev_register_ext+0x1c6/0x380
      [ 2840.387802]  led_classdev_register_ext+0x1c6/0x380
      [ 2840.387810]  ? kvasprintf+0x70/0xb0
      [ 2840.387820]  ? kasprintf+0x3e/0x50
      [ 2840.387829]  input_leds_connect+0x139/0x260
      [ 2840.387838]  input_attach_handler.isra.0+0x75/0x90
      [ 2840.387846]  input_register_device.cold+0xa1/0x150
      [ 2840.387854]  hidinput_connect+0x848/0xb00
      [ 2840.387862]  ? usbhid_start+0x45b/0x7b0
      [ 2840.387870]  hid_connect+0x567/0x5a0
      [ 2840.387878]  ? __mutex_unlock_slowpath+0x2d/0x260
      [ 2840.387891]  hid_hw_start+0x3f/0x60
      [ 2840.387899]  hid_device_probe+0x10d/0x190
      [ 2840.387906]  ? __pfx___device_attach_driver+0x10/0x10
      [ 2840.387913]  really_probe+0xde/0x340
      [ 2840.387919]  ? pm_runtime_barrier+0x50/0x90
      [ 2840.387927]  __driver_probe_device+0x78/0x110
      [ 2840.387934]  driver_probe_device+0x1f/0xa0
      [ 2840.387941]  __device_attach_driver+0x85/0x110
      [ 2840.387949]  bus_for_each_drv+0x78/0xc0
      [ 2840.387959]  __device_attach+0xb0/0x1b0
      [ 2840.387967]  bus_probe_device+0x94/0xb0
      [ 2840.387974]  device_add+0x64a/0x860
      [ 2840.387982]  ? __debugfs_create_file+0x14a/0x1c0
      [ 2840.387993]  hid_add_device+0xe5/0x240
      [ 2840.388002]  usbhid_probe+0x4bb/0x600
      [ 2840.388013]  usb_probe_interface+0xea/0x2b0
      [ 2840.388021]  ? __pfx___device_attach_driver+0x10/0x10
      [ 2840.388028]  really_probe+0xde/0x340
      [ 2840.388034]  ? pm_runtime_barrier+0x50/0x90
      [ 2840.388040]  __driver_probe_device+0x78/0x110
      [ 2840.388048]  driver_probe_device+0x1f/0xa0
      [ 2840.388055]  __device_attach_driver+0x85/0x110
      [ 2840.388062]  bus_for_each_drv+0x78/0xc0
      [ 2840.388071]  __device_attach+0xb0/0x1b0
      [ 2840.388079]  bus_probe_device+0x94/0xb0
      [ 2840.388086]  device_add+0x64a/0x860
      [ 2840.388094]  ? __mutex_unlock_slowpath+0x2d/0x260
      [ 2840.388103]  usb_set_configuration+0x5e8/0x880
      [ 2840.388114]  ? __pfx___device_attach_driver+0x10/0x10
      [ 2840.388121]  usb_generic_driver_probe+0x3e/0x60
      [ 2840.388129]  usb_probe_device+0x3d/0x120
      [ 2840.388137]  really_probe+0xde/0x340
      [ 2840.388142]  ? pm_runtime_barrier+0x50/0x90
      [ 2840.388149]  __driver_probe_device+0x78/0x110
      [ 2840.388156]  driver_probe_device+0x1f/0xa0
      [ 2840.388163]  __device_attach_driver+0x85/0x110
      [ 2840.388171]  bus_for_each_drv+0x78/0xc0
      [ 2840.388180]  __device_attach+0xb0/0x1b0
      [ 2840.388188]  bus_probe_device+0x94/0xb0
      [ 2840.388195]  device_add+0x64a/0x860
      [ 2840.388202]  ? lockdep_hardirqs_on+0x78/0x100
      [ 2840.388210]  ? _raw_spin_unlock_irqrestore+0x35/0x60
      [ 2840.388219]  usb_new_device.cold+0x141/0x38f
      [ 2840.388227]  hub_event+0x1166/0x1980
      [ 2840.388242]  process_one_work+0x21a/0x590
      [ 2840.388249]  ? move_linked_works+0x70/0xa0
      [ 2840.388260]  worker_thread+0x1d1/0x3e0
      [ 2840.388268]  ? __pfx_worker_thread+0x10/0x10
      [ 2840.388273]  kthread+0xee/0x120
      [ 2840.388279]  ? __pfx_kthread+0x10/0x10
      [ 2840.388287]  ret_from_fork+0x30/0x50
      [ 2840.388294]  ? __pfx_kthread+0x10/0x10
      [ 2840.388301]  ret_from_fork_asm+0x1a/0x30
      [ 2840.388315]  </TASK>
      [ 2840.415630] hid-generic 0003:0603:0002.0007: input,hidraw6: USB HID v1.10 Keyboard [SINO WEALTH USB Composite Device] on usb-0000:00:14.0-1.3/input0
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20240602160203.27339-2-hdegoede@redhat.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      a031c814
    • MarileneGarcia's avatar
      leds: powernv: Replace of_node_put to __free · d3562573
      MarileneGarcia authored
      Use __free for device_node values, and thus drop calls to
      of_node_put.
      
      The variable attribute __free adds a scope based cleanup to
      the device node. The goal is to reduce memory management issues
      in the kernel code.
      
      The of_node_put calls were removed, and the
      for_each_available_child_of_node was replaced to the equivalent
      for_each_available_child_of_node_scoped which use the __free.
      Suggested-by: default avatarJulia Lawall <julia.lawall@inria.fr>
      Signed-off-by: default avatarMarileneGarcia <marilene.agarcia@gmail.com>
      Link: https://lore.kernel.org/r/20240601031713.1307859-1-marilene.agarcia@gmail.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      d3562573
    • Lee Jones's avatar
      MAINTAINERS: Update LED's active maintainer tree · e786348b
      Lee Jones authored
      Pavel's repo hasn't been used actively for quite some time.
      
      Let's make it official.
      
      Cc: Pavel Machek <pavel@ucw.cz>
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      e786348b
    • Javier Carrasco's avatar
      leds: mt6360: Fix memory leak in mt6360_init_isnk_properties() · e41d574b
      Javier Carrasco authored
      The fwnode_for_each_child_node() loop requires manual intervention to
      decrement the child refcount in case of an early return.
      
      Add the missing calls to fwnode_handle_put(child) to avoid memory leaks
      in the error paths.
      
      Cc: stable@vger.kernel.org
      Fixes: 679f8652 ("leds: Add mt6360 driver")
      Signed-off-by: default avatarJavier Carrasco <javier.carrasco.cruz@gmail.com>
      Acked-by: default avatarPavel Machek <pavel@ucw.cz>
      Link: https://lore.kernel.org/r/20240611-leds-mt6360-memleak-v1-1-93642eb5011e@gmail.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      e41d574b
    • Marilene A Garcia's avatar
      leds: tlc591xx: Replace of_node_put to __free · 8d89afc6
      Marilene A Garcia authored
      Use __free() for device_node values, and thus drop calls to
      of_node_put().
      
      The variable attribute __free() adds a scope based cleanup to
      the device node. The goal is to reduce memory management issues
      in the kernel code.
      
      The for_each_available_child_of_node() was replaced to the equivalent
      for_each_available_child_of_node_scoped() which uses the __free().
      Suggested-by: default avatarJulia Lawall <julia.lawall@inria.fr>
      Signed-off-by: default avatarMarilene A Garcia <marilene.agarcia@gmail.com>
      Link: https://lore.kernel.org/r/20240611001740.10490-1-marilene.agarcia@gmail.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      8d89afc6
    • Anjelique Melendez's avatar
      leds: rgb: leds-qcom-lpg: Add PPG check for setting/clearing PBS triggers · 7e776e21
      Anjelique Melendez authored
      Currently, all LED LPG devices will call lpg_{set,clear}_pbs_trigger()
      when setting brightness regardless of if they support PPG and have PBS
      triggers. Check if device supports PPG before setting/clearing PBS
      triggers.
      
      Fixes: 6ab1f766 ("leds: rgb: leds-qcom-lpg: Add support for PPG through single SDAM")
      Fixes: 5e9ff626 ("leds: rgb: leds-qcom-lpg: Include support for PPG with dedicated LUT SDAM")
      Signed-off-by: default avatarAnjelique Melendez <quic_amelende@quicinc.com>
      Reviewed-by: default avatarBjorn Andersson <andersson@kernel.org>
      Link: https://lore.kernel.org/r/20240607005250.4047135-1-quic_amelende@quicinc.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      7e776e21
    • Thomas Weißschuh's avatar
      leds: triggers: Flush pending brightness before activating trigger · ab477b76
      Thomas Weißschuh authored
      The race fixed in timer_trig_activate() between a blocking
      set_brightness() call and trigger->activate() can affect any trigger.
      So move the call to flush_work() into led_trigger_set() where it can
      avoid the race for all triggers.
      
      Fixes: 0db37915 ("leds: avoid races with workqueue")
      Fixes: 8c0f693c ("leds: avoid flush_work in atomic context")
      Cc: stable@vger.kernel.org
      Tested-by: default avatarDustin L. Howett <dustin@howett.net>
      Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
      Link: https://lore.kernel.org/r/20240613-led-trigger-flush-v2-1-f4f970799d77@weissschuh.netSigned-off-by: default avatarLee Jones <lee@kernel.org>
      ab477b76
    • Andy Shevchenko's avatar
      leds: spi-byte: Move OF ID table closer to their user · 25458b2a
      Andy Shevchenko authored
      There is no code that uses ID table directly, except the
      struct device_driver at the end of the file. Hence, move
      table closer to its user. It's always possible to access
      them via a pointer.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://lore.kernel.org/r/20240606173037.3091598-7-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      25458b2a
    • Andy Shevchenko's avatar
      leds: spi-byte: Use devm_mutex_init() for mutex initialization · 133f941f
      Andy Shevchenko authored
      In this driver LEDs are registered using devm_led_classdev_register()
      so they are automatically unregistered after module's remove() is done.
      led_classdev_unregister() calls module's led_set_brightness() to turn off
      the LEDs and that callback uses mutex which was destroyed already
      in module's remove() so use devm API instead.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://lore.kernel.org/r/20240606173037.3091598-6-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      133f941f
    • Andy Shevchenko's avatar
      leds: spi-byte: Utilise temporary variable for struct device · 9ed388d1
      Andy Shevchenko authored
      We have a temporary variable to keep a pointer to struct device.
      Utilise it where it makes sense.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://lore.kernel.org/r/20240606173037.3091598-5-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      9ed388d1
    • Andy Shevchenko's avatar
      leds: spi-byte: Make use of device properties · 67b66160
      Andy Shevchenko authored
      Convert the module to be property provider agnostic and allow
      it to be used on non-OF platforms.
      
      Add mod_devicetable.h include.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://lore.kernel.org/r/20240606173037.3091598-4-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      67b66160
    • Andy Shevchenko's avatar
      leds: spi-byte: Get rid of custom led_init_default_state_get() · 4b268456
      Andy Shevchenko authored
      LED core provides a helper to parse default state from firmware node.
      Use it instead of custom implementation.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Link: https://lore.kernel.org/r/20240606173037.3091598-3-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
      4b268456
    • Andy Shevchenko's avatar
    • Markus Elfring's avatar
      leds: ncp5623: Use common error handling code in ncp5623_probe() · e1524a62
      Markus Elfring authored
      Add a label so that a bit of exception handling can be better reused
      at the end of this function implementation.
      Signed-off-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
      Link: https://lore.kernel.org/r/5faec5de-fc36-4b38-abcb-c61954a824cd@web.deSigned-off-by: default avatarLee Jones <lee@kernel.org>
      e1524a62
    • Lee Jones's avatar
      leds: core: Omit set_brightness error message for a LED supporting hw trigger only · d33d1214
      Lee Jones authored
      If both set_brightness functions return -ENOTSUPP, then the LED doesn't
      support setting a fixed brightness value, and the error message isn't
      helpful. This can be the case e.g. for LEDs supporting a specific hw
      trigger only.
      
      Pinched the subject line and commit message from Heiner:
      Link: https://lore.kernel.org/all/44177e37-9512-4044-8991-bb23b184bf37@gmail.com/
      
      Reworked the function to provide Heiner's required semantics whilst
      simultaneously increasing readability and flow.
      
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: linux-leds@vger.kernel.org
      Suggested-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Reviewed-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarLee Jones <lee@kernel.org>
      d33d1214
  2. 21 Jun, 2024 16 commits
  3. 14 Jun, 2024 4 commits
  4. 31 May, 2024 5 commits