Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 28656
b: refs/heads/master
c: 02dd7ae
h: refs/heads/master
v: v3
  • Loading branch information
Jean Delvare authored and Greg Kroah-Hartman committed Jun 22, 2006
1 parent 5bb5c45 commit 7a6efa2
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 67 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6dcc19dfbc84b2ea5428711b7a47146b5b1788bb
refs/heads/master: 02dd7ae2892e5ceff111d032769c78d3377df970
121 changes: 55 additions & 66 deletions trunk/drivers/i2c/busses/i2c-i801.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
/* PCI Address Constants */
#define SMBBAR 4
#define SMBHSTCFG 0x040
#define SMBREV 0x008

/* Host configuration bits for SMBHSTCFG */
#define SMBHSTCFG_HST_EN 1
Expand Down Expand Up @@ -102,68 +101,6 @@ static struct pci_driver i801_driver;
static struct pci_dev *I801_dev;
static int isich4;

static int __devinit i801_setup(struct pci_dev *dev)
{
unsigned char temp;
int err;

I801_dev = dev;
if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) ||
(dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) ||
(dev->device == PCI_DEVICE_ID_INTEL_ESB_4))
isich4 = 1;
else
isich4 = 0;

err = pci_enable_device(dev);
if (err) {
dev_err(&dev->dev, "Failed to enable SMBus device (%d)\n",
err);
goto exit;
}

/* Determine the address of the SMBus area */
i801_smba = pci_resource_start(dev, SMBBAR);
if (!i801_smba) {
dev_err(&dev->dev, "SMBus base address uninitialized, "
"upgrade BIOS\n");
err = -ENODEV;
goto exit_disable;
}

err = pci_request_region(dev, SMBBAR, i801_driver.name);
if (err) {
dev_err(&dev->dev, "Failed to request SMBus region "
"0x%lx-0x%lx\n", i801_smba,
pci_resource_end(dev, SMBBAR));
goto exit_disable;
}

pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
if (!(temp & SMBHSTCFG_HST_EN)) {
dev_warn(&dev->dev, "enabling SMBus device\n");
temp |= SMBHSTCFG_HST_EN;
}
pci_write_config_byte(I801_dev, SMBHSTCFG, temp);

if (temp & SMBHSTCFG_SMB_SMI_EN)
dev_dbg(&dev->dev, "I801 using Interrupt SMI# for SMBus.\n");
else
dev_dbg(&dev->dev, "I801 using PCI Interrupt for SMBus.\n");

pci_read_config_byte(I801_dev, SMBREV, &temp);
dev_dbg(&dev->dev, "SMBREV = 0x%X\n", temp);
dev_dbg(&dev->dev, "I801_smba = 0x%X\n", i801_smba);

return 0;

exit_disable:
pci_disable_device(dev);
exit:
return err;
}

static int i801_transaction(void)
{
int temp;
Expand Down Expand Up @@ -527,17 +464,69 @@ MODULE_DEVICE_TABLE (pci, i801_ids);

static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
unsigned char temp;
int err;

if ((err = i801_setup(dev)))
return err;
I801_dev = dev;
if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) ||
(dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) ||
(dev->device == PCI_DEVICE_ID_INTEL_ESB_4))
isich4 = 1;
else
isich4 = 0;

err = pci_enable_device(dev);
if (err) {
dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
err);
goto exit;
}

/* Determine the address of the SMBus area */
i801_smba = pci_resource_start(dev, SMBBAR);
if (!i801_smba) {
dev_err(&dev->dev, "SMBus base address uninitialized, "
"upgrade BIOS\n");
err = -ENODEV;
goto exit_disable;
}

err = pci_request_region(dev, SMBBAR, i801_driver.name);
if (err) {
dev_err(&dev->dev, "Failed to request SMBus region "
"0x%lx-0x%lx\n", i801_smba,
pci_resource_end(dev, SMBBAR));
goto exit_disable;
}

pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
if (!(temp & SMBHSTCFG_HST_EN)) {
dev_info(&dev->dev, "Enabling SMBus device\n");
temp |= SMBHSTCFG_HST_EN;
}
pci_write_config_byte(I801_dev, SMBHSTCFG, temp);

if (temp & SMBHSTCFG_SMB_SMI_EN)
dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
else
dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");

/* set up the driverfs linkage to our parent device */
i801_adapter.dev.parent = &dev->dev;

snprintf(i801_adapter.name, I2C_NAME_SIZE,
"SMBus I801 adapter at %04lx", i801_smba);
return i2c_add_adapter(&i801_adapter);
err = i2c_add_adapter(&i801_adapter);
if (err) {
dev_err(&dev->dev, "Failed to add SMBus adapter\n");
goto exit_disable;
}

exit_disable:
pci_disable_device(dev);
exit:
return err;
}

static void __devexit i801_remove(struct pci_dev *dev)
Expand Down

0 comments on commit 7a6efa2

Please sign in to comment.