Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a698400a authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent ba1d0de7
Loading
Loading
Loading
Loading
+21 −30
Original line number Diff line number Diff line
@@ -687,9 +687,6 @@ static int cmd640x_init_one(unsigned long base, unsigned long ctl)
 */
static int __init cmd640x_init(void)
{
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
	int second_port_toggled = 0;
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
	int second_port_cmd640 = 0, rc;
	const char *bus_type, *port2;
	unsigned int index;
@@ -778,16 +775,11 @@ static int __init cmd640x_init(void)
	put_cmd640_reg(CMDTIM, 0);
	put_cmd640_reg(BRST, 0x40);

	cmd_hwif1 = ide_find_port();
	b = get_cmd640_reg(CNTRL);

	/*
	 * Try to enable the secondary interface, if not already enabled
	 */
	if (cmd_hwif1 &&
	    cmd_hwif1->drives[0].noprobe && cmd_hwif1->drives[1].noprobe) {
		port2 = "not probed";
	} else {
		b = get_cmd640_reg(CNTRL);
	if (secondary_port_responding()) {
		if ((b & CNTRL_ENA_2ND)) {
			second_port_cmd640 = 1;
@@ -801,24 +793,23 @@ static int __init cmd640x_init(void)
		put_cmd640_reg(CNTRL, b ^ CNTRL_ENA_2ND); /* toggle the bit */
		if (secondary_port_responding()) {
			second_port_cmd640 = 1;
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
				second_port_toggled = 1;
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
			port2 = "enabled";
		} else {
			put_cmd640_reg(CNTRL, b); /* restore original setting */
			port2 = "not responding";
		}
	}
	}

	/*
	 * Initialize data for secondary cmd640 port, if enabled
	 */
	if (second_port_cmd640 && cmd_hwif1) {
	if (second_port_cmd640) {
		cmd_hwif1 = ide_find_port();
		if (cmd_hwif1) {
			ide_init_port_hw(cmd_hwif1, &hw[1]);
			idx[1] = cmd_hwif1->index;
		}
	}
	printk(KERN_INFO "cmd640: %sserialized, secondary interface %s\n",
			 second_port_cmd640 ? "" : "not ", port2);