diff options
-rw-r--r-- | drivers/ide/pci/atiixp.c | 24 | ||||
-rw-r--r-- | drivers/ide/pci/cs5535.c | 8 | ||||
-rw-r--r-- | drivers/ide/pci/scc_pata.c | 9 |
3 files changed, 26 insertions, 15 deletions
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index b56274af178..648fdf30cdf 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
@@ -121,6 +121,19 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
121 | spin_unlock_irqrestore(&atiixp_lock, flags); | 121 | spin_unlock_irqrestore(&atiixp_lock, flags); |
122 | } | 122 | } |
123 | 123 | ||
124 | static u8 __devinit atiixp_cable_detect(ide_hwif_t *hwif) | ||
125 | { | ||
126 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | ||
127 | u8 udma_mode = 0, ch = hwif->channel; | ||
128 | |||
129 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); | ||
130 | |||
131 | if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40) | ||
132 | return ATA_CBL_PATA80; | ||
133 | else | ||
134 | return ATA_CBL_PATA40; | ||
135 | } | ||
136 | |||
124 | /** | 137 | /** |
125 | * init_hwif_atiixp - fill in the hwif for the ATIIXP | 138 | * init_hwif_atiixp - fill in the hwif for the ATIIXP |
126 | * @hwif: IDE interface | 139 | * @hwif: IDE interface |
@@ -131,21 +144,14 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
131 | 144 | ||
132 | static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | 145 | static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) |
133 | { | 146 | { |
134 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | ||
135 | u8 udma_mode = 0, ch = hwif->channel; | ||
136 | |||
137 | hwif->set_pio_mode = &atiixp_set_pio_mode; | 147 | hwif->set_pio_mode = &atiixp_set_pio_mode; |
138 | hwif->set_dma_mode = &atiixp_set_dma_mode; | 148 | hwif->set_dma_mode = &atiixp_set_dma_mode; |
139 | 149 | ||
140 | if (!hwif->dma_base) | 150 | if (!hwif->dma_base) |
141 | return; | 151 | return; |
142 | 152 | ||
143 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); | 153 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
144 | 154 | hwif->cbl = atiixp_cable_detect(hwif); | |
145 | if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40) | ||
146 | hwif->cbl = ATA_CBL_PATA80; | ||
147 | else | ||
148 | hwif->cbl = ATA_CBL_PATA40; | ||
149 | } | 155 | } |
150 | 156 | ||
151 | static const struct ide_port_info atiixp_pci_info[] __devinitdata = { | 157 | static const struct ide_port_info atiixp_pci_info[] __devinitdata = { |
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index 66433aa53f5..50046436a56 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c | |||
@@ -155,8 +155,9 @@ static void cs5535_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
155 | cs5535_set_speed(drive, XFER_PIO_0 + pio); | 155 | cs5535_set_speed(drive, XFER_PIO_0 + pio); |
156 | } | 156 | } |
157 | 157 | ||
158 | static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) | 158 | static u8 __devinit cs5535_cable_detect(ide_hwif_t *hwif) |
159 | { | 159 | { |
160 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
160 | u8 bit; | 161 | u8 bit; |
161 | 162 | ||
162 | /* if a 80 wire cable was detected */ | 163 | /* if a 80 wire cable was detected */ |
@@ -175,15 +176,14 @@ static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) | |||
175 | */ | 176 | */ |
176 | static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) | 177 | static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) |
177 | { | 178 | { |
178 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
179 | |||
180 | hwif->set_pio_mode = &cs5535_set_pio_mode; | 179 | hwif->set_pio_mode = &cs5535_set_pio_mode; |
181 | hwif->set_dma_mode = &cs5535_set_dma_mode; | 180 | hwif->set_dma_mode = &cs5535_set_dma_mode; |
182 | 181 | ||
183 | if (hwif->dma_base == 0) | 182 | if (hwif->dma_base == 0) |
184 | return; | 183 | return; |
185 | 184 | ||
186 | hwif->cbl = cs5535_cable_detect(dev); | 185 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
186 | hwif->cbl = cs5535_cable_detect(hwif); | ||
187 | } | 187 | } |
188 | 188 | ||
189 | static const struct ide_port_info cs5535_chipset __devinitdata = { | 189 | static const struct ide_port_info cs5535_chipset __devinitdata = { |
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c index 7694969b02c..dcd44d7c084 100644 --- a/drivers/ide/pci/scc_pata.c +++ b/drivers/ide/pci/scc_pata.c | |||
@@ -644,6 +644,11 @@ static void __devinit init_iops_scc(ide_hwif_t *hwif) | |||
644 | init_mmio_iops_scc(hwif); | 644 | init_mmio_iops_scc(hwif); |
645 | } | 645 | } |
646 | 646 | ||
647 | static u8 __devinit scc_cable_detect(ide_hwif_t *hwif) | ||
648 | { | ||
649 | return ATA_CBL_PATA80; | ||
650 | } | ||
651 | |||
647 | /** | 652 | /** |
648 | * init_hwif_scc - set up hwif | 653 | * init_hwif_scc - set up hwif |
649 | * @hwif: interface to set up | 654 | * @hwif: interface to set up |
@@ -678,8 +683,8 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) | |||
678 | else | 683 | else |
679 | hwif->ultra_mask = ATA_UDMA5; /* 100MHz */ | 684 | hwif->ultra_mask = ATA_UDMA5; /* 100MHz */ |
680 | 685 | ||
681 | /* we support 80c cable only. */ | 686 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
682 | hwif->cbl = ATA_CBL_PATA80; | 687 | hwif->cbl = scc_cable_detect(hwif); |
683 | } | 688 | } |
684 | 689 | ||
685 | #define DECLARE_SCC_DEV(name_str) \ | 690 | #define DECLARE_SCC_DEV(name_str) \ |