diff options
-rw-r--r-- | drivers/net/wireless/ti/wl12xx/main.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/main.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/sdio.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/spi.c | 20 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/wlcore_i.h | 5 | ||||
-rw-r--r-- | include/linux/wl12xx.h | 2 |
6 files changed, 44 insertions, 13 deletions
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c index 3254bfc81a2a..09694e39bb14 100644 --- a/drivers/net/wireless/ti/wl12xx/main.c +++ b/drivers/net/wireless/ti/wl12xx/main.c | |||
@@ -1703,7 +1703,8 @@ static struct ieee80211_sta_ht_cap wl12xx_ht_cap = { | |||
1703 | static int wl12xx_setup(struct wl1271 *wl) | 1703 | static int wl12xx_setup(struct wl1271 *wl) |
1704 | { | 1704 | { |
1705 | struct wl12xx_priv *priv = wl->priv; | 1705 | struct wl12xx_priv *priv = wl->priv; |
1706 | struct wl12xx_platform_data *pdata = wl->pdev->dev.platform_data; | 1706 | struct wlcore_platdev_data *pdev_data = wl->pdev->dev.platform_data; |
1707 | struct wl12xx_platform_data *pdata = pdev_data->pdata; | ||
1707 | 1708 | ||
1708 | wl->rtable = wl12xx_rtable; | 1709 | wl->rtable = wl12xx_rtable; |
1709 | wl->num_tx_desc = WL12XX_NUM_TX_DESCRIPTORS; | 1710 | wl->num_tx_desc = WL12XX_NUM_TX_DESCRIPTORS; |
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index 9a66acf1205f..cd70335cd5e8 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c | |||
@@ -5966,7 +5966,8 @@ static void wlcore_nvs_cb(const struct firmware *fw, void *context) | |||
5966 | { | 5966 | { |
5967 | struct wl1271 *wl = context; | 5967 | struct wl1271 *wl = context; |
5968 | struct platform_device *pdev = wl->pdev; | 5968 | struct platform_device *pdev = wl->pdev; |
5969 | struct wl12xx_platform_data *pdata = pdev->dev.platform_data; | 5969 | struct wlcore_platdev_data *pdev_data = pdev->dev.platform_data; |
5970 | struct wl12xx_platform_data *pdata = pdev_data->pdata; | ||
5970 | unsigned long irqflags; | 5971 | unsigned long irqflags; |
5971 | int ret; | 5972 | int ret; |
5972 | 5973 | ||
@@ -5995,7 +5996,7 @@ static void wlcore_nvs_cb(const struct firmware *fw, void *context) | |||
5995 | 5996 | ||
5996 | wl->irq = platform_get_irq(pdev, 0); | 5997 | wl->irq = platform_get_irq(pdev, 0); |
5997 | wl->platform_quirks = pdata->platform_quirks; | 5998 | wl->platform_quirks = pdata->platform_quirks; |
5998 | wl->if_ops = pdata->ops; | 5999 | wl->if_ops = pdev_data->if_ops; |
5999 | 6000 | ||
6000 | if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ) | 6001 | if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ) |
6001 | irqflags = IRQF_TRIGGER_RISING; | 6002 | irqflags = IRQF_TRIGGER_RISING; |
diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c index d4f184e2efed..1f6f6e30daca 100644 --- a/drivers/net/wireless/ti/wlcore/sdio.c +++ b/drivers/net/wireless/ti/wlcore/sdio.c | |||
@@ -218,6 +218,7 @@ static int wl1271_probe(struct sdio_func *func, | |||
218 | const struct sdio_device_id *id) | 218 | const struct sdio_device_id *id) |
219 | { | 219 | { |
220 | struct wl12xx_platform_data *wlan_data; | 220 | struct wl12xx_platform_data *wlan_data; |
221 | struct wlcore_platdev_data *pdev_data; | ||
221 | struct wl12xx_sdio_glue *glue; | 222 | struct wl12xx_sdio_glue *glue; |
222 | struct resource res[1]; | 223 | struct resource res[1]; |
223 | mmc_pm_flag_t mmcflags; | 224 | mmc_pm_flag_t mmcflags; |
@@ -228,10 +229,18 @@ static int wl1271_probe(struct sdio_func *func, | |||
228 | if (func->num != 0x02) | 229 | if (func->num != 0x02) |
229 | return -ENODEV; | 230 | return -ENODEV; |
230 | 231 | ||
232 | pdev_data = kzalloc(sizeof(*pdev_data), GFP_KERNEL); | ||
233 | if (!pdev_data) { | ||
234 | dev_err(&func->dev, "can't allocate platdev_data\n"); | ||
235 | goto out; | ||
236 | } | ||
237 | |||
238 | pdev_data->if_ops = &sdio_ops; | ||
239 | |||
231 | glue = kzalloc(sizeof(*glue), GFP_KERNEL); | 240 | glue = kzalloc(sizeof(*glue), GFP_KERNEL); |
232 | if (!glue) { | 241 | if (!glue) { |
233 | dev_err(&func->dev, "can't allocate glue\n"); | 242 | dev_err(&func->dev, "can't allocate glue\n"); |
234 | goto out; | 243 | goto out_free_pdev_data; |
235 | } | 244 | } |
236 | 245 | ||
237 | glue->dev = &func->dev; | 246 | glue->dev = &func->dev; |
@@ -256,8 +265,6 @@ static int wl1271_probe(struct sdio_func *func, | |||
256 | if (mmcflags & MMC_PM_KEEP_POWER) | 265 | if (mmcflags & MMC_PM_KEEP_POWER) |
257 | wlan_data->pwr_in_suspend = true; | 266 | wlan_data->pwr_in_suspend = true; |
258 | 267 | ||
259 | wlan_data->ops = &sdio_ops; | ||
260 | |||
261 | sdio_set_drvdata(func, glue); | 268 | sdio_set_drvdata(func, glue); |
262 | 269 | ||
263 | /* Tell PM core that we don't need the card to be powered now */ | 270 | /* Tell PM core that we don't need the card to be powered now */ |
@@ -295,8 +302,10 @@ static int wl1271_probe(struct sdio_func *func, | |||
295 | goto out_dev_put; | 302 | goto out_dev_put; |
296 | } | 303 | } |
297 | 304 | ||
298 | ret = platform_device_add_data(glue->core, wlan_data, | 305 | pdev_data->pdata = wlan_data; |
299 | sizeof(*wlan_data)); | 306 | |
307 | ret = platform_device_add_data(glue->core, pdev_data, | ||
308 | sizeof(*pdev_data)); | ||
300 | if (ret) { | 309 | if (ret) { |
301 | dev_err(glue->dev, "can't add platform data\n"); | 310 | dev_err(glue->dev, "can't add platform data\n"); |
302 | goto out_dev_put; | 311 | goto out_dev_put; |
@@ -315,6 +324,9 @@ out_dev_put: | |||
315 | out_free_glue: | 324 | out_free_glue: |
316 | kfree(glue); | 325 | kfree(glue); |
317 | 326 | ||
327 | out_free_pdev_data: | ||
328 | kfree(pdev_data); | ||
329 | |||
318 | out: | 330 | out: |
319 | return ret; | 331 | return ret; |
320 | } | 332 | } |
diff --git a/drivers/net/wireless/ti/wlcore/spi.c b/drivers/net/wireless/ti/wlcore/spi.c index 2d700b7ae14c..d437f4d28bd0 100644 --- a/drivers/net/wireless/ti/wlcore/spi.c +++ b/drivers/net/wireless/ti/wlcore/spi.c | |||
@@ -328,6 +328,7 @@ static int wl1271_probe(struct spi_device *spi) | |||
328 | { | 328 | { |
329 | struct wl12xx_spi_glue *glue; | 329 | struct wl12xx_spi_glue *glue; |
330 | struct wl12xx_platform_data *pdata; | 330 | struct wl12xx_platform_data *pdata; |
331 | struct wlcore_platdev_data *pdev_data; | ||
331 | struct resource res[1]; | 332 | struct resource res[1]; |
332 | int ret = -ENOMEM; | 333 | int ret = -ENOMEM; |
333 | 334 | ||
@@ -337,12 +338,18 @@ static int wl1271_probe(struct spi_device *spi) | |||
337 | return -ENODEV; | 338 | return -ENODEV; |
338 | } | 339 | } |
339 | 340 | ||
340 | pdata->ops = &spi_ops; | 341 | pdev_data = kzalloc(sizeof(*pdev_data), GFP_KERNEL); |
342 | if (!pdev_data) { | ||
343 | dev_err(&spi->dev, "can't allocate platdev_data\n"); | ||
344 | goto out; | ||
345 | } | ||
346 | |||
347 | pdev_data->if_ops = &spi_ops; | ||
341 | 348 | ||
342 | glue = kzalloc(sizeof(*glue), GFP_KERNEL); | 349 | glue = kzalloc(sizeof(*glue), GFP_KERNEL); |
343 | if (!glue) { | 350 | if (!glue) { |
344 | dev_err(&spi->dev, "can't allocate glue\n"); | 351 | dev_err(&spi->dev, "can't allocate glue\n"); |
345 | goto out; | 352 | goto out_free_pdev_data; |
346 | } | 353 | } |
347 | 354 | ||
348 | glue->dev = &spi->dev; | 355 | glue->dev = &spi->dev; |
@@ -380,7 +387,10 @@ static int wl1271_probe(struct spi_device *spi) | |||
380 | goto out_dev_put; | 387 | goto out_dev_put; |
381 | } | 388 | } |
382 | 389 | ||
383 | ret = platform_device_add_data(glue->core, pdata, sizeof(*pdata)); | 390 | pdev_data->pdata = pdata; |
391 | |||
392 | ret = platform_device_add_data(glue->core, pdev_data, | ||
393 | sizeof(*pdev_data)); | ||
384 | if (ret) { | 394 | if (ret) { |
385 | dev_err(glue->dev, "can't add platform data\n"); | 395 | dev_err(glue->dev, "can't add platform data\n"); |
386 | goto out_dev_put; | 396 | goto out_dev_put; |
@@ -399,6 +409,10 @@ out_dev_put: | |||
399 | 409 | ||
400 | out_free_glue: | 410 | out_free_glue: |
401 | kfree(glue); | 411 | kfree(glue); |
412 | |||
413 | out_free_pdev_data: | ||
414 | kfree(pdev_data); | ||
415 | |||
402 | out: | 416 | out: |
403 | return ret; | 417 | return ret; |
404 | } | 418 | } |
diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h index 20316ac328a2..c845b0ef7f4b 100644 --- a/drivers/net/wireless/ti/wlcore/wlcore_i.h +++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h | |||
@@ -206,6 +206,11 @@ struct wl1271_if_operations { | |||
206 | void (*set_block_size) (struct device *child, unsigned int blksz); | 206 | void (*set_block_size) (struct device *child, unsigned int blksz); |
207 | }; | 207 | }; |
208 | 208 | ||
209 | struct wlcore_platdev_data { | ||
210 | struct wl12xx_platform_data *pdata; | ||
211 | struct wl1271_if_operations *if_ops; | ||
212 | }; | ||
213 | |||
209 | #define MAX_NUM_KEYS 14 | 214 | #define MAX_NUM_KEYS 14 |
210 | #define MAX_KEY_SIZE 32 | 215 | #define MAX_KEY_SIZE 32 |
211 | 216 | ||
diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h index 0d6373195d32..360c9bce665c 100644 --- a/include/linux/wl12xx.h +++ b/include/linux/wl12xx.h | |||
@@ -55,8 +55,6 @@ struct wl12xx_platform_data { | |||
55 | int board_tcxo_clock; | 55 | int board_tcxo_clock; |
56 | unsigned long platform_quirks; | 56 | unsigned long platform_quirks; |
57 | bool pwr_in_suspend; | 57 | bool pwr_in_suspend; |
58 | |||
59 | struct wl1271_if_operations *ops; | ||
60 | }; | 58 | }; |
61 | 59 | ||
62 | /* Platform does not support level trigger interrupts */ | 60 | /* Platform does not support level trigger interrupts */ |