]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: rfkill: gpio: add DT support
authorPhilipp Zabel <p.zabel@pengutronix.de>
Sun, 21 Sep 2025 23:46:29 +0000 (19:46 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Oct 2025 11:35:43 +0000 (13:35 +0200)
[ Upstream commit d64c732dfc9edcd57feb693c23162117737e426b ]

Allow probing rfkill-gpio via device tree. This hooks up the already
existing support that was started in commit 262c91ee5e52 ("net:
rfkill: gpio: prepare for DT and ACPI support") via the "rfkill-gpio"
compatible, with the "name" and "type" properties renamed to "label"
and "radio-type", respectively, in the device tree case.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Link: https://lore.kernel.org/r/20230102-rfkill-gpio-dt-v2-2-d1b83758c16d@pengutronix.de
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Stable-dep-of: b6f56a44e4c1 ("net: rfkill: gpio: Fix crash due to dereferencering uninitialized pointer")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/rfkill/rfkill-gpio.c

index 2df5bf240b64a9395fee1ee8731b6080a557ca42..ecfb766c47d08310a8c1199a7e8e8acbf5c74e5a 100644 (file)
@@ -79,6 +79,8 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
 {
        struct rfkill_gpio_data *rfkill;
        struct gpio_desc *gpio;
+       const char *name_property;
+       const char *type_property;
        const char *type_name;
        int ret;
 
@@ -86,8 +88,15 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
        if (!rfkill)
                return -ENOMEM;
 
-       device_property_read_string(&pdev->dev, "name", &rfkill->name);
-       device_property_read_string(&pdev->dev, "type", &type_name);
+       if (dev_of_node(&pdev->dev)) {
+               name_property = "label";
+               type_property = "radio-type";
+       } else {
+               name_property = "name";
+               type_property = "type";
+       }
+       device_property_read_string(&pdev->dev, name_property, &rfkill->name);
+       device_property_read_string(&pdev->dev, type_property, &type_name);
 
        if (!rfkill->name)
                rfkill->name = dev_name(&pdev->dev);
@@ -169,12 +178,19 @@ static const struct acpi_device_id rfkill_acpi_match[] = {
 MODULE_DEVICE_TABLE(acpi, rfkill_acpi_match);
 #endif
 
+static const struct of_device_id rfkill_of_match[] __maybe_unused = {
+       { .compatible = "rfkill-gpio", },
+       { },
+};
+MODULE_DEVICE_TABLE(of, rfkill_of_match);
+
 static struct platform_driver rfkill_gpio_driver = {
        .probe = rfkill_gpio_probe,
        .remove = rfkill_gpio_remove,
        .driver = {
                .name = "rfkill_gpio",
                .acpi_match_table = ACPI_PTR(rfkill_acpi_match),
+               .of_match_table = of_match_ptr(rfkill_of_match),
        },
 };