diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-07-09 17:17:58 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-07-09 17:17:58 -0400 |
commit | 7207626f47a3d66ce361bad197eefca4b8a6fa17 (patch) | |
tree | 57f386c2e27656dcc13b6f1a4804bf79f141a9fb /drivers/ide | |
parent | 49521f97ccd3c2bf6e71a91cea8fe65d170fa4fb (diff) |
piix: backport short cables support from ata_piix.c
Backport short cables support from ata_piix.c.
This patch should allow UDMA > 2 modes on:
- Acer 5602WLMi
- Acer 3682WLMi
- Asus W5F
- Acer Aspire 2023WLMi
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/pci/piix.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 1547c37f3332..2e0b29ef596a 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/piix.c Version 0.47 February 8, 2007 | 2 | * linux/drivers/ide/pci/piix.c Version 0.50 Jun 10, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer | 4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer |
5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> | 5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> |
@@ -394,12 +394,43 @@ static void piix_dma_clear_irq(ide_drive_t *drive) | |||
394 | hwif->OUTB(dma_stat, hwif->dma_status); | 394 | hwif->OUTB(dma_stat, hwif->dma_status); |
395 | } | 395 | } |
396 | 396 | ||
397 | struct ich_laptop { | ||
398 | u16 device; | ||
399 | u16 subvendor; | ||
400 | u16 subdevice; | ||
401 | }; | ||
402 | |||
403 | /* | ||
404 | * List of laptops that use short cables rather than 80 wire | ||
405 | */ | ||
406 | |||
407 | static const struct ich_laptop ich_laptop[] = { | ||
408 | /* devid, subvendor, subdev */ | ||
409 | { 0x27DF, 0x0005, 0x0280 }, /* ICH7 on Acer 5602WLMi */ | ||
410 | { 0x27DF, 0x1025, 0x0110 }, /* ICH7 on Acer 3682WLMi */ | ||
411 | { 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */ | ||
412 | { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on Acer Aspire 2023WLMi */ | ||
413 | /* end marker */ | ||
414 | { 0, } | ||
415 | }; | ||
416 | |||
397 | static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) | 417 | static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) |
398 | { | 418 | { |
399 | struct pci_dev *dev = hwif->pci_dev; | 419 | struct pci_dev *pdev = hwif->pci_dev; |
420 | const struct ich_laptop *lap = &ich_laptop[0]; | ||
400 | u8 reg54h = 0, mask = hwif->channel ? 0xc0 : 0x30; | 421 | u8 reg54h = 0, mask = hwif->channel ? 0xc0 : 0x30; |
401 | 422 | ||
402 | pci_read_config_byte(dev, 0x54, ®54h); | 423 | /* check for specials */ |
424 | while (lap->device) { | ||
425 | if (lap->device == pdev->device && | ||
426 | lap->subvendor == pdev->subsystem_vendor && | ||
427 | lap->subdevice == pdev->subsystem_device) { | ||
428 | return ATA_CBL_PATA40_SHORT; | ||
429 | } | ||
430 | lap++; | ||
431 | } | ||
432 | |||
433 | pci_read_config_byte(pdev, 0x54, ®54h); | ||
403 | 434 | ||
404 | return (reg54h & mask) ? ATA_CBL_PATA80 : ATA_CBL_PATA40; | 435 | return (reg54h & mask) ? ATA_CBL_PATA80 : ATA_CBL_PATA40; |
405 | } | 436 | } |