aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/cmd640.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-16 14:33:41 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-16 14:33:41 -0400
commita698400a1556cf9f0376d1a41e536973dd5c4747 (patch)
treeaf63ee32fac09ce32476044eecd0ab7f1770153c /drivers/ide/pci/cmd640.c
parentba1d0de70d64e68f0e035f00dbb041c1e05b49c9 (diff)
cmd640: fix warm-plug support for the secondary interface
Register secondary interface also when user requested not to probe devices. While at it: - remove write-only second_port_toggled variable Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/cmd640.c')
-rw-r--r--drivers/ide/pci/cmd640.c51
1 files changed, 21 insertions, 30 deletions
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c
index baa26a26709a..ab7d7274d8b1 100644
--- a/drivers/ide/pci/cmd640.c
+++ b/drivers/ide/pci/cmd640.c
@@ -687,9 +687,6 @@ static int cmd640x_init_one(unsigned long base, unsigned long ctl)
687 */ 687 */
688static int __init cmd640x_init(void) 688static int __init cmd640x_init(void)
689{ 689{
690#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
691 int second_port_toggled = 0;
692#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
693 int second_port_cmd640 = 0, rc; 690 int second_port_cmd640 = 0, rc;
694 const char *bus_type, *port2; 691 const char *bus_type, *port2;
695 unsigned int index; 692 unsigned int index;
@@ -778,46 +775,40 @@ static int __init cmd640x_init(void)
778 put_cmd640_reg(CMDTIM, 0); 775 put_cmd640_reg(CMDTIM, 0);
779 put_cmd640_reg(BRST, 0x40); 776 put_cmd640_reg(BRST, 0x40);
780 777
781 cmd_hwif1 = ide_find_port(); 778 b = get_cmd640_reg(CNTRL);
782 779
783 /* 780 /*
784 * Try to enable the secondary interface, if not already enabled 781 * Try to enable the secondary interface, if not already enabled
785 */ 782 */
786 if (cmd_hwif1 && 783 if (secondary_port_responding()) {
787 cmd_hwif1->drives[0].noprobe && cmd_hwif1->drives[1].noprobe) { 784 if ((b & CNTRL_ENA_2ND)) {
788 port2 = "not probed"; 785 second_port_cmd640 = 1;
786 port2 = "okay";
787 } else if (cmd640_vlb) {
788 second_port_cmd640 = 1;
789 port2 = "alive";
790 } else
791 port2 = "not cmd640";
789 } else { 792 } else {
790 b = get_cmd640_reg(CNTRL); 793 put_cmd640_reg(CNTRL, b ^ CNTRL_ENA_2ND); /* toggle the bit */
791 if (secondary_port_responding()) { 794 if (secondary_port_responding()) {
792 if ((b & CNTRL_ENA_2ND)) { 795 second_port_cmd640 = 1;
793 second_port_cmd640 = 1; 796 port2 = "enabled";
794 port2 = "okay";
795 } else if (cmd640_vlb) {
796 second_port_cmd640 = 1;
797 port2 = "alive";
798 } else
799 port2 = "not cmd640";
800 } else { 797 } else {
801 put_cmd640_reg(CNTRL, b ^ CNTRL_ENA_2ND); /* toggle the bit */ 798 put_cmd640_reg(CNTRL, b); /* restore original setting */
802 if (secondary_port_responding()) { 799 port2 = "not responding";
803 second_port_cmd640 = 1;
804#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
805 second_port_toggled = 1;
806#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
807 port2 = "enabled";
808 } else {
809 put_cmd640_reg(CNTRL, b); /* restore original setting */
810 port2 = "not responding";
811 }
812 } 800 }
813 } 801 }
814 802
815 /* 803 /*
816 * Initialize data for secondary cmd640 port, if enabled 804 * Initialize data for secondary cmd640 port, if enabled
817 */ 805 */
818 if (second_port_cmd640 && cmd_hwif1) { 806 if (second_port_cmd640) {
819 ide_init_port_hw(cmd_hwif1, &hw[1]); 807 cmd_hwif1 = ide_find_port();
820 idx[1] = cmd_hwif1->index; 808 if (cmd_hwif1) {
809 ide_init_port_hw(cmd_hwif1, &hw[1]);
810 idx[1] = cmd_hwif1->index;
811 }
821 } 812 }
822 printk(KERN_INFO "cmd640: %sserialized, secondary interface %s\n", 813 printk(KERN_INFO "cmd640: %sserialized, secondary interface %s\n",
823 second_port_cmd640 ? "" : "not ", port2); 814 second_port_cmd640 ? "" : "not ", port2);