linux/drivers/watchdog/m54xx_wdt.c
<<
e="v2e="v2e=//spa6.3e=/spa6 class="lxr_search">e="ve="v2e="v2e="v2typ Searche="v2e=//spa6.3"v2< e=/input typ e"v2< 3 /div id < <1//a>/spa6 class="comment">/*//spa6.3< <2//a>/spa6 class="comment"> * drivers/watchdog/m54xx_wdt.c//spa6.3< <3//a>/spa6 class="comment"> *//spa6.3< <4//a>/spa6 class="comment"> * Watchdog driver for ColdFire MCF547x & MCF548x processors//spa6.3< <5//a>/spa6 class="comment"> * Copyright 2010 (c) Philippe De Muyter <phdm@macqel.be>//spa6.3< <6//a>/spa6 class="comment"> *//spa6.3< <7//a>/spa6 class="comment"> * Adapted from the IXP4xx watchdog driver, which carries these notices://spa6.3< <8//a>/spa6 class="comment"> *//spa6.3< <9//a>/spa6 class="comment"> * Author: Deepak Saxena <dsaxena@plexity.net>//spa6.3< " a>/spa6 class="comment"> *//spa6.3< 11//a>/spa6 class="comment"> * Copyright 2004 (c) MontaVista, Software, Inc.//spa6.3< 12//a>/spa6 class="comment"> * Based on>sa1100 driver, Copyright (C) 2000 Oleg Drokin <green@crimea.edu>//spa6.3< 13//a>/spa6 class="comment"> *//spa6.3< 14//a>/spa6 class="comment"> * This file is licensed under the terms of the GNU General Public//spa6.3< 15//a>/spa6 class="comment"> * License version>2. This program is licensed "as is" without any//spa6.3< 16//a>/spa6 class="comment"> * warranty of any kind, whether express or implied.//spa6.3< 17//a>/spa6 class="comment"> *///spa6.3< 18//a>3< 19//a>#definepr_fmt//a>(/a href="+code=fmt" class="sref">fmt//a>)KBUILD_MODNAME//a> /spa6 class="string">": "//spa6.fmt//a>3< 20//a>3< 21//a>#include <linux/module.h//a>>3< 22//a>#include <linux/moduleparam.h//a>>3< 23//a>#include <linux/typ s.h//a>>3< 24//a>#include <linux/kernel.h//a>>3< 25//a>#include <linux/fs.h//a>>3< 26//a>#include <linux/miscdevice.h//a>>3< 27//a>#include <linux/watchdog.h//a>>3< 28//a>#include <linux/init.h//a>>3< 29//a>#include <linux/bitops.h//a>>3< 30//a>#include <linux/ioport.h//a>>3< 31//a>#include <linux/uaccess.h//a>>3< 32//a>3< 33//a>#include <asm/coldfire.h//a>>3< 34//a>#include <asm/m54xxsim.h//a>>3< 35//a>#include <asm/m54xxgpt.h//a>>3< 36//a>3< 37//a>staticbool//a> /a href="+code=nowayout" class="sref">nowayout//a> = /a href="+code=WATCHDOG_NOWAYOUT" class="sref">WATCHDOG_NOWAYOUT//a>;3< 38//a>staticheartbeat//a> = 30;v2< /* (secs) Default is 0.5 minute *///spa6.3< 39//a>staticwdt_status//a>;3< 40//a>3< 41//a>#defineWDT_IN_USE//a> 03< 42//a>#defineWDT_OK_TO_CLOSE//a> 13< 43//a>3< 44//a>staticwdt_enable//a>(void)3< 45//a>{3< 46//a> unsigned int /a href="+code=gms0" class="sref">gms0//a>;3< 47//a>3< 48//a> /spa6 class="comment">/* preserve GPIO usage, if any *///spa6.3< 49//a> /a href="+code=gms0" class="sref">gms0//a> = /a href="+code=__raw_readl" class="sref">__raw_readl//a>(/a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 50//a> if (/a href="+code=gms0" class="sref">gms0//a> & /a href="+code=MCF_GPT_GMS_TMS_GPIO" class="sref">MCF_GPT_GMS_TMS_GPIO//a>)3< 51//a> /a href="+code=gms0" class="sref">gms0//a> &= (/a href="+code=MCF_GPT_GMS_TMS_GPIO" class="sref">MCF_GPT_GMS_TMS_GPIO//a> | /a href="+code=MCF_GPT_GMS_GPIO_MASK" class="sref">MCF_GPT_GMS_GPIO_MASK//a>3< 52//a> | /a href="+code=MCF_GPT_GMS_OD" class="sref">MCF_GPT_GMS_OD//a>);3< 53//a> else3< 54//a> /a href="+code=gms0" class="sref">gms0//a> = /a href="+code=MCF_GPT_GMS_TMS_GPIO" class="sref">MCF_GPT_GMS_TMS_GPIO//a> | /a href="+code=MCF_GPT_GMS_OD" class="sref">MCF_GPT_GMS_OD//a>;3< 55//a> /a href="+code=__raw_writel" class="sref">__raw_writel//a>(/a href="+code=gms0" class="sref">gms0//a>, /a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 56//a> /a href="+code=__raw_writel" class="sref">__raw_writel//a>(/a href="+code=MCF_GPT_GCIR_PRE" class="sref">MCF_GPT_GCIR_PRE//a>(/a href="+code=heartbeat" class="sref">heartbeat//a>*(/a href="+code=MCF_BUSCLK" class="sref">MCF_BUSCLK//a>/0xffff)) |3< 57//a> /a href="+code=MCF_GPT_GCIR_CNT" class="sref">MCF_GPT_GCIR_CNT//a>(0xffff), /a href="+code=MCF_GPT_GCIR0" class="sref">MCF_GPT_GCIR0//a>);3< 58//a> /a href="+code=gms0" class="sref">gms0//a> |= /a href="+code=MCF_GPT_GMS_OCPW" class="sref">MCF_GPT_GMS_OCPW//a>(0xA5) | /a href="+code=MCF_GPT_GMS_WDEN" class="sref">MCF_GPT_GMS_WDEN//a> | /a href="+code=MCF_GPT_GMS_CE" class="sref">MCF_GPT_GMS_CE//a>;3< 59//a> /a href="+code=__raw_writel" class="sref">__raw_writel//a>(/a href="+code=gms0" class="sref">gms0//a>, /a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 60//a>}3< 61//a>3< 62//a>staticwdt_disable//a>(void)3< 63//a>{3< 64//a> unsigned int /a href="+code=gms0" class="sref">gms0//a>;3< 65//a>3< 66//a> /spa6 class="comment">/* disable watchdog *///spa6.3< 67//a> /a href="+code=gms0" class="sref">gms0//a> = /a href="+code=__raw_readl" class="sref">__raw_readl//a>(/a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 68//a> /a href="+code=gms0" class="sref">gms0//a> &= ~(/a href="+code=MCF_GPT_GMS_WDEN" class="sref">MCF_GPT_GMS_WDEN//a> | /a href="+code=MCF_GPT_GMS_CE" class="sref">MCF_GPT_GMS_CE//a>);3< 69//a> /a href="+code=__raw_writel" class="sref">__raw_writel//a>(/a href="+code=gms0" class="sref">gms0//a>, /a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 70//a>}3< 71//a>3< 72//a>staticwdt_keepalive//a>(void)3< 73//a>{3< 74//a> unsigned int /a href="+code=gms0" class="sref">gms0//a>;3< 75//a>3< 76//a> /a href="+code=gms0" class="sref">gms0//a> = /a href="+code=__raw_readl" class="sref">__raw_readl//a>(/a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 77//a> /a href="+code=gms0" class="sref">gms0//a> |= /a href="+code=MCF_GPT_GMS_OCPW" class="sref">MCF_GPT_GMS_OCPW//a>(0xA5);3< 78//a> /a href="+code=__raw_writel" class="sref">__raw_writel//a>(/a href="+code=gms0" class="sref">gms0//a>, /a href="+code=MCF_GPT_GMS0" class="sref">MCF_GPT_GMS0//a>);3< 79//a>}3< 80//a>3< 81//a>staticm54xx_wdt_open//a>(struct /a href="+code=inode" class="sref">inode//a> */a href="+code=inode" class="sref">inode//a>, struct /a href="+code=file" class="sref">file//a> */a href="+code=file" class="sref">file//a>)3< 82//a>{3< 83//a> if (/a href="+code=test_and_set_bit" class="sref">test_and_set_bit//a>(/a href="+code=WDT_IN_USE" class="sref">WDT_IN_USE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>))3< 84//a> return -/a href="+code=EBUSY" class="sref">EBUSY//a>;3< 85//a>3< 86//a> /a href="+code=clear_bit" class="sref">clear_bit//a>(/a href="+code=WDT_OK_TO_CLOSE" class="sref">WDT_OK_TO_CLOSE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>);3< 87//a> /a href="+code=wdt_enable" class="sref">wdt_enable//a>();3< 88//a> return /a href="+code=nonseekable_open" class="sref">nonseekable_open//a>(/a href="+code=inode" class="sref">inode//a>, /a href="+code=file" class="sref">file//a>);3< 89//a>}3< 90//a>3< 91//a>staticssize_t//a> /a href="+code=m54xx_wdt_write" class="sref">m54xx_wdt_write//a>(struct /a href="+code=file" class="sref">file//a> */a href="+code=file" class="sref">file//a>, const char */a href="+code=data" class="sref">data//a>,3< 92//a> /a href="+code=size_t" class="sref">size_t//a> /a href="+code=len" class="sref">len//a>, /a href="+code=loff_t" class="sref">loff_t//a> */a href="+code=ppos" class="sref">ppos//a>)3< 93//a>{3< 94//a> if (/a href="+code=len" class="sref">len//a>) {3< 95//a> if (!/a href="+code=nowayout" class="sref">nowayout//a>) {3< 96//a> /a href="+code=size_t" class="sref">size_t//a> /a href="+code=i" class="sref">i//a>;3< 97//a>3< 98//a> /a href="+code=clear_bit" class="sref">clear_bit//a>(/a href="+code=WDT_OK_TO_CLOSE" class="sref">WDT_OK_TO_CLOSE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>);3< 99//a>3<100//a> for (/a href="+code=i" class="sref">i//a> = 0; /a href="+code=i" class="sref">i//a> != /a href="+code=len" class="sref">len//a>; /a href="+code=i" class="sref">i//a>++) {3<101//a> char /a href="+code=c" class="sref">c//a>;3<102//a>3<103//a> if (/a href="+code=get_user" class="sref">get_user//a>(/a href="+code=c" class="sref">c//a>, /a href="+code=data" class="sref">data//a> + /a href="+code=i" class="sref">i//a>))3<104//a> return -/a href="+code=EFAULT" class="sref">EFAULT//a>;3<105//a> if (/a href="+code=c" class="sref">c//a> == /spa6 class="string">'V'//spa6.)3<106//a> /a href="+code=set_bit" class="sref">set_bit//a>(/a href="+code=WDT_OK_TO_CLOSE" class="sref">WDT_OK_TO_CLOSE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>);3<107//a> }3<108//a> }3<109//a> /a href="+code=wdt_keepalive" class="sref">wdt_keepalive//a>();3<110//a> }3<111//a> return /a href="+code=len" class="sref">len//a>;3<112//a>}3<113//a>3<114//a>staticwatchdog_info//a> /a href="+code=ident" class="sref">ident//a> = {3<115//a> ./a href="+code= v2.6s" class="sref"> v2.6s//a> = /a href="+code=WDIOF_MAGICCLOSE" class="sref">WDIOF_MAGICCLOSE//a> | /a href="+code=WDIOF_SETTIMEOUT" class="sref">WDIOF_SETTIMEOUT//a> |3<116//a> /a href="+code=WDIOF_KEEPALIVEPING" class="sref">WDIOF_KEEPALIVEPING//a>,3<117//a> ./a href="+code=identity" class="sref">identity//a> = /spa6 class="string">"Coldfire M54xx Watchdog"//spa6.,3<118//a>};3<119//a>3<120//a>staticm54xx_wdt_ioctl//a>(struct /a href="+code=file" class="sref">file//a> */a href="+code=file" class="sref">file//a>, unsigned int /a href="+code=cmd" class="sref">cmd//a>,3<121//a> unsigned long /a href="+code=arg" class="sref">arg//a>)3<122//a>{3<123//a> int /a href="+code=ret" class="sref">ret//a> = -/a href="+code=ENOTTY" class="sref">ENOTTY//a>;3<124//a> int /a href="+code=time" class="sref">time//a>;3<125//a>3<126//a> switch (/a href="+code=cmd" class="sref">cmd//a>) {3<127//a> caseWDIOC_GETSUPPORT//a>:3<128//a> /a href="+code=ret" class="sref">ret//a> = /a href="+code=copy_to_user" class="sref">copy_to_user//a>((struct /a href="+code=watchdog_info" class="sref">watchdog_info//a> *)/a href="+code=arg" class="sref">arg//a>, &/a href="+code=ident" class="sref">ident//a>,3<129//a> sizeof(/a href="+code=ident" class="sref">ident//a>)) ? -/a href="+code=EFAULT" class="sref">EFAULT//a> : 0;3<130//a> break;3<131//a>3<132//a> caseWDIOC_GETSTATUS//a>:3<133//a> /a href="+code=ret" class="sref">ret//a> = /a href="+code=put_user" class="sref">put_user//a>(0, (int *)/a href="+code=arg" class="sref">arg//a>);3<134//a> break;3<135//a>3<136//a> caseWDIOC_GETBOOTSTATUS//a>:3<137//a> /a href="+code=ret" class="sref">ret//a> = /a href="+code=put_user" class="sref">put_user//a>(0, (int *)/a href="+code=arg" class="sref">arg//a>);3<138//a> break;3<139//a>3<140//a> caseWDIOC_KEEPALIVE//a>:3<141//a> /a href="+code=wdt_keepalive" class="sref">wdt_keepalive//a>();3<142//a> /a href="+code=ret" class="sref">ret//a> = 0;3<143//a> break;3<144//a>3<145//a> caseWDIOC_SETTIMEOUT//a>:3<146//a> /a href="+code=ret" class="sref">ret//a> = /a href="+code=get_user" class="sref">get_user//a>(/a href="+code=time" class="sref">time//a>, (int *)/a href="+code=arg" class="sref">arg//a>);3<147//a> if (/a href="+code=ret" class="sref">ret//a>)3<148//a> break;3<149//a>3<150//a> if (/a href="+code=time" class="sref">time//a> <= 0 || /a href="+code=time" class="sref">time//a> > 30) {3<151//a> /a href="+code=ret" class="sref">ret//a> = -/a href="+code=EINVAL" class="sref">EINVAL//a>;3<152//a> break;3<153//a> }3<154//a>3<155//a> /a href="+code=heartbeat" class="sref">heartbeat//a> = /a href="+code=time" class="sref">time//a>;3<156//a> /a href="+code=wdt_enable" class="sref">wdt_enable//a>();3<157//a> /spa6 class="comment">/* Fall through *///spa6.3<158//a>3<159//a> caseWDIOC_GETTIMEOUT//a>:3<160//a> /a href="+code=ret" class="sref">ret//a> = /a href="+code=put_user" class="sref">put_user//a>(/a href="+code=heartbeat" class="sref">heartbeat//a>, (int *)/a href="+code=arg" class="sref">arg//a>);3<161//a> break;3<162//a> }3<163//a> return /a href="+code=ret" class="sref">ret//a>;3<164//a>}3<165//a>3<166//a>staticm54xx_wdt_release//a>(struct /a href="+code=inode" class="sref">inode//a> */a href="+code=inode" class="sref">inode//a>, struct /a href="+code=file" class="sref">file//a> */a href="+code=file" class="sref">file//a>)3<167//a>{3<168//a> if (/a href="+code=test_bit" class="sref">test_bit//a>(/a href="+code=WDT_OK_TO_CLOSE" class="sref">WDT_OK_TO_CLOSE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>))3<169//a> /a href="+code=wdt_disable" class="sref">wdt_disable//a>();3<170//a> else {3<171//a> /a href="+code=pr_crit" class="sref">pr_crit//a>(/spa6 class="string">"Device closed unexpectedly - timer will not stop\n"//spa6.);3<172//a> /a href="+code=wdt_keepalive" class="sref">wdt_keepalive//a>();3<173//a> }3<174//a> /a href="+code=clear_bit" class="sref">clear_bit//a>(/a href="+code=WDT_IN_USE" class="sref">WDT_IN_USE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>);3<175//a> /a href="+code=clear_bit" class="sref">clear_bit//a>(/a href="+code=WDT_OK_TO_CLOSE" class="sref">WDT_OK_TO_CLOSE//a>, &/a href="+code=wdt_status" class="sref">wdt_status//a>);3<176//a>3<177//a> return 0;3<178//a>}3<179//a>33< 81//a>s1tatic1int /a href="/a href="+code=watchdog_info". v2.6s//a> ". v2.6s//a> ease" clasfopff="+codivers/watchdog/m54xx_wdt.c#L171" id < 82//a>{13put_user//a>(swnef /a hrefode=put_user" claTHIS/spaULf">WDT_OK_TO_CLOTHIS/spaULf="drivers/watchdog/m54xx_wdt.c#L129" id < 83//a> 1 1 if (/a href="de= v2.6s" clasll//a>">WDT_OK_TO_CLOll//a> /a hreode=put_user" clano_ll//a>">WDT_OK_TO_CLOno_ll//a>="drivers/watchdog/m54xx_wdt.c#L129" id < 84//a> 1 1 returde= v2.6s" clas"sref">m54xx_wdt_wriuct /a hr /a hrefode=put_user" clate" class="sref">m54xx_wdt_write//a>(struct /a hrivers/watchdog/m54xx_wdt.c#L129" id < 85//a>31m54xx_wdt_iocunlocked="sreff="+code=put_user" clatl" class="sref">m54xx_wdt_ioctl//a>(struct /a hrivers/watchdog/m54xx_wdt.c#L129" id < 86//a> 1 1 /a href="+codde= v2.6s" class=ef">len//a>;3m54xx_wdt_open//a>(struct /a hrivers/watchdog/m54xx_wdt.c#L129" id < 87//a> 1 18./a href="+code=identity" clas="sref">m54xx_wdt_reltruct /a hr /a hrefode=put_user" clate" class=s="sref">m54xx_wdt_release//a>(struct /a hrivers/watchdog/m54xx_wdt.c#L129" id < 18//a>3< 89//a>}13< 90//a>31>3m54xx_wdt_relea>>3>">m54xx_wdt_release//a>(sea>>f="+codivers/watchdog/m54xx_wdt.c#L171" id < 91//a>s1tatic191/a href="+code=identity" claminof">put_user//a>(minofa hr /a hrefode=put_user" claYOUT//a>;MINOR">WDT_OK_TO_CLOSOUT//a>;MINORa hrivers/watchdog/m54xx_wdt.c#L129" id < 92//a> 1 19 /a hrde= v2.6s" clas92//">WDT_OK_TO_CLOname"+co /a hrefodetring">"Device closedx_wdt.c#,3< 93//a>{13 v2.6s//a> fopff="+c /a hrefod"+code=wdt_status" cease" clasfopf"> v2.6s//a> ease" clasfopff="+ivers/watchdog/m54xx_wdt.c#L118" id < 94//a> 1 1 if (/rivers/watchdog/m54xx_wdt.c#L119" id < 95//a> 1 19="drivers/watchdog/m54xx_wdt.c#L166" id < 96//a> 1 19nt /a href="+code=m54xx_wdt_rel__;3 v2.6s//a> __;3 v2.6s//a> ease" clas;3< 97//a>31< 98//a> 1 19if (/a href="+codde=nowayout" clarequa hrmemstrgsre">m54xx_wdt_reltrqua hrmemstrgsre"+code=WDT_OK_TO_CLO" class="sref">MCF_GPT_GCIR0//a>);3"Coldfire M54xx Watchdog"//spa6.,3< 99//a>31m54xx_wdt_relpr_wareass="string">"Device closedI/O trgsre busy6.);3<100//a>2 2 for (ef="+code=EBUSY" class="sref">EBUSY//a>;3<101//a>2 2 ivers/watchdog/m54xx_wdt.c#L179" id <102//a>2watchdog_infopr_srefass="string">"Device closeddog/m5e */loaded6.);3< 93//a>{2 20="drivers/watchdog/m54xx_wdt.c#L114" id <104//a>2 2 f="+code=ret" class="sea>&strgsstef">put_user//a>(ea>&strgsstefass=""+code=wdt_status" cease" clasea>>">m54xx_wdt_release//a>(sea>>f="+rivers/watchdog/m54xx_wdt.c#L172" id < 95//a> 2 2 ivers/watchdog/m54xx_wdt.c#L179" id < 96//a> 2 20="drivers/watchdog/m54xx_wdt.c#L177" id <107//a>2 20a href="+cod"+code=wdt_keepalive__ex v2.6s//a> __ex v2.6s//a> ease" clasex<108//a>2 2 ivers/watchdog/m54xx_wdt.c#L151" id <109//a>2 20/a href="+code=__raw_writel"ea>&sdetrgsstef">put_user//a>(ea>&sdetrgsstefass=""+code=wdt_status" cease" clasea>>">m54xx_wdt_release//a>(sea>>f="+rivers/watchdog/m54xx_wdt.c#L172" id <110//a>2 2 }3m54xx_wdt_reltr"srefrmemstrgsre"+code=WDT_OK_TO_CLO" class="sref">MCF_GPT_GCIR0//a>);3<111//a>2 2 returivers/watchdog/m54xx_wdt.c#L179" id <112//a>23<113//a>2 v2.6s//a> eodules;3 v2.6s//a> ease" clas;3<114//a>2tatic2const e=wdt_status" ceodulesex v2.6s//a> eodulesex v2.6s//a> ease" clasex<115//a>2 21="drivers/watchdog/m54xx_wdt.c#L166" id <116//a>2 2 e=WDT_OK_TO_CLO"paULf_AUTHOR">WDT_OK_TO_CLO"paULf_AUTHORass="string">"Device closedPhilippe Ddoguytefa hrephdm@macqel.be hre);3<117//a>2 2 ./a he=WDT_OK_TO_CLO"paULf_DESCRIPTIOf">MCF_GPT_GMS_WDpaULf_DESCRIPTIOfass="string">"Device closedx Watchdog"//spa6.,3<118//a>2;3<119//a>2 v2.6s//a> eodulesparam"+code=heartbeat" class="sref">heartbeat//a>, (int *)/a hre+co, 0)ivers/watchdog/m54xx_wdt.c#L172" id <120//a>2tatic2long /e=WDT_OK_TO_CLO"paULf_PARM_DESC">MCF_GPT_GMS_WDpaULf_PARM_DESC"+code=heartbeat" class="sref">heartbeat//a>, (int *)/a hrestring">"Device closed;//spa6. , (int *)e+c seconds (d minute30s),3<121//a>2 22="drivers/watchdog/m54xx_wdt.c#L132" id <122//a>23 v2.6s//a> eodulesparam"+code=heartbeat" clss="sref">nowayout//a>) {3bool//a> /a href="+co, 0)ivers/watchdog/m54xx_wdt.c#L172" id <123//a>2 22="drie=wdt_status" c"paULf_PARM_DESC">MCF_GPT_GMS_WDpaULf_PARM_DESC"+code=heartbeat" clss="sref">nowayout//a>) {3"Device closed;//spa6. canot;/be//spaped once//s(ined,3<124//a>2 22="drivers/watchdog/m54xx_wdt.c#L155" id <125//a>2WDT_OK_TO_CLO"paULf_LICENefass="string">"Device closedGPL,3<126//a>2 22 e=WDT_OK_TO_CLO"paULf_ALIAS_MISCDEV">WDT_OK_TO_CLO"paULf_ALIAS_MISCDEV"+code=WDT_OK_TO_CLOSOUT//a>;MINOR">WDT_OK_TO_CLOSOUT//a>;MINORa hr)ivers/watchdog/m54xx_wdt.c#L172" id <127//a>2 2 case<
The original LXR softwahdoby thode=WDIOC_Ghttp://sourceforge.net/projects/lxf">LXR all un = /spa, this timeri thral /m54sre byde=WDIOC_Gmailto:lxf@127ux.no">lxf@127ux.no/spa.
lxf.127ux.no kinill hosted byde=WDIOC_Ghttp://www.redpill-127pro.no">Redpill L27pro AS/spa, providet of L27ux"/a hnutvic and opera"sref age,icef aince/1995.