Skip to content

Commit 168c139

Browse files
mergedtor
authored andcommitted
Input: pegasus_notetaker - handle usb control msg errors
Signed-off-by: Martin Kepplinger <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent 3746e56 commit 168c139

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

drivers/input/tablet/pegasus_notetaker.c

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,16 @@ struct pegasus {
8080
struct work_struct init;
8181
};
8282

83-
static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len)
83+
static int pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len)
8484
{
8585
const int sizeof_buf = len + 2;
8686
int result;
87+
int error;
8788
u8 *cmd_buf;
8889

8990
cmd_buf = kmalloc(sizeof_buf, GFP_KERNEL);
9091
if (!cmd_buf)
91-
return;
92+
return -ENOMEM;
9293

9394
cmd_buf[0] = NOTETAKER_REPORT_ID;
9495
cmd_buf[1] = len;
@@ -101,17 +102,23 @@ static void pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len)
101102
0, 0, cmd_buf, sizeof_buf,
102103
USB_CTRL_SET_TIMEOUT);
103104

104-
if (result != sizeof_buf)
105-
dev_err(&pegasus->usbdev->dev, "control msg error\n");
106-
107105
kfree(cmd_buf);
106+
107+
if (unlikely(result != sizeof_buf)) {
108+
error = result < 0 ? result : -EIO;
109+
dev_err(&pegasus->usbdev->dev, "control msg error: %d\n",
110+
error);
111+
return error;
112+
}
113+
114+
return 0;
108115
}
109116

110-
static void pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led)
117+
static int pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led)
111118
{
112119
u8 cmd[] = { NOTETAKER_SET_CMD, NOTETAKER_SET_MODE, led, mode };
113120

114-
pegasus_control_msg(pegasus, cmd, sizeof(cmd));
121+
return pegasus_control_msg(pegasus, cmd, sizeof(cmd));
115122
}
116123

117124
static void pegasus_parse_packet(struct pegasus *pegasus)
@@ -191,8 +198,12 @@ static void pegasus_irq(struct urb *urb)
191198
static void pegasus_init(struct work_struct *work)
192199
{
193200
struct pegasus *pegasus = container_of(work, struct pegasus, init);
201+
int error;
194202

195-
pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
203+
error = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
204+
if (error)
205+
dev_err(&pegasus->usbdev->dev, "pegasus_set_mode error: %d\n",
206+
error);
196207
}
197208

198209
static int pegasus_open(struct input_dev *dev)
@@ -208,7 +219,7 @@ static int pegasus_open(struct input_dev *dev)
208219
if (usb_submit_urb(pegasus->irq, GFP_KERNEL))
209220
retval = -EIO;
210221

211-
pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
222+
retval = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
212223

213224
usb_autopm_put_interface(pegasus->intf);
214225

0 commit comments

Comments
 (0)