psmouse: add psmouse_queue_work() for ps/2 extension to make use of
Subsystems (2)
PATCH 2/3 psmouse: add psmouse_queue_work() for ps/2 extension to make use of
psmouse_queue_work is passed a delayed_work struct, and queues up the work with kpsmouse_wq. Since we're dealing with delayed_work stuff, this also switches resync_work to a delayed_work struct as well, and makes use of psmouse_queue_work when doing a resync within psmouse-base.
Dmitry, is this what you had in mind?
Signed-off-by Andres Salomon <[email protected]>
--- drivers/input/mouse/psmouse-base.c | 14 ++++++++++---- drivers/input/mouse/psmouse.h | 4 +++- 2 files changed, 13 insertions(+), 5 deletions(-)
drivers/input/mouse/psmouse-base.c +10 -4
@@ -201,6 +201,12 @@ static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)return PSMOUSE_FULL_PACKET ; } +void psmouse_queue_work (struct psmouse *psmouse,struct delayed_work *work, +unsigned long delay) +{ +queue_delayed_work (kpsmoused_wq, work, delay); +} +/* * __psmouse_set_state() sets new psmouse state and resets all flags. */
@@ -305,7 +311,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio, psmouse->name, psmouse->phys, psmouse->pktcnt); psmouse->badbyte = psmouse->packet[0 ];__psmouse_set_state (psmouse,PSMOUSE_RESYNCING ); -queue_work (kpsmoused_wq, &psmouse->resync_work); +psmouse_queue_work (psmouse, &psmouse->resync_work,0 ); goto out; }
@@ -342,7 +348,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio, time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) { psmouse->badbyte = psmouse->packet[0 ];__psmouse_set_state (psmouse,PSMOUSE_RESYNCING ); -queue_work (kpsmoused_wq, &psmouse->resync_work); +psmouse_queue_work (psmouse, &psmouse->resync_work,0 ); goto out; }
@@ -935,7 +941,7 @@ static int psmouse_poll(struct psmouse *psmouse)static void psmouse_resync (struct work_struct *work) {struct psmouse *parent =NULL , *psmouse = - container_of(work, struct psmouse, resync_work); + container_of(work, struct psmouse, resync_work.work);struct serio *serio = psmouse->ps2dev.serio;psmouse_ret_t rc =PSMOUSE_GOOD_DATA ;int failed =0 , enabled =0 ;
@@ -1194,7 +1200,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv) goto err_free;ps2_init (&psmouse->ps2dev, serio); -INIT_WORK (&psmouse->resync_work, psmouse_resync); +INIT_DELAYED_WORK (&psmouse->resync_work, psmouse_resync); psmouse->dev = input_dev;snprintf (psmouse->phys,sizeof (psmouse->phys),"%s/input0" , serio->phys);
drivers/input/mouse/psmouse.h +3 -1
@@ -39,7 +39,7 @@ struct psmouse {void *private;struct input_dev *dev;struct ps2dev ps2dev; -struct work_struct resync_work; +struct delayed_work resync_work;char *vendor;char *name;unsigned char packet[8 ];
@@ -92,6 +92,8 @@ enum psmouse_type { PSMOUSE_AUTO /* This one should always be last */ }; +void psmouse_queue_work (struct psmouse *psmouse,struct delayed_work *work, +unsigned long delay);int psmouse_sliced_command (struct psmouse *psmouse,unsigned char command);int psmouse_reset (struct psmouse *psmouse);void psmouse_set_state (struct psmouse *psmouse,enum psmouse_state new_state);
Signature · 1 line
1.5.6.3