diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2016-07-16 08:44:13 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-19 12:22:17 -0400 |
commit | 40df3a7e586df59190547fe0e7d9928da735eada (patch) | |
tree | 3fa7f354c935863fb0a516f6507ea67d5c2bcd0c | |
parent | e883b4d02670ae83ab24e9af969de1af756959f8 (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.c | 22 |
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); |