diff options
Diffstat (limited to 'drivers/net/wireless/ti/wl1251/sdio.c')
-rw-r--r-- | drivers/net/wireless/ti/wl1251/sdio.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/net/wireless/ti/wl1251/sdio.c b/drivers/net/wireless/ti/wl1251/sdio.c index e2b3d9c541e8..b661f896e9fe 100644 --- a/drivers/net/wireless/ti/wl1251/sdio.c +++ b/drivers/net/wireless/ti/wl1251/sdio.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/wl12xx.h> | 28 | #include <linux/wl12xx.h> |
29 | #include <linux/irq.h> | 29 | #include <linux/irq.h> |
30 | #include <linux/pm_runtime.h> | 30 | #include <linux/pm_runtime.h> |
31 | #include <linux/gpio.h> | ||
31 | 32 | ||
32 | #include "wl1251.h" | 33 | #include "wl1251.h" |
33 | 34 | ||
@@ -182,8 +183,9 @@ static int wl1251_sdio_set_power(struct wl1251 *wl, bool enable) | |||
182 | * callback in case it wants to do any additional setup, | 183 | * callback in case it wants to do any additional setup, |
183 | * for example enabling clock buffer for the module. | 184 | * for example enabling clock buffer for the module. |
184 | */ | 185 | */ |
185 | if (wl->set_power) | 186 | if (gpio_is_valid(wl->power_gpio)) |
186 | wl->set_power(true); | 187 | gpio_set_value(wl->power_gpio, true); |
188 | |||
187 | 189 | ||
188 | ret = pm_runtime_get_sync(&func->dev); | 190 | ret = pm_runtime_get_sync(&func->dev); |
189 | if (ret < 0) { | 191 | if (ret < 0) { |
@@ -203,8 +205,8 @@ static int wl1251_sdio_set_power(struct wl1251 *wl, bool enable) | |||
203 | if (ret < 0) | 205 | if (ret < 0) |
204 | goto out; | 206 | goto out; |
205 | 207 | ||
206 | if (wl->set_power) | 208 | if (gpio_is_valid(wl->power_gpio)) |
207 | wl->set_power(false); | 209 | gpio_set_value(wl->power_gpio, false); |
208 | } | 210 | } |
209 | 211 | ||
210 | out: | 212 | out: |
@@ -227,7 +229,7 @@ static int wl1251_sdio_probe(struct sdio_func *func, | |||
227 | struct wl1251 *wl; | 229 | struct wl1251 *wl; |
228 | struct ieee80211_hw *hw; | 230 | struct ieee80211_hw *hw; |
229 | struct wl1251_sdio *wl_sdio; | 231 | struct wl1251_sdio *wl_sdio; |
230 | const struct wl12xx_platform_data *wl12xx_board_data; | 232 | const struct wl1251_platform_data *wl1251_board_data; |
231 | 233 | ||
232 | hw = wl1251_alloc_hw(); | 234 | hw = wl1251_alloc_hw(); |
233 | if (IS_ERR(hw)) | 235 | if (IS_ERR(hw)) |
@@ -254,11 +256,20 @@ static int wl1251_sdio_probe(struct sdio_func *func, | |||
254 | wl->if_priv = wl_sdio; | 256 | wl->if_priv = wl_sdio; |
255 | wl->if_ops = &wl1251_sdio_ops; | 257 | wl->if_ops = &wl1251_sdio_ops; |
256 | 258 | ||
257 | wl12xx_board_data = wl12xx_get_platform_data(); | 259 | wl1251_board_data = wl1251_get_platform_data(); |
258 | if (!IS_ERR(wl12xx_board_data)) { | 260 | if (!IS_ERR(wl1251_board_data)) { |
259 | wl->set_power = wl12xx_board_data->set_power; | 261 | wl->power_gpio = wl1251_board_data->power_gpio; |
260 | wl->irq = wl12xx_board_data->irq; | 262 | wl->irq = wl1251_board_data->irq; |
261 | wl->use_eeprom = wl12xx_board_data->use_eeprom; | 263 | wl->use_eeprom = wl1251_board_data->use_eeprom; |
264 | } | ||
265 | |||
266 | if (gpio_is_valid(wl->power_gpio)) { | ||
267 | ret = devm_gpio_request(&func->dev, wl->power_gpio, | ||
268 | "wl1251 power"); | ||
269 | if (ret) { | ||
270 | wl1251_error("Failed to request gpio: %d\n", ret); | ||
271 | goto disable; | ||
272 | } | ||
262 | } | 273 | } |
263 | 274 | ||
264 | if (wl->irq) { | 275 | if (wl->irq) { |