| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| /* |
| * Copyright 2021-2024 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
| */ |
| |
| #ifndef _CEC_SPLITTER_H_ |
| #define _CEC_SPLITTER_H_ |
| |
| struct cec_splitter; |
| |
| #define STATE_CHANGE_MAX_REPEATS 2 |
| |
| struct cec_splitter_port { |
| struct cec_splitter *splitter; |
| struct cec_adapter *adap; |
| unsigned int port; |
| bool is_active_source; |
| bool found_sink; |
| ktime_t lost_sink_ts; |
| u32 out_request_current_latency_seq; |
| ktime_t out_request_current_latency_ts; |
| u8 video_latency; |
| u32 out_give_device_power_status_seq; |
| ktime_t out_give_device_power_status_ts; |
| u8 power_status; |
| }; |
| |
| struct cec_splitter { |
| struct device *dev; |
| unsigned int num_out_ports; |
| struct cec_splitter_port **ports; |
| |
| /* High-level splitter state */ |
| u8 request_current_latency_dest; |
| u8 give_device_power_status_dest; |
| bool is_standby; |
| }; |
| |
| void cec_splitter_unconfigured_output(struct cec_splitter_port *port); |
| void cec_splitter_configured_output(struct cec_splitter_port *port); |
| int cec_splitter_received_input(struct cec_splitter_port *port, struct cec_msg *msg); |
| int cec_splitter_received_output(struct cec_splitter_port *port, struct cec_msg *msg, |
| struct cec_adapter *input_adap); |
| void cec_splitter_nb_transmit_canceled_output(struct cec_splitter_port *port, |
| const struct cec_msg *msg, |
| struct cec_adapter *input_adap); |
| bool cec_splitter_poll(struct cec_splitter *splitter, |
| struct cec_adapter *input_adap, bool debug); |
| |
| #endif |