mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-13 05:48:14 +07:00
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: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
b482ad5dae
commit
fce3a24e70
@ -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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 @@
|
|||||||
#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 {
|
|||||||
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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user