Commit 08851d6e authored by Jean Delvare's avatar Jean Delvare Committed by Jean Delvare

i2c-nforce2: Disable the second SMBus channel on the DFI Lanparty NF4 Expert

There is a strange chip at 0x2e on the second SMBus channel of the
DFI Lanparty NF4 Expert motherboard. Accessing the chip reboots the
system. As there's nothing interesting on this SMBus channel, the
easiest and safest thing to do is to disable it on that board.

This is a better fix to bug #5889 than the it87 driver update that was
done originally:
http://bugzilla.kernel.org/show_bug.cgi?id=5889Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent 710cf7e7
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/dmi.h>
#include <asm/io.h> #include <asm/io.h>
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -109,6 +110,18 @@ struct nforce2_smbus { ...@@ -109,6 +110,18 @@ struct nforce2_smbus {
/* Misc definitions */ /* Misc definitions */
#define MAX_TIMEOUT 100 #define MAX_TIMEOUT 100
/* We disable the second SMBus channel on these boards */
static struct dmi_system_id __devinitdata nforce2_dmi_blacklist2[] = {
{
.ident = "DFI Lanparty NF4 Expert",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "DFI Corp,LTD"),
DMI_MATCH(DMI_BOARD_NAME, "LP UT NF4 Expert"),
},
},
{ }
};
static struct pci_driver nforce2_driver; static struct pci_driver nforce2_driver;
static void nforce2_abort(struct i2c_adapter *adap) static void nforce2_abort(struct i2c_adapter *adap)
...@@ -367,10 +380,17 @@ static int __devinit nforce2_probe(struct pci_dev *dev, const struct pci_device_ ...@@ -367,10 +380,17 @@ static int __devinit nforce2_probe(struct pci_dev *dev, const struct pci_device_
smbuses[0].base = 0; /* to have a check value */ smbuses[0].base = 0; /* to have a check value */
} }
/* SMBus adapter 2 */ /* SMBus adapter 2 */
res2 = nforce2_probe_smb(dev, 5, NFORCE_PCI_SMB2, &smbuses[1], "SMB2"); if (dmi_check_system(nforce2_dmi_blacklist2)) {
if (res2 < 0) { dev_err(&dev->dev, "Disabling SMB2 for safety reasons.\n");
dev_err(&dev->dev, "Error probing SMB2.\n"); res2 = -EPERM;
smbuses[1].base = 0; /* to have a check value */ smbuses[1].base = 0;
} else {
res2 = nforce2_probe_smb(dev, 5, NFORCE_PCI_SMB2, &smbuses[1],
"SMB2");
if (res2 < 0) {
dev_err(&dev->dev, "Error probing SMB2.\n");
smbuses[1].base = 0; /* to have a check value */
}
} }
if ((res1 < 0) && (res2 < 0)) { if ((res1 < 0) && (res2 < 0)) {
/* we did not find even one of the SMBuses, so we give up */ /* we did not find even one of the SMBuses, so we give up */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment