Commit fce3a24e authored by Paul Mundt's avatar Paul Mundt

sh: push-switch fixups for work_struct API damage.

INIT_WORK() dropped the data arg, so now we have to stash an extra
pointer and backpedal instead.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent b482ad5d
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include <asm/push-switch.h> #include <asm/push-switch.h>
#define DRV_NAME "push-switch" #define DRV_NAME "push-switch"
#define DRV_VERSION "0.1.0" #define DRV_VERSION "0.1.1"
static ssize_t switch_show(struct device *dev, static ssize_t switch_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
...@@ -32,10 +32,10 @@ static void switch_timer(unsigned long data) ...@@ -32,10 +32,10 @@ static void switch_timer(unsigned long data)
schedule_work(&psw->work); schedule_work(&psw->work);
} }
static void switch_work_handler(void *data) static void switch_work_handler(struct work_struct *work)
{ {
struct platform_device *pdev = data; struct push_switch *psw = container_of(work, struct push_switch, work);
struct push_switch *psw = platform_get_drvdata(pdev); struct platform_device *pdev = psw->pdev;
psw->state = 0; psw->state = 0;
...@@ -76,12 +76,15 @@ static int switch_drv_probe(struct platform_device *pdev) ...@@ -76,12 +76,15 @@ static int switch_drv_probe(struct platform_device *pdev)
} }
} }
INIT_WORK(&psw->work, switch_work_handler, pdev); INIT_WORK(&psw->work, switch_work_handler);
init_timer(&psw->debounce); init_timer(&psw->debounce);
psw->debounce.function = switch_timer; psw->debounce.function = switch_timer;
psw->debounce.data = (unsigned long)psw; psw->debounce.data = (unsigned long)psw;
/* Workqueue API brain-damage */
psw->pdev = pdev;
platform_set_drvdata(pdev, psw); platform_set_drvdata(pdev, psw);
return 0; return 0;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/platform_device.h>
struct push_switch { struct push_switch {
/* switch state */ /* switch state */
...@@ -12,6 +13,8 @@ struct push_switch { ...@@ -12,6 +13,8 @@ struct push_switch {
struct timer_list debounce; struct timer_list debounce;
/* workqueue */ /* workqueue */
struct work_struct work; struct work_struct work;
/* platform device, for workqueue handler */
struct platform_device *pdev;
}; };
struct push_switch_platform_info { struct push_switch_platform_info {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment