Blame view

buildroot/buildroot-2016.08.1/board/telit/evk-pro3/barebox-2013.04.0-0001-watchdog-add-keep-alive-support.patch 2.16 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  From b5e57a9f158a293b1151638336478af8a5aad0f0 Mon Sep 17 00:00:00 2001
  From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
  Date: Wed, 14 Nov 2012 19:16:35 +0800
  Subject: [PATCH 1/5] watchdog: add keep alive support
  
  this will allow to ping the watchdog via poller
  
  Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
  ---
   drivers/watchdog/Kconfig   |  1 +
   drivers/watchdog/wd_core.c | 21 +++++++++++++++++++++
   include/watchdog.h         |  2 ++
   3 files changed, 24 insertions(+)
  
  diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
  index 2e2900c..0b4dc84 100644
  --- a/drivers/watchdog/Kconfig
  +++ b/drivers/watchdog/Kconfig
  @@ -4,6 +4,7 @@ config WATCHDOG_IMX_RESET_SOURCE
   
   menuconfig WATCHDOG
   	bool "Watchdog support"
  +	select GENERIC_POLLER
   	help
   	  Many platforms support a watchdog to keep track of a working machine.
   	  This framework provides routines to handle these watchdogs.
  diff --git a/drivers/watchdog/wd_core.c b/drivers/watchdog/wd_core.c
  index 3d0cfc6..a1b9e28 100644
  --- a/drivers/watchdog/wd_core.c
  +++ b/drivers/watchdog/wd_core.c
  @@ -17,18 +17,39 @@
   #include <errno.h>
   #include <linux/ctype.h>
   #include <watchdog.h>
  +#include <poller.h>
   
   /*
    * Note: this simple framework supports one watchdog only.
    */
   static struct watchdog *watchdog;
   
  +static void watchdog_poller_func(struct poller_struct *poller)
  +{
  +	watchdog->keep_alive(watchdog);
  +}
  +
  +static struct poller_struct watchdog_poller = {
  +	.func = watchdog_poller_func,
  +};
  +
   int watchdog_register(struct watchdog *wd)
   {
   	if (watchdog != NULL)
   		return -EBUSY;
   
   	watchdog = wd;
  +
  +	if (watchdog->keep_alive) {
  +		int ret;
  +
  +		ret = poller_register(&watchdog_poller);
  +		if (ret) {
  +			watchdog = NULL;
  +			return ret;
  +		}
  +	}
  +
   	return 0;
   }
   EXPORT_SYMBOL(watchdog_register);
  diff --git a/include/watchdog.h b/include/watchdog.h
  index 3e2d08e..d5ecf2f 100644
  --- a/include/watchdog.h
  +++ b/include/watchdog.h
  @@ -13,8 +13,10 @@
   #ifndef INCLUDE_WATCHDOG_H
   # define INCLUDE_WATCHDOG_H
   
  +
   struct watchdog {
   	int (*set_timeout)(struct watchdog *, unsigned);
  +	void (*keep_alive)(struct watchdog *);
   };
   
   int watchdog_register(struct watchdog *);
  -- 
  1.8.1.4