|
@@ -526,9 +526,11 @@ int cec_thread_func(void *_adap)
|
|
|
if (data->attempts) {
|
|
|
/* should be >= 3 data bit periods for a retry */
|
|
|
signal_free_time = CEC_SIGNAL_FREE_TIME_RETRY;
|
|
|
- } else if (data->new_initiator) {
|
|
|
+ } else if (adap->last_initiator !=
|
|
|
+ cec_msg_initiator(&data->msg)) {
|
|
|
/* should be >= 5 data bit periods for new initiator */
|
|
|
signal_free_time = CEC_SIGNAL_FREE_TIME_NEW_INITIATOR;
|
|
|
+ adap->last_initiator = cec_msg_initiator(&data->msg);
|
|
|
} else {
|
|
|
/*
|
|
|
* should be >= 7 data bit periods for sending another
|
|
@@ -713,7 +715,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
|
|
struct cec_fh *fh, bool block)
|
|
|
{
|
|
|
struct cec_data *data;
|
|
|
- u8 last_initiator = 0xff;
|
|
|
|
|
|
msg->rx_ts = 0;
|
|
|
msg->tx_ts = 0;
|
|
@@ -823,23 +824,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
|
|
data->adap = adap;
|
|
|
data->blocking = block;
|
|
|
|
|
|
- /*
|
|
|
- * Determine if this message follows a message from the same
|
|
|
- * initiator. Needed to determine the free signal time later on.
|
|
|
- */
|
|
|
- if (msg->len > 1) {
|
|
|
- if (!(list_empty(&adap->transmit_queue))) {
|
|
|
- const struct cec_data *last;
|
|
|
-
|
|
|
- last = list_last_entry(&adap->transmit_queue,
|
|
|
- const struct cec_data, list);
|
|
|
- last_initiator = cec_msg_initiator(&last->msg);
|
|
|
- } else if (adap->transmitting) {
|
|
|
- last_initiator =
|
|
|
- cec_msg_initiator(&adap->transmitting->msg);
|
|
|
- }
|
|
|
- }
|
|
|
- data->new_initiator = last_initiator != cec_msg_initiator(msg);
|
|
|
init_completion(&data->c);
|
|
|
INIT_DELAYED_WORK(&data->work, cec_wait_timeout);
|
|
|
|
|
@@ -1027,6 +1011,8 @@ void cec_received_msg_ts(struct cec_adapter *adap,
|
|
|
mutex_lock(&adap->lock);
|
|
|
dprintk(2, "%s: %*ph\n", __func__, msg->len, msg->msg);
|
|
|
|
|
|
+ adap->last_initiator = 0xff;
|
|
|
+
|
|
|
/* Check if this message was for us (directed or broadcast). */
|
|
|
if (!cec_msg_is_broadcast(msg))
|
|
|
valid_la = cec_has_log_addr(adap, msg_dest);
|
|
@@ -1489,6 +1475,8 @@ void __cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, bool block)
|
|
|
}
|
|
|
|
|
|
mutex_lock(&adap->devnode.lock);
|
|
|
+ adap->last_initiator = 0xff;
|
|
|
+
|
|
|
if ((adap->needs_hpd || list_empty(&adap->devnode.fhs)) &&
|
|
|
adap->ops->adap_enable(adap, true)) {
|
|
|
mutex_unlock(&adap->devnode.lock);
|