From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751115AbcBEDuk (ORCPT ); Thu, 4 Feb 2016 22:50:40 -0500 Received: from spfilter2-out2.secure-dns.net ([72.18.131.15]:42055 "EHLO spfilter-2.secure-dns.net" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750947AbcBEDui (ORCPT ); Thu, 4 Feb 2016 22:50:38 -0500 X-Greylist: delayed 3121 seconds by postgrey-1.27 at vger.kernel.org; Thu, 04 Feb 2016 22:50:37 EST Subject: [PATCH] watchdog: w83627hf: Added NCT6102D support. To: Wim Van Sebroeck From: Rob Kramer Organization: Solution Space Pte Ltd Cc: linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org Message-ID: <56B40FCD.1010802@solution-space.com> Date: Fri, 5 Feb 2016 10:58:21 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Filter-ID: s0sct1PQhAABKnZB5plbIWVpKweH4uZv9/3jpRN7yp3YQX6Uo3yKSWioXrgl3qiOwS9kmloc0QPc 6NojePGshD/S9Xf8Vc2e8YKCkhefq6cWkt6B4V+Ju2Uv2kfE0m5KfCzdNGNoLjYW00m5NbCHvDvR c41Gpk/M3Kb4rDjbokkS65qMySWJx3b3RRF7NVivThlEsBHk2TqnCEKzpzm/4u7gtJyskOFkZNQE qtyxAPWngZPG7PCDABm4CkRf0kr0hQS/T1kkZvS4WN1LyH2VITwJWw42swm4bO6gacpMpzK33KkN O1wLfX7A42ZX6S6XxukXw6Rxrm/lFhiHkFiDRdCp7WwBmHUvZsA8NHnorkV6L2AyyQAApZ0vPczX 4In1A6/m5v1TOMJo9BI5uHSwPVTVnVqU/JmyluHlvsaaYdqpX9XsJOdMgkNJLjaECe770z6bhalF EM/pjPCQA+BAlj7mFtJkkZ0++Zjc5KmvC9wJJ+ukXWmTDqLryxaIwwiF78KsW4IqycBT9A5gxVKe EyaCcYa8oNWP5/rMJnfZe9IQA1qD5ErBsSBt5LzIueI6XaSUYhIHF1YQ8MYzXU+JOboqBKS5Kqei UOz5zJPD3RxR21MnaEf/79hCqM/LVf/nFRMPL3Oxc0GJjpuRVqoA0mn5q973VfAq8g+IRYsgJ+Up AsfEeX82uQP6QszpWfviDsJruGtChR3/EesS2SQC+mlD5zXBQeRuvOh2KHFT8xUHmFDqewO9xyOq CYO8P1aHpAaekSa3KmlcvP8wUtpUaxS11O6FoEK8jW69Pl1WGJ0= 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.03) 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