From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1425403AbcFHNoD (ORCPT ); Wed, 8 Jun 2016 09:44:03 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:46235 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752205AbcFHNnT (ORCPT ); Wed, 8 Jun 2016 09:43:19 -0400 Subject: Re: [PATCH V2] watchdog: f71808e_wdt: Add F81866 support To: "Ji-Ze Hong (Peter Hong)" , wim@iguana.be References: <1465369070-22808-1-git-send-email-hpeter+linux_kernel@gmail.com> Cc: linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org, peter_hong@fintek.com.tw, tom_tsai@fintek.com.tw, "Ji-Ze Hong (Peter Hong)" From: Guenter Roeck Message-ID: <575820E9.6040303@roeck-us.net> Date: Wed, 8 Jun 2016 06:43:05 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: <1465369070-22808-1-git-send-email-hpeter+linux_kernel@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Authenticated_sender: linux@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: linux@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: linux@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/07/2016 11:57 PM, Ji-Ze Hong (Peter Hong) wrote: > Adds watchdog enable support for Fintek F81866 Super-IO chip to > Fintek wdt driver (f71808e_wdt) > > Tested and verified on iBASE MI802 Industrial PC > > Datasheet references: > http://www.alldatasheet.com/datasheet-pdf/pdf/459085/FINTEK/F81866AD-I.html > > Suggested-by: Guenter Roeck > Signed-off-by: Ji-Ze Hong (Peter Hong) Reviewed-by: Guenter Roeck > --- > Change Log: > V2: > 1. Put the newer F81866 registers in order with olds. > 2. Set the register from constant value to BIT() marco > > drivers/watchdog/f71808e_wdt.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c > index d4ba262..3b2de11 100644 > --- a/drivers/watchdog/f71808e_wdt.c > +++ b/drivers/watchdog/f71808e_wdt.c > @@ -45,9 +45,11 @@ > #define SIO_REG_DEVREV 0x22 /* Device revision */ > #define SIO_REG_MANID 0x23 /* Fintek ID (2 bytes) */ > #define SIO_REG_ROM_ADDR_SEL 0x27 /* ROM address select */ > +#define SIO_F81866_REG_PORT_SEL 0x27 /* F81866 Multi-Function Register */ > #define SIO_REG_MFUNCT1 0x29 /* Multi function select 1 */ > #define SIO_REG_MFUNCT2 0x2a /* Multi function select 2 */ > #define SIO_REG_MFUNCT3 0x2b /* Multi function select 3 */ > +#define SIO_F81866_REG_GPIO1 0x2c /* F81866 GPIO1 Enable Register */ > #define SIO_REG_ENABLE 0x30 /* Logical device enable */ > #define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */ > > @@ -60,6 +62,7 @@ > #define SIO_F71882_ID 0x0541 /* Chipset ID */ > #define SIO_F71889_ID 0x0723 /* Chipset ID */ > #define SIO_F81865_ID 0x0704 /* Chipset ID */ > +#define SIO_F81866_ID 0x1010 /* Chipset ID */ > > #define F71808FG_REG_WDO_CONF 0xf0 > #define F71808FG_REG_WDT_CONF 0xf5 > @@ -116,7 +119,8 @@ 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, f81865 }; > +enum chips { f71808fg, f71858fg, f71862fg, f71869, f71882fg, f71889fg, f81865, > + f81866}; > > static const char *f71808e_names[] = { > "f71808fg", > @@ -126,6 +130,7 @@ static const char *f71808e_names[] = { > "f71882fg", > "f71889fg", > "f81865", > + "f81866", > }; > > /* Super-I/O Function prototypes */ > @@ -370,6 +375,22 @@ static int watchdog_start(void) > superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT3, 5); > break; > > + case f81866: > + /* Set pin 70 to WDTRST# */ > + superio_clear_bit(watchdog.sioaddr, SIO_F81866_REG_PORT_SEL, > + BIT(3) | BIT(0)); > + superio_set_bit(watchdog.sioaddr, SIO_F81866_REG_PORT_SEL, > + BIT(2)); > + /* > + * GPIO1 Control Register when 27h BIT3:2 = 01 & BIT0 = 0. > + * The PIN 70(GPIO15/WDTRST) is controlled by 2Ch: > + * BIT5: 0 -> WDTRST# > + * 1 -> GPIO15 > + */ > + superio_clear_bit(watchdog.sioaddr, SIO_F81866_REG_GPIO1, > + BIT(5)); > + break; > + > default: > /* > * 'default' label to shut up the compiler and catch > @@ -382,7 +403,7 @@ static int watchdog_start(void) > superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); > superio_set_bit(watchdog.sioaddr, SIO_REG_ENABLE, 0); > > - if (watchdog.type == f81865) > + if (watchdog.type == f81865 || watchdog.type == f81866) > superio_set_bit(watchdog.sioaddr, F81865_REG_WDO_CONF, > F81865_FLAG_WDOUT_EN); > else > @@ -788,6 +809,9 @@ static int __init f71808e_find(int sioaddr) > case SIO_F81865_ID: > watchdog.type = f81865; > break; > + case SIO_F81866_ID: > + watchdog.type = f81866; > + break; > default: > pr_info("Unrecognized Fintek device: %04x\n", > (unsigned int)devid); >