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

Commit f63fd7e2 authored by Petr Cvek's avatar Petr Cvek Committed by Linus Torvalds
Browse files

parport_pc: detection for SuperIO IT87XX POST



Add detection for IT87XX SuperIO chip and disabling its POST feature, which
made noise on parallel port's pins.

Signed-off-by: default avatarPetr Cvek <petr.cvek@tul.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a9000d03
Loading
Loading
Loading
Loading
+39 −6
Original line number Diff line number Diff line
@@ -1540,6 +1540,38 @@ static void __devinit detect_and_report_smsc (void)
	smsc_check(0x3f0,0x44);
	smsc_check(0x370,0x44);
}

static void __devinit detect_and_report_it87(void)
{
	u16 dev;
	u8 r;
	if (verbose_probing)
		printk(KERN_DEBUG "IT8705 Super-IO detection, now testing port 2E ...\n");
	if (!request_region(0x2e, 1, __FUNCTION__))
		return;
	outb(0x87, 0x2e);
	outb(0x01, 0x2e);
	outb(0x55, 0x2e);
	outb(0x55, 0x2e);
	outb(0x20, 0x2e);
	dev = inb(0x2f) << 8;
	outb(0x21, 0x2e);
	dev |= inb(0x2f);
	if (dev == 0x8712 || dev == 0x8705 || dev == 0x8715 ||
	    dev == 0x8716 || dev == 0x8718 || dev == 0x8726) {
		printk(KERN_INFO "IT%04X SuperIO detected.\n", dev);
		outb(0x07, 0x2E);	/* Parallel Port */
		outb(0x03, 0x2F);
		outb(0xF0, 0x2E);	/* BOOT 0x80 off */
		r = inb(0x2f);
		outb(0xF0, 0x2E);
		outb(r | 8, 0x2F);
		outb(0x02, 0x2E);	/* Lock */
		outb(0x02, 0x2F);

		release_region(0x2e, 1);
	}
}
#endif /* CONFIG_PARPORT_PC_SUPERIO */

static int get_superio_dma (struct parport *p)
@@ -3164,6 +3196,7 @@ static void __init parport_pc_find_ports (int autoirq, int autodma)
	int count = 0, err;

#ifdef CONFIG_PARPORT_PC_SUPERIO
	detect_and_report_it87();
	detect_and_report_winbond();
	detect_and_report_smsc();
#endif