As part of the new SMBIOS and System Firmware code:

- Replace old dmi* structures and functions with new sysfw* and smbios*
structures and functions in individual drivers
- cleanup sysfw_id lookup tables

Cc: [email protected]
Signed-off-by: Prarit Bhargava <[email protected]>
---
 drivers/i2c/busses/i2c-i801.c    |   76 ++++++++++---------------------------
 drivers/i2c/busses/i2c-nforce2.c |   12 +++---
 drivers/i2c/busses/i2c-piix4.c   |   24 ++++++------
 3 files changed, 39 insertions(+), 73 deletions(-)

diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index ab26840..7e19ea2 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -73,7 +73,8 @@
 #include <linux/i2c.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
-#include <linux/dmi.h>
+#include <linux/smbios.h>
+#include <linux/sysfw.h>
 #include <linux/slab.h>
 
 /* I801 SMBus address offsets */
@@ -669,69 +670,34 @@ static void __init input_apanel_init(void)
        iounmap(bios);
 }
 
-struct dmi_onboard_device_info {
+struct smbios_onboard_device_info {
        const char *name;
-       u8 type;
        unsigned short i2c_addr;
        const char *i2c_type;
 };
 
-static struct dmi_onboard_device_info __devinitdata dmi_devices[] = {
-       { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
-       { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
-       { "Hades",  DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
+static struct smbios_onboard_device_info __devinitdata smbios_devices[] = {
+       { "Syleus", 0x73, "fscsyl" },
+       { "SYLEUS", 0x73, "fscsyl" },
+       { "Hermes", 0x73, "fscher" },
+       { "HERMES", 0x73, "fscher" },
+       { "Hades", 0x73, "fschds" },
+       { "HADES", 0x73, "fschds" },
 };
 
-static void __devinit dmi_check_onboard_device(u8 type, const char *name,
-                                              struct i2c_adapter *adap)
+static void __devinit smbios_check_fschmd(struct i2c_adapter *adap)
 {
        int i;
        struct i2c_board_info info;
 
-       for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
-               /* & ~0x80, ignore enabled/disabled bit */
-               if ((type & ~0x80) != dmi_devices[i].type)
-                       continue;
-               if (strcasecmp(name, dmi_devices[i].name))
-                       continue;
-
-               memset(&info, 0, sizeof(struct i2c_board_info));
-               info.addr = dmi_devices[i].i2c_addr;
-               strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
-               i2c_new_device(adap, &info);
-               break;
-       }
-}
-
-/* We use our own function to check for onboard devices instead of
-   dmi_find_device() as some buggy BIOS's have the devices we are interested
-   in marked as disabled */
-static void __devinit dmi_check_onboard_devices(const struct dmi_header *dm,
-                                               void *adap)
-{
-       int i, count;
-
-       if (dm->type != 10)
-               return;
-
-       count = (dm->length - sizeof(struct dmi_header)) / 2;
-       for (i = 0; i < count; i++) {
-               const u8 *d = (char *)(dm + 1) + (i * 2);
-               const char *name = ((char *) dm) + dm->length;
-               u8 type = d[0];
-               u8 s = d[1];
-
-               if (!s)
-                       continue;
-               s--;
-               while (s > 0 && name[0]) {
-                       name += strlen(name) + 1;
-                       s--;
+       for (i = 0; i < ARRAY_SIZE(onboard); i++) {
+               /* some buggy BIOSes have the devices disabled */
+               if (smbios_is_onboard_device(onboard[i].name, 1)) {
+                       memset(&info, 0, sizeof(struct i2c_board_info));
+                       info.addr = onboard[i].i2c_addr;
+                       strlcpy(info.type, onboard[i].i2c_type, I2C_NAME_SIZE);
+                       i2c_new_device(adap, &info);
                }
-               if (name[0] == 0) /* Bogus string reference */
-                       continue;
-
-               dmi_check_onboard_device(type, name, adap);
        }
 }
 
@@ -751,8 +717,8 @@ static void __devinit i801_probe_optional_slaves(struct 
i801_priv *priv)
                i2c_new_device(&priv->adapter, &info);
        }
 
-       if (dmi_name_in_vendors("FUJITSU"))
-               dmi_walk(dmi_check_onboard_devices, &priv->adapter);
+       if (sysfw_vendor_is("FUJITSU"))
+               smbios_check_fschmd(&priv->adapter);
 }
 #else
 static void __init input_apanel_init(void) {}
@@ -927,7 +893,7 @@ static struct pci_driver i801_driver = {
 
 static int __init i2c_i801_init(void)
 {
-       if (dmi_name_in_vendors("FUJITSU"))
+       if (sysfw_vendor_is("FUJITSU"))
                input_apanel_init();
        return pci_register_driver(&i801_driver);
 }
diff --git a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
index ff1e127..458623e 100644
--- a/drivers/i2c/busses/i2c-nforce2.c
+++ b/drivers/i2c/busses/i2c-nforce2.c
@@ -54,7 +54,7 @@
 #include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/delay.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 #include <linux/acpi.h>
 #include <linux/slab.h>
 #include <linux/io.h>
@@ -117,15 +117,15 @@ struct nforce2_smbus {
 #define MAX_TIMEOUT    100
 
 /* We disable the second SMBus channel on these boards */
-static struct dmi_system_id __devinitdata nforce2_dmi_blacklist2[] = {
+static struct sysfw_id __devinitdata nforce2_id_blacklist2[] = {
        {
                .ident = "DFI Lanparty NF4 Expert",
                .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "DFI Corp,LTD"),
-                       DMI_MATCH(DMI_BOARD_NAME, "LP UT NF4 Expert"),
+                       SYSFW_MATCH(SYSFW_BOARD_VENDOR, "DFI Corp,LTD"),
+                       SYSFW_MATCH(SYSFW_BOARD_NAME, "LP UT NF4 Expert"),
                },
        },
-       { }
+       {}
 };
 
 static struct pci_driver nforce2_driver;
@@ -408,7 +408,7 @@ static int __devinit nforce2_probe(struct pci_dev *dev, 
const struct pci_device_
                smbuses[0].base = 0;    /* to have a check value */
 
        /* SMBus adapter 2 */
-       if (dmi_check_system(nforce2_dmi_blacklist2)) {
+       if (sysfw_callback(nforce2_id_blacklist2)) {
                dev_err(&dev->dev, "Disabling SMB2 for safety reasons.\n");
                res2 = -EPERM;
                smbuses[1].base = 0;
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
index 6d14ac2..12b4019 100644
--- a/drivers/i2c/busses/i2c-piix4.c
+++ b/drivers/i2c/busses/i2c-piix4.c
@@ -37,7 +37,7 @@
 #include <linux/ioport.h>
 #include <linux/i2c.h>
 #include <linux/init.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
 
@@ -99,32 +99,32 @@ static int srvrworks_csb5_delay;
 static struct pci_driver piix4_driver;
 static struct i2c_adapter piix4_adapter;
 
-static struct dmi_system_id __devinitdata piix4_dmi_blacklist[] = {
+static struct sysfw_id __devinitdata piix4_id_blacklist[] = {
        {
                .ident = "Sapphire AM2RD790",
                .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "SAPPHIRE Inc."),
-                       DMI_MATCH(DMI_BOARD_NAME, "PC-AM2RD790"),
+                       SYSFW_MATCH(SYSFW_BOARD_VENDOR, "SAPPHIRE Inc."),
+                       SYSFW_MATCH(SYSFW_BOARD_NAME, "PC-AM2RD790"),
                },
        },
        {
                .ident = "DFI Lanparty UT 790FX",
                .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "DFI Inc."),
-                       DMI_MATCH(DMI_BOARD_NAME, "LP UT 790FX"),
+                       SYSFW_MATCH(SYSFW_BOARD_VENDOR, "DFI Inc."),
+                       SYSFW_MATCH(SYSFW_BOARD_NAME, "LP UT 790FX"),
                },
        },
-       { }
+       {}
 };
 
 /* The IBM entry is in a separate table because we only check it
    on Intel-based systems */
-static struct dmi_system_id __devinitdata piix4_dmi_ibm[] = {
+static struct sysfw_id __devinitdata piix4_id_ibm[] = {
        {
                .ident = "IBM",
-               .matches = { DMI_MATCH(DMI_SYS_VENDOR, "IBM"), },
+               .matches = { SYSFW_MATCH(SYSFW_SYS_VENDOR, "IBM"), },
        },
-       { },
+       {},
 };
 
 static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
@@ -138,14 +138,14 @@ static int __devinit piix4_setup(struct pci_dev 
*PIIX4_dev,
 
        /* On some motherboards, it was reported that accessing the SMBus
           caused severe hardware problems */
-       if (dmi_check_system(piix4_dmi_blacklist)) {
+       if (sysfw_callback(piix4_id_blacklist)) {
                dev_err(&PIIX4_dev->dev,
                        "Accessing the SMBus on this system is unsafe!\n");
                return -EPERM;
        }
 
        /* Don't access SMBus on IBM systems which get corrupted eeproms */
-       if (dmi_check_system(piix4_dmi_ibm) &&
+       if (sysfw_callback(piix4_id_ibm) &&
                        PIIX4_dev->vendor == PCI_VENDOR_ID_INTEL) {
                dev_err(&PIIX4_dev->dev, "IBM system detected; this module "
                        "may corrupt your serial eeprom! Refusing to load "
-- 
1.6.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to