From: Guenter Roeck <linux@roeck-us.net>
To: Knud Poulsen <knpo@ieee.org>
Cc: Wim Van Sebroeck <wim@iguana.be>,
Linux Watchdog <linux-watchdog@vger.kernel.org>
Subject: Re: [PATCH] watchdog: f71808e_wdt: Add F81865 support
Date: Thu, 21 Apr 2016 06:48:32 -0700 [thread overview]
Message-ID: <5718DA30.3080003@roeck-us.net> (raw)
In-Reply-To: <5717C2D7.8030902@ieee.org>
On 04/20/2016 10:56 AM, Knud Poulsen wrote:
> Adds watchdog support for Fintek F81865 Super-IO chip to
> Fintek wdt driver (f71808e_wdt)
>
> Tested and verified on Lanner LEC-3030 Industrial PC
>
> Datasheet references:
> http://www.hardwaresecrets.com/datasheets/F81865_V028P.pdf
> http://www.alldatasheet.com/datasheet-pdf/pdf/406317/FINTEK/F81865.html
>
> Signed-off-by: Knud Poulsen <knpo@ieee.org>
> ---
> drivers/watchdog/f71808e_wdt.c | 36 ++++++++++++++++++++++++++++++------
> 1 file changed, 30 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c
> index 016bd93..956f8eb 100644
> --- a/drivers/watchdog/f71808e_wdt.c
> +++ b/drivers/watchdog/f71808e_wdt.c
> @@ -2,6 +2,7 @@
> * Copyright (C) 2006 by Hans Edgington <hans@edgington.nl> *
> * Copyright (C) 2007-2009 Hans de Goede <hdegoede@redhat.com> *
> * Copyright (C) 2010 Giel van Schijndel <me@mortis.eu> *
> + * Copyright (C) 2016 Knud Poulsen <knpo@ieee.org> *
For minor improvements like this really a stretch. Please reconsider.
> * *
> * This program is free software; you can redistribute it and/or modify *
> * it under the terms of the GNU General Public License as published by *
> @@ -38,7 +39,7 @@
>
> #define SIO_F71808FG_LD_WDT 0x07 /* Watchdog timer logical device */
> #define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */
> -#define SIO_LOCK_KEY 0xAA /* Key to diasble Super-I/O */
> +#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
Unrelated change - separate patch, please.
>
> #define SIO_REG_LDSEL 0x07 /* Logical device select */
> #define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
> @@ -59,6 +60,7 @@
> #define SIO_F71869A_ID 0x1007 /* Chipset ID */
> #define SIO_F71882_ID 0x0541 /* Chipset ID */
> #define SIO_F71889_ID 0x0723 /* Chipset ID */
> +#define SIO_F81865_ID 0x0704 /* Chipset ID */
>
> #define F71808FG_REG_WDO_CONF 0xf0
> #define F71808FG_REG_WDT_CONF 0xf5
> @@ -71,6 +73,10 @@
> #define F71808FG_FLAG_WD_PULSE 4
> #define F71808FG_FLAG_WD_UNIT 3
>
> +#define F81865_REG_WDO_CONF 0xfa
> +#define F81865_FLAG_WDOUT_EN 0
> +#define F81865_FLAG_WDTMOUT_STS 6
> +
> /* Default values */
> #define WATCHDOG_TIMEOUT 60 /* 1 minute default timeout */
> #define WATCHDOG_MAX_TIMEOUT (60 * 255)
> @@ -112,7 +118,7 @@ module_param(start_withtimeout, uint, 0);
> MODULE_PARM_DESC(start_withtimeout, "Start watchdog timer on module load with"
> " given initial timeout. Zero (default) disables this feature.");
>
> -enum chips { f71808fg, f71858fg, f71862fg, f71869, f71882fg, f71889fg };
> +enum chips { f71808fg, f71858fg, f71862fg, f71869, f71882fg, f71889fg, f81865 };
>
> static const char *f71808e_names[] = {
> "f71808fg",
> @@ -121,6 +127,7 @@ static const char *f71808e_names[] = {
> "f71869",
> "f71882fg",
> "f71889fg",
> + "f81865",
> };
>
> /* Super-I/O Function prototypes */
> @@ -360,6 +367,11 @@ static int watchdog_start(void)
> superio_inb(watchdog.sioaddr, SIO_REG_MFUNCT3) & 0xcf);
> break;
>
> + case f81865:
> + /* Set pin 70 to WDTRST# */
> + superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT3, 5);
> + break;
> +
> default:
> /*
> * 'default' label to shut up the compiler and catch
> @@ -371,9 +383,13 @@ static int watchdog_start(void)
>
> superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT);
> superio_set_bit(watchdog.sioaddr, SIO_REG_ENABLE, 0);
> - superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDO_CONF,
> - F71808FG_FLAG_WDOUT_EN);
> -
> + if (watchdog.type == f81865) {
> + superio_set_bit(watchdog.sioaddr, F81865_REG_WDO_CONF,
> + F81865_FLAG_WDOUT_EN);
> + } else {
> + superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDO_CONF,
> + F71808FG_FLAG_WDOUT_EN);
> + }
Unnecessary { }.
> superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF,
> F71808FG_FLAG_WD_EN);
>
> @@ -655,7 +671,12 @@ static int __init watchdog_init(int sioaddr)
> superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT);
>
> wdt_conf = superio_inb(sioaddr, F71808FG_REG_WDT_CONF);
> - watchdog.caused_reboot = wdt_conf & F71808FG_FLAG_WDTMOUT_STS;
> + if (watchdog.type == f81865) {
> + watchdog.caused_reboot = wdt_conf & F81865_FLAG_WDTMOUT_STS;
> + } else {
> + watchdog.caused_reboot = wdt_conf & F71808FG_FLAG_WDTMOUT_STS;
> + }
> +
Unnecessary { }, and please no double empty lines.
>
> superio_exit(sioaddr);
>
> @@ -770,6 +791,9 @@ static int __init f71808e_find(int sioaddr)
> /* Confirmed (by datasheet) not to have a watchdog. */
> err = -ENODEV;
> goto exit;
> + case SIO_F81865_ID:
> + watchdog.type = f81865;
> + break;
> default:
> pr_info("Unrecognized Fintek device: %04x\n",
> (unsigned int)devid);
>
next prev parent reply other threads:[~2016-04-21 13:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-20 17:56 [PATCH] watchdog: f71808e_wdt: Add F81865 support Knud Poulsen
2016-04-21 13:48 ` Guenter Roeck [this message]
2016-04-21 19:18 ` Knud Poulsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5718DA30.3080003@roeck-us.net \
--to=linux@roeck-us.net \
--cc=knpo@ieee.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=wim@iguana.be \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.