All of lore.kernel.org
 help / color / mirror / Atom feed
From: glen lee <glen.lee@atmel.com>
To: Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Johnny Kim <johnny.kim@atmel.com>,
	Austin Shin <austin.shin@atmel.com>,
	Chris Park <chris.park@atmel.com>, Tony Cho <tony.cho@atmel.com>,
	Leo Kim <leo.kim@atmel.com>, <linux-wireless@vger.kernel.org>,
	<devel@driverdev.osuosl.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 15/20] staging/wilc1000: pass hif operations through initialization
Date: Thu, 12 Nov 2015 19:05:41 +0900	[thread overview]
Message-ID: <56446475.5090409@atmel.com> (raw)
In-Reply-To: <1447198960-2760143-16-git-send-email-arnd@arndb.de>

Hi arnd,

I appreciate the patches.
I did test this patch series on h/w which is arm based MCU.
 From this patch wilc is not working properly. After downloading firmware, the firmware cannot start and it fails.
I double check this patch and the previous one(14/20) which works fine.
I cannot find the problem in this patch at the moment. I will see if I can find something,
and I'd appreciate if you would help with it.

regards,
glen lee


On 2015년 11월 11일 08:42, Arnd Bergmann wrote:
> The wilc_hif_spi and wilc_hif_sdio structures are part of
> the bus specific code, and the generic code should have no knowledge
> of their addresses.
>
> This changes the code to reference them only from the bus
> specific initialization code, which we can then use to split
> up the driver into separate modules.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>   drivers/staging/wilc1000/linux_wlan.c         |  4 ++-
>   drivers/staging/wilc1000/linux_wlan_sdio.c    |  3 ++-
>   drivers/staging/wilc1000/linux_wlan_spi.c     |  2 +-
>   drivers/staging/wilc1000/wilc_sdio.c          | 35 +++++++++++++--------------
>   drivers/staging/wilc1000/wilc_spi.c           | 34 +++++++++++++-------------
>   drivers/staging/wilc1000/wilc_wfi_netdevice.h |  4 ++-
>   drivers/staging/wilc1000/wilc_wlan.c          | 15 ++----------
>   drivers/staging/wilc1000/wilc_wlan.h          |  4 +--
>   8 files changed, 47 insertions(+), 54 deletions(-)
>
> diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
> index e81e90678d0f..2fb1d97bded1 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 732b0d66366b..f4250fda6cf1 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 f4dda4a6fa7b..a7a52593156a 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 8441fcccccc4..0a9b5a71772e 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_rx_ext = sdio_write,
> +	.hif_block_tx_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 dc9cdf5e4065..0433e2b5f80a 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_rx_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 92f4cb71608d..761bc3f59138 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 3d53550149fb..5e37ec65d3bb 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 326d71bf91df..c0a5a955b1d4 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;
>   
>   /********************************************
>    *


  reply	other threads:[~2015-11-12 10:02 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10 23:42 [PATCH 00/20] staging/wilc1000: cleanups once again Arnd Bergmann
2015-11-10 23:42 ` [PATCH 01/20] staging/wilc1000: add struct net_device declaration Arnd Bergmann
2015-11-10 23:47   ` Joe Perches
2015-11-10 23:53     ` Arnd Bergmann
2015-11-11  0:02   ` Greg Kroah-Hartman
2015-11-11  0:13     ` Arnd Bergmann
2015-11-11  0:33       ` Greg Kroah-Hartman
2015-11-10 23:42 ` [PATCH 02/20] staging/wilc1000: remove unused functions Arnd Bergmann
2015-11-10 23:42 ` [PATCH 03/20] staging/wilc1000: make symbols static if possible Arnd Bergmann
2015-11-10 23:42 ` [PATCH 04/20] staging/wilc1000: use proper naming for global symbols Arnd Bergmann
2015-11-10 23:42 ` [PATCH 05/20] staging/wilc1000: move extern declarations to headers Arnd Bergmann
2015-11-10 23:42 ` [PATCH 06/20] staging/wilc1000: use NO_SECURITY instead of NO_ENCRYPT Arnd Bergmann
2015-11-10 23:42 ` [PATCH 07/20] staging/wilc1000: avoid static definitions in header Arnd Bergmann
2015-11-10 23:42 ` [PATCH 08/20] staging/wilc1000: remove linux_wlan_{device_power,device_detection} Arnd Bergmann
2015-11-10 23:42 ` [PATCH 09/20] staging/wilc1000: move wilc_wlan_inp_t into struct wilc Arnd Bergmann
2015-11-10 23:42 ` [PATCH 10/20] staging/wilc1000: move init/exit functions to driver files Arnd Bergmann
2015-11-10 23:42 ` [PATCH 11/20] staging/wilc1000: unify device pointer Arnd Bergmann
2015-11-10 23:42 ` [PATCH 12/20] staging/wilc1000: pass io_type to wilc_netdev_init Arnd Bergmann
2015-11-10 23:42 ` [PATCH 13/20] staging/wilc1000: use device pointer for phy creation Arnd Bergmann
2015-11-10 23:42 ` [PATCH 14/20] staging/wilc1000: get rid of WILC_SDIO_IRQ_GPIO Arnd Bergmann
2015-11-10 23:42 ` [PATCH 15/20] staging/wilc1000: pass hif operations through initialization Arnd Bergmann
2015-11-12 10:05   ` glen lee [this message]
2015-11-12 11:39     ` Arnd Bergmann
2015-11-13  7:49       ` glen lee
2015-11-13  9:17         ` Arnd Bergmann
2015-11-16  1:36           ` glen lee
2015-11-16 14:05             ` Arnd Bergmann
2015-11-10 23:42 ` [PATCH 16/20] staging/wilc1000: turn enable_irq/disable_irq into callbacks Arnd Bergmann
2015-11-10 23:42 ` [PATCH 17/20] staging/wilc1000: remove WILC_SDIO/WILC_SPI macros Arnd Bergmann
2015-11-10 23:42 ` [PATCH 18/20] staging/wilc1000: split out bus specific modules Arnd Bergmann
2015-11-11 11:52   ` kbuild test robot
2015-11-10 23:42 ` [PATCH 19/20] staging/wilc1000: use more regular probing Arnd Bergmann
2015-11-11  7:54   ` Andy Shevchenko
2015-11-11  8:51     ` Arnd Bergmann
2015-11-10 23:42 ` [PATCH 20/20] staging/wilc1000: pass struct wilc to most linux_wlan.c functions Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56446475.5090409@atmel.com \
    --to=glen.lee@atmel.com \
    --cc=arnd@arndb.de \
    --cc=austin.shin@atmel.com \
    --cc=chris.park@atmel.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=johnny.kim@atmel.com \
    --cc=leo.kim@atmel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=tony.cho@atmel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.