aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2016-07-16 08:44:13 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-07-19 12:22:17 -0400
commit40df3a7e586df59190547fe0e7d9928da735eada (patch)
tree3fa7f354c935863fb0a516f6507ea67d5c2bcd0c
parente883b4d02670ae83ab24e9af969de1af756959f8 (diff)
[media] cec: clear all status fields before transmit and always fill in sequence
Before transmitting a message clear all status fields and always fill in the sequence number. Make sure the sequence number is never 0. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/staging/media/cec/cec-adap.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/staging/media/cec/cec-adap.c b/drivers/staging/media/cec/cec-adap.c
index 4d86a6c9258f..2b34c0f8929a 100644
--- a/drivers/staging/media/cec/cec-adap.c
+++ b/drivers/staging/media/cec/cec-adap.c
@@ -574,6 +574,19 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
574 unsigned int timeout; 574 unsigned int timeout;
575 int res = 0; 575 int res = 0;
576 576
577 msg->rx_ts = 0;
578 msg->tx_ts = 0;
579 msg->rx_status = 0;
580 msg->tx_status = 0;
581 msg->tx_arb_lost_cnt = 0;
582 msg->tx_nack_cnt = 0;
583 msg->tx_low_drive_cnt = 0;
584 msg->tx_error_cnt = 0;
585 msg->flags = 0;
586 msg->sequence = ++adap->sequence;
587 if (!msg->sequence)
588 msg->sequence = ++adap->sequence;
589
577 if (msg->reply && msg->timeout == 0) { 590 if (msg->reply && msg->timeout == 0) {
578 /* Make sure the timeout isn't 0. */ 591 /* Make sure the timeout isn't 0. */
579 msg->timeout = 1000; 592 msg->timeout = 1000;
@@ -640,14 +653,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
640 dprintk(2, "cec_transmit_msg: %*ph%s\n", 653 dprintk(2, "cec_transmit_msg: %*ph%s\n",
641 msg->len, msg->msg, !block ? " (nb)" : ""); 654 msg->len, msg->msg, !block ? " (nb)" : "");
642 655
643 msg->rx_ts = 0;
644 msg->tx_ts = 0;
645 msg->rx_status = 0;
646 msg->tx_status = 0;
647 msg->tx_arb_lost_cnt = 0;
648 msg->tx_nack_cnt = 0;
649 msg->tx_low_drive_cnt = 0;
650 msg->tx_error_cnt = 0;
651 data->msg = *msg; 656 data->msg = *msg;
652 data->fh = fh; 657 data->fh = fh;
653 data->adap = adap; 658 data->adap = adap;
@@ -673,7 +678,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
673 init_completion(&data->c); 678 init_completion(&data->c);
674 INIT_DELAYED_WORK(&data->work, cec_wait_timeout); 679 INIT_DELAYED_WORK(&data->work, cec_wait_timeout);
675 680
676 data->msg.sequence = adap->sequence++;
677 if (fh) 681 if (fh)
678 list_add_tail(&data->xfer_list, &fh->xfer_list); 682 list_add_tail(&data->xfer_list, &fh->xfer_list);
679 list_add_tail(&data->list, &adap->transmit_queue); 683 list_add_tail(&data->list, &adap->transmit_queue);