|
|
@@ -96,17 +96,23 @@ superio_select(int base, int ld)
|
|
|
outb(ld, base + 1);
|
|
|
}
|
|
|
|
|
|
-static inline void
|
|
|
+static inline int
|
|
|
superio_enter(int base)
|
|
|
{
|
|
|
+ if (!request_muxed_region(base, 2, DRVNAME))
|
|
|
+ return -EBUSY;
|
|
|
+
|
|
|
outb(0x87, base);
|
|
|
outb(0x87, base);
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static inline void
|
|
|
superio_exit(int base)
|
|
|
{
|
|
|
outb(0xaa, base);
|
|
|
+ release_region(base, 2);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1561,7 +1567,7 @@ exit:
|
|
|
static int __init f71805f_find(int sioaddr, unsigned short *address,
|
|
|
struct f71805f_sio_data *sio_data)
|
|
|
{
|
|
|
- int err = -ENODEV;
|
|
|
+ int err;
|
|
|
u16 devid;
|
|
|
|
|
|
static const char * const names[] = {
|
|
|
@@ -1569,8 +1575,11 @@ static int __init f71805f_find(int sioaddr, unsigned short *address,
|
|
|
"F71872F/FG or F71806F/FG",
|
|
|
};
|
|
|
|
|
|
- superio_enter(sioaddr);
|
|
|
+ err = superio_enter(sioaddr);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
|
|
|
+ err = -ENODEV;
|
|
|
devid = superio_inw(sioaddr, SIO_REG_MANID);
|
|
|
if (devid != SIO_FINTEK_ID)
|
|
|
goto exit;
|