aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pmac.c
diff options
context:
space:
mode:
authorTOMARI Hisanobu <posco.grubb@gmail.com>2009-03-31 20:15:34 +0200
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-31 20:15:34 +0200
commita9d5a97fa3828e7cbc577805eba3d0a0d35dd5a0 (patch)
treec415f1f3099efa63ac872044dec25b2ea2c7fcc3 /drivers/ide/pmac.c
parentide: inline SELECT_DRIVE() (diff)
downloadlinux-dev-a9d5a97fa3828e7cbc577805eba3d0a0d35dd5a0.tar.xz
linux-dev-a9d5a97fa3828e7cbc577805eba3d0a0d35dd5a0.zip
ide-pmac: IDE cable detection on Apple PowerBook
As IDE cable used on Apple PowerBook/iBook laptops are always of "Short 40" type when the firmware says it's 80 conductor one, the cable detection should return ATA_CBL_PATA40_SHORT on those machines. This enables to automatically use UDMA5 even with drives that doesn't correctly detect those cables on Apple laptops. Signed-off-by: TOMARI Hisanobu <posco.grubb@gmail.com> Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: benh@kernel.crashing.org [bart: beautify patch description] Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pmac.c')
-rw-r--r--drivers/ide/pmac.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c
index 24ce1f805cd7..052b9bf1f8fb 100644
--- a/drivers/ide/pmac.c
+++ b/drivers/ide/pmac.c
@@ -919,10 +919,18 @@ static u8 pmac_ide_cable_detect(ide_hwif_t *hwif)
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
struct device_node *np = pmif->node;
const char *cable = of_get_property(np, "cable-type", NULL);
+ struct device_node *root = of_find_node_by_path("/");
+ const char *model = of_get_property(root, "model", NULL);
/* Get cable type from device-tree. */
- if (cable && !strncmp(cable, "80-", 3))
- return ATA_CBL_PATA80;
+ if (cable && !strncmp(cable, "80-", 3)) {
+ /* Some drives fail to detect 80c cable in PowerBook */
+ /* These machine use proprietary short IDE cable anyway */
+ if (!strncmp(model, "PowerBook", 9))
+ return ATA_CBL_PATA40_SHORT;
+ else
+ return ATA_CBL_PATA80;
+ }
/*
* G5's seem to have incorrect cable type in device-tree.