dt-bindings: ata: sata_rcar: Add r8a774b1 support
[platform/kernel/linux-starfive.git] / include / media / cec.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * cec - HDMI Consumer Electronics Control support header
4  *
5  * Copyright 2016 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6  */
7
8 #ifndef _MEDIA_CEC_H
9 #define _MEDIA_CEC_H
10
11 #include <linux/poll.h>
12 #include <linux/fs.h>
13 #include <linux/debugfs.h>
14 #include <linux/device.h>
15 #include <linux/cdev.h>
16 #include <linux/kthread.h>
17 #include <linux/timer.h>
18 #include <linux/cec-funcs.h>
19 #include <media/rc-core.h>
20
21 /* CEC_ADAP_G_CONNECTOR_INFO is available */
22 #define CEC_CAP_CONNECTOR_INFO  (1 << 8)
23
24 #define CEC_CAP_DEFAULTS (CEC_CAP_LOG_ADDRS | CEC_CAP_TRANSMIT | \
25                           CEC_CAP_PASSTHROUGH | CEC_CAP_RC)
26
27 /**
28  * struct cec_devnode - cec device node
29  * @dev:        cec device
30  * @cdev:       cec character device
31  * @minor:      device node minor number
32  * @registered: the device was correctly registered
33  * @unregistered: the device was unregistered
34  * @fhs_lock:   lock to control access to the filehandle list
35  * @fhs:        the list of open filehandles (cec_fh)
36  *
37  * This structure represents a cec-related device node.
38  *
39  * The @parent is a physical device. It must be set by core or device drivers
40  * before registering the node.
41  */
42 struct cec_devnode {
43         /* sysfs */
44         struct device dev;
45         struct cdev cdev;
46
47         /* device info */
48         int minor;
49         bool registered;
50         bool unregistered;
51         struct list_head fhs;
52         struct mutex lock;
53 };
54
55 struct cec_adapter;
56 struct cec_data;
57 struct cec_pin;
58 struct cec_notifier;
59
60 struct cec_data {
61         struct list_head list;
62         struct list_head xfer_list;
63         struct cec_adapter *adap;
64         struct cec_msg msg;
65         struct cec_fh *fh;
66         struct delayed_work work;
67         struct completion c;
68         u8 attempts;
69         bool blocking;
70         bool completed;
71 };
72
73 struct cec_msg_entry {
74         struct list_head        list;
75         struct cec_msg          msg;
76 };
77
78 struct cec_event_entry {
79         struct list_head        list;
80         struct cec_event        ev;
81 };
82
83 #define CEC_NUM_CORE_EVENTS 2
84 #define CEC_NUM_EVENTS CEC_EVENT_PIN_5V_HIGH
85
86 struct cec_fh {
87         struct list_head        list;
88         struct list_head        xfer_list;
89         struct cec_adapter      *adap;
90         u8                      mode_initiator;
91         u8                      mode_follower;
92
93         /* Events */
94         wait_queue_head_t       wait;
95         struct mutex            lock;
96         struct list_head        events[CEC_NUM_EVENTS]; /* queued events */
97         u16                     queued_events[CEC_NUM_EVENTS];
98         unsigned int            total_queued_events;
99         struct cec_event_entry  core_events[CEC_NUM_CORE_EVENTS];
100         struct list_head        msgs; /* queued messages */
101         unsigned int            queued_msgs;
102 };
103
104 #define CEC_SIGNAL_FREE_TIME_RETRY              3
105 #define CEC_SIGNAL_FREE_TIME_NEW_INITIATOR      5
106 #define CEC_SIGNAL_FREE_TIME_NEXT_XFER          7
107
108 /* The nominal data bit period is 2.4 ms */
109 #define CEC_FREE_TIME_TO_USEC(ft)               ((ft) * 2400)
110
111 struct cec_adap_ops {
112         /* Low-level callbacks */
113         int (*adap_enable)(struct cec_adapter *adap, bool enable);
114         int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable);
115         int (*adap_monitor_pin_enable)(struct cec_adapter *adap, bool enable);
116         int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr);
117         int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
118                              u32 signal_free_time, struct cec_msg *msg);
119         void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);
120         void (*adap_free)(struct cec_adapter *adap);
121
122         /* Error injection callbacks */
123         int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);
124         bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);
125
126         /* High-level CEC message callback */
127         int (*received)(struct cec_adapter *adap, struct cec_msg *msg);
128 };
129
130 /*
131  * The minimum message length you can receive (excepting poll messages) is 2.
132  * With a transfer rate of at most 36 bytes per second this makes 18 messages
133  * per second worst case.
134  *
135  * We queue at most 3 seconds worth of received messages. The CEC specification
136  * requires that messages are replied to within a second, so 3 seconds should
137  * give more than enough margin. Since most messages are actually more than 2
138  * bytes, this is in practice a lot more than 3 seconds.
139  */
140 #define CEC_MAX_MSG_RX_QUEUE_SZ         (18 * 3)
141
142 /*
143  * The transmit queue is limited to 1 second worth of messages (worst case).
144  * Messages can be transmitted by userspace and kernel space. But for both it
145  * makes no sense to have a lot of messages queued up. One second seems
146  * reasonable.
147  */
148 #define CEC_MAX_MSG_TX_QUEUE_SZ         (18 * 1)
149
150 /**
151  * struct cec_drm_connector_info - tells which drm connector is
152  * associated with the CEC adapter.
153  * @card_no: drm card number
154  * @connector_id: drm connector ID
155  */
156 struct cec_drm_connector_info {
157         __u32 card_no;
158         __u32 connector_id;
159 };
160
161 #define CEC_CONNECTOR_TYPE_NO_CONNECTOR 0
162 #define CEC_CONNECTOR_TYPE_DRM          1
163
164 /**
165  * struct cec_connector_info - tells if and which connector is
166  * associated with the CEC adapter.
167  * @type: connector type (if any)
168  * @drm: drm connector info
169  */
170 struct cec_connector_info {
171         __u32 type;
172         union {
173                 struct cec_drm_connector_info drm;
174                 __u32 raw[16];
175         };
176 };
177
178 struct cec_adapter {
179         struct module *owner;
180         char name[32];
181         struct cec_devnode devnode;
182         struct mutex lock;
183         struct rc_dev *rc;
184
185         struct list_head transmit_queue;
186         unsigned int transmit_queue_sz;
187         struct list_head wait_queue;
188         struct cec_data *transmitting;
189         bool transmit_in_progress;
190
191         struct task_struct *kthread_config;
192         struct completion config_completion;
193
194         struct task_struct *kthread;
195         wait_queue_head_t kthread_waitq;
196         wait_queue_head_t waitq;
197
198         const struct cec_adap_ops *ops;
199         void *priv;
200         u32 capabilities;
201         u8 available_log_addrs;
202
203         u16 phys_addr;
204         bool needs_hpd;
205         bool is_configuring;
206         bool is_configured;
207         bool cec_pin_is_high;
208         u8 last_initiator;
209         u32 monitor_all_cnt;
210         u32 monitor_pin_cnt;
211         u32 follower_cnt;
212         struct cec_fh *cec_follower;
213         struct cec_fh *cec_initiator;
214         bool passthrough;
215         struct cec_log_addrs log_addrs;
216         struct cec_connector_info conn_info;
217
218         u32 tx_timeouts;
219
220 #ifdef CONFIG_CEC_NOTIFIER
221         struct cec_notifier *notifier;
222 #endif
223 #ifdef CONFIG_CEC_PIN
224         struct cec_pin *pin;
225 #endif
226
227         struct dentry *cec_dir;
228         struct dentry *status_file;
229         struct dentry *error_inj_file;
230
231         u16 phys_addrs[15];
232         u32 sequence;
233
234         char input_phys[32];
235 };
236
237 static inline void *cec_get_drvdata(const struct cec_adapter *adap)
238 {
239         return adap->priv;
240 }
241
242 static inline bool cec_has_log_addr(const struct cec_adapter *adap, u8 log_addr)
243 {
244         return adap->log_addrs.log_addr_mask & (1 << log_addr);
245 }
246
247 static inline bool cec_is_sink(const struct cec_adapter *adap)
248 {
249         return adap->phys_addr == 0;
250 }
251
252 /**
253  * cec_is_registered() - is the CEC adapter registered?
254  *
255  * @adap:       the CEC adapter, may be NULL.
256  *
257  * Return: true if the adapter is registered, false otherwise.
258  */
259 static inline bool cec_is_registered(const struct cec_adapter *adap)
260 {
261         return adap && adap->devnode.registered;
262 }
263
264 #define cec_phys_addr_exp(pa) \
265         ((pa) >> 12), ((pa) >> 8) & 0xf, ((pa) >> 4) & 0xf, (pa) & 0xf
266
267 struct edid;
268 struct drm_connector;
269
270 #if IS_REACHABLE(CONFIG_CEC_CORE)
271 struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
272                 void *priv, const char *name, u32 caps, u8 available_las);
273 int cec_register_adapter(struct cec_adapter *adap, struct device *parent);
274 void cec_unregister_adapter(struct cec_adapter *adap);
275 void cec_delete_adapter(struct cec_adapter *adap);
276
277 int cec_s_log_addrs(struct cec_adapter *adap, struct cec_log_addrs *log_addrs,
278                     bool block);
279 void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr,
280                      bool block);
281 void cec_s_phys_addr_from_edid(struct cec_adapter *adap,
282                                const struct edid *edid);
283 void cec_s_conn_info(struct cec_adapter *adap,
284                      const struct cec_connector_info *conn_info);
285 int cec_transmit_msg(struct cec_adapter *adap, struct cec_msg *msg,
286                      bool block);
287
288 /* Called by the adapter */
289 void cec_transmit_done_ts(struct cec_adapter *adap, u8 status,
290                           u8 arb_lost_cnt, u8 nack_cnt, u8 low_drive_cnt,
291                           u8 error_cnt, ktime_t ts);
292
293 static inline void cec_transmit_done(struct cec_adapter *adap, u8 status,
294                                      u8 arb_lost_cnt, u8 nack_cnt,
295                                      u8 low_drive_cnt, u8 error_cnt)
296 {
297         cec_transmit_done_ts(adap, status, arb_lost_cnt, nack_cnt,
298                              low_drive_cnt, error_cnt, ktime_get());
299 }
300 /*
301  * Simplified version of cec_transmit_done for hardware that doesn't retry
302  * failed transmits. So this is always just one attempt in which case
303  * the status is sufficient.
304  */
305 void cec_transmit_attempt_done_ts(struct cec_adapter *adap,
306                                   u8 status, ktime_t ts);
307
308 static inline void cec_transmit_attempt_done(struct cec_adapter *adap,
309                                              u8 status)
310 {
311         cec_transmit_attempt_done_ts(adap, status, ktime_get());
312 }
313
314 void cec_received_msg_ts(struct cec_adapter *adap,
315                          struct cec_msg *msg, ktime_t ts);
316
317 static inline void cec_received_msg(struct cec_adapter *adap,
318                                     struct cec_msg *msg)
319 {
320         cec_received_msg_ts(adap, msg, ktime_get());
321 }
322
323 /**
324  * cec_queue_pin_cec_event() - queue a CEC pin event with a given timestamp.
325  *
326  * @adap:       pointer to the cec adapter
327  * @is_high:    when true the CEC pin is high, otherwise it is low
328  * @dropped_events: when true some events were dropped
329  * @ts:         the timestamp for this event
330  *
331  */
332 void cec_queue_pin_cec_event(struct cec_adapter *adap, bool is_high,
333                              bool dropped_events, ktime_t ts);
334
335 /**
336  * cec_queue_pin_hpd_event() - queue a pin event with a given timestamp.
337  *
338  * @adap:       pointer to the cec adapter
339  * @is_high:    when true the HPD pin is high, otherwise it is low
340  * @ts:         the timestamp for this event
341  *
342  */
343 void cec_queue_pin_hpd_event(struct cec_adapter *adap, bool is_high, ktime_t ts);
344
345 /**
346  * cec_queue_pin_5v_event() - queue a pin event with a given timestamp.
347  *
348  * @adap:       pointer to the cec adapter
349  * @is_high:    when true the 5V pin is high, otherwise it is low
350  * @ts:         the timestamp for this event
351  *
352  */
353 void cec_queue_pin_5v_event(struct cec_adapter *adap, bool is_high, ktime_t ts);
354
355 /**
356  * cec_get_edid_phys_addr() - find and return the physical address
357  *
358  * @edid:       pointer to the EDID data
359  * @size:       size in bytes of the EDID data
360  * @offset:     If not %NULL then the location of the physical address
361  *              bytes in the EDID will be returned here. This is set to 0
362  *              if there is no physical address found.
363  *
364  * Return: the physical address or CEC_PHYS_ADDR_INVALID if there is none.
365  */
366 u16 cec_get_edid_phys_addr(const u8 *edid, unsigned int size,
367                            unsigned int *offset);
368
369 void cec_fill_conn_info_from_drm(struct cec_connector_info *conn_info,
370                                  const struct drm_connector *connector);
371
372 #else
373
374 static inline int cec_register_adapter(struct cec_adapter *adap,
375                                        struct device *parent)
376 {
377         return 0;
378 }
379
380 static inline void cec_unregister_adapter(struct cec_adapter *adap)
381 {
382 }
383
384 static inline void cec_delete_adapter(struct cec_adapter *adap)
385 {
386 }
387
388 static inline void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr,
389                                    bool block)
390 {
391 }
392
393 static inline void cec_s_phys_addr_from_edid(struct cec_adapter *adap,
394                                              const struct edid *edid)
395 {
396 }
397
398 static inline u16 cec_get_edid_phys_addr(const u8 *edid, unsigned int size,
399                                          unsigned int *offset)
400 {
401         if (offset)
402                 *offset = 0;
403         return CEC_PHYS_ADDR_INVALID;
404 }
405
406 static inline void cec_s_conn_info(struct cec_adapter *adap,
407                                    const struct cec_connector_info *conn_info)
408 {
409 }
410
411 static inline void
412 cec_fill_conn_info_from_drm(struct cec_connector_info *conn_info,
413                             const struct drm_connector *connector)
414 {
415         memset(conn_info, 0, sizeof(*conn_info));
416 }
417
418 #endif
419
420 #if IS_REACHABLE(CONFIG_CEC_CORE) && IS_ENABLED(CONFIG_CEC_NOTIFIER)
421
422 /**
423  * cec_notifier_register - register a callback with the notifier
424  * @n: the CEC notifier
425  * @adap: the CEC adapter, passed as argument to the callback function
426  * @callback: the callback function
427  */
428 void cec_notifier_register(struct cec_notifier *n,
429                            struct cec_adapter *adap,
430                            void (*callback)(struct cec_adapter *adap, u16 pa));
431
432 /**
433  * cec_notifier_unregister - unregister the callback from the notifier.
434  * @n: the CEC notifier
435  */
436 void cec_notifier_unregister(struct cec_notifier *n);
437
438 /**
439  * cec_register_cec_notifier - register the notifier with the cec adapter.
440  * @adap: the CEC adapter
441  * @notifier: the CEC notifier
442  */
443 void cec_register_cec_notifier(struct cec_adapter *adap,
444                                struct cec_notifier *notifier);
445
446 #else
447
448 static inline void
449 cec_notifier_register(struct cec_notifier *n,
450                       struct cec_adapter *adap,
451                       void (*callback)(struct cec_adapter *adap, u16 pa))
452 {
453 }
454
455 static inline void cec_notifier_unregister(struct cec_notifier *n)
456 {
457 }
458
459 static inline void cec_register_cec_notifier(struct cec_adapter *adap,
460                                              struct cec_notifier *notifier)
461 {
462 }
463
464 #endif
465
466 /**
467  * cec_phys_addr_invalidate() - set the physical address to INVALID
468  *
469  * @adap:       the CEC adapter
470  *
471  * This is a simple helper function to invalidate the physical
472  * address.
473  */
474 static inline void cec_phys_addr_invalidate(struct cec_adapter *adap)
475 {
476         cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false);
477 }
478
479 /**
480  * cec_get_edid_spa_location() - find location of the Source Physical Address
481  *
482  * @edid: the EDID
483  * @size: the size of the EDID
484  *
485  * This EDID is expected to be a CEA-861 compliant, which means that there are
486  * at least two blocks and one or more of the extensions blocks are CEA-861
487  * blocks.
488  *
489  * The returned location is guaranteed to be <= size-2.
490  *
491  * This is an inline function since it is used by both CEC and V4L2.
492  * Ideally this would go in a module shared by both, but it is overkill to do
493  * that for just a single function.
494  */
495 static inline unsigned int cec_get_edid_spa_location(const u8 *edid,
496                                                      unsigned int size)
497 {
498         unsigned int blocks = size / 128;
499         unsigned int block;
500         u8 d;
501
502         /* Sanity check: at least 2 blocks and a multiple of the block size */
503         if (blocks < 2 || size % 128)
504                 return 0;
505
506         /*
507          * If there are fewer extension blocks than the size, then update
508          * 'blocks'. It is allowed to have more extension blocks than the size,
509          * since some hardware can only read e.g. 256 bytes of the EDID, even
510          * though more blocks are present. The first CEA-861 extension block
511          * should normally be in block 1 anyway.
512          */
513         if (edid[0x7e] + 1 < blocks)
514                 blocks = edid[0x7e] + 1;
515
516         for (block = 1; block < blocks; block++) {
517                 unsigned int offset = block * 128;
518
519                 /* Skip any non-CEA-861 extension blocks */
520                 if (edid[offset] != 0x02 || edid[offset + 1] != 0x03)
521                         continue;
522
523                 /* search Vendor Specific Data Block (tag 3) */
524                 d = edid[offset + 2] & 0x7f;
525                 /* Check if there are Data Blocks */
526                 if (d <= 4)
527                         continue;
528                 if (d > 4) {
529                         unsigned int i = offset + 4;
530                         unsigned int end = offset + d;
531
532                         /* Note: 'end' is always < 'size' */
533                         do {
534                                 u8 tag = edid[i] >> 5;
535                                 u8 len = edid[i] & 0x1f;
536
537                                 if (tag == 3 && len >= 5 && i + len <= end &&
538                                     edid[i + 1] == 0x03 &&
539                                     edid[i + 2] == 0x0c &&
540                                     edid[i + 3] == 0x00)
541                                         return i + 4;
542                                 i += len + 1;
543                         } while (i < end);
544                 }
545         }
546         return 0;
547 }
548
549 #endif /* _MEDIA_CEC_H */