mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 06:25:52 +02:00
UPSTREAM: media: cec: be smarter about detecting the number of attempts
made
Some hardware does more than one attempt. So when it calls
cec_transmit_done when an error occurred it will e.g. use an error count
of 2 instead of 1.
The framework always assumed a single attempt, but now it is smarter
and will sum the counters to detect how many attempts were made.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
(cherry picked from commit 688318c35a)
Change-Id: I4943583588003b3f7f3d51a4a03057e8a1af5213
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
This commit is contained in:
parent
da80af837b
commit
3ccc22bf04
|
|
@ -517,8 +517,13 @@ void cec_transmit_done_ts(struct cec_adapter *adap, u8 status,
|
|||
{
|
||||
struct cec_data *data;
|
||||
struct cec_msg *msg;
|
||||
unsigned int attempts_made = arb_lost_cnt + nack_cnt +
|
||||
low_drive_cnt + error_cnt;
|
||||
|
||||
dprintk(2, "%s: status %02x\n", __func__, status);
|
||||
if (attempts_made < 1)
|
||||
attempts_made = 1;
|
||||
|
||||
mutex_lock(&adap->lock);
|
||||
data = adap->transmitting;
|
||||
if (!data) {
|
||||
|
|
@ -551,10 +556,10 @@ void cec_transmit_done_ts(struct cec_adapter *adap, u8 status,
|
|||
* the hardware didn't signal that it retried itself (by setting
|
||||
* CEC_TX_STATUS_MAX_RETRIES), then we will retry ourselves.
|
||||
*/
|
||||
if (data->attempts > 1 &&
|
||||
if (data->attempts > attempts_made &&
|
||||
!(status & (CEC_TX_STATUS_MAX_RETRIES | CEC_TX_STATUS_OK))) {
|
||||
/* Retry this message */
|
||||
data->attempts--;
|
||||
data->attempts -= attempts_made;
|
||||
if (msg->timeout)
|
||||
dprintk(2, "retransmit: %*ph (attempts: %d, wait for 0x%02x)\n",
|
||||
msg->len, msg->msg, data->attempts, msg->reply);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user