Changeset 2713

Show
Ignore:
Timestamp:
10/08/04 20:42:07 (10 years ago)
Author:
khali
Message:

Support secondary Super-I/O address (0x4e/0x4f).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/kernel/chips/pc87360.c

    r2629 r2713  
    7979 */ 
    8080 
    81 #define REG     0x2e    /* The register to read/write */ 
    82 #define VAL     0x2f    /* The value to read/write */ 
    83  
    8481#define DEV     0x07    /* Register: Logical device select */ 
    8582#define DEVID   0x20    /* Register: Device ID */ 
     
    9693#define LD_TEMP         2 
    9794 
    98 static inline void superio_outb(int reg, int val) 
    99 { 
    100         outb(reg, REG); 
    101         outb(val, VAL); 
    102 } 
    103  
    104 static inline int superio_inb(int reg) 
    105 { 
    106         outb(reg, REG); 
    107         return inb(VAL); 
    108 } 
    109  
    110 static inline void superio_exit(void) 
    111 { 
    112         outb(0x02, REG); 
    113         outb(0x02, VAL); 
     95static inline void superio_outb(int sioaddr, int reg, int val) 
     96{ 
     97        outb(reg, sioaddr); 
     98        outb(val, sioaddr+1); 
     99} 
     100 
     101static inline int superio_inb(int sioaddr, int reg) 
     102{ 
     103        outb(reg, sioaddr); 
     104        return inb(sioaddr+1); 
     105} 
     106 
     107static inline void superio_exit(int sioaddr) 
     108{ 
     109        outb(0x02, sioaddr); 
     110        outb(0x02, sioaddr+1); 
    114111} 
    115112 
     
    242239static void pc87360_init_client(struct i2c_client *client, int use_thermistors); 
    243240static void pc87360_update_client(struct i2c_client *client); 
    244 static int pc87360_find(u8 *devid, int *address); 
    245241 
    246242 
     
    476472} 
    477473 
    478 static int pc87360_find(u8 *devid, int *address) 
     474static int pc87360_find(int sioaddr, u8 *devid, int *address) 
    479475{ 
    480476        u16 val; 
     
    485481 
    486482        /* Identify device */ 
    487         val = superio_inb(DEVID); 
     483        val = superio_inb(sioaddr, DEVID); 
    488484        switch (val) { 
    489485        case 0xE1: /* PC87360 */ 
     
    497493                break; 
    498494        default: 
    499                 superio_exit(); 
     495                superio_exit(sioaddr); 
    500496                return -ENODEV; 
    501497        } 
     
    505501        for (i = 0; i < nrdev; i++) { 
    506502                /* select logical device */ 
    507                 superio_outb(DEV, logdev[i]); 
    508  
    509                 val = superio_inb(ACT); 
     503                superio_outb(sioaddr, DEV, logdev[i]); 
     504 
     505                val = superio_inb(sioaddr, ACT); 
    510506                if (!(val & 0x01)) { 
    511507                        printk(KERN_INFO "pc87360.o: Device 0x%02x not " 
     
    514510                } 
    515511 
    516                 val = (superio_inb(BASE) << 8) 
    517                     | superio_inb(BASE + 1); 
     512                val = (superio_inb(sioaddr, BASE) << 8) 
     513                    | superio_inb(sioaddr, BASE + 1); 
    518514                if (!val) { 
    519515                        printk(KERN_INFO "pc87360.o: Base address not set for " 
     
    525521 
    526522                if (i==0) { /* Fans */ 
    527                         confreg[0] = superio_inb(0xF0); 
    528                         confreg[1] = superio_inb(0xF1); 
     523                        confreg[0] = superio_inb(sioaddr, 0xF0); 
     524                        confreg[1] = superio_inb(sioaddr, 0xF1); 
    529525                         
    530526#ifdef DEBUG 
     
    545541                                   specific, just that we won't need them if 
    546542                                   we don't use the VLM device */ 
    547                                 confreg[2] = superio_inb(0x2B); 
    548                                 confreg[3] = superio_inb(0x25); 
     543                                confreg[2] = superio_inb(sioaddr, 0x2B); 
     544                                confreg[3] = superio_inb(sioaddr, 0x25); 
    549545 
    550546                                if (confreg[2] & 0x40) { 
     
    562558        } 
    563559 
    564         superio_exit(); 
     560        superio_exit(sioaddr); 
    565561        return 0; 
    566562} 
     
    13191315        printk(KERN_INFO "pc87360.o version %s (%s)\n", LM_VERSION, LM_DATE); 
    13201316 
    1321         if (pc87360_find(&devid, extra_isa)) { 
     1317        if (pc87360_find(0x2e, &devid, extra_isa) 
     1318         && pc87360_find(0x4e, &devid, extra_isa)) { 
    13221319                printk(KERN_WARNING "pc87360.o: PC8736x not detected, " 
    13231320                       "module not inserted.\n");