|
@@ -838,7 +838,7 @@ static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
|
|
|
|
|
|
static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
|
|
static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
|
|
{
|
|
{
|
|
- hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x23 : 0x21);
|
|
|
|
|
|
+ hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x21 : 0x23);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1173,8 +1173,9 @@ static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)
|
|
u16 mcr;
|
|
u16 mcr;
|
|
|
|
|
|
pci_read_config_word(dev, mcr_addr, &mcr);
|
|
pci_read_config_word(dev, mcr_addr, &mcr);
|
|
- pci_write_config_word(dev, mcr_addr, (mcr | 0x8000));
|
|
|
|
- /* now read cable id register */
|
|
|
|
|
|
+ pci_write_config_word(dev, mcr_addr, mcr | 0x8000);
|
|
|
|
+ /* Debounce, then read cable ID register */
|
|
|
|
+ udelay(10);
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
pci_write_config_word(dev, mcr_addr, mcr);
|
|
pci_write_config_word(dev, mcr_addr, mcr);
|
|
} else if (chip_type >= HPT370) {
|
|
} else if (chip_type >= HPT370) {
|
|
@@ -1185,10 +1186,11 @@ static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)
|
|
u8 scr2 = 0;
|
|
u8 scr2 = 0;
|
|
|
|
|
|
pci_read_config_byte(dev, 0x5b, &scr2);
|
|
pci_read_config_byte(dev, 0x5b, &scr2);
|
|
- pci_write_config_byte(dev, 0x5b, (scr2 & ~1));
|
|
|
|
- /* now read cable id register */
|
|
|
|
|
|
+ pci_write_config_byte(dev, 0x5b, scr2 & ~1);
|
|
|
|
+ /* Debounce, then read cable ID register */
|
|
|
|
+ udelay(10);
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
- pci_write_config_byte(dev, 0x5b, scr2);
|
|
|
|
|
|
+ pci_write_config_byte(dev, 0x5b, scr2);
|
|
} else
|
|
} else
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
pci_read_config_byte(dev, 0x5a, &scr1);
|
|
|
|
|