[rt2x00-users] [PATCH 1/8] rt2x00: Add rt2800_wait_csr_ready

Gertjan van Wingerde gwingerde at gmail.com
Mon Aug 30 18:08:31 UTC 2010


On 08/30/10 19:23, Ivo van Doorn wrote:
> Similar to rt2800_wait_wpdma_ready() we can add a
> function to waiting until the CSR is ready. This
> centralizes some additional code into rt2800lib.
> 
> Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>

Acked-by: Gertjan van Wingerde <gwingerde at gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2800lib.c |   28 ++++++++++++++++++----------
>  drivers/net/wireless/rt2x00/rt2800lib.h |    1 +
>  drivers/net/wireless/rt2x00/rt2800usb.c |   12 +-----------
>  3 files changed, 20 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index ac92e7c..967f3e5 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -255,6 +255,23 @@ void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
>  }
>  EXPORT_SYMBOL_GPL(rt2800_mcu_request);
>  
> +int rt2800_wait_csr_ready(struct rt2x00_dev *rt2x00dev)
> +{
> +	unsigned int i = 0;
> +	u32 reg;
> +
> +	for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> +		rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
> +		if (reg && reg != ~0)
> +			return 0;
> +		msleep(1);
> +	}
> +
> +	ERROR(rt2x00dev, "Unstable hardware.\n");
> +	return -EBUSY;
> +}
> +EXPORT_SYMBOL_GPL(rt2800_wait_csr_ready);
> +
>  int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev)
>  {
>  	unsigned int i;
> @@ -370,17 +387,8 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
>  	/*
>  	 * Wait for stable hardware.
>  	 */
> -	for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> -		rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
> -		if (reg && reg != ~0)
> -			break;
> -		msleep(1);
> -	}
> -
> -	if (i == REGISTER_BUSY_COUNT) {
> -		ERROR(rt2x00dev, "Unstable hardware.\n");
> +	if (rt2800_wait_csr_ready(rt2x00dev))
>  		return -EBUSY;
> -	}
>  
>  	if (rt2x00_is_pci(rt2x00dev))
>  		rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002);
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
> index deb10b1..986229c 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.h
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
> @@ -140,6 +140,7 @@ void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
>  			const u8 command, const u8 token,
>  			const u8 arg0, const u8 arg1);
>  
> +int rt2800_wait_csr_ready(struct rt2x00_dev *rt2x00dev);
>  int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev);
>  
>  int rt2800_check_firmware(struct rt2x00_dev *rt2x00dev,
> diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
> index 82ae58e..b1a8e94 100644
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -122,22 +122,12 @@ static void rt2800usb_toggle_rx(struct rt2x00_dev *rt2x00dev,
>  static int rt2800usb_init_registers(struct rt2x00_dev *rt2x00dev)
>  {
>  	u32 reg;
> -	int i;
>  
>  	/*
>  	 * Wait until BBP and RF are ready.
>  	 */
> -	for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> -		rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
> -		if (reg && reg != ~0)
> -			break;
> -		msleep(1);
> -	}
> -
> -	if (i == REGISTER_BUSY_COUNT) {
> -		ERROR(rt2x00dev, "Unstable hardware.\n");
> +	if (rt2800_wait_csr_ready(rt2x00dev))
>  		return -EBUSY;
> -	}
>  
>  	rt2800_register_read(rt2x00dev, PBF_SYS_CTRL, &reg);
>  	rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000);




More information about the users mailing list