aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/aec62xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/aec62xx.c')
-rw-r--r--drivers/ide/pci/aec62xx.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
index 824df78c7012..ca302fcba3ab 100644
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -166,6 +166,16 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch
166 return dev->irq; 166 return dev->irq;
167} 167}
168 168
169static u8 __devinit atp86x_cable_detect(ide_hwif_t *hwif)
170{
171 struct pci_dev *dev = to_pci_dev(hwif->dev);
172 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01;
173
174 pci_read_config_byte(dev, 0x49, &ata66);
175
176 return (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
177}
178
169static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) 179static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
170{ 180{
171 struct pci_dev *dev = to_pci_dev(hwif->dev); 181 struct pci_dev *dev = to_pci_dev(hwif->dev);
@@ -174,21 +184,10 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
174 184
175 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) 185 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF)
176 hwif->set_dma_mode = &aec6210_set_mode; 186 hwif->set_dma_mode = &aec6210_set_mode;
177 else 187 else {
178 hwif->set_dma_mode = &aec6260_set_mode; 188 hwif->set_dma_mode = &aec6260_set_mode;
179 189
180 if (hwif->dma_base == 0) 190 hwif->cable_detect = atp86x_cable_detect;
181 return;
182
183 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF)
184 return;
185
186 if (hwif->cbl != ATA_CBL_PATA40_SHORT) {
187 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01;
188
189 pci_read_config_byte(dev, 0x49, &ata66);
190
191 hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
192 } 191 }
193} 192}
194 193