c202a3008e13853feebaf8e07e36f068e81888bc
[coreboot.git] / src / southbridge / intel / esb6300 / esb6300_smbus.c
1 #include <device/device.h>
2 #include <device/path.h>
3 #include <device/pci.h>
4 #include <device/pci_ids.h>
5 #include <device/pci_ops.h>
6 #include <device/smbus.h>
7 #include <arch/io.h>
8 #include "esb6300.h"
9 #include "esb6300_smbus.h"
10
11 static int lsmbus_read_byte(struct bus *bus, device_t dev, uint8_t address)
12 {
13         unsigned device;
14         struct resource *res;
15
16         device = dev->path.u.i2c.device;
17         res = find_resource(bus->dev, 0x20);
18         
19         return do_smbus_read_byte(res->base, device, address);
20 }
21
22 static struct smbus_bus_operations lops_smbus_bus = {
23         .read_byte  = lsmbus_read_byte,
24 };
25 static struct pci_operations lops_pci = {
26         /* The subsystem id follows the ide controller */
27         .set_subsystem = 0,
28 };
29 static struct device_operations smbus_ops = {
30         .read_resources   = pci_dev_read_resources,
31         .set_resources    = pci_dev_set_resources,
32         .enable_resources = pci_dev_enable_resources,
33         .init             = 0,
34         .scan_bus         = scan_static_bus,
35         .enable           = esb6300_enable,
36         .ops_pci          = &lops_pci,
37         .ops_smbus_bus    = &lops_smbus_bus,
38 };
39
40 static const struct pci_driver smbus_driver __pci_driver = {
41         .ops    = &smbus_ops,
42         .vendor = PCI_VENDOR_ID_INTEL,
43         .device = PCI_DEVICE_ID_INTEL_6300ESB_SMB,
44 };
45