+ /* enable superio @ 0x4e and keyboard/mouse address decoding */
+ pci_write_config_byte(dev, 0x63, 0x90);
I doubt that comment is accurate.
+ outb(0x07, 0x4e); /* device selector register */
+ outb(0x07, 0x4f); /* select keyboard registers (device 7) */
Please abstract out the 4e,4f access sequence, so
you can just say write_sio(0x30, 1); or similar.
+ /* Enable superio runtime registers for gpio in pci i/o space */
+ outb(0x20, 0x4e); /* device id register */
This write is superfluous as far as I can see.
Segher