wlcore: remove if_ops from platform_data
We can't pass pointers from the platform data to the modules, because with DT it cannot be done. Those pointers are not set by the board files anyway. It's the bus modules that set them, so they can be safely removed from the platform data without changing any board files. Create a new structure that the bus modules pass to wlcore. This structure contains the if_ops pointers and a pointer to the actual platform data. Signed-off-by: Luciano Coelho <coelho@ti.com> Reviewed-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
3a0a8d961e
commit
afb43e6d88
6 changed files with 44 additions and 13 deletions
|
@ -1703,7 +1703,8 @@ static struct ieee80211_sta_ht_cap wl12xx_ht_cap = {
|
|||
static int wl12xx_setup(struct wl1271 *wl)
|
||||
{
|
||||
struct wl12xx_priv *priv = wl->priv;
|
||||
struct wl12xx_platform_data *pdata = wl->pdev->dev.platform_data;
|
||||
struct wlcore_platdev_data *pdev_data = wl->pdev->dev.platform_data;
|
||||
struct wl12xx_platform_data *pdata = pdev_data->pdata;
|
||||
|
||||
wl->rtable = wl12xx_rtable;
|
||||
wl->num_tx_desc = WL12XX_NUM_TX_DESCRIPTORS;
|
||||
|
|
|
@ -5966,7 +5966,8 @@ static void wlcore_nvs_cb(const struct firmware *fw, void *context)
|
|||
{
|
||||
struct wl1271 *wl = context;
|
||||
struct platform_device *pdev = wl->pdev;
|
||||
struct wl12xx_platform_data *pdata = pdev->dev.platform_data;
|
||||
struct wlcore_platdev_data *pdev_data = pdev->dev.platform_data;
|
||||
struct wl12xx_platform_data *pdata = pdev_data->pdata;
|
||||
unsigned long irqflags;
|
||||
int ret;
|
||||
|
||||
|
@ -5995,7 +5996,7 @@ static void wlcore_nvs_cb(const struct firmware *fw, void *context)
|
|||
|
||||
wl->irq = platform_get_irq(pdev, 0);
|
||||
wl->platform_quirks = pdata->platform_quirks;
|
||||
wl->if_ops = pdata->ops;
|
||||
wl->if_ops = pdev_data->if_ops;
|
||||
|
||||
if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
|
||||
irqflags = IRQF_TRIGGER_RISING;
|
||||
|
|
|
@ -218,6 +218,7 @@ static int wl1271_probe(struct sdio_func *func,
|
|||
const struct sdio_device_id *id)
|
||||
{
|
||||
struct wl12xx_platform_data *wlan_data;
|
||||
struct wlcore_platdev_data *pdev_data;
|
||||
struct wl12xx_sdio_glue *glue;
|
||||
struct resource res[1];
|
||||
mmc_pm_flag_t mmcflags;
|
||||
|
@ -228,10 +229,18 @@ static int wl1271_probe(struct sdio_func *func,
|
|||
if (func->num != 0x02)
|
||||
return -ENODEV;
|
||||
|
||||
pdev_data = kzalloc(sizeof(*pdev_data), GFP_KERNEL);
|
||||
if (!pdev_data) {
|
||||
dev_err(&func->dev, "can't allocate platdev_data\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
pdev_data->if_ops = &sdio_ops;
|
||||
|
||||
glue = kzalloc(sizeof(*glue), GFP_KERNEL);
|
||||
if (!glue) {
|
||||
dev_err(&func->dev, "can't allocate glue\n");
|
||||
goto out;
|
||||
goto out_free_pdev_data;
|
||||
}
|
||||
|
||||
glue->dev = &func->dev;
|
||||
|
@ -256,8 +265,6 @@ static int wl1271_probe(struct sdio_func *func,
|
|||
if (mmcflags & MMC_PM_KEEP_POWER)
|
||||
wlan_data->pwr_in_suspend = true;
|
||||
|
||||
wlan_data->ops = &sdio_ops;
|
||||
|
||||
sdio_set_drvdata(func, glue);
|
||||
|
||||
/* 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,
|
|||
goto out_dev_put;
|
||||
}
|
||||
|
||||
ret = platform_device_add_data(glue->core, wlan_data,
|
||||
sizeof(*wlan_data));
|
||||
pdev_data->pdata = wlan_data;
|
||||
|
||||
ret = platform_device_add_data(glue->core, pdev_data,
|
||||
sizeof(*pdev_data));
|
||||
if (ret) {
|
||||
dev_err(glue->dev, "can't add platform data\n");
|
||||
goto out_dev_put;
|
||||
|
@ -315,6 +324,9 @@ static int wl1271_probe(struct sdio_func *func,
|
|||
out_free_glue:
|
||||
kfree(glue);
|
||||
|
||||
out_free_pdev_data:
|
||||
kfree(pdev_data);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -328,6 +328,7 @@ static int wl1271_probe(struct spi_device *spi)
|
|||
{
|
||||
struct wl12xx_spi_glue *glue;
|
||||
struct wl12xx_platform_data *pdata;
|
||||
struct wlcore_platdev_data *pdev_data;
|
||||
struct resource res[1];
|
||||
int ret = -ENOMEM;
|
||||
|
||||
|
@ -337,12 +338,18 @@ static int wl1271_probe(struct spi_device *spi)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
pdata->ops = &spi_ops;
|
||||
pdev_data = kzalloc(sizeof(*pdev_data), GFP_KERNEL);
|
||||
if (!pdev_data) {
|
||||
dev_err(&spi->dev, "can't allocate platdev_data\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
pdev_data->if_ops = &spi_ops;
|
||||
|
||||
glue = kzalloc(sizeof(*glue), GFP_KERNEL);
|
||||
if (!glue) {
|
||||
dev_err(&spi->dev, "can't allocate glue\n");
|
||||
goto out;
|
||||
goto out_free_pdev_data;
|
||||
}
|
||||
|
||||
glue->dev = &spi->dev;
|
||||
|
@ -380,7 +387,10 @@ static int wl1271_probe(struct spi_device *spi)
|
|||
goto out_dev_put;
|
||||
}
|
||||
|
||||
ret = platform_device_add_data(glue->core, pdata, sizeof(*pdata));
|
||||
pdev_data->pdata = pdata;
|
||||
|
||||
ret = platform_device_add_data(glue->core, pdev_data,
|
||||
sizeof(*pdev_data));
|
||||
if (ret) {
|
||||
dev_err(glue->dev, "can't add platform data\n");
|
||||
goto out_dev_put;
|
||||
|
@ -399,6 +409,10 @@ static int wl1271_probe(struct spi_device *spi)
|
|||
|
||||
out_free_glue:
|
||||
kfree(glue);
|
||||
|
||||
out_free_pdev_data:
|
||||
kfree(pdev_data);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -206,6 +206,11 @@ struct wl1271_if_operations {
|
|||
void (*set_block_size) (struct device *child, unsigned int blksz);
|
||||
};
|
||||
|
||||
struct wlcore_platdev_data {
|
||||
struct wl12xx_platform_data *pdata;
|
||||
struct wl1271_if_operations *if_ops;
|
||||
};
|
||||
|
||||
#define MAX_NUM_KEYS 14
|
||||
#define MAX_KEY_SIZE 32
|
||||
|
||||
|
|
|
@ -55,8 +55,6 @@ struct wl12xx_platform_data {
|
|||
int board_tcxo_clock;
|
||||
unsigned long platform_quirks;
|
||||
bool pwr_in_suspend;
|
||||
|
||||
struct wl1271_if_operations *ops;
|
||||
};
|
||||
|
||||
/* Platform does not support level trigger interrupts */
|
||||
|
|
Loading…
Reference in a new issue