Commit ef91ffaa033001c2ba65d3c9659f1a75886d0aa3

Authored by Heikki Krogerus
Committed by Johannes Berg
1 parent 262c91ee5e

net: rfkill: gpio: add ACPI support

Including ACPI ID for Broadcom GPS receiver BCM4752.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: Rhyland Klein <rklein@nvidia.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>

Showing 1 changed file with 30 additions and 1 deletions Side-by-side Diff

net/rfkill/rfkill-gpio.c
... ... @@ -24,6 +24,8 @@
24 24 #include <linux/platform_device.h>
25 25 #include <linux/clk.h>
26 26 #include <linux/slab.h>
  27 +#include <linux/acpi.h>
  28 +#include <linux/acpi_gpio.h>
27 29  
28 30 #include <linux/rfkill-gpio.h>
29 31  
... ... @@ -70,6 +72,23 @@
70 72 .set_block = rfkill_gpio_set_power,
71 73 };
72 74  
  75 +static int rfkill_gpio_acpi_probe(struct device *dev,
  76 + struct rfkill_gpio_data *rfkill)
  77 +{
  78 + const struct acpi_device_id *id;
  79 +
  80 + id = acpi_match_device(dev->driver->acpi_match_table, dev);
  81 + if (!id)
  82 + return -ENODEV;
  83 +
  84 + rfkill->name = dev_name(dev);
  85 + rfkill->type = (unsigned)id->driver_data;
  86 + rfkill->reset_gpio = acpi_get_gpio_by_index(dev, 0, NULL);
  87 + rfkill->shutdown_gpio = acpi_get_gpio_by_index(dev, 1, NULL);
  88 +
  89 + return 0;
  90 +}
  91 +
73 92 static int rfkill_gpio_probe(struct platform_device *pdev)
74 93 {
75 94 struct rfkill_gpio_platform_data *pdata = pdev->dev.platform_data;
... ... @@ -82,7 +101,11 @@
82 101 if (!rfkill)
83 102 return -ENOMEM;
84 103  
85   - if (pdata) {
  104 + if (ACPI_HANDLE(&pdev->dev)) {
  105 + ret = rfkill_gpio_acpi_probe(&pdev->dev, rfkill);
  106 + if (ret)
  107 + return ret;
  108 + } else if (pdata) {
86 109 clk_name = pdata->power_clk_name;
87 110 rfkill->name = pdata->name;
88 111 rfkill->type = pdata->type;
89 112  
... ... @@ -170,12 +193,18 @@
170 193 return 0;
171 194 }
172 195  
  196 +static const struct acpi_device_id rfkill_acpi_match[] = {
  197 + { "BCM4752", RFKILL_TYPE_GPS },
  198 + { },
  199 +};
  200 +
173 201 static struct platform_driver rfkill_gpio_driver = {
174 202 .probe = rfkill_gpio_probe,
175 203 .remove = rfkill_gpio_remove,
176 204 .driver = {
177 205 .name = "rfkill_gpio",
178 206 .owner = THIS_MODULE,
  207 + .acpi_match_table = ACPI_PTR(rfkill_acpi_match),
179 208 },
180 209 };
181 210