2 * Copyright 2004 Tyan Computer
6 #include <console/console.h>
7 #include <device/device.h>
8 #include <device/pci.h>
9 #include <device/pci_ids.h>
10 #include <device/pci_ops.h>
11 #include <device/smbus.h>
15 #include "ck804_smbus.h"
17 static int lsmbus_recv_byte(device_t dev)
23 device = dev->path.i2c.device;
24 pbus = get_pbus_smbus(dev);
26 res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));
28 return do_smbus_recv_byte(res->base, device);
31 static int lsmbus_send_byte(device_t dev, uint8_t val)
37 device = dev->path.i2c.device;
38 pbus = get_pbus_smbus(dev);
40 res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));
42 return do_smbus_send_byte(res->base, device, val);
45 static int lsmbus_read_byte(device_t dev, uint8_t address)
51 device = dev->path.i2c.device;
52 pbus = get_pbus_smbus(dev);
54 res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));
56 return do_smbus_read_byte(res->base, device, address);
59 static int lsmbus_write_byte(device_t dev, uint8_t address, uint8_t val)
65 device = dev->path.i2c.device;
66 pbus = get_pbus_smbus(dev);
68 res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));
70 return do_smbus_write_byte(res->base, device, address, val);
73 static struct smbus_bus_operations lops_smbus_bus = {
74 .recv_byte = lsmbus_recv_byte,
75 .send_byte = lsmbus_send_byte,
76 .read_byte = lsmbus_read_byte,
77 .write_byte = lsmbus_write_byte,
80 static void lpci_set_subsystem(device_t dev, unsigned vendor, unsigned device)
82 pci_write_config32(dev, 0x40,
83 ((device & 0xffff) << 16) | (vendor & 0xffff));
86 static struct pci_operations lops_pci = {
87 .set_subsystem = lpci_set_subsystem,
90 static struct device_operations smbus_ops = {
91 .read_resources = pci_dev_read_resources,
92 .set_resources = pci_dev_set_resources,
93 .enable_resources = pci_dev_enable_resources,
95 .scan_bus = scan_static_bus,
96 // .enable = ck804_enable,
98 .ops_smbus_bus = &lops_smbus_bus,
101 static const struct pci_driver smbus_driver __pci_driver = {
103 .vendor = PCI_VENDOR_ID_NVIDIA,
104 .device = PCI_DEVICE_ID_NVIDIA_CK804_SM,