123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /*
- * 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;
- }
|