From: Alan Cox Date: Wed, 23 May 2007 21:39:01 +0000 (+0100) Subject: pata_via: Handle laptops via DMI X-Git-Tag: v2.6.22-rc3~10^2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf5792d20cdc9a88abf9984a2224f57de1952926;p=linux-2.6 pata_via: Handle laptops via DMI Oh the joy of saving a fraction of a cent using short 40 wire cables and not faking 80wire Teach the VIA driver that there are some systems we need to know are magically wired for high speeds. Signed-off-by: Alan Cox Tested-by: Francis Russell Signed-off-by: Jeff Garzik --- diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index e4c71f76bd..708dfc0c71 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c @@ -60,6 +60,7 @@ #include #include #include +#include #define DRV_NAME "pata_via" #define DRV_VERSION "0.3.1" @@ -122,6 +123,31 @@ static const struct via_isa_bridge { { NULL } }; + +/* + * Cable special cases + */ + +static struct dmi_system_id cable_dmi_table[] = { + { + .ident = "Acer Ferrari 3400", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Acer,Inc."), + DMI_MATCH(DMI_BOARD_NAME, "Ferrari 3400"), + }, + }, + { } +}; + +static int via_cable_override(struct pci_dev *pdev) +{ + /* Systems by DMI */ + if (dmi_check_system(cable_dmi_table)) + return 1; + return 0; +} + + /** * via_cable_detect - cable detection * @ap: ATA port @@ -139,6 +165,9 @@ static int via_cable_detect(struct ata_port *ap) { struct pci_dev *pdev = to_pci_dev(ap->host->dev); u32 ata66; + if (via_cable_override(pdev)) + return ATA_CBL_PATA40_SHORT; + /* Early chips are 40 wire */ if ((config->flags & VIA_UDMA) < VIA_UDMA_66) return ATA_CBL_PATA40;