|
@@ -146,7 +146,6 @@ superio_exit(int base)
|
|
|
struct f71805f_data {
|
|
|
unsigned short addr;
|
|
|
const char *name;
|
|
|
- struct mutex lock;
|
|
|
struct class_device *class_dev;
|
|
|
|
|
|
struct mutex update_lock;
|
|
@@ -271,50 +270,42 @@ static inline u8 temp_to_reg(long val)
|
|
|
* Device I/O access
|
|
|
*/
|
|
|
|
|
|
+/* Must be called with data->update_lock held, except during initialization */
|
|
|
static u8 f71805f_read8(struct f71805f_data *data, u8 reg)
|
|
|
{
|
|
|
- u8 val;
|
|
|
-
|
|
|
- mutex_lock(&data->lock);
|
|
|
outb(reg, data->addr + ADDR_REG_OFFSET);
|
|
|
- val = inb(data->addr + DATA_REG_OFFSET);
|
|
|
- mutex_unlock(&data->lock);
|
|
|
-
|
|
|
- return val;
|
|
|
+ return inb(data->addr + DATA_REG_OFFSET);
|
|
|
}
|
|
|
|
|
|
+/* Must be called with data->update_lock held, except during initialization */
|
|
|
static void f71805f_write8(struct f71805f_data *data, u8 reg, u8 val)
|
|
|
{
|
|
|
- mutex_lock(&data->lock);
|
|
|
outb(reg, data->addr + ADDR_REG_OFFSET);
|
|
|
outb(val, data->addr + DATA_REG_OFFSET);
|
|
|
- mutex_unlock(&data->lock);
|
|
|
}
|
|
|
|
|
|
/* It is important to read the MSB first, because doing so latches the
|
|
|
- value of the LSB, so we are sure both bytes belong to the same value. */
|
|
|
+ value of the LSB, so we are sure both bytes belong to the same value.
|
|
|
+ Must be called with data->update_lock held, except during initialization */
|
|
|
static u16 f71805f_read16(struct f71805f_data *data, u8 reg)
|
|
|
{
|
|
|
u16 val;
|
|
|
|
|
|
- mutex_lock(&data->lock);
|
|
|
outb(reg, data->addr + ADDR_REG_OFFSET);
|
|
|
val = inb(data->addr + DATA_REG_OFFSET) << 8;
|
|
|
outb(++reg, data->addr + ADDR_REG_OFFSET);
|
|
|
val |= inb(data->addr + DATA_REG_OFFSET);
|
|
|
- mutex_unlock(&data->lock);
|
|
|
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
+/* Must be called with data->update_lock held, except during initialization */
|
|
|
static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val)
|
|
|
{
|
|
|
- mutex_lock(&data->lock);
|
|
|
outb(reg, data->addr + ADDR_REG_OFFSET);
|
|
|
outb(val >> 8, data->addr + DATA_REG_OFFSET);
|
|
|
outb(++reg, data->addr + ADDR_REG_OFFSET);
|
|
|
outb(val & 0xff, data->addr + DATA_REG_OFFSET);
|
|
|
- mutex_unlock(&data->lock);
|
|
|
}
|
|
|
|
|
|
static struct f71805f_data *f71805f_update_device(struct device *dev)
|
|
@@ -1150,7 +1141,6 @@ static int __devinit f71805f_probe(struct platform_device *pdev)
|
|
|
|
|
|
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
|
|
data->addr = res->start;
|
|
|
- mutex_init(&data->lock);
|
|
|
data->name = names[sio_data->kind];
|
|
|
mutex_init(&data->update_lock);
|
|
|
|