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

Commit 7732c6b9 authored by Wim Van Sebroeck's avatar Wim Van Sebroeck
Browse files

watchdog: sch311x_wdt: Fix Polarity when starting watchdog



Some motherboards like the Advantech ARK3400 documentation
use a non-inverted GPIO pin. We fix this by assuming that
the BIOS will set the Polarity bit for the GPIO correctly
at startup and we keep the Bit-setting intact when we start
and stop the watchdog.

Reported-by: default avatarJean-François Deverge <jf.deverge@gmail.com>
Signed-off-by: default avatarDave Mueller <d.mueller@elsoft.ch>
Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
parent 41814eed
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -136,6 +136,8 @@ static void sch311x_wdt_set_timeout(int t)

static void sch311x_wdt_start(void)
{
	unsigned char t;

	spin_lock(&sch311x_wdt_data.io_lock);

	/* set watchdog's timeout */
@@ -149,7 +151,8 @@ static void sch311x_wdt_start(void)
	 * Bit 4-6  (Reserved)
	 * Bit 7,   Output Type: 0 = Push Pull Bit, 1 = Open Drain
	 */
	outb(0x0e, sch311x_wdt_data.runtime_reg + GP60);
	t = inb(sch311x_wdt_data.runtime_reg + GP60);
	outb((t & ~0x0d) | 0x0c, sch311x_wdt_data.runtime_reg + GP60);

	spin_unlock(&sch311x_wdt_data.io_lock);

@@ -157,10 +160,13 @@ static void sch311x_wdt_start(void)

static void sch311x_wdt_stop(void)
{
	unsigned char t;

	spin_lock(&sch311x_wdt_data.io_lock);

	/* stop the watchdog */
	outb(0x01, sch311x_wdt_data.runtime_reg + GP60);
	t = inb(sch311x_wdt_data.runtime_reg + GP60);
	outb((t & ~0x0d) | 0x01, sch311x_wdt_data.runtime_reg + GP60);
	/* disable timeout by setting it to 0 */
	sch311x_wdt_set_timeout(0);