2 * Copyright 2004 Tyan Computer
5 #include <console/console.h>
6 #include <device/device.h>
7 #include <device/pci.h>
8 #include <device/pci_ids.h>
9 #include <device/pci_ops.h>
10 #include <device/smbus.h>
14 #include "ck804_smbus.h"
16 static int lsmbus_recv_byte(device_t dev)
22 device = dev->path.u.i2c.device;
23 pbus = get_pbus_smbus(dev);
25 res = find_resource(pbus->dev, 0x20 + (pbus->link * 4));
27 return do_smbus_recv_byte(res->base, device);
30 static int lsmbus_send_byte(device_t dev, uint8_t val)
36 device = dev->path.u.i2c.device;
37 pbus = get_pbus_smbus(dev);
39 res = find_resource(pbus->dev, 0x20 + (pbus->link * 4));
41 return do_smbus_send_byte(res->base, device, val);
44 static int lsmbus_read_byte(device_t dev, uint8_t address)
50 device = dev->path.u.i2c.device;
51 pbus = get_pbus_smbus(dev);
53 res = find_resource(pbus->dev, 0x20 + (pbus->link * 4));
55 return do_smbus_read_byte(res->base, device, address);
58 static int lsmbus_write_byte(device_t dev, uint8_t address, uint8_t val)
64 device = dev->path.u.i2c.device;
65 pbus = get_pbus_smbus(dev);
67 res = find_resource(pbus->dev, 0x20 + (pbus->link * 4));
69 return do_smbus_write_byte(res->base, device, address, val);
71 static struct smbus_bus_operations lops_smbus_bus = {
72 .recv_byte = lsmbus_recv_byte,
73 .send_byte = lsmbus_send_byte,
74 .read_byte = lsmbus_read_byte,
75 .write_byte = lsmbus_write_byte,
78 static void lpci_set_subsystem(device_t dev, unsigned vendor, unsigned device)
80 pci_write_config32(dev, 0x40,
81 ((device & 0xffff) << 16) | (vendor & 0xffff));
84 static struct pci_operations lops_pci = {
85 .set_subsystem = lpci_set_subsystem,
87 static struct device_operations smbus_ops = {
88 .read_resources = pci_dev_read_resources,
89 .set_resources = pci_dev_set_resources,
90 .enable_resources = pci_dev_enable_resources,
92 .scan_bus = scan_static_bus,
93 // .enable = ck804_enable,
95 .ops_smbus_bus = &lops_smbus_bus,
97 static const struct pci_driver smbus_driver __pci_driver = {
99 .vendor = PCI_VENDOR_ID_NVIDIA,
100 .device = PCI_DEVICE_ID_NVIDIA_CK804_SM,