forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.2 KiB
70 lines
1.2 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* Copyright (C) 2014 Felix Fietkau <[email protected]> |
|
* Copyright (C) 2015 Jakub Kicinski <[email protected]> |
|
*/ |
|
|
|
#include "mt7601u.h" |
|
|
|
int mt7601u_wait_asic_ready(struct mt7601u_dev *dev) |
|
{ |
|
int i = 100; |
|
u32 val; |
|
|
|
do { |
|
if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) |
|
return -EIO; |
|
|
|
val = mt7601u_rr(dev, MT_MAC_CSR0); |
|
if (val && ~val) |
|
return 0; |
|
|
|
udelay(10); |
|
} while (i--); |
|
|
|
return -EIO; |
|
} |
|
|
|
bool mt76_poll(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val, |
|
int timeout) |
|
{ |
|
u32 cur; |
|
|
|
timeout /= 10; |
|
do { |
|
if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) |
|
return false; |
|
|
|
cur = mt7601u_rr(dev, offset) & mask; |
|
if (cur == val) |
|
return true; |
|
|
|
udelay(10); |
|
} while (timeout-- > 0); |
|
|
|
dev_err(dev->dev, "Error: Time out with reg %08x\n", offset); |
|
|
|
return false; |
|
} |
|
|
|
bool mt76_poll_msec(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val, |
|
int timeout) |
|
{ |
|
u32 cur; |
|
|
|
timeout /= 10; |
|
do { |
|
if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) |
|
return false; |
|
|
|
cur = mt7601u_rr(dev, offset) & mask; |
|
if (cur == val) |
|
return true; |
|
|
|
msleep(10); |
|
} while (timeout-- > 0); |
|
|
|
dev_err(dev->dev, "Error: Time out with reg %08x\n", offset); |
|
|
|
return false; |
|
}
|
|
|