static int start_kicker_thread_with_default_setting(void) { int ret = 0; #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_lock_irqsave(&lock, lock_flag); #else spin_lock(&lock); #endif g_kinterval = 20; // default interval: 20s g_need_config = 0; // Note, we DO NOT want to call configure function wdt_start = 1; // Start once only #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_unlock_irqrestore(&lock, lock_flag); #else spin_unlock(&lock); #endif start_kicker(); return ret; }
static int __init test_init(void) { //enable_clock(12, "Vfifo"); register_cpu_notifier(&cpu_nfb); start_kicker(); return 0; }
static int start_kicker_thread_with_default_setting(void) { int ret = 0; spin_lock(&lock); g_kinterval = 20; // default interval: 20s g_need_config = 0; // Note, we DO NOT want to call configure function wdt_start = 1; // Start once only spin_unlock(&lock); start_kicker(); printk("[WDK] fwq start_kicker_thread_with_default_setting done\n" ); return ret; }
static int wk_proc_cmd_write(struct file *file, const char *buf, unsigned long count, void *data) { int ret; //static int wdt_start = 0; // Adjust this variable to file view scope int timeout; int mode; int kinterval; if (count == 0) return -1; if(count > 255) count = 255; ret = copy_from_user(cmd_buf, buf, count); if (ret < 0) return -1; cmd_buf[count] = '\0'; dbgmsg("Write %s\n", cmd_buf); sscanf(cmd_buf, "%d %d %d %d", &mode, &kinterval, &timeout, &debug_sleep); printk("[WDK] mode=%d interval=%d timeout=%d\n", mode, kinterval, timeout); if (timeout < kinterval) { errmsg("The interval(%d) value should be smaller than timeout value(%d)\n", kinterval, timeout); return -1; } if ((timeout < MIN_KICK_INTERVAL) || (timeout > MAX_KICK_INTERVAL)) { errmsg("The timeout(%d) is invalid (%d - %d)\n", kinterval, MIN_KICK_INTERVAL, MAX_KICK_INTERVAL); return -1; } if ((kinterval < MIN_KICK_INTERVAL) || (kinterval > MAX_KICK_INTERVAL)) { errmsg("The interval(%d) is invalid (%d - %d)\n",kinterval, MIN_KICK_INTERVAL, MAX_KICK_INTERVAL); return -1; } if (!((mode == WK_WDT_NORMAL_MODE) || (mode == WK_WDT_EXP_MODE))) { errmsg("Tha watchdog kicker wdt mode is not correct\n"); errmsg("WK_WDT_NORMAL_MODE = %d\n", WK_WDT_NORMAL_MODE); errmsg("WK_WDT_EXP_MODE = %d\n", WK_WDT_EXP_MODE); return -1; } #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_lock_irqsave(&lock, lock_flag); #else spin_lock(&lock); #endif g_kinterval = kinterval; // #if 1 //CONFIG_MTK_AEE_FEATURE auto enable or disable WDT isr or hw mode // g_wk_wdt_mode = WK_WDT_EXP_MODE; msg("Enable wdt with interrupt mode only %d\n", g_wk_wdt_mode); #else g_wk_wdt_mode = mode; #endif g_timeout = timeout; g_need_config = 1; #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_unlock_irqrestore(&lock, lock_flag); #else spin_unlock(&lock); #endif /* Start once only */ if (wdt_start == 0) { start_kicker(); } #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_lock_irqsave(&lock, lock_flag); #else spin_lock(&lock); #endif wdt_start = 1; #if defined(LGE_USE_WDOG_SPINLOCK_IRQ) spin_unlock_irqrestore(&lock, lock_flag); #else spin_unlock(&lock); #endif return count; }