|
|
@@ -106,6 +106,13 @@ static const char *logdev_str[2] = { DRVNAME " FMC", DRVNAME " HMC" };
|
|
|
#define LD_IN 1
|
|
|
#define LD_TEMP 1
|
|
|
|
|
|
+static inline int superio_enter(int sioaddr)
|
|
|
+{
|
|
|
+ if (!request_muxed_region(sioaddr, 2, DRVNAME))
|
|
|
+ return -EBUSY;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline void superio_outb(int sioaddr, int reg, int val)
|
|
|
{
|
|
|
outb(reg, sioaddr);
|
|
|
@@ -122,6 +129,7 @@ static inline void superio_exit(int sioaddr)
|
|
|
{
|
|
|
outb(0x02, sioaddr);
|
|
|
outb(0x02, sioaddr + 1);
|
|
|
+ release_region(sioaddr, 2);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1220,7 +1228,11 @@ static int __init pc87427_find(int sioaddr, struct pc87427_sio_data *sio_data)
|
|
|
{
|
|
|
u16 val;
|
|
|
u8 cfg, cfg_b;
|
|
|
- int i, err = 0;
|
|
|
+ int i, err;
|
|
|
+
|
|
|
+ err = superio_enter(sioaddr);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
|
|
|
/* Identify device */
|
|
|
val = force_id ? force_id : superio_inb(sioaddr, SIOREG_DEVID);
|