diff options
Diffstat (limited to 'drivers/ide/pci/cmd640.c')
| -rw-r--r-- | drivers/ide/pci/cmd640.c | 34 | 
1 files changed, 18 insertions, 16 deletions
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c index 29fbc5ead03b..a1cfe033a55f 100644 --- a/drivers/ide/pci/cmd640.c +++ b/drivers/ide/pci/cmd640.c  | |||
| @@ -409,19 +409,9 @@ static void __init check_prefetch (unsigned int index) | |||
| 409 | */ | 409 | */ | 
| 410 | static void __init setup_device_ptrs (void) | 410 | static void __init setup_device_ptrs (void) | 
| 411 | { | 411 | { | 
| 412 | unsigned int i; | 412 | cmd_hwif0 = &ide_hwifs[0]; | 
| 413 | cmd_hwif1 = &ide_hwifs[1]; | ||
| 413 | 414 | ||
| 414 | cmd_hwif0 = &ide_hwifs[0]; /* default, if not found below */ | ||
| 415 | cmd_hwif1 = &ide_hwifs[1]; /* default, if not found below */ | ||
| 416 | for (i = 0; i < MAX_HWIFS; i++) { | ||
| 417 | ide_hwif_t *hwif = &ide_hwifs[i]; | ||
| 418 | if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) { | ||
| 419 | if (hwif->io_ports[IDE_DATA_OFFSET] == 0x1f0) | ||
| 420 | cmd_hwif0 = hwif; | ||
| 421 | else if (hwif->io_ports[IDE_DATA_OFFSET] == 0x170) | ||
| 422 | cmd_hwif1 = hwif; | ||
| 423 | } | ||
| 424 | } | ||
| 425 | cmd_drives[0] = &cmd_hwif0->drives[0]; | 415 | cmd_drives[0] = &cmd_hwif0->drives[0]; | 
| 426 | cmd_drives[1] = &cmd_hwif0->drives[1]; | 416 | cmd_drives[1] = &cmd_hwif0->drives[1]; | 
| 427 | cmd_drives[2] = &cmd_hwif1->drives[0]; | 417 | cmd_drives[2] = &cmd_hwif1->drives[0]; | 
| @@ -724,6 +714,7 @@ static int __init cmd640x_init(void) | |||
| 724 | unsigned int index; | 714 | unsigned int index; | 
| 725 | u8 b, cfr; | 715 | u8 b, cfr; | 
| 726 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | 716 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | 
| 717 | hw_regs_t hw[2]; | ||
| 727 | 718 | ||
| 728 | if (cmd640_vlb && probe_for_cmd640_vlb()) { | 719 | if (cmd640_vlb && probe_for_cmd640_vlb()) { | 
| 729 | bus_type = "VLB"; | 720 | bus_type = "VLB"; | 
| @@ -762,12 +753,23 @@ static int __init cmd640x_init(void) | |||
| 762 | return 0; | 753 | return 0; | 
| 763 | } | 754 | } | 
| 764 | 755 | ||
| 756 | memset(&hw, 0, sizeof(hw)); | ||
| 757 | |||
| 758 | ide_std_init_ports(&hw[0], 0x1f0, 0x3f6); | ||
| 759 | hw[0].irq = 14; | ||
| 760 | |||
| 761 | ide_std_init_ports(&hw[1], 0x170, 0x376); | ||
| 762 | hw[1].irq = 15; | ||
| 763 | |||
| 764 | printk(KERN_INFO "cmd640: buggy cmd640%c interface on %s, config=0x%02x" | ||
| 765 | "\n", 'a' + cmd640_chip_version - 1, bus_type, cfr); | ||
| 766 | |||
| 765 | /* | 767 | /* | 
| 766 | * Initialize data for primary port | 768 | * Initialize data for primary port | 
| 767 | */ | 769 | */ | 
| 768 | setup_device_ptrs (); | 770 | setup_device_ptrs (); | 
| 769 | printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n", | 771 | |
| 770 | cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr); | 772 | ide_init_port_hw(cmd_hwif0, &hw[0]); | 
| 771 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 773 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 
| 772 | cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; | 774 | cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; | 
| 773 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 775 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 
| @@ -787,8 +789,7 @@ static int __init cmd640x_init(void) | |||
| 787 | /* | 789 | /* | 
| 788 | * Try to enable the secondary interface, if not already enabled | 790 | * Try to enable the secondary interface, if not already enabled | 
| 789 | */ | 791 | */ | 
| 790 | if (cmd_hwif1->noprobe || | 792 | if (cmd_hwif1->drives[0].noprobe && cmd_hwif1->drives[1].noprobe) { | 
| 791 | (cmd_hwif1->drives[0].noprobe && cmd_hwif1->drives[1].noprobe)) { | ||
| 792 | port2 = "not probed"; | 793 | port2 = "not probed"; | 
| 793 | } else { | 794 | } else { | 
| 794 | b = get_cmd640_reg(CNTRL); | 795 | b = get_cmd640_reg(CNTRL); | 
| @@ -820,6 +821,7 @@ static int __init cmd640x_init(void) | |||
| 820 | * Initialize data for secondary cmd640 port, if enabled | 821 | * Initialize data for secondary cmd640 port, if enabled | 
| 821 | */ | 822 | */ | 
| 822 | if (second_port_cmd640) { | 823 | if (second_port_cmd640) { | 
| 824 | ide_init_port_hw(cmd_hwif1, &hw[1]); | ||
| 823 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 825 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 
| 824 | cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; | 826 | cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; | 
| 825 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 827 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 
