aboutsummaryrefslogtreecommitdiffstats
path: root/net/rfkill
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2013-11-26 05:05:46 -0500
committerLinus Walleij <linus.walleij@linaro.org>2014-01-07 12:45:20 -0500
commit2111cad655e32d0ab39d440d26c3e2ce5ba5b802 (patch)
tree10cf3077025ec7ad188081cc54bee1a42d207341 /net/rfkill
parent224feb33a645a953634f64fe9092b9ee7dd72541 (diff)
net: rfkill: gpio: convert to descriptor-based GPIO interface
Convert to the safer gpiod_* family of API functions. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Tested-by: Stephen Warren <swarren@nvidia.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'net/rfkill')
-rw-r--r--net/rfkill/rfkill-gpio.c77
1 files changed, 34 insertions, 43 deletions
diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
index 5620d3c07479..bd2a5b90400c 100644
--- a/net/rfkill/rfkill-gpio.c
+++ b/net/rfkill/rfkill-gpio.c
@@ -25,15 +25,15 @@
25#include <linux/clk.h> 25#include <linux/clk.h>
26#include <linux/slab.h> 26#include <linux/slab.h>
27#include <linux/acpi.h> 27#include <linux/acpi.h>
28#include <linux/acpi_gpio.h> 28#include <linux/gpio/consumer.h>
29 29
30#include <linux/rfkill-gpio.h> 30#include <linux/rfkill-gpio.h>
31 31
32struct rfkill_gpio_data { 32struct rfkill_gpio_data {
33 const char *name; 33 const char *name;
34 enum rfkill_type type; 34 enum rfkill_type type;
35 int reset_gpio; 35 struct gpio_desc *reset_gpio;
36 int shutdown_gpio; 36 struct gpio_desc *shutdown_gpio;
37 37
38 struct rfkill *rfkill_dev; 38 struct rfkill *rfkill_dev;
39 char *reset_name; 39 char *reset_name;
@@ -48,19 +48,15 @@ static int rfkill_gpio_set_power(void *data, bool blocked)
48 struct rfkill_gpio_data *rfkill = data; 48 struct rfkill_gpio_data *rfkill = data;
49 49
50 if (blocked) { 50 if (blocked) {
51 if (gpio_is_valid(rfkill->shutdown_gpio)) 51 gpiod_set_value(rfkill->shutdown_gpio, 0);
52 gpio_set_value(rfkill->shutdown_gpio, 0); 52 gpiod_set_value(rfkill->reset_gpio, 0);
53 if (gpio_is_valid(rfkill->reset_gpio))
54 gpio_set_value(rfkill->reset_gpio, 0);
55 if (!IS_ERR(rfkill->clk) && rfkill->clk_enabled) 53 if (!IS_ERR(rfkill->clk) && rfkill->clk_enabled)
56 clk_disable(rfkill->clk); 54 clk_disable(rfkill->clk);
57 } else { 55 } else {
58 if (!IS_ERR(rfkill->clk) && !rfkill->clk_enabled) 56 if (!IS_ERR(rfkill->clk) && !rfkill->clk_enabled)
59 clk_enable(rfkill->clk); 57 clk_enable(rfkill->clk);
60 if (gpio_is_valid(rfkill->reset_gpio)) 58 gpiod_set_value(rfkill->reset_gpio, 1);
61 gpio_set_value(rfkill->reset_gpio, 1); 59 gpiod_set_value(rfkill->shutdown_gpio, 1);
62 if (gpio_is_valid(rfkill->shutdown_gpio))
63 gpio_set_value(rfkill->shutdown_gpio, 1);
64 } 60 }
65 61
66 rfkill->clk_enabled = blocked; 62 rfkill->clk_enabled = blocked;
@@ -83,8 +79,6 @@ static int rfkill_gpio_acpi_probe(struct device *dev,
83 79
84 rfkill->name = dev_name(dev); 80 rfkill->name = dev_name(dev);
85 rfkill->type = (unsigned)id->driver_data; 81 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 82
89 return 0; 83 return 0;
90} 84}
@@ -94,8 +88,9 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
94 struct rfkill_gpio_platform_data *pdata = pdev->dev.platform_data; 88 struct rfkill_gpio_platform_data *pdata = pdev->dev.platform_data;
95 struct rfkill_gpio_data *rfkill; 89 struct rfkill_gpio_data *rfkill;
96 const char *clk_name = NULL; 90 const char *clk_name = NULL;
97 int ret = 0; 91 struct gpio_desc *gpio;
98 int len = 0; 92 int ret;
93 int len;
99 94
100 rfkill = devm_kzalloc(&pdev->dev, sizeof(*rfkill), GFP_KERNEL); 95 rfkill = devm_kzalloc(&pdev->dev, sizeof(*rfkill), GFP_KERNEL);
101 if (!rfkill) 96 if (!rfkill)
@@ -109,28 +104,10 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
109 clk_name = pdata->power_clk_name; 104 clk_name = pdata->power_clk_name;
110 rfkill->name = pdata->name; 105 rfkill->name = pdata->name;
111 rfkill->type = pdata->type; 106 rfkill->type = pdata->type;
112 rfkill->reset_gpio = pdata->reset_gpio;
113 rfkill->shutdown_gpio = pdata->shutdown_gpio;
114 } else { 107 } else {
115 return -ENODEV; 108 return -ENODEV;
116 } 109 }
117 110
118 /* make sure at-least one of the GPIO is defined and that
119 * a name is specified for this instance */
120 if ((!gpio_is_valid(rfkill->reset_gpio) &&
121 !gpio_is_valid(rfkill->shutdown_gpio)) || !rfkill->name) {
122 pr_warn("%s: invalid platform data\n", __func__);
123 return -EINVAL;
124 }
125
126 if (pdata && pdata->gpio_runtime_setup) {
127 ret = pdata->gpio_runtime_setup(pdev);
128 if (ret) {
129 pr_warn("%s: can't set up gpio\n", __func__);
130 return ret;
131 }
132 }
133
134 len = strlen(rfkill->name); 111 len = strlen(rfkill->name);
135 rfkill->reset_name = devm_kzalloc(&pdev->dev, len + 7, GFP_KERNEL); 112 rfkill->reset_name = devm_kzalloc(&pdev->dev, len + 7, GFP_KERNEL);
136 if (!rfkill->reset_name) 113 if (!rfkill->reset_name)
@@ -145,20 +122,34 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
145 122
146 rfkill->clk = devm_clk_get(&pdev->dev, clk_name); 123 rfkill->clk = devm_clk_get(&pdev->dev, clk_name);
147 124
148 if (gpio_is_valid(rfkill->reset_gpio)) { 125 gpio = devm_gpiod_get_index(&pdev->dev, rfkill->reset_name, 0);
149 ret = devm_gpio_request_one(&pdev->dev, rfkill->reset_gpio, 126 if (!IS_ERR(gpio)) {
150 0, rfkill->reset_name); 127 ret = gpiod_direction_output(gpio, 0);
151 if (ret) { 128 if (ret)
152 pr_warn("%s: failed to get reset gpio.\n", __func__);
153 return ret; 129 return ret;
154 } 130 rfkill->reset_gpio = gpio;
131 }
132
133 gpio = devm_gpiod_get_index(&pdev->dev, rfkill->shutdown_name, 1);
134 if (!IS_ERR(gpio)) {
135 ret = gpiod_direction_output(gpio, 0);
136 if (ret)
137 return ret;
138 rfkill->shutdown_gpio = gpio;
155 } 139 }
156 140
157 if (gpio_is_valid(rfkill->shutdown_gpio)) { 141 /* Make sure at-least one of the GPIO is defined and that
158 ret = devm_gpio_request_one(&pdev->dev, rfkill->shutdown_gpio, 142 * a name is specified for this instance
159 0, rfkill->shutdown_name); 143 */
144 if ((!rfkill->reset_gpio && !rfkill->shutdown_gpio) || !rfkill->name) {
145 dev_err(&pdev->dev, "invalid platform data\n");
146 return -EINVAL;
147 }
148
149 if (pdata && pdata->gpio_runtime_setup) {
150 ret = pdata->gpio_runtime_setup(pdev);
160 if (ret) { 151 if (ret) {
161 pr_warn("%s: failed to get shutdown gpio.\n", __func__); 152 dev_err(&pdev->dev, "can't set up gpio\n");
162 return ret; 153 return ret;
163 } 154 }
164 } 155 }