Skip to content

Commit

Permalink
sh: push-switch fixups for work_struct API damage.
Browse files Browse the repository at this point in the history
INIT_WORK() dropped the data arg, so now we have to stash an extra
pointer and backpedal instead.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Paul Mundt committed Dec 11, 2006
1 parent b482ad5 commit fce3a24
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
13 changes: 8 additions & 5 deletions arch/sh/drivers/push-switch.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include <asm/push-switch.h>

#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,
struct device_attribute *attr,
Expand All @@ -32,10 +32,10 @@ static void switch_timer(unsigned long data)
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 = platform_get_drvdata(pdev);
struct push_switch *psw = container_of(work, struct push_switch, work);
struct platform_device *pdev = psw->pdev;

psw->state = 0;

Expand Down Expand Up @@ -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);

psw->debounce.function = switch_timer;
psw->debounce.data = (unsigned long)psw;

/* Workqueue API brain-damage */
psw->pdev = pdev;

platform_set_drvdata(pdev, psw);

return 0;
Expand Down
3 changes: 3 additions & 0 deletions include/asm-sh/push-switch.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>
#include <linux/platform_device.h>

struct push_switch {
/* switch state */
Expand All @@ -12,6 +13,8 @@ struct push_switch {
struct timer_list debounce;
/* workqueue */
struct work_struct work;
/* platform device, for workqueue handler */
struct platform_device *pdev;
};

struct push_switch_platform_info {
Expand Down

0 comments on commit fce3a24

Please sign in to comment.