rt2x00: Fix BUG on rt2800usb when trying to read eFuse EEPROM.
Current tree hits a BUG_ON in rt2x00_regbusy_read, because the eFuse EEPROM reading code of rt2800lib uses the function without the csr_mutex locked. Fix this by locking the csr_mutex for the of the EEPROM reading cycly and using the _lock variants of the register reading and writing functions. This also introcudes the register_read_lock function pointer in the rt2800_ops structure. Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com> Acked-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
16475b095a
commit
31a4cf1f22
@@ -23,6 +23,8 @@
|
||||
struct rt2800_ops {
|
||||
void (*register_read)(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int offset, u32 *value);
|
||||
void (*register_read_lock)(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int offset, u32 *value);
|
||||
void (*register_write)(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int offset, u32 value);
|
||||
void (*register_write_lock)(struct rt2x00_dev *rt2x00dev,
|
||||
@@ -49,6 +51,15 @@ static inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
|
||||
rt2800ops->register_read(rt2x00dev, offset, value);
|
||||
}
|
||||
|
||||
static inline void rt2800_register_read_lock(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int offset,
|
||||
u32 *value)
|
||||
{
|
||||
const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
|
||||
|
||||
rt2800ops->register_read_lock(rt2x00dev, offset, value);
|
||||
}
|
||||
|
||||
static inline void rt2800_register_write(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int offset,
|
||||
u32 value)
|
||||
|
Reference in New Issue
Block a user