aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/cec/usb/extron/cec-splitter.c10
-rw-r--r--drivers/media/cec/usb/extron/extron-cec-drv.c10
2 files changed, 15 insertions, 5 deletions
diff --git a/drivers/media/cec/usb/extron/cec-splitter.c b/drivers/media/cec/usb/extron/cec-splitter.c
index 5cf679c7a858..c206c829e284 100644
--- a/drivers/media/cec/usb/extron/cec-splitter.c
+++ b/drivers/media/cec/usb/extron/cec-splitter.c
@@ -134,6 +134,9 @@ static void cec_out_give_device_power_status(struct extron *extron)
*/
int cec_splitter_received_input(struct extron_port *port, struct cec_msg *msg)
{
+ if (cec_msg_recv_is_tx_result(msg))
+ return 0;
+
if (msg->len < 2)
return -ENOMSG;
@@ -188,6 +191,13 @@ int cec_splitter_received_output(struct extron_port *port, struct cec_msg *msg)
unsigned int i;
u16 pa;
+ if (cec_msg_recv_is_tx_result(msg)) {
+ if ((msg->tx_status & CEC_TX_STATUS_MAX_RETRIES) &&
+ (msg->tx_status & CEC_TX_STATUS_ERROR))
+ pr_info("JJV tx error %x %*ph\n", msg->tx_status, msg->len, msg->msg);
+ return 0;
+ }
+
if (ktime_to_ms(extron->wakeup_ts)) {
s64 delta = ktime_ms_delta(ktime_get(), extron->wakeup_ts);
diff --git a/drivers/media/cec/usb/extron/extron-cec-drv.c b/drivers/media/cec/usb/extron/extron-cec-drv.c
index 0cba5340837d..78e840a4e9f7 100644
--- a/drivers/media/cec/usb/extron/extron-cec-drv.c
+++ b/drivers/media/cec/usb/extron/extron-cec-drv.c
@@ -537,10 +537,9 @@ static void extron_port_edid_change(struct extron_port *port, bool has_edid)
update = true;
}
port->has_edid = has_edid;
- if (has_edid) {
+ if (has_edid)
port->had_edid = true;
- port->lost_edid_ts = has_edid ? ktime_set(0, 0) : ktime_get();
- }
+ port->lost_edid_ts = has_edid ? ktime_set(0, 0) : ktime_get();
spin_unlock_irqrestore(&port->msg_lock, irq_flags);
if (update && !port->disconnected)
schedule_work(&port->irq_work);
@@ -589,7 +588,7 @@ static void extron_process_tx_done(struct extron_port *port, char status)
tx_status = CEC_TX_STATUS_OK;
break;
default:
- tx_status = CEC_TX_STATUS_ERROR | CEC_TX_STATUS_MAX_RETRIES;
+ tx_status = CEC_TX_STATUS_ERROR;
break;
}
spin_lock_irqsave(&port->msg_lock, irq_flags);
@@ -1081,7 +1080,8 @@ static int extron_setup(struct extron *extron)
port->dev = extron->dev;
port->adap = cec_allocate_adapter(&extron_cec_adap_ops, port,
port->name, caps, 1);
-
+
+ port->adap->xfer_timeout_ms = 6000;
mutex_init(&port->video_lock);
port->vdev = extron_videodev;
port->vdev.lock = &port->video_lock;

Privacy Policy