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

Commit 9aa58c71 authored by Hans Verkuil's avatar Hans Verkuil Committed by Ray Zhang
Browse files

[media] cec: initiator should be the same as the destination for, poll



Poll messages that are used to allocate a logical address should
use the same initiator as the destination. Instead, it expected that
the initiator was 0xf which is not according to the standard.

This also had consequences for the message checks in cec_transmit_msg_fh
that incorrectly rejected poll messages with the same initiator and
destination.

Change-Id: I01b5d4fef7caa370b0f4fb154360495a7dce5332
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
Git-commit: 42980da2eb7eb9695d8efc0c0ef145cbbb993b2c
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git


Signed-off-by: default avatarRay Zhang <rayz@codeaurora.org>
parent 913877c1
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -612,8 +612,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
	}
	memset(msg->msg + msg->len, 0, sizeof(msg->msg) - msg->len);
	if (msg->len == 1) {
		if (cec_msg_initiator(msg) != 0xf ||
		    cec_msg_destination(msg) == 0xf) {
		if (cec_msg_destination(msg) == 0xf) {
			dprintk(1, "cec_transmit_msg: invalid poll message\n");
			return -EINVAL;
		}
@@ -638,7 +637,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
		dprintk(1, "cec_transmit_msg: destination is the adapter itself\n");
		return -EINVAL;
	}
	if (cec_msg_initiator(msg) != 0xf &&
	if (msg->len > 1 && adap->is_configured &&
	    !cec_has_log_addr(adap, cec_msg_initiator(msg))) {
		dprintk(1, "cec_transmit_msg: initiator has unknown logical address %d\n",
			cec_msg_initiator(msg));
@@ -1072,7 +1071,7 @@ static int cec_config_log_addr(struct cec_adapter *adap,

	/* Send poll message */
	msg.len = 1;
	msg.msg[0] = 0xf0 | log_addr;
	msg.msg[0] = (log_addr << 4) | log_addr;
	err = cec_transmit_msg_fh(adap, &msg, NULL, true);

	/*