All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: A Sun <as1033x@comcast.net>, Sean Young <sean@mess.org>,
	Mauro Carvalho Chehab <mchehab+samsung@kernel.org>,
	Sasha Levin <sashal@kernel.org>,
	linux-media@vger.kernel.org
Subject: [PATCH AUTOSEL 5.3 107/203] media: mceusb: fix (eliminate) TX IR signal length limit
Date: Sun, 22 Sep 2019 14:42:13 -0400	[thread overview]
Message-ID: <20190922184350.30563-107-sashal@kernel.org> (raw)
In-Reply-To: <20190922184350.30563-1-sashal@kernel.org>

From: A Sun <as1033x@comcast.net>

[ Upstream commit 9fc3ce31f5bde660197f35135e90a1cced58aa2c ]

Fix and eliminate mceusb's IR length limit for IR signals transmitted to
the MCE IR blaster ports.

An IR signal TX exceeding 306 pulse/space samples presently causes -EINVAL
return error. There's no such limitation nor error with the MCE device
hardware. And valid IR signals exist with more than 400 pulse/space for the
control of certain appliances (eg Panasonic ACXA75C00600 air conditioner).

The scope of this patch is limited to the mceusb driver. There are still
IR signal TX length and time constraints that related modules of rc core
(eg LIRC) impose, further up the driver stack.

Changes for mceusb_tx_ir():

Converts and sends LIRC IR pulse/space sequence to MCE device IR
pulse/space format.

Break long length LIRC sequence into multiple (unlimited number of) parts
for sending to the MCE device.
Reduce kernel stack IR buffer size: 128 (was 384)
Increase MCE IR data packet size: 31 (was 5)
Zero time LIRC pulse/space no longer copied to MCE IR data.
Eliminate overwriting the source/input LIRC IR data in txbuf[].
Eliminate -EINVAL return; return number of IR samples sent (>0) or
MCE write error code (<0).

New mce_write() and mce_write_callback():

Implements synchronous blocking I/O, with timeout, for writing/sending
data to the MCE device.

An unlimited multipart IR signal sent to the MCE device faster than real
time requires flow control absent with the original mce_request_packet()
and mce_async_callback() asynchronous I/O implementation. Also absent is
TX error feedback.

mce_write() combines and replaces mce_request_packet() and
mce_async_callback() with conversion to synchronous I/O.
mce_write() returns bytes sent (>0) or MCE device write error (<0).
Debug hex dump TX data before processing.

Rename mce_async_out() -> mce_command_out():

The original name is misleading with underlying synchronous I/O
implementation. Function renamed to mce_command_out().

Changes in mceusb_handle_command():

Add support for MCE device error case MCE_RSP_TX_TIMEOUT
"IR TX timeout (TX buffer underrun)"

Changes in mceusb_dev_printdata():

Changes support test and debug of multipart TX IR.

Add buffer boundary information (offset and buffer size) to TX hex dump.
Correct TX trace bug "Raw IR data, 0 pulse/space samples"
Add trace for MCE_RSP_TX_TIMEOUT "IR TX timeout (TX buffer underrun)"

Other changes:

The driver's write to USB device architecture change (async to sync I/O)
is significant so we bump DRIVER_VERSION to "1.95" (from "1.94").

Tests:

$ cat -n irdata1 | head -3
     1  carrier 36000
     2  pulse 6350
     3  space 6350
$ cat -n irdata1 | tail -3
    76  pulse 6350
    77  space 6350
    78  pulse 6350
$ ir-ctl -s irdata1

[1549021.073612] mceusb 1-1.3:1.0: requesting 36000 HZ carrier
[1549021.073635] mceusb 1-1.3:1.0: tx data[0]: 9f 06 01 45 (len=4 sz=4)
[1549021.073649] mceusb 1-1.3:1.0: Request carrier of 35714 Hz (period 28us)
[1549021.073848] mceusb 1-1.3:1.0: tx done status = 4 (wait = 100, expire = 100 (1000ms), urb->actual_length = 4, urb->status = 0)
[1549021.074689] mceusb 1-1.3:1.0: rx data[0]: 9f 06 01 45 (len=4 sz=4)
[1549021.074701] mceusb 1-1.3:1.0: Got carrier of 35714 Hz (period 28us)
[1549021.102023] mceusb 1-1.3:1.0: tx data[0]: 9f 08 03 (len=3 sz=3)
[1549021.102036] mceusb 1-1.3:1.0: Request transmit blaster mask of 0x03
[1549021.102219] mceusb 1-1.3:1.0: tx done status = 3 (wait = 100, expire = 100 (1000ms), urb->actual_length = 3, urb->status = 0)
[1549021.131979] mceusb 1-1.3:1.0: tx data[0]: 9e ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f 9e ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f ff 7f 91 ff (len=81 sz=81)
[1549021.131992] mceusb 1-1.3:1.0: Raw IR data, 30 pulse/space samples
[1549021.133592] mceusb 1-1.3:1.0: tx done status = 81 (wait = 100, expire = 100 (1000ms), urb->actual_length = 81, urb->status = 0)

Hex dumps limited to 64 bytes.
0xff is MCE maximum time pulse, 0x7f is MCE maximum time space.

$ cat -n irdata2 | head -3
     1  carrier 36000
     2  pulse 50
     3  space 50
$ cat -n irdata2 | tail -3
   254  pulse 50
   255  space 50
   256  pulse 50
$ ir-ctl -s irdata2

[1549306.586998] mceusb 1-1.3:1.0: tx data[0]: 9f 08 03 (len=3 sz=3)
[1549306.587015] mceusb 1-1.3:1.0: Request transmit blaster mask of 0x03
[1549306.587252] mceusb 1-1.3:1.0: tx done status = 3 (wait = 100, expire = 100 (1000ms), urb->actual_length = 3, urb->status = 0)
[1549306.613275] mceusb 1-1.3:1.0: tx data[0]: 9e 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 9e 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 9e 81 (len=128 sz=128)
[1549306.613291] mceusb 1-1.3:1.0: Raw IR data, 30 pulse/space samples
[1549306.614837] mceusb 1-1.3:1.0: tx done status = 128 (wait = 100, expire = 100 (1000ms), urb->actual_length = 128, urb->status = 0)
[1549306.614861] mceusb 1-1.3:1.0: tx data[0]: 9e 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 9e 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 01 81 9e 01 (len=128 sz=128)
[1549306.614869] mceusb 1-1.3:1.0: Raw IR data, 30 pulse/space samples
[1549306.620199] mceusb 1-1.3:1.0: tx done status = 128 (wait = 100, expire = 100 (1000ms), urb->actual_length = 128, urb->status = 0)
[1549306.620212] mceusb 1-1.3:1.0: tx data[0]: 89 81 01 81 01 81 01 81 01 81 80 (len=11 sz=11)
[1549306.620221] mceusb 1-1.3:1.0: Raw IR data, 9 pulse/space samples
[1549306.633294] mceusb 1-1.3:1.0: tx done status = 11 (wait = 98, expire = 100 (1000ms), urb->actual_length = 11, urb->status = 0)

Hex dumps limited to 64 bytes.
0x81 is MCE minimum time pulse, 0x01 is MCE minimum time space.
TX IR part 3 sz=11 shows 20msec I/O blocking delay
(100expire - 98wait = 2jiffies)

Signed-off-by: A Sun <as1033x@comcast.net>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/media/rc/mceusb.c | 334 ++++++++++++++++++++++----------------
 1 file changed, 196 insertions(+), 138 deletions(-)

diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
index 4d5351ebb9408..9929fcdec74de 100644
--- a/drivers/media/rc/mceusb.c
+++ b/drivers/media/rc/mceusb.c
@@ -31,21 +31,22 @@
 #include <linux/pm_wakeup.h>
 #include <media/rc-core.h>
 
-#define DRIVER_VERSION	"1.94"
+#define DRIVER_VERSION	"1.95"
 #define DRIVER_AUTHOR	"Jarod Wilson <jarod@redhat.com>"
 #define DRIVER_DESC	"Windows Media Center Ed. eHome Infrared Transceiver " \
 			"device driver"
 #define DRIVER_NAME	"mceusb"
 
+#define USB_TX_TIMEOUT		1000 /* in milliseconds */
 #define USB_CTRL_MSG_SZ		2  /* Size of usb ctrl msg on gen1 hw */
 #define MCE_G1_INIT_MSGS	40 /* Init messages on gen1 hw to throw out */
 
 /* MCE constants */
-#define MCE_CMDBUF_SIZE		384  /* MCE Command buffer length */
+#define MCE_IRBUF_SIZE		128  /* TX IR buffer length */
 #define MCE_TIME_UNIT		50   /* Approx 50us resolution */
-#define MCE_CODE_LENGTH		5    /* Normal length of packet (with header) */
-#define MCE_PACKET_SIZE		4    /* Normal length of packet (without header) */
-#define MCE_IRDATA_HEADER	0x84 /* Actual header format is 0x80 + num_bytes */
+#define MCE_PACKET_SIZE		31   /* Max length of packet (with header) */
+#define MCE_IRDATA_HEADER	(0x80 + MCE_PACKET_SIZE - 1)
+				     /* Actual format is 0x80 + num_bytes */
 #define MCE_IRDATA_TRAILER	0x80 /* End of IR data */
 #define MCE_MAX_CHANNELS	2    /* Two transmitters, hardware dependent? */
 #define MCE_DEFAULT_TX_MASK	0x03 /* Vals: TX1=0x01, TX2=0x02, ALL=0x03 */
@@ -607,9 +608,9 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len,
 	if (len <= skip)
 		return;
 
-	dev_dbg(dev, "%cx data: %*ph (length=%d)",
-		(out ? 't' : 'r'),
-		min(len, buf_len - offset), buf + offset, len);
+	dev_dbg(dev, "%cx data[%d]: %*ph (len=%d sz=%d)",
+		(out ? 't' : 'r'), offset,
+		min(len, buf_len - offset), buf + offset, len, buf_len);
 
 	inout = out ? "Request" : "Got";
 
@@ -731,6 +732,9 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len,
 		case MCE_RSP_CMD_ILLEGAL:
 			dev_dbg(dev, "Illegal PORT_IR command");
 			break;
+		case MCE_RSP_TX_TIMEOUT:
+			dev_dbg(dev, "IR TX timeout (TX buffer underrun)");
+			break;
 		default:
 			dev_dbg(dev, "Unknown command 0x%02x 0x%02x",
 				 cmd, subcmd);
@@ -745,13 +749,14 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len,
 		dev_dbg(dev, "End of raw IR data");
 	else if ((cmd != MCE_CMD_PORT_IR) &&
 		 ((cmd & MCE_PORT_MASK) == MCE_COMMAND_IRDATA))
-		dev_dbg(dev, "Raw IR data, %d pulse/space samples", ir->rem);
+		dev_dbg(dev, "Raw IR data, %d pulse/space samples",
+			cmd & MCE_PACKET_LENGTH_MASK);
 #endif
 }
 
 /*
  * Schedule work that can't be done in interrupt handlers
- * (mceusb_dev_recv() and mce_async_callback()) nor tasklets.
+ * (mceusb_dev_recv() and mce_write_callback()) nor tasklets.
  * Invokes mceusb_deferred_kevent() for recovering from
  * error events specified by the kevent bit field.
  */
@@ -764,23 +769,80 @@ static void mceusb_defer_kevent(struct mceusb_dev *ir, int kevent)
 		dev_dbg(ir->dev, "kevent %d scheduled", kevent);
 }
 
-static void mce_async_callback(struct urb *urb)
+static void mce_write_callback(struct urb *urb)
 {
-	struct mceusb_dev *ir;
-	int len;
-
 	if (!urb)
 		return;
 
-	ir = urb->context;
+	complete(urb->context);
+}
+
+/*
+ * Write (TX/send) data to MCE device USB endpoint out.
+ * Used for IR blaster TX and MCE device commands.
+ *
+ * Return: The number of bytes written (> 0) or errno (< 0).
+ */
+static int mce_write(struct mceusb_dev *ir, u8 *data, int size)
+{
+	int ret;
+	struct urb *urb;
+	struct device *dev = ir->dev;
+	unsigned char *buf_out;
+	struct completion tx_done;
+	unsigned long expire;
+	unsigned long ret_wait;
+
+	mceusb_dev_printdata(ir, data, size, 0, size, true);
+
+	urb = usb_alloc_urb(0, GFP_KERNEL);
+	if (unlikely(!urb)) {
+		dev_err(dev, "Error: mce write couldn't allocate urb");
+		return -ENOMEM;
+	}
+
+	buf_out = kmalloc(size, GFP_KERNEL);
+	if (!buf_out) {
+		usb_free_urb(urb);
+		return -ENOMEM;
+	}
+
+	init_completion(&tx_done);
+
+	/* outbound data */
+	if (usb_endpoint_xfer_int(ir->usb_ep_out))
+		usb_fill_int_urb(urb, ir->usbdev, ir->pipe_out,
+				 buf_out, size, mce_write_callback, &tx_done,
+				 ir->usb_ep_out->bInterval);
+	else
+		usb_fill_bulk_urb(urb, ir->usbdev, ir->pipe_out,
+				  buf_out, size, mce_write_callback, &tx_done);
+	memcpy(buf_out, data, size);
+
+	ret = usb_submit_urb(urb, GFP_KERNEL);
+	if (ret) {
+		dev_err(dev, "Error: mce write submit urb error = %d", ret);
+		kfree(buf_out);
+		usb_free_urb(urb);
+		return ret;
+	}
+
+	expire = msecs_to_jiffies(USB_TX_TIMEOUT);
+	ret_wait = wait_for_completion_timeout(&tx_done, expire);
+	if (!ret_wait) {
+		dev_err(dev, "Error: mce write timed out (expire = %lu (%dms))",
+			expire, USB_TX_TIMEOUT);
+		usb_kill_urb(urb);
+		ret = (urb->status == -ENOENT ? -ETIMEDOUT : urb->status);
+	} else {
+		ret = urb->status;
+	}
+	if (ret >= 0)
+		ret = urb->actual_length;	/* bytes written */
 
 	switch (urb->status) {
 	/* success */
 	case 0:
-		len = urb->actual_length;
-
-		mceusb_dev_printdata(ir, urb->transfer_buffer, len,
-				     0, len, true);
 		break;
 
 	case -ECONNRESET:
@@ -790,140 +852,135 @@ static void mce_async_callback(struct urb *urb)
 		break;
 
 	case -EPIPE:
-		dev_err(ir->dev, "Error: request urb status = %d (TX HALT)",
+		dev_err(ir->dev, "Error: mce write urb status = %d (TX HALT)",
 			urb->status);
 		mceusb_defer_kevent(ir, EVENT_TX_HALT);
 		break;
 
 	default:
-		dev_err(ir->dev, "Error: request urb status = %d", urb->status);
+		dev_err(ir->dev, "Error: mce write urb status = %d",
+			urb->status);
 		break;
 	}
 
-	/* the transfer buffer and urb were allocated in mce_request_packet */
-	kfree(urb->transfer_buffer);
-	usb_free_urb(urb);
-}
-
-/* request outgoing (send) usb packet - used to initialize remote */
-static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data,
-								int size)
-{
-	int res;
-	struct urb *async_urb;
-	struct device *dev = ir->dev;
-	unsigned char *async_buf;
+	dev_dbg(dev, "tx done status = %d (wait = %lu, expire = %lu (%dms), urb->actual_length = %d, urb->status = %d)",
+		ret, ret_wait, expire, USB_TX_TIMEOUT,
+		urb->actual_length, urb->status);
 
-	async_urb = usb_alloc_urb(0, GFP_KERNEL);
-	if (unlikely(!async_urb)) {
-		dev_err(dev, "Error, couldn't allocate urb!");
-		return;
-	}
-
-	async_buf = kmalloc(size, GFP_KERNEL);
-	if (!async_buf) {
-		usb_free_urb(async_urb);
-		return;
-	}
-
-	/* outbound data */
-	if (usb_endpoint_xfer_int(ir->usb_ep_out))
-		usb_fill_int_urb(async_urb, ir->usbdev, ir->pipe_out,
-				 async_buf, size, mce_async_callback, ir,
-				 ir->usb_ep_out->bInterval);
-	else
-		usb_fill_bulk_urb(async_urb, ir->usbdev, ir->pipe_out,
-				  async_buf, size, mce_async_callback, ir);
-
-	memcpy(async_buf, data, size);
-
-	dev_dbg(dev, "send request called (size=%#x)", size);
+	kfree(buf_out);
+	usb_free_urb(urb);
 
-	res = usb_submit_urb(async_urb, GFP_ATOMIC);
-	if (res) {
-		dev_err(dev, "send request FAILED! (res=%d)", res);
-		kfree(async_buf);
-		usb_free_urb(async_urb);
-		return;
-	}
-	dev_dbg(dev, "send request complete (res=%d)", res);
+	return ret;
 }
 
-static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size)
+static void mce_command_out(struct mceusb_dev *ir, u8 *data, int size)
 {
 	int rsize = sizeof(DEVICE_RESUME);
 
 	if (ir->need_reset) {
 		ir->need_reset = false;
-		mce_request_packet(ir, DEVICE_RESUME, rsize);
+		mce_write(ir, DEVICE_RESUME, rsize);
 		msleep(10);
 	}
 
-	mce_request_packet(ir, data, size);
+	mce_write(ir, data, size);
 	msleep(10);
 }
 
-/* Send data out the IR blaster port(s) */
+/*
+ * Transmit IR out the MCE device IR blaster port(s).
+ *
+ * Convert IR pulse/space sequence from LIRC to MCE format.
+ * Break up a long IR sequence into multiple parts (MCE IR data packets).
+ *
+ * u32 txbuf[] consists of IR pulse, space, ..., and pulse times in usec.
+ * Pulses and spaces are implicit by their position.
+ * The first IR sample, txbuf[0], is always a pulse.
+ *
+ * u8 irbuf[] consists of multiple IR data packets for the MCE device.
+ * A packet is 1 u8 MCE_IRDATA_HEADER and up to 30 u8 IR samples.
+ * An IR sample is 1-bit pulse/space flag with 7-bit time
+ * in MCE time units (50usec).
+ *
+ * Return: The number of IR samples sent (> 0) or errno (< 0).
+ */
 static int mceusb_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count)
 {
 	struct mceusb_dev *ir = dev->priv;
-	int i, length, ret = 0;
-	int cmdcount = 0;
-	unsigned char cmdbuf[MCE_CMDBUF_SIZE];
-
-	/* MCE tx init header */
-	cmdbuf[cmdcount++] = MCE_CMD_PORT_IR;
-	cmdbuf[cmdcount++] = MCE_CMD_SETIRTXPORTS;
-	cmdbuf[cmdcount++] = ir->tx_mask;
+	u8 cmdbuf[3] = { MCE_CMD_PORT_IR, MCE_CMD_SETIRTXPORTS, 0x00 };
+	u8 irbuf[MCE_IRBUF_SIZE];
+	int ircount = 0;
+	unsigned int irsample;
+	int i, length, ret;
 
 	/* Send the set TX ports command */
-	mce_async_out(ir, cmdbuf, cmdcount);
-	cmdcount = 0;
-
-	/* Generate mce packet data */
-	for (i = 0; (i < count) && (cmdcount < MCE_CMDBUF_SIZE); i++) {
-		txbuf[i] = txbuf[i] / MCE_TIME_UNIT;
-
-		do { /* loop to support long pulses/spaces > 127*50us=6.35ms */
-
-			/* Insert mce packet header every 4th entry */
-			if ((cmdcount < MCE_CMDBUF_SIZE) &&
-			    (cmdcount % MCE_CODE_LENGTH) == 0)
-				cmdbuf[cmdcount++] = MCE_IRDATA_HEADER;
-
-			/* Insert mce packet data */
-			if (cmdcount < MCE_CMDBUF_SIZE)
-				cmdbuf[cmdcount++] =
-					(txbuf[i] < MCE_PULSE_BIT ?
-					 txbuf[i] : MCE_MAX_PULSE_LENGTH) |
-					 (i & 1 ? 0x00 : MCE_PULSE_BIT);
-			else {
-				ret = -EINVAL;
-				goto out;
+	cmdbuf[2] = ir->tx_mask;
+	mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
+
+	/* Generate mce IR data packet */
+	for (i = 0; i < count; i++) {
+		irsample = txbuf[i] / MCE_TIME_UNIT;
+
+		/* loop to support long pulses/spaces > 6350us (127*50us) */
+		while (irsample > 0) {
+			/* Insert IR header every 30th entry */
+			if (ircount % MCE_PACKET_SIZE == 0) {
+				/* Room for IR header and one IR sample? */
+				if (ircount >= MCE_IRBUF_SIZE - 1) {
+					/* Send near full buffer */
+					ret = mce_write(ir, irbuf, ircount);
+					if (ret < 0)
+						return ret;
+					ircount = 0;
+				}
+				irbuf[ircount++] = MCE_IRDATA_HEADER;
 			}
 
-		} while ((txbuf[i] > MCE_MAX_PULSE_LENGTH) &&
-			 (txbuf[i] -= MCE_MAX_PULSE_LENGTH));
-	}
-
-	/* Check if we have room for the empty packet at the end */
-	if (cmdcount >= MCE_CMDBUF_SIZE) {
-		ret = -EINVAL;
-		goto out;
-	}
+			/* Insert IR sample */
+			if (irsample <= MCE_MAX_PULSE_LENGTH) {
+				irbuf[ircount] = irsample;
+				irsample = 0;
+			} else {
+				irbuf[ircount] = MCE_MAX_PULSE_LENGTH;
+				irsample -= MCE_MAX_PULSE_LENGTH;
+			}
+			/*
+			 * Even i = IR pulse
+			 * Odd  i = IR space
+			 */
+			irbuf[ircount] |= (i & 1 ? 0 : MCE_PULSE_BIT);
+			ircount++;
+
+			/* IR buffer full? */
+			if (ircount >= MCE_IRBUF_SIZE) {
+				/* Fix packet length in last header */
+				length = ircount % MCE_PACKET_SIZE;
+				if (length > 0)
+					irbuf[ircount - length] -=
+						MCE_PACKET_SIZE - length;
+				/* Send full buffer */
+				ret = mce_write(ir, irbuf, ircount);
+				if (ret < 0)
+					return ret;
+				ircount = 0;
+			}
+		}
+	} /* after for loop, 0 <= ircount < MCE_IRBUF_SIZE */
 
 	/* Fix packet length in last header */
-	length = cmdcount % MCE_CODE_LENGTH;
-	cmdbuf[cmdcount - length] -= MCE_CODE_LENGTH - length;
+	length = ircount % MCE_PACKET_SIZE;
+	if (length > 0)
+		irbuf[ircount - length] -= MCE_PACKET_SIZE - length;
 
-	/* All mce commands end with an empty packet (0x80) */
-	cmdbuf[cmdcount++] = MCE_IRDATA_TRAILER;
+	/* Append IR trailer (0x80) to final partial (or empty) IR buffer */
+	irbuf[ircount++] = MCE_IRDATA_TRAILER;
 
-	/* Transmit the command to the mce device */
-	mce_async_out(ir, cmdbuf, cmdcount);
+	/* Send final buffer */
+	ret = mce_write(ir, irbuf, ircount);
+	if (ret < 0)
+		return ret;
 
-out:
-	return ret ? ret : count;
+	return count;
 }
 
 /* Sets active IR outputs -- mce devices typically have two */
@@ -963,7 +1020,7 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier)
 			cmdbuf[2] = MCE_CMD_SIG_END;
 			cmdbuf[3] = MCE_IRDATA_TRAILER;
 			dev_dbg(ir->dev, "disabling carrier modulation");
-			mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+			mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 			return 0;
 		}
 
@@ -977,7 +1034,7 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier)
 								carrier);
 
 				/* Transmit new carrier to mce device */
-				mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+				mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 				return 0;
 			}
 		}
@@ -1000,10 +1057,10 @@ static int mceusb_set_timeout(struct rc_dev *dev, unsigned int timeout)
 	cmdbuf[2] = units >> 8;
 	cmdbuf[3] = units;
 
-	mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+	mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 
 	/* get receiver timeout value */
-	mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
+	mce_command_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
 
 	return 0;
 }
@@ -1028,7 +1085,7 @@ static int mceusb_set_rx_wideband(struct rc_dev *dev, int enable)
 		ir->wideband_rx_enabled = false;
 		cmdbuf[2] = 1;	/* port 1 is long range receiver */
 	}
-	mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+	mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 	/* response from device sets ir->learning_active */
 
 	return 0;
@@ -1051,7 +1108,7 @@ static int mceusb_set_rx_carrier_report(struct rc_dev *dev, int enable)
 		ir->carrier_report_enabled = true;
 		if (!ir->learning_active) {
 			cmdbuf[2] = 2;	/* port 2 is short range receiver */
-			mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+			mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 		}
 	} else {
 		ir->carrier_report_enabled = false;
@@ -1062,7 +1119,7 @@ static int mceusb_set_rx_carrier_report(struct rc_dev *dev, int enable)
 		 */
 		if (ir->learning_active && !ir->wideband_rx_enabled) {
 			cmdbuf[2] = 1;	/* port 1 is long range receiver */
-			mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+			mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 		}
 	}
 
@@ -1141,6 +1198,7 @@ static void mceusb_handle_command(struct mceusb_dev *ir, int index)
 		}
 		break;
 	case MCE_RSP_CMD_ILLEGAL:
+	case MCE_RSP_TX_TIMEOUT:
 		ir->need_reset = true;
 		break;
 	default:
@@ -1279,7 +1337,7 @@ static void mceusb_get_emulator_version(struct mceusb_dev *ir)
 {
 	/* If we get no reply or an illegal command reply, its ver 1, says MS */
 	ir->emver = 1;
-	mce_async_out(ir, GET_EMVER, sizeof(GET_EMVER));
+	mce_command_out(ir, GET_EMVER, sizeof(GET_EMVER));
 }
 
 static void mceusb_gen1_init(struct mceusb_dev *ir)
@@ -1325,10 +1383,10 @@ static void mceusb_gen1_init(struct mceusb_dev *ir)
 	dev_dbg(dev, "set handshake  - retC = %d", ret);
 
 	/* device resume */
-	mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME));
+	mce_command_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME));
 
 	/* get hw/sw revision? */
-	mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION));
+	mce_command_out(ir, GET_REVISION, sizeof(GET_REVISION));
 
 	kfree(data);
 }
@@ -1336,13 +1394,13 @@ static void mceusb_gen1_init(struct mceusb_dev *ir)
 static void mceusb_gen2_init(struct mceusb_dev *ir)
 {
 	/* device resume */
-	mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME));
+	mce_command_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME));
 
 	/* get wake version (protocol, key, address) */
-	mce_async_out(ir, GET_WAKEVERSION, sizeof(GET_WAKEVERSION));
+	mce_command_out(ir, GET_WAKEVERSION, sizeof(GET_WAKEVERSION));
 
 	/* unknown what this one actually returns... */
-	mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2));
+	mce_command_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2));
 }
 
 static void mceusb_get_parameters(struct mceusb_dev *ir)
@@ -1356,24 +1414,24 @@ static void mceusb_get_parameters(struct mceusb_dev *ir)
 	ir->num_rxports = 2;
 
 	/* get number of tx and rx ports */
-	mce_async_out(ir, GET_NUM_PORTS, sizeof(GET_NUM_PORTS));
+	mce_command_out(ir, GET_NUM_PORTS, sizeof(GET_NUM_PORTS));
 
 	/* get the carrier and frequency */
-	mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ));
+	mce_command_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ));
 
 	if (ir->num_txports && !ir->flags.no_tx)
 		/* get the transmitter bitmask */
-		mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK));
+		mce_command_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK));
 
 	/* get receiver timeout value */
-	mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
+	mce_command_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
 
 	/* get receiver sensor setting */
-	mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR));
+	mce_command_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR));
 
 	for (i = 0; i < ir->num_txports; i++) {
 		cmdbuf[2] = i;
-		mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+		mce_command_out(ir, cmdbuf, sizeof(cmdbuf));
 	}
 }
 
@@ -1382,7 +1440,7 @@ static void mceusb_flash_led(struct mceusb_dev *ir)
 	if (ir->emver < 2)
 		return;
 
-	mce_async_out(ir, FLASH_LED, sizeof(FLASH_LED));
+	mce_command_out(ir, FLASH_LED, sizeof(FLASH_LED));
 }
 
 /*
-- 
2.20.1


  parent reply	other threads:[~2019-09-22 19:34 UTC|newest]

Thread overview: 245+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-22 18:40 [PATCH AUTOSEL 5.3 001/203] ALSA: hda: Flush interrupts on disabling Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 002/203] ASoC: SOF: Intel: hda: Make hdac_device device-managed Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 003/203] cpufreq: ap806: Add NULL check after kcalloc Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 004/203] ALSA: hda/hdmi - Don't report spurious jack state changes Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 005/203] regulator: lm363x: Fix off-by-one n_voltages for lm3632 ldo_vpos/ldo_vneg Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 006/203] regulator: lm363x: Fix n_voltages setting for lm36274 Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 007/203] spi: dw-mmio: Clock should be shut when error occurs Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 008/203] ASoC: tlv320aic31xx: suppress error message for EPROBE_DEFER Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 009/203] ASoC: sgtl5000: Fix of unmute outputs on probe Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 010/203] ASoC: sgtl5000: Fix charge pump source assignment Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 011/203] firmware: qcom_scm: Use proper types for dma mappings Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 012/203] dmaengine: bcm2835: Print error in case setting DMA mask fails Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 013/203] leds: leds-lp5562 allow firmware files up to the maximum length Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 014/203] ASoC: SOF: reset DMA state in prepare Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 015/203] media: dib0700: fix link error for dibx000_i2c_set_speed Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 016/203] media: mtk-cir: lower de-glitch counter for rc-mm protocol Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 017/203] ASoC: SOF: pci: mark last_busy value at runtime PM init Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 018/203] media: exynos4-is: fix leaked of_node references Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 019/203] media: vivid:add sanity check to avoid divide error and set value to 1 if 0 Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 020/203] media: vb2: reorder checks in vb2_poll() Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 021/203] media: vivid: work around high stack usage with clang Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 022/203] media: hdpvr: Add device num check and handling Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 023/203] media: i2c: ov5640: Check for devm_gpiod_get_optional() error Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 024/203] time/tick-broadcast: Fix tick_broadcast_offline() lockdep complaint Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 025/203] sched/fair: Fix imbalance due to CPU affinity Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 026/203] sched/core: Fix CPU controller for !RT_GROUP_SCHED Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 027/203] x86/apic: Make apic_pending_intr_clear() more robust Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 028/203] sched/deadline: Fix bandwidth accounting at all levels after offline migration Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 029/203] x86/reboot: Always use NMI fallback when shutdown via reboot vector IPI fails Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 030/203] rcu/tree: Call setschedule() gp ktread to SCHED_FIFO outside of atomic region Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 031/203] x86/apic: Soft disable APIC before initializing it Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 032/203] ALSA: hda - Show the fatal CORB/RIRB error more clearly Sasha Levin
2019-09-22 18:40 ` [PATCH AUTOSEL 5.3 033/203] ALSA: i2c: ak4xxx-adda: Fix a possible null pointer dereference in build_adc_controls() Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 034/203] ASoC: meson: g12a-tohdmitx: override codec2codec params Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-23  8:35   ` Jerome Brunet
2019-09-23  8:35     ` Jerome Brunet
2019-10-01 14:18     ` Sasha Levin
2019-10-01 14:18       ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 035/203] rcu: Add destroy_work_on_stack() to match INIT_WORK_ONSTACK() Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 036/203] EDAC/mc: Fix grain_bits calculation Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 037/203] arm64: dts: imx8mq: Correct OPP table according to latest datasheet Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 038/203] media: iguanair: add sanity checks Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 039/203] cpuidle: teo: Allow tick to be stopped if PM QoS is used Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 040/203] gpio: madera: Add support for Cirrus Logic CS47L15 Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 041/203] gpio: madera: Add support for Cirrus Logic CS47L92 Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 042/203] arm64: mm: free the initrd reserved memblock in a aligned manner Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 043/203] soc: amlogic: meson-clk-measure: protect measure with a mutex Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 044/203] base: soc: Export soc_device_register/unregister APIs Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 045/203] ALSA: usb-audio: Skip bSynchAddress endpoint check if it is invalid Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 046/203] ia64:unwind: fix double free for mod->arch.init_unw_table Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 047/203] EDAC/altera: Use the proper type for the IRQ status bits Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 048/203] ASoC: rsnd: don't call clk_get_rate() under atomic context Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 049/203] arm64/prefetch: fix a -Wtype-limits warning Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 050/203] md/raid1: end bio when the device faulty Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 051/203] md: don't call spare_active in md_reap_sync_thread if all member devices can't work Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 052/203] md: don't set In_sync if array is frozen Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 053/203] media: media/platform: fsl-viu.c: fix build for MICROBLAZE Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 054/203] media: staging: tegra-vde: Fix build error Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 055/203] RAS: Fix prototype warnings Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 056/203] RAS: Build debugfs.o only when enabled in Kconfig Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 057/203] ASoC: hdac_hda: fix page fault issue by removing race Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 058/203] ACPI / processor: don't print errors for processorIDs == 0xff Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 059/203] loop: Add LOOP_SET_DIRECT_IO to compat ioctl Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 060/203] perf tools: Fix paths in include statements Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 061/203] EDAC, pnd2: Fix ioremap() size in dnv_rd_reg() Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 062/203] efi: cper: print AER info of PCIe fatal error Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 063/203] firmware: arm_scmi: Check if platform has released shmem before using Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 064/203] sched/fair: Use rq_lock/unlock in online_fair_sched_group Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 065/203] idle: Prevent late-arriving interrupts from disrupting offline Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 066/203] blk-mq: Fix memory leak in blk_mq_init_allocated_queue error handling Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 067/203] media: gspca: zero usb_buf on error Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 068/203] perf config: Honour $PERF_CONFIG env var to specify alternate .perfconfig Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 069/203] perf test vfs_getname: Disable ~/.perfconfig to get default output Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 070/203] media: mtk-mdp: fix reference count on old device tree Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 071/203] media: i2c: tda1997x: prevent potential NULL pointer access Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 072/203] media: fdp1: Reduce FCP not found message level to debug Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 073/203] media: em28xx: modules workqueue not inited for 2nd device Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 074/203] arm64/efi: Move variable assignments after SECTIONS Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 075/203] perf unwind: Fix libunwind when tid != pid Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 076/203] media: rc: imon: Allow iMON RC protocol for ffdc 7e device Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 077/203] dmaengine: iop-adma: use correct printk format strings Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 078/203] ARM: xscale: fix multi-cpu compilation Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 079/203] perf ftrace: Use CAP_SYS_ADMIN instead of euid==0 Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 080/203] perf record: Support aarch64 random socket_id assignment Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 081/203] ALSA: hda: Add codec on bus address table lately Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 082/203] media: vsp1: fix memory leak of dl on error return path Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 083/203] media: i2c: ov5645: Fix power sequence Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 084/203] media: omap3isp: Don't set streaming state on random subdevs Sasha Levin
2019-09-23  7:19   ` Sakari Ailus
2019-09-23  7:25     ` Laurent Pinchart
2019-09-23 13:35       ` Sasha Levin
2019-10-01 14:30     ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 085/203] media: imx: mipi csi-2: Don't fail if initial state times-out Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 086/203] kasan/arm64: fix CONFIG_KASAN_SW_TAGS && KASAN_INLINE Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 087/203] ASoC: mediatek: mt6358: add delay after dmic clock on Sasha Levin
2019-09-23 18:21   ` Mark Brown
2019-10-01 14:45     ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 088/203] net: lpc-enet: fix printk format strings Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 089/203] m68k: Prevent some compiler warnings in Coldfire builds Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 090/203] ARM: dts: imx7d: cl-som-imx7: make ethernet work again Sasha Levin
2019-09-22 18:41   ` Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 091/203] arm64: dts: qcom: qcs404-evb: Mark WCSS clocks protected Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 092/203] ARM: dts: imx7-colibri: disable HS400 Sasha Levin
2019-09-22 18:41 ` [PATCH AUTOSEL 5.3 093/203] x86/platform/intel/iosf_mbi Rewrite locking Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 094/203] media: radio/si470x: kill urb on error Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 095/203] media: hdpvr: add terminating 0 at end of string Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 096/203] ASoC: uniphier: Fix double reset assersion when transitioning to suspend state Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 097/203] powerpc/Makefile: Always pass --synthetic to nm if supported Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 098/203] tools headers: Fixup bitsperlong per arch includes Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 099/203] ASoC: sun4i-i2s: Don't use the oversample to calculate BCLK Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 100/203] ASoC: mchp-i2s-mcc: Wait for RX/TX RDY only if controller is running Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 101/203] led: triggers: Fix a memory leak bug Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 102/203] ASoC: mchp-i2s-mcc: Fix unprepare of GCLK Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 103/203] nbd: add missing config put Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 104/203] ACPI / APEI: Release resources if gen_pool_add() fails Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 105/203] arm64: entry: Move ct_user_exit before any other exception Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 106/203] s390/kasan: provide uninstrumented __strlen Sasha Levin
2019-09-22 18:42 ` Sasha Levin [this message]
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 108/203] media: dvb-frontends: use ida for pll number Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 109/203] posix-cpu-timers: Sanitize bogus WARNONS Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 110/203] media: dvb-core: fix a memory leak bug Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 111/203] EDAC/amd64: Support more than two controllers for chip selects handling Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 112/203] cpufreq: imx-cpufreq-dt: Add i.MX8MN support Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 113/203] libperf: Fix alignment trap with xyarray contents in 'perf stat' Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 114/203] EDAC/amd64: Recognize DRAM device type ECC capability Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 115/203] EDAC/amd64: Decode syndrome before translating address Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 116/203] ARM: at91: move platform-specific asm-offset.h to arch/arm/mach-at91 Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 117/203] soc: renesas: rmobile-sysc: Set GENPD_FLAG_ALWAYS_ON for always-on domain Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 118/203] soc: renesas: Enable ARM_ERRATA_754322 for affected Cortex-A9 Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 119/203] PM / devfreq: Fix kernel oops on governor module load Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 120/203] ARM: OMAP2+: move platform-specific asm-offset.h to arch/arm/mach-omap2 Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 121/203] PM / devfreq: passive: Use non-devm notifiers Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 122/203] PM / devfreq: exynos-bus: Correct clock enable sequence Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 123/203] media: cec-notifier: clear cec_adap in cec_notifier_unregister Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 124/203] media: saa7146: add cleanup in hexium_attach() Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 125/203] media: cpia2_usb: fix memory leaks Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 126/203] media: saa7134: fix terminology around saa7134_i2c_eeprom_md7134_gate() Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 127/203] perf trace beauty ioctl: Fix off-by-one error in cmd->string table Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 128/203] perf report: Fix --ns time sort key output Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 129/203] perf script: Fix memory leaks in list_scripts() Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 130/203] media: aspeed-video: address a protential usage of an unitialized var Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 131/203] media: ov9650: add a sanity check Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 132/203] leds: lm3532: Fixes for the driver for stability Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 133/203] ASoC: es8316: fix headphone mixer volume table Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 134/203] ACPI / CPPC: do not require the _PSD method Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 135/203] sched/cpufreq: Align trace event behavior of fast switching Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 136/203] arm64: dts: meson: fix boards regulators states format Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 137/203] x86/apic/vector: Warn when vector space exhaustion breaks affinity Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 138/203] arm64: kpti: ensure patched kernel text is fetched from PoU Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 139/203] perf evlist: Use unshare(CLONE_FS) in sb threads to let setns(CLONE_NEWNS) work Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 140/203] arm64: Use correct ll/sc atomic constraints Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 141/203] jump_label: Don't warn on __exit jump entries Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 142/203] x86/mm/pti: Do not invoke PTI functions when PTI is disabled Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 143/203] ASoC: fsl_ssi: Fix clock control issue in master mode Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 144/203] x86/mm/pti: Handle unaligned address gracefully in pti_clone_pagetable() Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 145/203] nvmet: fix data units read and written counters in SMART log Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 146/203] nvme-multipath: fix ana log nsid lookup when nsid is not found Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 147/203] ALSA: firewire-motu: add support for MOTU 4pre Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 148/203] arm64: lse: Make ARM64_LSE_ATOMICS depend on JUMP_LABEL Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 149/203] iommu/amd: Silence warnings under memory pressure Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 150/203] ASoC: Intel: Haswell: Adjust machine device private context Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 151/203] libata/ahci: Drop PCS quirk for Denverton and beyond Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 152/203] iommu/iova: Avoid false sharing on fq_timer_on Sasha Levin
2019-09-22 18:42   ` Sasha Levin
2019-09-22 18:42 ` [PATCH AUTOSEL 5.3 153/203] libtraceevent: Change users plugin directory Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 154/203] ASoC: dt-bindings: sun4i-spdif: Fix dma-names warning Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 155/203] ARM: dts: exynos: Mark LDO10 as always-on on Peach Pit/Pi Chromebooks Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 156/203] x86/amd_nb: Add PCI device IDs for family 17h, model 70h Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 157/203] ACPI: custom_method: fix memory leaks Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 158/203] ACPI / PCI: fix acpi_pci_irq_enable() memory leak Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 159/203] closures: fix a race on wakeup from closure_sync Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 160/203] hwmon: (k10temp) Add support for AMD family 17h, model 70h CPUs Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 161/203] hwmon: (acpi_power_meter) Change log level for 'unsafe software power cap' Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 162/203] md/raid1: fail run raid1 array when active disk less than one Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 163/203] dmaengine: ti: edma: Do not reset reserved paRAM slots Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 164/203] kprobes: Prohibit probing on BUG() and WARN() address Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 165/203] x86/mm: Fix cpumask_of_node() error condition Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 166/203] irqchip/sifive-plic: set max threshold for ignored handlers Sasha Levin
2019-09-22 18:43   ` Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 167/203] s390/crypto: xts-aes-s390 fix extra run-time crypto self tests finding Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 168/203] irqchip/gic-v3-its: Fix LPI release for Multi-MSI devices Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 169/203] x86/platform/uv: Fix kmalloc() NULL check routine Sasha Levin
2019-09-22 20:25   ` Greg KH
2019-10-01 16:06     ` Sasha Levin
2019-10-01 16:06       ` Sasha Levin
2019-10-02  8:34       ` David Laight
2019-10-02  8:34         ` David Laight
2019-10-02 14:35         ` Mike Travis
2019-10-02 14:35           ` Mike Travis
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 170/203] x86/cpu: Add Tiger Lake to Intel family Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 171/203] platform/x86: intel_pmc_core: Do not ioremap RAM Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 172/203] platform/x86: intel_pmc_core_pltdrv: Module removal warning fix Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 173/203] ASoC: es8316: support fixed and variable both clock rates Sasha Levin
2019-09-23 18:22   ` Mark Brown
2019-10-01 16:06     ` Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 174/203] SoC: simple-card-utils: set 0Hz to sysclk when shutdown Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 175/203] ASoC: dmaengine: Make the pcm->name equal to pcm->id if the name is not set Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 176/203] tools/power/x86/intel-speed-select: Fix memory leak Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 177/203] spi: bcm2835: Work around DONE bit erratum Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 178/203] io_uring: fix wrong sequence setting logic Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 179/203] block: make rq sector size accessible for block stats Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 180/203] raid5: don't set STRIPE_HANDLE to stripe which is in batch list Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 181/203] mmc: core: Clarify sdio_irq_pending flag for MMC_CAP2_SDIO_IRQ_NOTHREAD Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 182/203] sched/psi: Correct overly pessimistic size calculation Sasha Levin
2019-09-22 18:43   ` Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 183/203] mmc: sdhci: Fix incorrect switch to HS mode Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 184/203] mmc: core: Add helper function to indicate if SDIO IRQs is enabled Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 185/203] mmc: dw_mmc: Re-store SDIO IRQs mask at system resume Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 186/203] raid5: don't increment read_errors on EILSEQ return Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 187/203] mmc: mtk-sd: Re-store SDIO IRQs mask at system resume Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 188/203] media: technisat-usb2: break out of loop at end of buffer Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 189/203] libertas: Add missing sentinel at end of if_usb.c fw_table Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 190/203] e1000e: add workaround for possible stalled packet Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 191/203] ALSA: hda - Add a quirk model for fixing Huawei Matebook X right speaker Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 192/203] ALSA: hda - Drop unsol event handler for Intel HDMI codecs Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 193/203] drm/amd/powerplay/smu7: enforce minimal VBITimeout (v2) Sasha Levin
2019-09-22 18:43   ` Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 194/203] media: ttusb-dec: Fix info-leak in ttusb_dec_send_command() Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 195/203] drm: fix module name in edid_firmware log message Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 196/203] ALSA: hda/realtek - Blacklist PC beep for Lenovo ThinkCentre M73/93 Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 197/203] iommu/amd: Override wrong IVRS IOAPIC on Raven Ridge systems Sasha Levin
2019-09-22 18:43   ` Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 198/203] zd1211rw: remove false assertion from zd_mac_clear() Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 199/203] btrfs: delayed-inode: Kill the BUG_ON() in btrfs_delete_delayed_dir_index() Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 200/203] btrfs: extent-tree: Make sure we only allocate extents from block groups with the same type Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 201/203] btrfs: tree-checker: Add ROOT_ITEM check Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 202/203] btrfs: Detect unbalanced tree with empty leaf before crashing btree operations Sasha Levin
2019-09-22 18:43 ` [PATCH AUTOSEL 5.3 203/203] kvm: Nested KVM MMUs need PAE root too Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190922184350.30563-107-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=as1033x@comcast.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab+samsung@kernel.org \
    --cc=sean@mess.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.