Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b775e22 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog:
  watchdog: update author email for at32ap700x_wdt
  watchdog: gef_wdt: fix MODULE_ALIAS
  watchdog: Intel SCU Watchdog: Fix build and remove duplicate code
  watchdog: mtx1-wdt: fix section mismatch
  watchdog: mtx1-wdt: fix GPIO toggling
  watchdog: mtx1-wdt: request gpio before using it
  watchdog: Handle multiple wm831x watchdogs being registered
parents c8618d16 aeb0aea1
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -62,7 +62,7 @@ extern int sfi_mtimer_num;
#else /* CONFIG_APB_TIMER */
#else /* CONFIG_APB_TIMER */


static inline unsigned long apbt_quick_calibrate(void) {return 0; }
static inline unsigned long apbt_quick_calibrate(void) {return 0; }
static inline void apbt_time_init(void) {return 0; }
static inline void apbt_time_init(void) { }


#endif
#endif
#endif /* ASM_X86_APBT_H */
#endif /* ASM_X86_APBT_H */
+1 −2
Original line number Original line Diff line number Diff line
@@ -535,8 +535,7 @@ config I6300ESB_WDT


config INTEL_SCU_WATCHDOG
config INTEL_SCU_WATCHDOG
	bool "Intel SCU Watchdog for Mobile Platforms"
	bool "Intel SCU Watchdog for Mobile Platforms"
	depends on WATCHDOG
	depends on X86_MRST
	depends on INTEL_SCU_IPC
	---help---
	---help---
	  Hardware driver for the watchdog time built into the Intel SCU
	  Hardware driver for the watchdog time built into the Intel SCU
	  for Intel Mobile Platforms.
	  for Intel Mobile Platforms.
+1 −1
Original line number Original line Diff line number Diff line
@@ -448,7 +448,7 @@ static void __exit at32_wdt_exit(void)
}
}
module_exit(at32_wdt_exit);
module_exit(at32_wdt_exit);


MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
MODULE_DESCRIPTION("Watchdog driver for Atmel AT32AP700X");
MODULE_DESCRIPTION("Watchdog driver for Atmel AT32AP700X");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+0 −1
Original line number Original line Diff line number Diff line
@@ -42,7 +42,6 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/signal.h>
#include <linux/signal.h>
#include <linux/sfi.h>
#include <linux/sfi.h>
#include <linux/types.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/atomic.h>
#include <asm/atomic.h>
#include <asm/intel_scu_ipc.h>
#include <asm/intel_scu_ipc.h>
+16 −13
Original line number Original line Diff line number Diff line
@@ -66,23 +66,18 @@ static struct {
	int default_ticks;
	int default_ticks;
	unsigned long inuse;
	unsigned long inuse;
	unsigned gpio;
	unsigned gpio;
	int gstate;
	unsigned int gstate;
} mtx1_wdt_device;
} mtx1_wdt_device;


static void mtx1_wdt_trigger(unsigned long unused)
static void mtx1_wdt_trigger(unsigned long unused)
{
{
	u32 tmp;

	spin_lock(&mtx1_wdt_device.lock);
	spin_lock(&mtx1_wdt_device.lock);
	if (mtx1_wdt_device.running)
	if (mtx1_wdt_device.running)
		ticks--;
		ticks--;


	/* toggle wdt gpio */
	/* toggle wdt gpio */
	mtx1_wdt_device.gstate = ~mtx1_wdt_device.gstate;
	mtx1_wdt_device.gstate = !mtx1_wdt_device.gstate;
	if (mtx1_wdt_device.gstate)
	gpio_set_value(mtx1_wdt_device.gpio, mtx1_wdt_device.gstate);
		gpio_direction_output(mtx1_wdt_device.gpio, 1);
	else
		gpio_direction_input(mtx1_wdt_device.gpio);


	if (mtx1_wdt_device.queue && ticks)
	if (mtx1_wdt_device.queue && ticks)
		mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL);
		mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL);
@@ -105,7 +100,7 @@ static void mtx1_wdt_start(void)
	if (!mtx1_wdt_device.queue) {
	if (!mtx1_wdt_device.queue) {
		mtx1_wdt_device.queue = 1;
		mtx1_wdt_device.queue = 1;
		mtx1_wdt_device.gstate = 1;
		mtx1_wdt_device.gstate = 1;
		gpio_direction_output(mtx1_wdt_device.gpio, 1);
		gpio_set_value(mtx1_wdt_device.gpio, 1);
		mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL);
		mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL);
	}
	}
	mtx1_wdt_device.running++;
	mtx1_wdt_device.running++;
@@ -120,7 +115,7 @@ static int mtx1_wdt_stop(void)
	if (mtx1_wdt_device.queue) {
	if (mtx1_wdt_device.queue) {
		mtx1_wdt_device.queue = 0;
		mtx1_wdt_device.queue = 0;
		mtx1_wdt_device.gstate = 0;
		mtx1_wdt_device.gstate = 0;
		gpio_direction_output(mtx1_wdt_device.gpio, 0);
		gpio_set_value(mtx1_wdt_device.gpio, 0);
	}
	}
	ticks = mtx1_wdt_device.default_ticks;
	ticks = mtx1_wdt_device.default_ticks;
	spin_unlock_irqrestore(&mtx1_wdt_device.lock, flags);
	spin_unlock_irqrestore(&mtx1_wdt_device.lock, flags);
@@ -214,6 +209,12 @@ static int __devinit mtx1_wdt_probe(struct platform_device *pdev)
	int ret;
	int ret;


	mtx1_wdt_device.gpio = pdev->resource[0].start;
	mtx1_wdt_device.gpio = pdev->resource[0].start;
	ret = gpio_request_one(mtx1_wdt_device.gpio,
				GPIOF_OUT_INIT_HIGH, "mtx1-wdt");
	if (ret < 0) {
		dev_err(&pdev->dev, "failed to request gpio");
		return ret;
	}


	spin_lock_init(&mtx1_wdt_device.lock);
	spin_lock_init(&mtx1_wdt_device.lock);
	init_completion(&mtx1_wdt_device.stop);
	init_completion(&mtx1_wdt_device.stop);
@@ -239,11 +240,13 @@ static int __devexit mtx1_wdt_remove(struct platform_device *pdev)
		mtx1_wdt_device.queue = 0;
		mtx1_wdt_device.queue = 0;
		wait_for_completion(&mtx1_wdt_device.stop);
		wait_for_completion(&mtx1_wdt_device.stop);
	}
	}

	gpio_free(mtx1_wdt_device.gpio);
	misc_deregister(&mtx1_wdt_misc);
	misc_deregister(&mtx1_wdt_misc);
	return 0;
	return 0;
}
}


static struct platform_driver mtx1_wdt = {
static struct platform_driver mtx1_wdt_driver = {
	.probe = mtx1_wdt_probe,
	.probe = mtx1_wdt_probe,
	.remove = __devexit_p(mtx1_wdt_remove),
	.remove = __devexit_p(mtx1_wdt_remove),
	.driver.name = "mtx1-wdt",
	.driver.name = "mtx1-wdt",
@@ -252,12 +255,12 @@ static struct platform_driver mtx1_wdt = {


static int __init mtx1_wdt_init(void)
static int __init mtx1_wdt_init(void)
{
{
	return platform_driver_register(&mtx1_wdt);
	return platform_driver_register(&mtx1_wdt_driver);
}
}


static void __exit mtx1_wdt_exit(void)
static void __exit mtx1_wdt_exit(void)
{
{
	platform_driver_unregister(&mtx1_wdt);
	platform_driver_unregister(&mtx1_wdt_driver);
}
}


module_init(mtx1_wdt_init);
module_init(mtx1_wdt_init);
Loading