leds: bcm63138: Use scopes and guards

Use scoped helpers and guards to handle DT node iterations
and spinlocks. This cuts some lines of code and eliminates
common mistakes (such as the missing of_node_put()).

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20241010-bcm63138-leds-v4-2-cdb80780a555@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Linus Walleij 2024-10-10 16:10:51 +02:00 committed by Lee Jones
parent d19261ffd0
commit 61574073e1

View File

@ -2,6 +2,7 @@
/* /*
* Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl>
*/ */
#include <linux/cleanup.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/leds.h> #include <linux/leds.h>
@ -125,17 +126,14 @@ static void bcm63138_leds_brightness_set(struct led_classdev *led_cdev,
{ {
struct bcm63138_led *led = container_of(led_cdev, struct bcm63138_led, cdev); struct bcm63138_led *led = container_of(led_cdev, struct bcm63138_led, cdev);
struct bcm63138_leds *leds = led->leds; struct bcm63138_leds *leds = led->leds;
unsigned long flags;
spin_lock_irqsave(&leds->lock, flags); guard(spinlock_irqsave)(&leds->lock);
bcm63138_leds_enable_led(leds, led, value); bcm63138_leds_enable_led(leds, led, value);
if (!value) if (!value)
bcm63138_leds_set_flash_rate(leds, led, 0); bcm63138_leds_set_flash_rate(leds, led, 0);
else else
bcm63138_leds_set_bright(leds, led, value); bcm63138_leds_set_bright(leds, led, value);
spin_unlock_irqrestore(&leds->lock, flags);
} }
static int bcm63138_leds_blink_set(struct led_classdev *led_cdev, static int bcm63138_leds_blink_set(struct led_classdev *led_cdev,
@ -144,7 +142,6 @@ static int bcm63138_leds_blink_set(struct led_classdev *led_cdev,
{ {
struct bcm63138_led *led = container_of(led_cdev, struct bcm63138_led, cdev); struct bcm63138_led *led = container_of(led_cdev, struct bcm63138_led, cdev);
struct bcm63138_leds *leds = led->leds; struct bcm63138_leds *leds = led->leds;
unsigned long flags;
u8 value; u8 value;
if (!*delay_on && !*delay_off) { if (!*delay_on && !*delay_off) {
@ -179,13 +176,11 @@ static int bcm63138_leds_blink_set(struct led_classdev *led_cdev,
return -EINVAL; return -EINVAL;
} }
spin_lock_irqsave(&leds->lock, flags); guard(spinlock_irqsave)(&leds->lock);
bcm63138_leds_enable_led(leds, led, BCM63138_MAX_BRIGHTNESS); bcm63138_leds_enable_led(leds, led, BCM63138_MAX_BRIGHTNESS);
bcm63138_leds_set_flash_rate(leds, led, value); bcm63138_leds_set_flash_rate(leds, led, value);
spin_unlock_irqrestore(&leds->lock, flags);
return 0; return 0;
} }
@ -259,7 +254,6 @@ static int bcm63138_leds_probe(struct platform_device *pdev)
struct device_node *np = dev_of_node(&pdev->dev); struct device_node *np = dev_of_node(&pdev->dev);
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct bcm63138_leds *leds; struct bcm63138_leds *leds;
struct device_node *child;
leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL);
if (!leds) if (!leds)
@ -280,7 +274,7 @@ static int bcm63138_leds_probe(struct platform_device *pdev)
bcm63138_leds_write(leds, BCM63138_SERIAL_LED_POLARITY, 0); bcm63138_leds_write(leds, BCM63138_SERIAL_LED_POLARITY, 0);
bcm63138_leds_write(leds, BCM63138_PARALLEL_LED_POLARITY, 0); bcm63138_leds_write(leds, BCM63138_PARALLEL_LED_POLARITY, 0);
for_each_available_child_of_node(np, child) { for_each_available_child_of_node_scoped(np, child) {
bcm63138_leds_create_led(leds, child); bcm63138_leds_create_led(leds, child);
} }