79 lines
1.6 KiB
C
79 lines
1.6 KiB
C
/*
|
|
* Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
|
|
* Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2
|
|
* as published by the Free Software Foundation
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#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;
|
|
}
|