diff options
Diffstat (limited to 'net/rfkill/rfkill-gpio.c')
-rw-r--r-- | net/rfkill/rfkill-gpio.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c index 0f62326c0f5e..2a4717967502 100644 --- a/net/rfkill/rfkill-gpio.c +++ b/net/rfkill/rfkill-gpio.c | |||
@@ -63,6 +63,15 @@ static const struct rfkill_ops rfkill_gpio_ops = { | |||
63 | .set_block = rfkill_gpio_set_power, | 63 | .set_block = rfkill_gpio_set_power, |
64 | }; | 64 | }; |
65 | 65 | ||
66 | static const struct acpi_gpio_params reset_gpios = { 0, 0, false }; | ||
67 | static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false }; | ||
68 | |||
69 | static const struct acpi_gpio_mapping acpi_rfkill_default_gpios[] = { | ||
70 | { "reset-gpios", &reset_gpios, 1 }, | ||
71 | { "shutdown-gpios", &shutdown_gpios, 1 }, | ||
72 | { }, | ||
73 | }; | ||
74 | |||
66 | static int rfkill_gpio_acpi_probe(struct device *dev, | 75 | static int rfkill_gpio_acpi_probe(struct device *dev, |
67 | struct rfkill_gpio_data *rfkill) | 76 | struct rfkill_gpio_data *rfkill) |
68 | { | 77 | { |
@@ -75,7 +84,8 @@ static int rfkill_gpio_acpi_probe(struct device *dev, | |||
75 | rfkill->name = dev_name(dev); | 84 | rfkill->name = dev_name(dev); |
76 | rfkill->type = (unsigned)id->driver_data; | 85 | rfkill->type = (unsigned)id->driver_data; |
77 | 86 | ||
78 | return 0; | 87 | return acpi_dev_add_driver_gpios(ACPI_COMPANION(dev), |
88 | acpi_rfkill_default_gpios); | ||
79 | } | 89 | } |
80 | 90 | ||
81 | static int rfkill_gpio_probe(struct platform_device *pdev) | 91 | static int rfkill_gpio_probe(struct platform_device *pdev) |
@@ -102,7 +112,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev) | |||
102 | 112 | ||
103 | rfkill->clk = devm_clk_get(&pdev->dev, NULL); | 113 | rfkill->clk = devm_clk_get(&pdev->dev, NULL); |
104 | 114 | ||
105 | gpio = devm_gpiod_get_index(&pdev->dev, "reset", 0); | 115 | gpio = devm_gpiod_get(&pdev->dev, "reset"); |
106 | if (!IS_ERR(gpio)) { | 116 | if (!IS_ERR(gpio)) { |
107 | ret = gpiod_direction_output(gpio, 0); | 117 | ret = gpiod_direction_output(gpio, 0); |
108 | if (ret) | 118 | if (ret) |
@@ -110,7 +120,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev) | |||
110 | rfkill->reset_gpio = gpio; | 120 | rfkill->reset_gpio = gpio; |
111 | } | 121 | } |
112 | 122 | ||
113 | gpio = devm_gpiod_get_index(&pdev->dev, "shutdown", 1); | 123 | gpio = devm_gpiod_get(&pdev->dev, "shutdown"); |
114 | if (!IS_ERR(gpio)) { | 124 | if (!IS_ERR(gpio)) { |
115 | ret = gpiod_direction_output(gpio, 0); | 125 | ret = gpiod_direction_output(gpio, 0); |
116 | if (ret) | 126 | if (ret) |
@@ -150,6 +160,8 @@ static int rfkill_gpio_remove(struct platform_device *pdev) | |||
150 | rfkill_unregister(rfkill->rfkill_dev); | 160 | rfkill_unregister(rfkill->rfkill_dev); |
151 | rfkill_destroy(rfkill->rfkill_dev); | 161 | rfkill_destroy(rfkill->rfkill_dev); |
152 | 162 | ||
163 | acpi_dev_remove_driver_gpios(ACPI_COMPANION(&pdev->dev)); | ||
164 | |||
153 | return 0; | 165 | return 0; |
154 | } | 166 | } |
155 | 167 | ||