36 #include <linux/module.h>
37 #include <linux/kernel.h>
38 #include <linux/slab.h>
40 #include <linux/i2c.h>
52 unsigned short flags,
char read_write,
59 if (addr == 0x4c || (addr & 0xfc) == 0x50 || (addr & 0xfc) == 0x30
65 error =
amd756_smbus.algo->smbus_xfer(adap, addr, flags, read_write,
77 static u8 last_channels;
80 unsigned short flags,
char read_write,
88 if (addr != 0x4c && (addr & 0xfc) != 0x50 && (addr & 0xfc) != 0x30)
93 if (last_channels != channels) {
105 error =
amd756_smbus.algo->smbus_xfer(adap, addr, flags, read_write,
106 command, size, data);
114 unsigned short flags,
char read_write,
115 u8 command,
int size,
119 return amd756_access_channel(adap, addr, flags, read_write, command,
124 unsigned short flags,
char read_write,
125 u8 command,
int size,
129 return amd756_access_channel(adap, addr, flags, read_write, command,
134 unsigned short flags,
char read_write,
135 u8 command,
int size,
139 return amd756_access_channel(adap, addr, flags, read_write, command,
144 unsigned short flags,
char read_write,
145 u8 command,
int size,
149 return amd756_access_channel(adap, addr, flags, read_write, command,
153 static int __init amd756_s4882_init(
void)
162 ioconfig.byte = 0x00;
180 if (!(s4882_adapter = kzalloc(5 *
sizeof(
struct i2c_adapter),
193 s4882_algo[0].
smbus_xfer = amd756_access_virt0;
195 s4882_adapter[0].
algo = s4882_algo;
197 for (i = 1; i < 5; i++) {
200 snprintf(s4882_adapter[i].
name,
sizeof(s4882_adapter[i].name),
201 "SMBus 8111 adapter (CPU%d)", i-1);
202 s4882_adapter[
i].
algo = s4882_algo+
i;
205 s4882_algo[1].
smbus_xfer = amd756_access_virt1;
206 s4882_algo[2].
smbus_xfer = amd756_access_virt2;
207 s4882_algo[3].
smbus_xfer = amd756_access_virt3;
208 s4882_algo[4].
smbus_xfer = amd756_access_virt4;
211 for (i = 0; i < 5; i++) {
215 "Virtual adapter %d registration "
216 "failed, module not inserted\n", i);
217 for (i--; i >= 0; i--)
229 kfree(s4882_adapter);
230 s4882_adapter =
NULL;
238 static void __exit amd756_s4882_exit(
void)
243 for (i = 0; i < 5; i++)
245 kfree(s4882_adapter);
246 s4882_adapter =
NULL;
254 "Physical bus restoration failed\n");