11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef W83977AF_H 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define W83977AF_H 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define W977_EFIO_BASE 0x370 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define W977_EFIO2_BASE 0x3f0 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define W977_DEVICE_IR 0x06 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Enter extended function mode 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void w977_efm_enter(unsigned int efio) 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x87, efio); 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x87, efio); 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Select a device to configure 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void w977_select_device(__u8 devnum, unsigned int efio) 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x07, efio); 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(devnum, efio+1); 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Write a byte to a register 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void w977_write_reg(__u8 reg, __u8 value, unsigned int efio) 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(reg, efio); 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(value, efio+1); 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * read a byte from a register 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __u8 w977_read_reg(__u8 reg, unsigned int efio) 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(reg, efio); 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return inb(efio+1); 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Exit extended function mode 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void w977_efm_exit(unsigned int efio) 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xAA, efio); 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 54