[PATCH 27/34] drivers/usb changes for SMBIOS and System Firmware

From: Prarit Bhargava
Date: Mon Jul 18 2011 - 09:13:57 EST


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
- add exactmatch functionality

Cc: linux-usb@xxxxxxxxxxxxxxx
Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
---
drivers/usb/host/pci-quirks.c | 19 ++++++++++++++-----
drivers/usb/host/uhci-hcd.c | 2 +-
drivers/usb/host/uhci-pci.c | 15 +++++++++++----
3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index fd93061..ae2a681 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -14,7 +14,7 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/acpi.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>
#include "pci-quirks.h"
#include "xhci-ext-caps.h"

@@ -507,6 +507,18 @@ static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev)
iounmap(base);
}

+static const struct sysfw_id __devinitdata ehci_bios_handoff_table[] = {
+ {
+ .ident = "Pegatron Lucid (ExoPC) Tablet",
+ .matches = {
+ SYSFW_MATCH(SYSFW_BOARD_NAME, "EXOPG06411"),
+ SYSFW_MATCH(SYSFW_BIOS_VERSION, "Lucid-CE-133"),
+ },
+ .exactmatch = 1,
+ },
+ {}
+};
+
static void __devinit ehci_bios_handoff(struct pci_dev *pdev,
void __iomem *op_reg_base,
u32 cap, u8 offset)
@@ -517,10 +529,7 @@ static void __devinit ehci_bios_handoff(struct pci_dev *pdev,
* seconds trying the handoff on its unused controller. Skip
* it. */
if (pdev->vendor == 0x8086 && pdev->device == 0x283a) {
- const char *dmi_bn = dmi_get_system_info(DMI_BOARD_NAME);
- const char *dmi_bv = dmi_get_system_info(DMI_BIOS_VERSION);
- if (dmi_bn && !strcmp(dmi_bn, "EXOPG06411") &&
- dmi_bv && !strcmp(dmi_bv, "Lucid-CE-133"))
+ if (sysfw_callback(ehci_bios_handoff_table))
try_handoff = 0;
}

diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index fba99b1..1b03b7a 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -40,7 +40,7 @@
#include <linux/usb.h>
#include <linux/usb/hcd.h>
#include <linux/bitops.h>
-#include <linux/dmi.h>
+#include <linux/sysfw.h>

#include <asm/uaccess.h>
#include <asm/io.h>
diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c
index c300bd2..ef3de10 100644
--- a/drivers/usb/host/uhci-pci.c
+++ b/drivers/usb/host/uhci-pci.c
@@ -88,18 +88,25 @@ static int uhci_pci_resume_detect_interrupts_are_broken(struct uhci_hcd *uhci)
return 0;
}

+static const struct sysfw_id bad_Asus_board_id[] = {
+ {
+ .ident = "A7V8X",
+ .matches = {
+ SYSFW_MATCH(SYSFW_BOARD_NAME, "A7V8X"),
+ },
+ },
+ {}
+};
+
static int uhci_pci_global_suspend_mode_is_broken(struct uhci_hcd *uhci)
{
int port;
- const char *sys_info;
- static const char bad_Asus_board[] = "A7V8X";

/* One of Asus's motherboards has a bug which causes it to
* wake up immediately from suspend-to-RAM if any of the ports
* are connected. In such cases we will not set EGSM.
*/
- sys_info = dmi_get_system_info(DMI_BOARD_NAME);
- if (sys_info && !strcmp(sys_info, bad_Asus_board)) {
+ if (sysfw_callback(bad_Asus_board_id)) {
for (port = 0; port < uhci->rh_numports; ++port) {
if (inw(uhci->io_addr + USBPORTSC1 + port * 2) &
USBPORTSC_CCS)
--
1.6.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/