linux/drivers/watchdog/pnx4008_wdt.c
<<
val3v4/spa" 3v4/form 3v4a val3v href="../linux+v3.9.5/drivers/watchdog/pnx4008_wdt.c"> val3v4img src="../.static/gfx/right.png" alt=">>"> v4/spa" v4spa" class="lxr_search"> val val3v4input typt2uhidden" namt2unavtarget" val3v4input typt2utext" namt2usearch" id2usearch"> val3v4butt6.1typt2usubmit">Search val3vPrefs 3v4/a> v4/spa" al3v v4/div al3v v4form ac.40"="ajax+*" method="post" onsubmit="return false;"> v4input typt2uhidden" namt2uajax_lookup" id2uajax_lookup" al3v v4/form al3v v4div class="headingbott6m">
4div id2ufile_contents"
v v14/a>4spa" class="comment">/*4/spa"
	v v24/a>4spa" class="comment"> * drivers/char/watchdog/pnx4008_wdt.c4/spa"
	v v34/a>4spa" class="comment"> *4/spa"
	v v44/a>4spa" class="comment"> * Watchdog driver for PNX4008 board4/spa"
	v v54/a>4spa" class="comment"> *4/spa"
	v v64/a>4spa" class="comment"> * Authors: Dmitry Chigirev <source@mvista.com>,4/spa"
	v v74/a>4spa" class="comment"> *          Vitaly Wool <vitalywool@gmail.com>4/spa"
	v v84/a>4spa" class="comment"> * Based on sa1100 driver,4/spa"
	v v94/a>4spa" class="comment"> * Copyright (C) 2000 Oleg Drokin <green@crimea.edu>4/spa"
	v optia>4spa" class="comment"> *4/spa"
	v 114/a>4spa" class="comment"> * 2005-2006 (c) MontaVista Software, Inc.4/spa"
	v 124/a>4spa" class="comment"> *4/spa"
	v 134/a>4spa" class="comment"> * (C) 2012 Wolfram Sang, Pengutronix4/spa"
	v 144/a>4spa" class="comment"> *4/spa"
	v 154/a>4spa" class="comment"> * This file is licensed under the terms of the GNU General Public License4/spa"
	v 164/a>4spa" class="comment"> * vers.6.12. This program is licensed "as is" without any warranty of any4/spa"
	v 174/a>4spa" class="comment"> * kind, whether express or implied.4/spa"
	v 184/a>4spa" class="comment"> */4/spa"
	v 194/a>	v 2ptia>#definev4a href="+code=pr_fmt" class="sref">pr_fmttia>(4a href="+code=fmt" class="sref">fmttia>)v4a href="+code=KBUILD_MODNAME" class="sref">KBUILD_MODNAMEtia> 4spa" class="string">": "4/spa"
v4a href="+code=fmt" class="sref">fmttia>	v 21tia>	v 224/a>#include <linux/module.h4/a>>	v 234/a>#include <linux/moduleparam.h4/a>>	v 244/a>#include <linux/typts.h4/a>>	v 254/a>#include <linux/kernel.h4/a>>	v 264/a>#include <linux/miscdevice.h4/a>>	v 274/a>#include <linux/watchdog.h4/a>>	v 284/a>#include <linux/init.h4/a>>	v 294/a>#include <linux/platform_device.h4/a>>	v 304/a>#include <linux/clk.h4/a>>	v 314/a>#include <linux/spinlock.h4/a>>	v 324/a>#include <linux/io.h4/a>>	v 334/a>#include <linux/slab.h4/a>>	v 344/a>#include <linux/err.h4/a>>	v 354/a>#include <linux/of.h4/a>>	v 364/a>#include <mach/hardware.h4/a>>	v 37tia>	v 384/a>4spa" class="comment">/* WatchDog Timer - Chapter 23 Page 2p7 */4/spa"
	v 394/a>	v 4ptia>#definev4a href="+code=DEFAULT_HEARTBEAT" class="sref">DEFAULT_HEARTBEATtia> 19	v 41tia>#definev4a href="+code=MAX_HEARTBEAT" class="sref">MAX_HEARTBEATtia>     60	v 424/a>	v 434/a>4spa" class="comment">/* Watchdog timer register set defini4.6.1*/4/spa"
	v 44tia>#definev4a href="+code=WDTIM_INT" class="sref">WDTIM_INTtia>(4a href="+code=p" class="sref">ptia>)vvvvv((4a href="+code=p" class="sref">ptia>)v+ 0x0)	v 45tia>#definev4a href="+code=WDTIM_CTRL" class="sref">WDTIM_CTRLtia>(4a href="+code=p" class="sref">ptia>)vvvv((4a href="+code=p" class="sref">ptia>)v+ 0x4)	v 46tia>#definev4a href="+code=WDTIM_COUNTER" class="sref">WDTIM_COUNTERtia>(4a href="+code=p" class="sref">ptia>)v((4a href="+code=p" class="sref">ptia>)v+ 0x8)	v 47tia>#definev4a href="+code=WDTIM_MCTRL" class="sref">WDTIM_MCTRLtia>(4a href="+code=p" class="sref">ptia>)vvv((4a href="+code=p" class="sref">ptia>)v+ 0xC)	v 48tia>#definev4a href="+code=WDTIM_MATCH0" class="sref">WDTIM_MATCH0tia>(4a href="+code=p" class="sref">ptia>)vv((4a href="+code=p" class="sref">ptia>)v+ 0x10)	v 49tia>#definev4a href="+code=WDTIM_EMR" class="sref">WDTIM_EMRtia>(4a href="+code=p" class="sref">ptia>)vvvvv((4a href="+code=p" class="sref">ptia>)v+ 0x14)	v 5ptia>#definev4a href="+code=WDTIM_PULSE" class="sref">WDTIM_PULSEtia>(4a href="+code=p" class="sref">ptia>)vvv((4a href="+code=p" class="sref">ptia>)v+ 0x18)	v 51tia>#definev4a href="+code=WDTIM_RES" class="sref">WDTIM_REStia>(4a href="+code=p" class="sref">ptia>)vvvvv((4a href="+code=p" class="sref">ptia>)v+ 0x1C)	v 524/a>	v 534/a>4spa" class="comment">/* WDTIM_INT bit defini4.6.s1*/4/spa"
	v 54tia>#definev4a href="+code=MATCH_INT" class="sref">MATCH_INTtia>      1	v 554/a>	v 564/a>4spa" class="comment">/* WDTIM_CTRL bit defini4.6.s1*/4/spa"
	v 57tia>#definev4a href="+code=COUNT_ENAB" class="sref">COUNT_ENABtia>     1	v 58tia>#definev4a href="+code=RESET_COUNT" class="sref">RESET_COUNTtia>    (1 << 1)	v 59tia>#definev4a href="+code=DEBUG_EN" class="sref">DEBUG_ENtia>       (1 << 2)	v 604/a>	v 614/a>4spa" class="comment">/* WDTIM_MCTRL bit defini4.6.s1*/4/spa"
	v 62tia>#definev4a href="+code=MR0_INT" class="sref">MR0_INTtia>        1	v 634/a>#undef v4a href="+code=RESET_COUNT0" class="sref">RESET_COUNT04/a>	v 64tia>#definev4a href="+code=RESET_COUNT0" class="sref">RESET_COUNT04/a>   (1 << 2)	v 65tia>#definev4a href="+code=STOP_COUNT0" class="sref">STOP_COUNT0tia>    (1 << 2)	v 66tia>#definev4a href="+code=M_RES1" class="sref">M_RES1tia>         (1 << 3)	v 67tia>#definev4a href="+code=M_RES2" class="sref">M_RES2tia>         (1 << 4)	v 68tia>#definev4a href="+code=RESFRC1" class="sref">RESFRC1tia>        (1 << 5)	v 69tia>#definev4a href="+code=RESFRC2" class="sref">RESFRC2tia>        (1 << 6)	v 704/a>	v 714/a>4spa" class="comment">/* WDTIM_EMR bit defini4.6.s1*/4/spa"
	v 72tia>#definev4a href="+code=EXT_MATCH0" class="sref">EXT_MATCH0tia>      1	v 73tia>#definev4a href="+code=MATCH_OUTPUT_HIGH" class="sref">MATCH_OUTPUT_HIGHtia> (2 << 4)al3v v4spa" class="comment">/*a MATCH_CTRL setting1*/4/spa"
	v 744/a>	v 754/a>4spa" class="comment">/* WDTIM_RES bit defini4.6.s1*/4/spa"
	v 76tia>#definev4a href="+code=WDOG_RESET" class="sref">WDOG_RESETtia>      1 al3v v4spa" class="comment">/* read only1*/4/spa"
	v 77tia>	v 78tia>#definev4a href="+code=WDOG_COUNTER_RATE" class="sref">WDOG_COUNTER_RATEtia> 13000000al3v v4spa" class="comment">/*the counter clock is 13 MHz fixed1*/4/spa"
	v 794/a>	v 80tia>staticv4a href="+code=bool" class="sref">booltia> 4a href="+code=nowayout" class="sref">nowayouttia> =v4a href="+code=WATCHDOG_NOWAYOUT" class="sref">WATCHDOG_NOWAYOUTtia>;	v 81tia>staticvunsigned1intv4a href="+code=heartbeat" class="sref">heartbeattia> =v4a href="+code=DEFAULT_HEARTBEAT" class="sref">DEFAULT_HEARTBEATtia>;	v 824/a>	v 83tia>staticv4a href="+code=DEFINE_SPINLOCK" class="sref">DEFINE_SPINLOCKtia>(4a href="+code=io_lock" class="sref">io_locktia>);	v 84tia>staticvvoidv4a href="+code=__iomem" class="sref">__iomemtia>     *4a href="+code=wdt_base" class="sref">wdt_basetia>;	v 85tia>structv4a href="+code=clk" class="sref">clktia>              *4a href="+code=wdt_clk" class="sref">wdt_clktia>;	v 864/a>	v 87tia>staticvintv4a href="+code=pnx4008_wdt_start" class="sref">pnx4008_wdt_starttia>(structv4a href="+code=watchdog_device" class="sref">watchdog_devicetia> *4a href="+code=wdd" class="sref">wddtia>)	v 88tia>{	v 89tia>        4a href="+code=spin_lock" class="sref">spin_locktia>(&4a href="+code=io_lock" class="sref">io_locktia>);	v 904/a>	v 91tia>        4spa" class="comment">/* stop counter, ini4.ate counter reset */4/spa"
	v 92tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=RESET_COUNT" class="sref">RESET_COUNTtia>,v4a href="+code=WDTIM_CTRL" class="sref">WDTIM_CTRLtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v 93tia>        4spa" class="comment">/*wait for reset to complete. 100% guarantee event */4/spa"
	v 94tia>        while (4a href="+code=readl" class="sref">readltia>(4a href="+code=WDTIM_COUNTER" class="sref">WDTIM_COUNTERtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>)))	v 95tia>                4a href="+code=cpu_relax" class="sref">cpu_relaxtia>();	v 96tia>        4spa" class="comment">/* internal and external reset, stop after that */4/spa"
	v 97tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=M_RES2" class="sref">M_RES2tia> |v4a href="+code=STOP_COUNT0" class="sref">STOP_COUNT0tia> |v4a href="+code=RESET_COUNT0" class="sref">RESET_COUNT04/a>,v4a href="+code=WDTIM_MCTRL" class="sref">WDTIM_MCTRLtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v 98tia>        4spa" class="comment">/* configure match output */4/spa"
	v 99tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=MATCH_OUTPUT_HIGH" class="sref">MATCH_OUTPUT_HIGHtia>,v4a href="+code=WDTIM_EMR" class="sref">WDTIM_EMRtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v100tia>        4spa" class="comment">/* clear interrupt, just in case */4/spa"
	v101tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=MATCH_INT" class="sref">MATCH_INTtia>,v4a href="+code=WDTIM_INT" class="sref">WDTIM_INTtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v102tia>        4spa" class="comment">/* the longest pulse period 65541/(13*10^6) seconds ~ 5 ms. */4/spa"
	v103tia>        4a href="+code=writel" class="sref">writeltia>(0xFFFF,v4a href="+code=WDTIM_PULSE" class="sref">WDTIM_PULSEtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v104tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=wdd" class="sref">wddtia>->4a href="+code=timeout" class="sref">timeouttia> *v4a href="+code=WDOG_COUNTER_RATE" class="sref">WDOG_COUNTER_RATEtia>,v4a href="+code=WDTIM_MATCH0" class="sref">WDTIM_MATCH0tia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v105tia>        4spa" class="comment">/*enable counter, stop when debugger ac.4ve */4/spa"
	v106tia>        4a href="+code=writel" class="sref">writeltia>(4a href="+code=COUNT_ENAB" class="sref">COUNT_ENABtia> |v4a href="+code=DEBUG_EN" class="sref">DEBUG_ENtia>,v4a href="+code=WDTIM_CTRL" class="sref">WDTIM_CTRLtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));	v107tia>	v108tia>        4a href="+code=spin_unlock" class="sref">spin_unlocktia>(&4a href="+code=io_lock" class="sref">io_locktia>);	v109tia>        return 0;	v1optia>}	v111tia>	v1124/a>staticvintv4a href="+code=pnx4008_wdt_stop" class="sref">pnx4008_wdt_stoptia>(structv4a href="+code=watchdog_device" class="sref">watchdog_devicetia> *4a href="+code=wdd" class="sref">wddtia>)	v1134/a>{	v114tia>        4a href="+code=spin_lock" class="sref">spin_locktia>(&4a href="+code=io_lock" class="sref">io_locktia>);	v1154/a>	v116tia>        4a href="+code=writel" class="sref">writeltia>(0,v4a href="+code=WDTIM_CTRL" class="sref">WDTIM_CTRLtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>));        4spa" class="comment">/*stop counter */4/spa"
	v117tia>	v118tia>        4a href="+code=spin_unlock" class="sref">spin_unlocktia>(&4a href="+code=io_lock" class="sref">io_locktia>);	v119tia>        return 0;	v12ptia>}	v121tia>	v1224/a>staticvintv4a href="+code=pnx4008_wdt_set_timeout" class="sref">pnx4008_wdt_set_timeouttia>(structv4a href="+code=watchdog_device" class="sref">watchdog_devicetia> *4a href="+code=wdd" class="sref">wddtia>,	v123tia>                                    unsigned1intv4a href="+code=new_timeout" class="sref">new_timeouttia>)	v1244/a>{	v125tia>        4a href="+code=wdd" class="sref">wddtia>->4a href="+code=timeout" class="sref">timeouttia> =v4a href="+code=new_timeout" class="sref">new_timeouttia>;	v126tia>        return 0;	v1274/a>}	v1284/a>	v1294/a>staticvconst structv4a href="+code=watchdog_info" class="sref">watchdog_infotia> 4a href="+code=pnx4008_wdt_ident" class="sref">pnx4008_wdt_identtia> =v{	v130tia>        .4a href="+code=14.40"s" class="sref">14.40"stia> =v4a href="+code=WDIOF_CARDRESET" class="sref">WDIOF_CARDRESETtia> |v4a href="+code=WDIOF_MAGICCLOSE" class="sref">WDIOF_MAGICCLOSEtia> |	v131tia>            4a href="+code=WDIOF_SETTIMEOUT" class="sref">WDIOF_SETTIMEOUTtia> |v4a href="+code=WDIOF_KEEPALIVEPING" class="sref">WDIOF_KEEPALIVEPINGtia>,	v132tia>        .4a href="+code=identity" class="sref">identitytia> =v4spa" class="string">"PNX4008 Watchdog"4/spa"
,	v1334/a>};	v1344/a>	v1354/a>staticvconst structv4a href="+code=watchdog_ops" class="sref">watchdog_opstia> 4a href="+code=pnx4008_wdt_ops" class="sref">pnx4008_wdt_opstia> =v{	v136tia>        .4a href="+code=1wner" class="sref">1wnertia> =v4a href="+code=THIS_MODULE" class="sref">THIS_MODULEtia>,	v137tia>        .4a href="+code=start" class="sref">starttia> =v4a href="+code=pnx4008_wdt_start" class="sref">pnx4008_wdt_starttia>,	v138tia>        .4a href="+code=stop" class="sref">stoptia> =v4a href="+code=pnx4008_wdt_stop" class="sref">pnx4008_wdt_stoptia>,	v139tia>        .4a href="+code=set_timeout" class="sref">set_timeouttia> =v4a href="+code=pnx4008_wdt_set_timeout" class="sref">pnx4008_wdt_set_timeouttia>,	v14ptia>};	v141tia>	v1424/a>staticvstructv4a href="+code=watchdog_device" class="sref">watchdog_devicetia> 4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia> =v{	v143tia>        .4a href="+code=info" class="sref">infotia> = &4a href="+code=pnx4008_wdt_ident" class="sref">pnx4008_wdt_identtia>,	v144tia>        .4a href="+code=1ps" class="sref">opstia> =v&4a href="+code=pnx4008_wdt_ops" class="sref">pnx4008_wdt_opstia>,	v145tia>        .4a href="+code=timeout" class="sref">timeouttia> =v4a href="+code=DEFAULT_HEARTBEAT" class="sref">DEFAULT_HEARTBEATtia>,	v146tia>        .4a href="+code=min_timeout" class="sref">min_timeouttia> =v1,	v147tia>        .4a href="+code=max_timeout" class="sref">max_timeouttia> =v4a href="+code=MAX_HEARTBEAT" class="sref">MAX_HEARTBEATtia>,	v148tia>};	v1494/a>	v150tia>staticvintv4a href="+code=pnx4008_wdt_probe" class="sref">pnx4008_wdt_probetia>(structv4a href="+code=platform_device" class="sref">platform_devicetia> *4a href="+code=pdev" class="sref">pdevtia>)	v151tia>{	v152tia>        structv4a href="+code=resource" class="sref">resourcetia> *4a href="+code=r" class="sref">rtia>;	v153tia>        intv4a href="+code=ret" class="sref">rettia> =v0;	v1544/a>	v155tia>        4a href="+code=watchdog_init_timeout" class="sref">watchdog_init_timeouttia>(&4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>,v4a href="+code=heartbeat" class="sref">heartbeattia>,v&4a href="+code=pdev" class="sref">pdevtia>->4a href="+code=dev" class="sref">devtia>);	v1564/a>	v157tia>        4a href="+code=r" class="sref">rtia> =v4a href="+code=platform_get_resource" class="sref">platform_get_resourcetia>(4a href="+code=pdev" class="sref">pdevtia>,v4a href="+code=IORESOURCE_MEM" class="sref">IORESOURCE_MEMtia>,v0);	v158tia>        4a href="+code=wdt_base" class="sref">wdt_basetia> =v4a href="+code=devm_ioremap_resource" class="sref">devm_ioremap_resourcetia>(&4a href="+code=pdev" class="sref">pdevtia>->4a href="+code=dev" class="sref">devtia>,v4a href="+code=r" class="sref">rtia>);	v159tia>        if (4a href="+code=IS_ERR" class="sref">IS_ERRtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>))	v160tia>                return 4a href="+code=PTR_ERR" class="sref">PTR_ERRtia>(4a href="+code=wdt_base" class="sref">wdt_basetia>);	v161tia>	v162tia>        4a href="+code=wdt_clk" class="sref">wdt_clktia> =v4a href="+code=clk_get" class="sref">clk_gettia>(&4a href="+code=pdev" class="sref">pdevtia>->4a href="+code=dev" class="sref">devtia>,v4a href="+code=NULL" class="sref">NULLtia>);	v163tia>        if (4a href="+code=IS_ERR" class="sref">IS_ERRtia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>))	v164tia>                return 4a href="+code=PTR_ERR" class="sref">PTR_ERRtia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v1654/a>	v166tia>        4a href="+code=ret" class="sref">rettia> =v4a href="+code=clk_enable" class="sref">clk_enabletia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v167tia>        if (4a href="+code=ret" class="sref">rettia>)	v168tia>                gotov4a href="+code=out" class="sref">outtia>;	v1694/a>	v170tia>        4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>.4a href="+code=bootstatus" class="sref">bootstatustia> =v(4a href="+code=readl" class="sref">readltia>(4a href="+code=WDTIM_RES" class="sref">WDTIM_REStia>(4a href="+code=wdt_base" class="sref">wdt_basetia>))v&v4a href="+code=WDOG_RESET" class="sref">WDOG_RESETtia>) ?	v171tia>                        4a href="+code=WDIOF_CARDRESET" class="sref">WDIOF_CARDRESETtia> :v0;	v172tia>        4a href="+code=watchdog_set_nowayout" class="sref">watchdog_set_nowayouttia>(&4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>,v4a href="+code=nowayout" class="sref">nowayouttia>);	v173tia>	v174tia>        4a href="+code=pnx4008_wdt_stop" class="sref">pnx4008_wdt_stoptia>(&4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>); 4spa" class="comment">/* disable for now */4/spa"
	v1754/a>	v176tia>        4a href="+code=ret" class="sref">rettia> =v4a href="+code=watchdog_register_device" class="sref">watchdog_register_devicetia>(&4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>);	v177tia>        if (4a href="+code=ret" class="sref">rettia> < 0)v{	v178tia>                4a href="+code=dev_err" class="sref">dev_errtia>(&4a href="+code=pdev" class="sref">pdevtia>->4a href="+code=dev" class="sref">devtia>,v4spa" class="string">"cannot register watchdog device\n"4/spa"
);	v179tia>                gotov4a href="+code=disable_clk" class="sref">disable_clktia>;	v180tia>        }	v181tia>	v182tia>        4a href="+code=dev_info" class="sref">dev_infotia>(&4a href="+code=pdev" class="sref">pdevtia>->4a href="+code=dev" class="sref">devtia>,v4spa" class="string">"PNX4008 Watchdog Timer: heartbeat %d sec\n"4/spa"
,	v183tia>                 4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>.4a href="+code=timeout" class="sref">timeouttia>);	v1844/a>	v185tia>        return 0;	v1864/a>	v187tia>4a href="+code=disable_clk" class="sref">disable_clktia>:	v188tia>        4a href="+code=clk_disable" class="sref">clk_disabletia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v189tia>4a href="+code=out" class="sref">outtia>:	v190tia>        4a href="+code=clk_put" class="sref">clk_puttia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v191tia>        return 4a href="+code=ret" class="sref">rettia>;	v192tia>}	v193tia>	v194tia>staticvintv4a href="+code=pnx4008_wdt_remove" class="sref">pnx4008_wdt_removetia>(structv4a href="+code=platform_device" class="sref">platform_devicetia> *4a href="+code=pdev" class="sref">pdevtia>)	v195tia>{	v196tia>        4a href="+code=watchdog_unregister_device" class="sref">watchdog_unregister_devicetia>(&4a href="+code=pnx4008_wdd" class="sref">pnx4008_wddtia>);	v197tia>	v198tia>        4a href="+code=clk_disable" class="sref">clk_disabletia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v199tia>        4a href="+code=clk_put" class="sref">clk_puttia>(4a href="+code=wdt_clk" class="sref">wdt_clktia>);	v2004/a>	v201tia>        return 0;	v202tia>}	v203tia>	v2044/a>#ifdef 4a href="+code=CONFIG_OF" class="sref">CONFIG_OFtia>	v2054/a>staticvconst structv4a href="+code=of_device_id" class="sref">of_device_idtia> 4a href="+code=pnx4008_wdt_match" class="sref">pnx4008_wdt_matchtia>[] =v{	v206tia>        { .4a href="+code=compatible" class="sref">compatibletia> =v4spa" class="string">"nxp,pnx4008-wdt"4/spa"
 },	v207tia>        { }	v208tia>};	v209tia>4a href="+code=MODULE_DEVICE_TABLE" class="sref">MODULE_DEVICE_TABLEtia>(4a href="+code=of" class="sref">oftia>,v4a href="+code=pnx4008_wdt_match" class="sref">pnx4008_wdt_matchtia>);	v2optia>#endif	v211tia>	v2124/a>staticvstructv4a href="+code=platform_driver" class="sref">platform_drivertia> 4a href="+code=platform_wdt_driver" class="sref">platform_wdt_drivertia> =v{	v213tia>        .4a href="+code=driver" class="sref">drivertia> =v{	v214tia>                .4a href="+code=namt" class="sref">namttia> =v4spa" class="string">"pnx4008-watchdog"4/spa"
,	v215tia>                .4a href="+code=1wner" class="sref">1wnertia>  =v4a href="+code=THIS_MODULE" class="sref">THIS_MODULEtia>,	v216tia>                .4a href="+code=1f_match_table" class="sref">1f_match_tabletia> =v4a href="+code=1f_match_ptr" class="sref">1f_match_ptrtia>(4a href="+code=pnx4008_wdt_match" class="sref">pnx4008_wdt_matchtia>),	v217tia>        },	v218tia>        .4a href="+code=probe" class="sref">probetia> =v4a href="+code=pnx4008_wdt_probe" class="sref">pnx4008_wdt_probetia>,	v219tia>        .4a href="+code=remove" class="sref">removetia> =v4a href="+code=pnx4008_wdt_remove" class="sref">pnx4008_wdt_removetia>,	v22ptia>};	v221tia>	v2224/a>4a href="+code=module_platform_driver" class="sref">module_platform_drivertia>(4a href="+code=platform_wdt_driver" class="sref">platform_wdt_drivertia>);	v223tia>	v2244/a>4a href="+code=MODULE_AUTHOR" class="sref">MODULE_AUTHORtia>(4spa" class="string">"MontaVista Software, Inc. <source@mvista.com>"4/spa"
);	v225tia>4a href="+code=MODULE_AUTHOR" class="sref">MODULE_AUTHORtia>(4spa" class="string">"Wolfram Sang <w.sang@pengutronix.de>"4/spa"
);	v226tia>4a href="+code=MODULE_DESCRIPTION" class="sref">MODULE_DESCRIPTIONtia>(4spa" class="string">"PNX4008 Watchdog Driver"4/spa"
);	v227tia>	v2284/a>4a href="+code=module_param" class="sref">module_paramtia>(4a href="+code=heartbeat" class="sref">heartbeattia>,v4a href="+code=uint" class="sref">uinttia>,v0);	v229tia>4a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESCtia>(4a href="+code=heartbeat" class="sref">heartbeattia>,	v230tia>                v4spa" class="string">"Watchdog heartbeat period in seconds from 1 to "4/spa"
	v231tia>                 4a href="+code=__MODULE_STRING" class="sref">__MODULE_STRINGtia>(4a href="+code=MAX_HEARTBEAT" class="sref">MAX_HEARTBEATtia>)v4spa" class="string">", default "4/spa"
	v232tia>                 4a href="+code=__MODULE_STRING" class="sref">__MODULE_STRINGtia>(4a href="+code=DEFAULT_HEARTBEAT" class="sref">DEFAULT_HEARTBEATtia>));	v233tia>	v2344/a>4a href="+code=module_param" class="sref">module_paramtia>(4a href="+code=nowayout" class="sref">nowayouttia>,v4a href="+code=bool" class="sref">booltia>,v0);	v235tia>4a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESCtia>(4a href="+code=nowayout" class="sref">nowayouttia>,	v236tia>                v4spa" class="string">"Set to 1 to keep watchdog running1after device release"4/spa"
);	v237tia>	v2384/a>4a href="+code=MODULE_LICENSE" class="sref">MODULE_LICENSEtia>(4spa" class="string">"GPL"4/spa"
);	v239tia>4a href="+code=MODULE_ALIAS_MISCDEV" class="sref">MODULE_ALIAS_MISCDEVtia>(4a href="+code=WATCHDOG_MINOR" class="sref">WATCHDOG_MINORtia>);	v24ptia>4a href="+code=MODULE_ALIAS" class="sref">MODULE_ALIAStia>(4spa" class="string">"platform:pnx4008-watchdog"4/spa"
);	v241tia>
lxr.linux.no kindly hosted by Redpill Linpro AStia>, provider of Linuxvconsulting1and opera4.6.s1services1since 1995.