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

Commit 168c1398 authored by Martin Kepplinger's avatar Martin Kepplinger Committed by Dmitry Torokhov
Browse files

Input: pegasus_notetaker - handle usb control msg errors

parent 3746e567
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -80,15 +80,16 @@ 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;
	int error;
	u8 *cmd_buf;

	cmd_buf = kmalloc(sizeof_buf, GFP_KERNEL);
	if (!cmd_buf)
		return;
		return -ENOMEM;

	cmd_buf[0] = NOTETAKER_REPORT_ID;
	cmd_buf[1] = len;
@@ -101,17 +102,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");

	kfree(cmd_buf);

	if (unlikely(result != sizeof_buf)) {
		error = result < 0 ? result : -EIO;
		dev_err(&pegasus->usbdev->dev, "control msg error: %d\n",
			error);
		return error;
	}

static void pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led)
	return 0;
}

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)
@@ -191,8 +198,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 error;

	pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
	error = pegasus_set_mode(pegasus, PEN_MODE_XY, NOTETAKER_LED_MOUSE);
	if (error)
		dev_err(&pegasus->usbdev->dev, "pegasus_set_mode error: %d\n",
			error);
}

static int pegasus_open(struct input_dev *dev)
@@ -208,7 +219,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);