From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751887AbcBHLNZ (ORCPT ); Mon, 8 Feb 2016 06:13:25 -0500 Received: from spfilter-4.secure-dns.net ([72.18.130.39]:38336 "EHLO spfilter-4.secure-dns.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751649AbcBHLNT (ORCPT ); Mon, 8 Feb 2016 06:13:19 -0500 X-Greylist: delayed 3795 seconds by postgrey-1.27 at vger.kernel.org; Mon, 08 Feb 2016 06:13:19 EST Date: Mon, 8 Feb 2016 18:09:49 +0800 From: Rob Kramer To: Guenter Roeck Cc: Wim Van Sebroeck , linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org Subject: [PATCH v2] watchdog: w83627hf: Added NCT6102D support. Message-ID: <20160208100949.GB17935@wrobbie.Home> References: <56B40FCD.1010802@solution-space.com> <56B6290B.6010904@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56B6290B.6010904@roeck-us.net> User-Agent: Mutt/1.5.24 (2015-08-30) X-Filter-ID: s0sct1PQhAABKnZB5plbIWVpKweH4uZv9/3jpRN7yp3YQX6Uo3yKSWioXrgl3qiOwS9kmloc0QPc 6NojePGshD/S9Xf8Vc2e8YKCkhefq6cAvRQXSe6LPmgXXq0NYA2YzjKxjTQhoiuSYD1kh/GXGonT JYQp6P0LGGk5YcssJBmJKjo3hs261qnLxIj6YGF2pwv4D9IwTRk2++jrRkfgkr5sOUWgizyFDD2X 56WQbcUrFJs9S65SBxQ2TxSvmaO48SS/IHbxBtrj12zZVu3Cg2NpEHNT8UYl7+tIxfNwDB9/oU86 r+qg8hAF0icJqInmcwaMrSoe5K3Z+eYmcl+ZATDJYWiCvs+KOKSMFDjwXEvlgTl6fJxyntEfhZCK je4ZvEmGPsrKkZd9ZZ33B/39Sq+0tRk3m8BnzsRgI2+lz5D1H/aAwarQpYDOYx/6JtUOOD/PdX4Y YL08V0SBUX07p4uvAxdWAnUjfZRB0Dy0djyQXbsxjzGWJ81U0Cdw/rFcOeOwR+iV/pztzne4Xh8d uQYhXIgOJM4MGW1jvzKL8XlA/14fjMh6Kiqs7NYrOBY0KN8Ckd9zDA4zARk8PX/wKaGFs7rbw6Ek G2mA4y/Aa4kxVVuhIFP+ycDjcfDf72WSG+UaTaNsR5qC4/p2JFXOpOkWrBYsf6b4ZJHtY+ZApOEd xcNefXkxGYXDZqeq5w7Ahu4KBrZgUEPFm0AcVYC9260jiD6XqsJZtjQxlyCdsewMG6hqqwPuIzRM COvJj3ukbbYNqG0xLHbFBXzFdRcgv54DtiqwAs+0TvJsnbWohT6h8Af7Ofdiz61gDUQXsuzk X-Report-Abuse-To: spam@spfilter-1.secure-dns.net X-Filter-Fingerprint: IFrWXGses7OKB5S5G8/dJXhXyDRoOQM5J3kcUr0HrMtA3cTUQ1R++keuE7RDJ8Kg3RbMLUalw1oC mj99/u+PoqoVy8a3lsStJtAvpObFX0Wok1JBYnOLzfRIhlEHQynLUpndEJ0YoaLytXXo8BMTaVt0 ARHRi6XGuAluI1udprEW9I81pbl8Jyk6WATtZHooXEuM2gxl4lrULGbBPnpv3Hp6h+UCvUWhMryH PleRbMs4nzI3Nurs45R9hT3wxDdTfx8ce3q1PigZg14GgzGpfg== X-Originating-IP: 116.12.48.139 X-SpamExperts-Domain: spamexpertfilter.secure-dns.net X-SpamExperts-Username: 116.12.48.139 Authentication-Results: secure-dns.net; auth=pass smtp.auth=116.12.48.139@spamexpertfilter.secure-dns.net X-SpamExperts-Outgoing-Class: ham X-SpamExperts-Outgoing-Evidence: Combined (0.02) X-Recommended-Action: accept Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As used in (and tested on) the ASRock IMB-150 board. Implementation is identical to other NCT chips, just with different registers. Signed-off-by: Rob Kramer --- drivers/watchdog/Kconfig | 1 + drivers/watchdog/w83627hf_wdt.c | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 4f0e7be..318d8bc 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -1140,6 +1140,7 @@ config W83627HF_WDT NCT6779 NCT6791 NCT6792 + NCT6102D/04D/06D This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c index cab14bc..09e8003 100644 --- a/drivers/watchdog/w83627hf_wdt.c +++ b/drivers/watchdog/w83627hf_wdt.c @@ -45,10 +45,11 @@ static int wdt_io; static int cr_wdt_timeout; /* WDT timeout register */ static int cr_wdt_control; /* WDT control register */ +static int cr_wdt_csr; /* WDT control & status register */ enum chips { w83627hf, w83627s, w83697hf, w83697ug, w83637hf, w83627thf, w83687thf, w83627ehf, w83627dhg, w83627uhg, w83667hg, w83627dhg_p, - w83667hg_b, nct6775, nct6776, nct6779, nct6791, nct6792 }; + w83667hg_b, nct6775, nct6776, nct6779, nct6791, nct6792, nct6102 }; static int timeout; /* in seconds */ module_param(timeout, int, 0); @@ -92,15 +93,21 @@ MODULE_PARM_DESC(early_disable, "Disable watchdog at boot time (default=0)"); #define W83667HG_B_ID 0xb3 #define NCT6775_ID 0xb4 #define NCT6776_ID 0xc3 +#define NCT6102_ID 0xc4 #define NCT6779_ID 0xc5 #define NCT6791_ID 0xc8 #define NCT6792_ID 0xc9 #define W83627HF_WDT_TIMEOUT 0xf6 #define W83697HF_WDT_TIMEOUT 0xf4 +#define NCT6102D_WDT_TIMEOUT 0xf1 #define W83627HF_WDT_CONTROL 0xf5 #define W83697HF_WDT_CONTROL 0xf3 +#define NCT6102D_WDT_CONTROL 0xf0 + +#define W836X7HF_WDT_CSR 0xf7 +#define NCT6102D_WDT_CSR 0xf2 static void superio_outb(int reg, int val) { @@ -197,6 +204,7 @@ static int w83627hf_init(struct watchdog_device *wdog, enum chips chip) case nct6779: case nct6791: case nct6792: + case nct6102: /* * These chips have a fixed WDTO# output pin (W83627UHG), * or support more than one WDTO# output pin. @@ -229,8 +237,8 @@ static int w83627hf_init(struct watchdog_device *wdog, enum chips chip) superio_outb(cr_wdt_control, t); /* reset trigger, disable keyboard & mouse turning off watchdog */ - t = superio_inb(0xF7) & ~0xD0; - superio_outb(0xF7, t); + t = superio_inb(cr_wdt_csr) & ~0xD0; + superio_outb(cr_wdt_csr, t); superio_exit(); @@ -322,6 +330,7 @@ static int wdt_find(int addr) cr_wdt_timeout = W83627HF_WDT_TIMEOUT; cr_wdt_control = W83627HF_WDT_CONTROL; + cr_wdt_csr = W836X7HF_WDT_CSR; ret = superio_enter(); if (ret) @@ -387,6 +396,12 @@ static int wdt_find(int addr) case NCT6792_ID: ret = nct6792; break; + case NCT6102_ID: + ret = nct6102; + cr_wdt_timeout = NCT6102D_WDT_TIMEOUT; + cr_wdt_control = NCT6102D_WDT_CONTROL; + cr_wdt_csr = NCT6102D_WDT_CSR; + break; case 0xff: ret = -ENODEV; break; @@ -422,6 +437,7 @@ static int __init wdt_init(void) "NCT6779", "NCT6791", "NCT6792", + "NCT6102", }; wdt_io = 0x2e; -- 2.6.2