wifi: mt76: add ability to explicitly forbid LED registration with DT
authorRyder Lee <ryder.lee@mediatek.com>
Thu, 24 Aug 2023 17:08:37 +0000 (01:08 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 7 Dec 2023 17:50:19 +0000 (18:50 +0100)
Add ability to explicitly forbid LED registration using DT led\status = "disabled".

Tested-by: Alexey D. Filimonov <alexey@filimonic.net>
Signed-off-by: Alexey D. Filimonov <alexey@filimonic.net>
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mac80211.c

index 51a7671..81746d4 100644 (file)
@@ -197,10 +197,33 @@ static int mt76_led_init(struct mt76_phy *phy)
 {
        struct mt76_dev *dev = phy->dev;
        struct ieee80211_hw *hw = phy->hw;
+       struct device_node *np = dev->dev->of_node;
 
        if (!phy->leds.cdev.brightness_set && !phy->leds.cdev.blink_set)
                return 0;
 
+       np = of_get_child_by_name(np, "led");
+       if (np) {
+               if (!of_device_is_available(np)) {
+                       of_node_put(np);
+                       dev_info(dev->dev,
+                               "led registration was explicitly disabled by dts\n");
+                       return 0;
+               }
+
+               if (phy == &dev->phy) {
+                       int led_pin;
+
+                       if (!of_property_read_u32(np, "led-sources", &led_pin))
+                               phy->leds.pin = led_pin;
+
+                       phy->leds.al =
+                               of_property_read_bool(np, "led-active-low");
+               }
+
+               of_node_put(np);
+       }
+
        snprintf(phy->leds.name, sizeof(phy->leds.name), "mt76-%s",
                 wiphy_name(hw->wiphy));
 
@@ -211,20 +234,8 @@ static int mt76_led_init(struct mt76_phy *phy)
                                        mt76_tpt_blink,
                                        ARRAY_SIZE(mt76_tpt_blink));
 
-       if (phy == &dev->phy) {
-               struct device_node *np = dev->dev->of_node;
-
-               np = of_get_child_by_name(np, "led");
-               if (np) {
-                       int led_pin;
-
-                       if (!of_property_read_u32(np, "led-sources", &led_pin))
-                               phy->leds.pin = led_pin;
-                       phy->leds.al = of_property_read_bool(np,
-                                                            "led-active-low");
-                       of_node_put(np);
-               }
-       }
+       dev_info(dev->dev,
+               "registering led '%s'\n", phy->leds.name);
 
        return led_classdev_register(dev->dev, &phy->leds.cdev);
 }