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