From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932554Ab1EaPxr (ORCPT ); Tue, 31 May 2011 11:53:47 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10103 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932408Ab1EaPxm (ORCPT ); Tue, 31 May 2011 11:53:42 -0400 Date: Tue, 31 May 2011 11:53:42 -0400 From: Prarit Bhargava To: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Cc: Prarit Bhargava Message-Id: <20110531155341.3615.68693.sendpatchset@prarit.bos.redhat.com> Content-Type: text/x-c; charset=us-ascii Subject: [RFC PATCH 28/35] drivers/usb changes for SMBIOS and System Firmware Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org drivers/usb changes for SMBIOS and System Firmware --- 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 #include #include -#include +#include #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 #include #include -#include +#include #include #include diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c index c300bd2f7..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.7.5.1