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

Commit fce3a24e authored by Paul Mundt's avatar Paul Mundt
Browse files

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
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -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,
@@ -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;

@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -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 */
@@ -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 {