summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/wilc1000/linux_wlan.c4
-rw-r--r--drivers/staging/wilc1000/linux_wlan_sdio.c3
-rw-r--r--drivers/staging/wilc1000/linux_wlan_spi.c2
-rw-r--r--drivers/staging/wilc1000/wilc_sdio.c35
-rw-r--r--drivers/staging/wilc1000/wilc_spi.c34
-rw-r--r--drivers/staging/wilc1000/wilc_wfi_netdevice.h4
-rw-r--r--drivers/staging/wilc1000/wilc_wlan.c15
-rw-r--r--drivers/staging/wilc1000/wilc_wlan.h4
8 files changed, 47 insertions, 54 deletions
diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
index e81e906..2fb1d97 100644
--- a/drivers/staging/wilc1000/linux_wlan.c
+++ b/drivers/staging/wilc1000/linux_wlan.c
@@ -1408,7 +1408,8 @@ void wilc_netdev_cleanup(struct wilc *wilc)
#endif
}
-int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type, int gpio)
+int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type,
+ int gpio, const struct wilc_hif_func *ops)
{
int i;
perInterface_wlan_t *nic;
@@ -1423,6 +1424,7 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type, int gp
*wilc = wilc_dev;
wilc_dev->io_type = io_type;
wilc_dev->gpio = gpio;
+ wilc_dev->ops = ops;
register_inetaddr_notifier(&g_dev_notifier);
diff --git a/drivers/staging/wilc1000/linux_wlan_sdio.c b/drivers/staging/wilc1000/linux_wlan_sdio.c
index 732b0d6..f4250fd 100644
--- a/drivers/staging/wilc1000/linux_wlan_sdio.c
+++ b/drivers/staging/wilc1000/linux_wlan_sdio.c
@@ -119,7 +119,8 @@ static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id
PRINT_D(INIT_DBG, "Initializing netdev\n");
wilc_sdio_func = func;
- if (wilc_netdev_init(&wilc, &func->dev, HIF_SDIO, gpio)) {
+ if (wilc_netdev_init(&wilc, &func->dev, HIF_SDIO, gpio,
+ &wilc_hif_sdio)) {
PRINT_ER("Couldn't initialize netdev\n");
return -1;
}
diff --git a/drivers/staging/wilc1000/linux_wlan_spi.c b/drivers/staging/wilc1000/linux_wlan_spi.c
index f4dda4a..a7a5259 100644
--- a/drivers/staging/wilc1000/linux_wlan_spi.c
+++ b/drivers/staging/wilc1000/linux_wlan_spi.c
@@ -404,7 +404,7 @@ static int __init init_wilc_spi_driver(void)
wilc_debugfs_init();
- ret = wilc_netdev_init(&wilc, NULL, HIF_SPI, GPIO_NUM);
+ ret = wilc_netdev_init(&wilc, NULL, HIF_SPI, GPIO_NUM, &wilc_hif_spi);
if (ret) {
wilc_debugfs_remove();
return ret;
diff --git a/drivers/staging/wilc1000/wilc_sdio.c b/drivers/staging/wilc1000/wilc_sdio.c
index 8441fcc..006aae4 100644
--- a/drivers/staging/wilc1000/wilc_sdio.c
+++ b/drivers/staging/wilc1000/wilc_sdio.c
@@ -912,23 +912,22 @@ static int sdio_sync_ext(int nint /* how mant interrupts to enable. */)
*
********************************************/
-struct wilc_hif_func wilc_hif_sdio = {
- sdio_init,
- sdio_deinit,
- sdio_read_reg,
- sdio_write_reg,
- sdio_read,
- sdio_write,
- sdio_sync,
- sdio_clear_int,
- sdio_read_int,
- sdio_clear_int_ext,
- sdio_read_size,
- sdio_write,
- sdio_read,
- sdio_sync_ext,
-
- sdio_set_max_speed,
- sdio_set_default_speed,
+const struct wilc_hif_func wilc_hif_sdio = {
+ .hif_init = sdio_init,
+ .hif_deinit = sdio_deinit,
+ .hif_read_reg = sdio_read_reg,
+ .hif_write_reg = sdio_write_reg,
+ .hif_block_rx = sdio_read,
+ .hif_block_tx = sdio_write,
+ .hif_sync = sdio_sync,
+ .hif_clear_int = sdio_clear_int,
+ .hif_read_int = sdio_read_int,
+ .hif_clear_int_ext = sdio_clear_int_ext,
+ .hif_read_size = sdio_read_size,
+ .hif_block_tx_ext = sdio_write,
+ .hif_block_rx_ext = sdio_read,
+ .hif_sync_ext = sdio_sync_ext,
+ .hif_set_max_bus_speed = sdio_set_max_speed,
+ .hif_set_default_bus_speed = sdio_set_default_speed,
};
diff --git a/drivers/staging/wilc1000/wilc_spi.c b/drivers/staging/wilc1000/wilc_spi.c
index dc9cdf5..39dd756 100644
--- a/drivers/staging/wilc1000/wilc_spi.c
+++ b/drivers/staging/wilc1000/wilc_spi.c
@@ -1021,21 +1021,21 @@ static int wilc_spi_sync_ext(int nint /* how mant interrupts to enable. */)
* Global spi HIF function table
*
********************************************/
-struct wilc_hif_func wilc_hif_spi = {
- _wilc_spi_init,
- _wilc_spi_deinit,
- wilc_spi_read_reg,
- wilc_spi_write_reg,
- _wilc_spi_read,
- _wilc_spi_write,
- wilc_spi_sync,
- wilc_spi_clear_int,
- wilc_spi_read_int,
- wilc_spi_clear_int_ext,
- wilc_spi_read_size,
- _wilc_spi_write,
- _wilc_spi_read,
- wilc_spi_sync_ext,
- wilc_spi_max_bus_speed,
- wilc_spi_default_bus_speed,
+const struct wilc_hif_func wilc_hif_spi = {
+ .hif_init = _wilc_spi_init,
+ .hif_deinit = _wilc_spi_deinit,
+ .hif_read_reg = wilc_spi_read_reg,
+ .hif_write_reg = wilc_spi_write_reg,
+ .hif_block_rx = _wilc_spi_read,
+ .hif_block_tx = _wilc_spi_write,
+ .hif_sync = wilc_spi_sync,
+ .hif_clear_int = wilc_spi_clear_int,
+ .hif_read_int = wilc_spi_read_int,
+ .hif_clear_int_ext = wilc_spi_clear_int_ext,
+ .hif_read_size = wilc_spi_read_size,
+ .hif_block_tx_ext = _wilc_spi_write,
+ .hif_block_rx_ext = _wilc_spi_read,
+ .hif_sync_ext = wilc_spi_sync_ext,
+ .hif_set_max_bus_speed = wilc_spi_max_bus_speed,
+ .hif_set_default_bus_speed = wilc_spi_default_bus_speed,
};
diff --git a/drivers/staging/wilc1000/wilc_wfi_netdevice.h b/drivers/staging/wilc1000/wilc_wfi_netdevice.h
index 92f4cb7..761bc3f 100644
--- a/drivers/staging/wilc1000/wilc_wfi_netdevice.h
+++ b/drivers/staging/wilc1000/wilc_wfi_netdevice.h
@@ -156,6 +156,7 @@ struct wilc_vif {
};
struct wilc {
+ const struct wilc_hif_func *ops;
int io_type;
int mac_status;
int gpio;
@@ -212,7 +213,8 @@ void linux_wlan_rx_complete(void);
void linux_wlan_dbg(u8 *buff);
int linux_wlan_lock_timeout(void *vp, u32 timeout);
void wilc_netdev_cleanup(struct wilc *wilc);
-int wilc_netdev_init(struct wilc **wilc, struct device *, int io_type, int gpio);
+int wilc_netdev_init(struct wilc **wilc, struct device *, int io_type, int gpio,
+ const struct wilc_hif_func *ops);
void wilc1000_wlan_deinit(struct net_device *dev);
void WILC_WFI_mgmt_rx(struct wilc *wilc, u8 *buff, u32 size);
u16 wilc_set_machw_change_vir_if(struct net_device *dev, bool value);
diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
index 3d53550..5e37ec6 100644
--- a/drivers/staging/wilc1000/wilc_wlan.c
+++ b/drivers/staging/wilc1000/wilc_wlan.c
@@ -1657,22 +1657,11 @@ int wilc_wlan_init(struct net_device *dev)
memset((void *)&g_wlan, 0, sizeof(wilc_wlan_dev_t));
g_wlan.io_type = wilc->io_type;
-
-#ifdef WILC_SDIO
- if (!wilc_hif_sdio.hif_init(wilc, wilc_debug)) {
- ret = -EIO;
- goto _fail_;
- }
- memcpy((void *)&g_wlan.hif_func, &wilc_hif_sdio,
- sizeof(struct wilc_hif_func));
-#else
- if (!wilc_hif_spi.hif_init(wilc, wilc_debug)) {
+ g_wlan.hif_func = *wilc->ops;
+ if (!g_wlan.hif_func.hif_init(wilc, wilc_debug)) {
ret = -EIO;
goto _fail_;
}
- memcpy((void *)&g_wlan.hif_func, &wilc_hif_spi,
- sizeof(struct wilc_hif_func));
-#endif
if (!wilc_wlan_cfg_init(wilc_debug)) {
ret = -ENOBUFS;
diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h
index 326d71b..c0a5a95 100644
--- a/drivers/staging/wilc1000/wilc_wlan.h
+++ b/drivers/staging/wilc1000/wilc_wlan.h
@@ -258,8 +258,8 @@ struct wilc_hif_func {
void (*hif_set_default_bus_speed)(void);
};
-extern struct wilc_hif_func wilc_hif_spi;
-extern struct wilc_hif_func wilc_hif_sdio;
+extern const struct wilc_hif_func wilc_hif_spi;
+extern const struct wilc_hif_func wilc_hif_sdio;
/********************************************
*
OpenPOWER on IntegriCloud