[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, ®);
> + 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, ®);
> - 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, ®);
> - 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, ®);
> rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000);
More information about the users
mailing list