Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [Medium] media: cec: missing CEC_EVENT_FL_STATE_EDID_PRESENT in cec_open()
--

commit 46a7f75b89b8be5b867c7e7aadb50668719e461a
Author: Hans Verkuil <[email protected]>

media: cec: core: implement CEC_EVENT_FL_STATE_EDID_PRESENT

This commit sets CEC_EVENT_FL_STATE_EDID_PRESENT on CEC_EVENT_STATE_CHANGE
events in cec_post_state_event() when CEC_LOG_ADDRS_FL_EDID_PRESENT is set
in adap->log_addrs.flags.

> diff --git a/drivers/media/cec/core/cec-adap.c 
> b/drivers/media/cec/core/cec-adap.c
> index 06a596a0ede3e..c0de5835fea01 100644
> --- a/drivers/media/cec/core/cec-adap.c
> +++ b/drivers/media/cec/core/cec-adap.c
> @@ -323,6 +323,8 @@ static void cec_post_state_event(struct cec_adapter *adap)
>       ev.state_change.log_addr_mask = adap->log_addrs.log_addr_mask;
>       ev.state_change.have_conn_info =
>               adap->conn_info.type != CEC_CONNECTOR_TYPE_NO_CONNECTOR;
> +     if (adap->log_addrs.flags & CEC_LOG_ADDRS_FL_EDID_PRESENT)
> +             ev.flags |= CEC_EVENT_FL_STATE_EDID_PRESENT;
>       cec_queue_event(adap, &ev);
>  }

[Severity: Medium]
Should the initial CEC_EVENT_STATE_CHANGE event queued in cec_open() also
set CEC_EVENT_FL_STATE_EDID_PRESENT when an EDID is already present?

In drivers/media/cec/core/cec-api.c, cec_open() constructs the initial state
event directly:

drivers/media/cec/core/cec-api.c:cec_open() {
        struct cec_event ev = {
                .event = CEC_EVENT_STATE_CHANGE,
                .flags = CEC_EVENT_FL_INITIAL_STATE,
        };
        ...
        /* Queue up initial state events */
        ev.state_change.phys_addr = adap->phys_addr;
        ev.state_change.log_addr_mask = adap->log_addrs.log_addr_mask;
        ev.state_change.have_conn_info =
                adap->conn_info.type != CEC_CONNECTOR_TYPE_NO_CONNECTOR;
        cec_queue_event_fh(fh, &ev, 0);
}

When userspace opens a CEC device node while adap->log_addrs.flags has
CEC_LOG_ADDRS_FL_EDID_PRESENT set and dequeues the initial state event via
CEC_DQEVENT, ev.flags will be missing CEC_EVENT_FL_STATE_EDID_PRESENT.

Also note that under CONFIG_CEC_PIN, cec_open() reuses the same ev variable
to queue initial CEC_EVENT_PIN_HPD_HIGH/LOW and CEC_EVENT_PIN_5V_HIGH/LOW
events, so if CEC_EVENT_FL_STATE_EDID_PRESENT is set on ev.flags for the
initial state change event, it would need to be cleared before queueing the
pin events.

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=12

Reply via email to