* [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors [not found] <1468852149-2614-1-git-send-email-martink@posteo.de> @ 2016-07-18 14:29 ` Martin Kepplinger 2016-07-20 21:06 ` Dmitry Torokhov 2016-07-18 14:29 ` [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced Martin Kepplinger ` (2 subsequent siblings) 3 siblings, 1 reply; 10+ messages in thread From: Martin Kepplinger @ 2016-07-18 14:29 UTC (permalink / raw) To: dmitry.torokhov; +Cc: linux-kernel, linux-input, Martin Kepplinger Signed-off-by: Martin Kepplinger <martink@posteo.de> --- drivers/input/tablet/pegasus_notetaker.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c index 83aa583..27cb352 100644 --- a/drivers/input/tablet/pegasus_notetaker.c +++ b/drivers/input/tablet/pegasus_notetaker.c @@ -79,7 +79,7 @@ struct pegasus { struct work_struct init; }; -static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) +static int pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) { const int sizeof_buf = len + 2; int result; @@ -87,7 +87,7 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) cmd_buf = kmalloc(sizeof_buf, GFP_KERNEL); if (!cmd_buf) - return; + return -ENOMEM; cmd_buf[0] = NOTETAKER_REPORT_ID; cmd_buf[1] = len; @@ -100,17 +100,23 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) 0, 0, cmd_buf, sizeof_buf, USB_CTRL_SET_TIMEOUT); - if (result != sizeof_buf) - dev_err(&pegasus->usbdev->dev, "control msg error\n"); + if (result != sizeof_buf) { + if (result >= 0) + result = -EIO; + dev_err(&pegasus->usbdev->dev, "control msg error: %d\n", + result); + } kfree(cmd_buf); + + return result; } -static void pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) +static int pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) { u8 cmd[] = {NOTETAKER_SET_CMD, NOTETAKER_SET_MODE, led, mode}; - pegasus_control_msg(pegasus, cmd, sizeof(cmd)); + return pegasus_control_msg(pegasus, cmd, sizeof(cmd)); } static void pegasus_parse_packet(struct pegasus *pegasus) @@ -184,8 +190,12 @@ static void pegasus_irq(struct urb *urb) static void pegasus_init(struct work_struct *work) { struct pegasus *pegasus = container_of(work, struct pegasus, init); + int retval; - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); + if (retval < 0) + dev_err(&pegasus->usbdev->dev, "pegasus_set_mode error: %d\n", + retval); } static int pegasus_open(struct input_dev *dev) @@ -201,7 +211,7 @@ static int pegasus_open(struct input_dev *dev) if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) retval = -EIO; - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); usb_autopm_put_interface(pegasus->intf); -- 2.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors 2016-07-18 14:29 ` [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors Martin Kepplinger @ 2016-07-20 21:06 ` Dmitry Torokhov 2016-07-21 11:06 ` Martin Kepplinger 0 siblings, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2016-07-20 21:06 UTC (permalink / raw) To: Martin Kepplinger; +Cc: linux-kernel, linux-input Hi Martin, On Mon, Jul 18, 2016 at 04:29:06PM +0200, Martin Kepplinger wrote: > Signed-off-by: Martin Kepplinger <martink@posteo.de> > --- > drivers/input/tablet/pegasus_notetaker.c | 26 ++++++++++++++++++-------- > 1 file changed, 18 insertions(+), 8 deletions(-) > > diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c > index 83aa583..27cb352 100644 > --- a/drivers/input/tablet/pegasus_notetaker.c > +++ b/drivers/input/tablet/pegasus_notetaker.c > @@ -79,7 +79,7 @@ struct pegasus { > struct work_struct init; > }; > > -static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) > +static int pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) > { > const int sizeof_buf = len + 2; > int result; > @@ -87,7 +87,7 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) > > cmd_buf = kmalloc(sizeof_buf, GFP_KERNEL); > if (!cmd_buf) > - return; > + return -ENOMEM; > > cmd_buf[0] = NOTETAKER_REPORT_ID; > cmd_buf[1] = len; > @@ -100,17 +100,23 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) > 0, 0, cmd_buf, sizeof_buf, > USB_CTRL_SET_TIMEOUT); > > - if (result != sizeof_buf) > - dev_err(&pegasus->usbdev->dev, "control msg error\n"); > + if (result != sizeof_buf) { > + if (result >= 0) > + result = -EIO; > + dev_err(&pegasus->usbdev->dev, "control msg error: %d\n", > + result); > + } > > kfree(cmd_buf); > + > + return result; Your 4th patch relies on pegasus_control_msg() returning 0 on success, otherwise you will not restart the URB when doing reset resume. I rearranged the code here so we free cmd_buf right after calling usb_control_msg() and the explicitly returnig 0 in success branch. > } > > -static void pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) > +static int pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) > { > u8 cmd[] = {NOTETAKER_SET_CMD, NOTETAKER_SET_MODE, led, mode}; > > - pegasus_control_msg(pegasus, cmd, sizeof(cmd)); > + return pegasus_control_msg(pegasus, cmd, sizeof(cmd)); > } > > static void pegasus_parse_packet(struct pegasus *pegasus) > @@ -184,8 +190,12 @@ static void pegasus_irq(struct urb *urb) > static void pegasus_init(struct work_struct *work) > { > struct pegasus *pegasus = container_of(work, struct pegasus, init); > + int retval; > > - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); > + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); > + if (retval < 0) > + dev_err(&pegasus->usbdev->dev, "pegasus_set_mode error: %d\n", > + retval); > } > > static int pegasus_open(struct input_dev *dev) > @@ -201,7 +211,7 @@ static int pegasus_open(struct input_dev *dev) > if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) > retval = -EIO; > > - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); > + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); > > usb_autopm_put_interface(pegasus->intf); > Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors 2016-07-20 21:06 ` Dmitry Torokhov @ 2016-07-21 11:06 ` Martin Kepplinger 0 siblings, 0 replies; 10+ messages in thread From: Martin Kepplinger @ 2016-07-21 11:06 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: linux-kernel, linux-input Am 2016-07-20 um 23:06 schrieb Dmitry Torokhov: > Hi Martin, > > On Mon, Jul 18, 2016 at 04:29:06PM +0200, Martin Kepplinger wrote: >> Signed-off-by: Martin Kepplinger <martink@posteo.de> >> --- >> drivers/input/tablet/pegasus_notetaker.c | 26 ++++++++++++++++++-------- >> 1 file changed, 18 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c >> index 83aa583..27cb352 100644 >> --- a/drivers/input/tablet/pegasus_notetaker.c >> +++ b/drivers/input/tablet/pegasus_notetaker.c >> @@ -79,7 +79,7 @@ struct pegasus { >> struct work_struct init; >> }; >> >> -static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) >> +static int pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) >> { >> const int sizeof_buf = len + 2; >> int result; >> @@ -87,7 +87,7 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) >> >> cmd_buf = kmalloc(sizeof_buf, GFP_KERNEL); >> if (!cmd_buf) >> - return; >> + return -ENOMEM; >> >> cmd_buf[0] = NOTETAKER_REPORT_ID; >> cmd_buf[1] = len; >> @@ -100,17 +100,23 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len) >> 0, 0, cmd_buf, sizeof_buf, >> USB_CTRL_SET_TIMEOUT); >> >> - if (result != sizeof_buf) >> - dev_err(&pegasus->usbdev->dev, "control msg error\n"); >> + if (result != sizeof_buf) { >> + if (result >= 0) >> + result = -EIO; >> + dev_err(&pegasus->usbdev->dev, "control msg error: %d\n", >> + result); >> + } >> >> kfree(cmd_buf); >> + >> + return result; > > Your 4th patch relies on pegasus_control_msg() returning 0 on success, > otherwise you will not restart the URB when doing reset resume. I > rearranged the code here so we free cmd_buf right after calling > usb_control_msg() and the explicitly returnig 0 in success branch. > Yes, I saw it. Thanks for your explaining and fixing! >> } >> >> -static void pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) >> +static int pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led) >> { >> u8 cmd[] = {NOTETAKER_SET_CMD, NOTETAKER_SET_MODE, led, mode}; >> >> - pegasus_control_msg(pegasus, cmd, sizeof(cmd)); >> + return pegasus_control_msg(pegasus, cmd, sizeof(cmd)); >> } >> >> static void pegasus_parse_packet(struct pegasus *pegasus) >> @@ -184,8 +190,12 @@ static void pegasus_irq(struct urb *urb) >> static void pegasus_init(struct work_struct *work) >> { >> struct pegasus *pegasus = container_of(work, struct pegasus, init); >> + int retval; >> >> - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); >> + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); >> + if (retval < 0) >> + dev_err(&pegasus->usbdev->dev, "pegasus_set_mode error: %d\n", >> + retval); >> } >> >> static int pegasus_open(struct input_dev *dev) >> @@ -201,7 +211,7 @@ static int pegasus_open(struct input_dev *dev) >> if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) >> retval = -EIO; >> >> - pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); >> + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); >> >> usb_autopm_put_interface(pegasus->intf); >> > > Thanks. > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced [not found] <1468852149-2614-1-git-send-email-martink@posteo.de> 2016-07-18 14:29 ` [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors Martin Kepplinger @ 2016-07-18 14:29 ` Martin Kepplinger 2016-07-20 21:29 ` Dmitry Torokhov 2016-07-18 14:29 ` [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() Martin Kepplinger 2016-07-18 14:29 ` [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use Martin Kepplinger 3 siblings, 1 reply; 10+ messages in thread From: Martin Kepplinger @ 2016-07-18 14:29 UTC (permalink / raw) To: dmitry.torokhov; +Cc: linux-kernel, linux-input, Martin Kepplinger Signed-off-by: Martin Kepplinger <martink@posteo.de> --- drivers/input/tablet/pegasus_notetaker.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c index 27cb352..fdbc5e8 100644 --- a/drivers/input/tablet/pegasus_notetaker.c +++ b/drivers/input/tablet/pegasus_notetaker.c @@ -208,27 +208,30 @@ static int pegasus_open(struct input_dev *dev) return retval; pegasus->irq->dev = pegasus->usbdev; - if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) + if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) { retval = -EIO; + goto out; + } retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); - usb_autopm_put_interface(pegasus->intf); +out: - return retval; + if (retval < 0) { + usb_autopm_put_interface(pegasus->intf); + return retval; + } else { + return 0; + } } static void pegasus_close(struct input_dev *dev) { struct pegasus *pegasus = input_get_drvdata(dev); - int autopm_error; - autopm_error = usb_autopm_get_interface(pegasus->intf); usb_kill_urb(pegasus->irq); cancel_work_sync(&pegasus->init); - - if (!autopm_error) - usb_autopm_put_interface(pegasus->intf); + usb_autopm_put_interface(pegasus->intf); } static int pegasus_probe(struct usb_interface *intf, -- 2.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced 2016-07-18 14:29 ` [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced Martin Kepplinger @ 2016-07-20 21:29 ` Dmitry Torokhov 2016-07-21 11:00 ` Martin Kepplinger 0 siblings, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2016-07-20 21:29 UTC (permalink / raw) To: Martin Kepplinger; +Cc: linux-kernel, linux-input On Mon, Jul 18, 2016 at 04:29:07PM +0200, Martin Kepplinger wrote: > Signed-off-by: Martin Kepplinger <martink@posteo.de> > --- > drivers/input/tablet/pegasus_notetaker.c | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c > index 27cb352..fdbc5e8 100644 > --- a/drivers/input/tablet/pegasus_notetaker.c > +++ b/drivers/input/tablet/pegasus_notetaker.c > @@ -208,27 +208,30 @@ static int pegasus_open(struct input_dev *dev) > return retval; > > pegasus->irq->dev = pegasus->usbdev; > - if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) > + if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) { > retval = -EIO; > + goto out; > + } > > retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); If this fails I we should kill URB and cancel work. I adjusted and applied. > > - usb_autopm_put_interface(pegasus->intf); > +out: > > - return retval; > + if (retval < 0) { > + usb_autopm_put_interface(pegasus->intf); > + return retval; > + } else { > + return 0; > + } > } > > static void pegasus_close(struct input_dev *dev) > { > struct pegasus *pegasus = input_get_drvdata(dev); > - int autopm_error; > > - autopm_error = usb_autopm_get_interface(pegasus->intf); > usb_kill_urb(pegasus->irq); > cancel_work_sync(&pegasus->init); > - > - if (!autopm_error) > - usb_autopm_put_interface(pegasus->intf); > + usb_autopm_put_interface(pegasus->intf); > } > > static int pegasus_probe(struct usb_interface *intf, > -- > 2.1.4 > -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced 2016-07-20 21:29 ` Dmitry Torokhov @ 2016-07-21 11:00 ` Martin Kepplinger 0 siblings, 0 replies; 10+ messages in thread From: Martin Kepplinger @ 2016-07-21 11:00 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: linux-kernel, linux-input Am 2016-07-20 um 23:29 schrieb Dmitry Torokhov: > On Mon, Jul 18, 2016 at 04:29:07PM +0200, Martin Kepplinger wrote: >> Signed-off-by: Martin Kepplinger <martink@posteo.de> >> --- >> drivers/input/tablet/pegasus_notetaker.c | 19 +++++++++++-------- >> 1 file changed, 11 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c >> index 27cb352..fdbc5e8 100644 >> --- a/drivers/input/tablet/pegasus_notetaker.c >> +++ b/drivers/input/tablet/pegasus_notetaker.c >> @@ -208,27 +208,30 @@ static int pegasus_open(struct input_dev *dev) >> return retval; >> >> pegasus->irq->dev = pegasus->usbdev; >> - if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) >> + if (usb_submit_urb(pegasus->irq, GFP_KERNEL)) { >> retval = -EIO; >> + goto out; >> + } >> >> retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE); > > If this fails I we should kill URB and cancel work. I adjusted and > applied. You're right. Thanks for this! > >> >> - usb_autopm_put_interface(pegasus->intf); >> +out: >> >> - return retval; >> + if (retval < 0) { >> + usb_autopm_put_interface(pegasus->intf); >> + return retval; >> + } else { >> + return 0; >> + } >> } >> >> static void pegasus_close(struct input_dev *dev) >> { >> struct pegasus *pegasus = input_get_drvdata(dev); >> - int autopm_error; >> >> - autopm_error = usb_autopm_get_interface(pegasus->intf); >> usb_kill_urb(pegasus->irq); >> cancel_work_sync(&pegasus->init); >> - >> - if (!autopm_error) >> - usb_autopm_put_interface(pegasus->intf); >> + usb_autopm_put_interface(pegasus->intf); >> } >> >> static int pegasus_probe(struct usb_interface *intf, >> -- >> 2.1.4 >> > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() [not found] <1468852149-2614-1-git-send-email-martink@posteo.de> 2016-07-18 14:29 ` [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors Martin Kepplinger 2016-07-18 14:29 ` [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced Martin Kepplinger @ 2016-07-18 14:29 ` Martin Kepplinger 2016-07-20 21:30 ` Dmitry Torokhov 2016-07-18 14:29 ` [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use Martin Kepplinger 3 siblings, 1 reply; 10+ messages in thread From: Martin Kepplinger @ 2016-07-18 14:29 UTC (permalink / raw) To: dmitry.torokhov; +Cc: linux-kernel, linux-input, Martin Kepplinger Signed-off-by: Martin Kepplinger <martink@posteo.de> --- drivers/input/tablet/pegasus_notetaker.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c index fdbc5e8..07436c6 100644 --- a/drivers/input/tablet/pegasus_notetaker.c +++ b/drivers/input/tablet/pegasus_notetaker.c @@ -377,6 +377,7 @@ static int pegasus_suspend(struct usb_interface *intf, pm_message_t message) mutex_lock(&pegasus->dev->mutex); usb_kill_urb(pegasus->irq); + cancel_work_sync(&pegasus->init); mutex_unlock(&pegasus->dev->mutex); return 0; -- 2.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() 2016-07-18 14:29 ` [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() Martin Kepplinger @ 2016-07-20 21:30 ` Dmitry Torokhov 0 siblings, 0 replies; 10+ messages in thread From: Dmitry Torokhov @ 2016-07-20 21:30 UTC (permalink / raw) To: Martin Kepplinger; +Cc: linux-kernel, linux-input On Mon, Jul 18, 2016 at 04:29:08PM +0200, Martin Kepplinger wrote: > Signed-off-by: Martin Kepplinger <martink@posteo.de> Applied, thank you. > --- > drivers/input/tablet/pegasus_notetaker.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c > index fdbc5e8..07436c6 100644 > --- a/drivers/input/tablet/pegasus_notetaker.c > +++ b/drivers/input/tablet/pegasus_notetaker.c > @@ -377,6 +377,7 @@ static int pegasus_suspend(struct usb_interface *intf, pm_message_t message) > > mutex_lock(&pegasus->dev->mutex); > usb_kill_urb(pegasus->irq); > + cancel_work_sync(&pegasus->init); > mutex_unlock(&pegasus->dev->mutex); -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use [not found] <1468852149-2614-1-git-send-email-martink@posteo.de> ` (2 preceding siblings ...) 2016-07-18 14:29 ` [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() Martin Kepplinger @ 2016-07-18 14:29 ` Martin Kepplinger 2016-07-20 21:30 ` Dmitry Torokhov 3 siblings, 1 reply; 10+ messages in thread From: Martin Kepplinger @ 2016-07-18 14:29 UTC (permalink / raw) To: dmitry.torokhov; +Cc: linux-kernel, linux-input, Martin Kepplinger Signed-off-by: Martin Kepplinger <martink@posteo.de> --- drivers/input/tablet/pegasus_notetaker.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c index 07436c6..b172247 100644 --- a/drivers/input/tablet/pegasus_notetaker.c +++ b/drivers/input/tablet/pegasus_notetaker.c @@ -398,7 +398,19 @@ static int pegasus_resume(struct usb_interface *intf) static int pegasus_reset_resume(struct usb_interface *intf) { - return pegasus_resume(intf); + struct pegasus *pegasus = usb_get_intfdata(intf); + int retval = 0; + + mutex_lock(&pegasus->dev->mutex); + if (pegasus->dev->users) { + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, + NOTETAKER_LED_MOUSE); + if (!retval && usb_submit_urb(pegasus->irq, GFP_NOIO) < 0) + retval = -EIO; + } + mutex_unlock(&pegasus->dev->mutex); + + return retval; } static const struct usb_device_id pegasus_ids[] = { -- 2.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use 2016-07-18 14:29 ` [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use Martin Kepplinger @ 2016-07-20 21:30 ` Dmitry Torokhov 0 siblings, 0 replies; 10+ messages in thread From: Dmitry Torokhov @ 2016-07-20 21:30 UTC (permalink / raw) To: Martin Kepplinger; +Cc: linux-kernel, linux-input On Mon, Jul 18, 2016 at 04:29:09PM +0200, Martin Kepplinger wrote: > Signed-off-by: Martin Kepplinger <martink@posteo.de> Applied, thank you. > --- > drivers/input/tablet/pegasus_notetaker.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c > index 07436c6..b172247 100644 > --- a/drivers/input/tablet/pegasus_notetaker.c > +++ b/drivers/input/tablet/pegasus_notetaker.c > @@ -398,7 +398,19 @@ static int pegasus_resume(struct usb_interface *intf) > > static int pegasus_reset_resume(struct usb_interface *intf) > { > - return pegasus_resume(intf); > + struct pegasus *pegasus = usb_get_intfdata(intf); > + int retval = 0; > + > + mutex_lock(&pegasus->dev->mutex); > + if (pegasus->dev->users) { > + retval = pegasus_set_mode(pegasus, PEN_MODE_XY, > + NOTETAKER_LED_MOUSE); > + if (!retval && usb_submit_urb(pegasus->irq, GFP_NOIO) < 0) > + retval = -EIO; > + } > + mutex_unlock(&pegasus->dev->mutex); > + > + return retval; > } -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2016-07-21 11:06 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1468852149-2614-1-git-send-email-martink@posteo.de>
2016-07-18 14:29 ` [PATCH 1/4] input: tablet: pegasus_notetaker: Track usb control msg errors Martin Kepplinger
2016-07-20 21:06 ` Dmitry Torokhov
2016-07-21 11:06 ` Martin Kepplinger
2016-07-18 14:29 ` [PATCH 2/4] input: tablet: pegasus_notetaker: Fix usb_autopm calls to be balanced Martin Kepplinger
2016-07-20 21:29 ` Dmitry Torokhov
2016-07-21 11:00 ` Martin Kepplinger
2016-07-18 14:29 ` [PATCH 3/4] input: tablet: pegasus_notetaker: Cancel workqueue's work in suspend() Martin Kepplinger
2016-07-20 21:30 ` Dmitry Torokhov
2016-07-18 14:29 ` [PATCH 4/4] input: tablet: pegasus_notetaker: Set device mode in reset_resume() if in use Martin Kepplinger
2016-07-20 21:30 ` Dmitry Torokhov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).