1
2
3
4
5
6
7
8#ifndef _CEC_UAPI_H
9#define _CEC_UAPI_H
10
11#include <linux/types.h>
12#include <linux/string.h>
13
14#define CEC_MAX_MSG_SIZE 16
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57struct cec_msg {
58 __u64 tx_ts;
59 __u64 rx_ts;
60 __u32 len;
61 __u32 timeout;
62 __u32 sequence;
63 __u32 flags;
64 __u8 msg[CEC_MAX_MSG_SIZE];
65 __u8 reply;
66 __u8 rx_status;
67 __u8 tx_status;
68 __u8 tx_arb_lost_cnt;
69 __u8 tx_nack_cnt;
70 __u8 tx_low_drive_cnt;
71 __u8 tx_error_cnt;
72};
73
74
75
76
77
78static inline __u8 cec_msg_initiator(const struct cec_msg *msg)
79{
80 return msg->msg[0] >> 4;
81}
82
83
84
85
86
87static inline __u8 cec_msg_destination(const struct cec_msg *msg)
88{
89 return msg->msg[0] & 0xf;
90}
91
92
93
94
95
96static inline int cec_msg_opcode(const struct cec_msg *msg)
97{
98 return msg->len > 1 ? msg->msg[1] : -1;
99}
100
101
102
103
104
105static inline int cec_msg_is_broadcast(const struct cec_msg *msg)
106{
107 return (msg->msg[0] & 0xf) == 0xf;
108}
109
110
111
112
113
114
115
116
117
118
119static inline void cec_msg_init(struct cec_msg *msg,
120 __u8 initiator, __u8 destination)
121{
122 memset(msg, 0, sizeof(*msg));
123 msg->msg[0] = (initiator << 4) | destination;
124 msg->len = 1;
125}
126
127
128
129
130
131
132
133
134
135
136static inline void cec_msg_set_reply_to(struct cec_msg *msg,
137 struct cec_msg *orig)
138{
139
140 msg->msg[0] = (cec_msg_destination(orig) << 4) |
141 cec_msg_initiator(orig);
142 msg->reply = msg->timeout = 0;
143}
144
145
146#define CEC_MSG_FL_REPLY_TO_FOLLOWERS (1 << 0)
147#define CEC_MSG_FL_RAW (1 << 1)
148
149
150#define CEC_TX_STATUS_OK (1 << 0)
151#define CEC_TX_STATUS_ARB_LOST (1 << 1)
152#define CEC_TX_STATUS_NACK (1 << 2)
153#define CEC_TX_STATUS_LOW_DRIVE (1 << 3)
154#define CEC_TX_STATUS_ERROR (1 << 4)
155#define CEC_TX_STATUS_MAX_RETRIES (1 << 5)
156#define CEC_TX_STATUS_ABORTED (1 << 6)
157#define CEC_TX_STATUS_TIMEOUT (1 << 7)
158
159#define CEC_RX_STATUS_OK (1 << 0)
160#define CEC_RX_STATUS_TIMEOUT (1 << 1)
161#define CEC_RX_STATUS_FEATURE_ABORT (1 << 2)
162#define CEC_RX_STATUS_ABORTED (1 << 3)
163
164static inline int cec_msg_status_is_ok(const struct cec_msg *msg)
165{
166 if (msg->tx_status && !(msg->tx_status & CEC_TX_STATUS_OK))
167 return 0;
168 if (msg->rx_status && !(msg->rx_status & CEC_RX_STATUS_OK))
169 return 0;
170 if (!msg->tx_status && !msg->rx_status)
171 return 0;
172 return !(msg->rx_status & CEC_RX_STATUS_FEATURE_ABORT);
173}
174
175#define CEC_LOG_ADDR_INVALID 0xff
176#define CEC_PHYS_ADDR_INVALID 0xffff
177
178
179
180
181
182
183#define CEC_MAX_LOG_ADDRS 4
184
185
186#define CEC_LOG_ADDR_TV 0
187#define CEC_LOG_ADDR_RECORD_1 1
188#define CEC_LOG_ADDR_RECORD_2 2
189#define CEC_LOG_ADDR_TUNER_1 3
190#define CEC_LOG_ADDR_PLAYBACK_1 4
191#define CEC_LOG_ADDR_AUDIOSYSTEM 5
192#define CEC_LOG_ADDR_TUNER_2 6
193#define CEC_LOG_ADDR_TUNER_3 7
194#define CEC_LOG_ADDR_PLAYBACK_2 8
195#define CEC_LOG_ADDR_RECORD_3 9
196#define CEC_LOG_ADDR_TUNER_4 10
197#define CEC_LOG_ADDR_PLAYBACK_3 11
198#define CEC_LOG_ADDR_BACKUP_1 12
199#define CEC_LOG_ADDR_BACKUP_2 13
200#define CEC_LOG_ADDR_SPECIFIC 14
201#define CEC_LOG_ADDR_UNREGISTERED 15
202#define CEC_LOG_ADDR_BROADCAST 15
203
204
205#define CEC_LOG_ADDR_TYPE_TV 0
206#define CEC_LOG_ADDR_TYPE_RECORD 1
207#define CEC_LOG_ADDR_TYPE_TUNER 2
208#define CEC_LOG_ADDR_TYPE_PLAYBACK 3
209#define CEC_LOG_ADDR_TYPE_AUDIOSYSTEM 4
210#define CEC_LOG_ADDR_TYPE_SPECIFIC 5
211#define CEC_LOG_ADDR_TYPE_UNREGISTERED 6
212
213
214
215
216
217#define CEC_LOG_ADDR_MASK_TV (1 << CEC_LOG_ADDR_TV)
218#define CEC_LOG_ADDR_MASK_RECORD ((1 << CEC_LOG_ADDR_RECORD_1) | \
219 (1 << CEC_LOG_ADDR_RECORD_2) | \
220 (1 << CEC_LOG_ADDR_RECORD_3))
221#define CEC_LOG_ADDR_MASK_TUNER ((1 << CEC_LOG_ADDR_TUNER_1) | \
222 (1 << CEC_LOG_ADDR_TUNER_2) | \
223 (1 << CEC_LOG_ADDR_TUNER_3) | \
224 (1 << CEC_LOG_ADDR_TUNER_4))
225#define CEC_LOG_ADDR_MASK_PLAYBACK ((1 << CEC_LOG_ADDR_PLAYBACK_1) | \
226 (1 << CEC_LOG_ADDR_PLAYBACK_2) | \
227 (1 << CEC_LOG_ADDR_PLAYBACK_3))
228#define CEC_LOG_ADDR_MASK_AUDIOSYSTEM (1 << CEC_LOG_ADDR_AUDIOSYSTEM)
229#define CEC_LOG_ADDR_MASK_BACKUP ((1 << CEC_LOG_ADDR_BACKUP_1) | \
230 (1 << CEC_LOG_ADDR_BACKUP_2))
231#define CEC_LOG_ADDR_MASK_SPECIFIC (1 << CEC_LOG_ADDR_SPECIFIC)
232#define CEC_LOG_ADDR_MASK_UNREGISTERED (1 << CEC_LOG_ADDR_UNREGISTERED)
233
234static inline int cec_has_tv(__u16 log_addr_mask)
235{
236 return log_addr_mask & CEC_LOG_ADDR_MASK_TV;
237}
238
239static inline int cec_has_record(__u16 log_addr_mask)
240{
241 return log_addr_mask & CEC_LOG_ADDR_MASK_RECORD;
242}
243
244static inline int cec_has_tuner(__u16 log_addr_mask)
245{
246 return log_addr_mask & CEC_LOG_ADDR_MASK_TUNER;
247}
248
249static inline int cec_has_playback(__u16 log_addr_mask)
250{
251 return log_addr_mask & CEC_LOG_ADDR_MASK_PLAYBACK;
252}
253
254static inline int cec_has_audiosystem(__u16 log_addr_mask)
255{
256 return log_addr_mask & CEC_LOG_ADDR_MASK_AUDIOSYSTEM;
257}
258
259static inline int cec_has_backup(__u16 log_addr_mask)
260{
261 return log_addr_mask & CEC_LOG_ADDR_MASK_BACKUP;
262}
263
264static inline int cec_has_specific(__u16 log_addr_mask)
265{
266 return log_addr_mask & CEC_LOG_ADDR_MASK_SPECIFIC;
267}
268
269static inline int cec_is_unregistered(__u16 log_addr_mask)
270{
271 return log_addr_mask & CEC_LOG_ADDR_MASK_UNREGISTERED;
272}
273
274static inline int cec_is_unconfigured(__u16 log_addr_mask)
275{
276 return log_addr_mask == 0;
277}
278
279
280
281
282
283#define CEC_VENDOR_ID_NONE 0xffffffff
284
285
286
287#define CEC_MODE_NO_INITIATOR (0x0 << 0)
288#define CEC_MODE_INITIATOR (0x1 << 0)
289#define CEC_MODE_EXCL_INITIATOR (0x2 << 0)
290#define CEC_MODE_INITIATOR_MSK 0x0f
291
292
293#define CEC_MODE_NO_FOLLOWER (0x0 << 4)
294#define CEC_MODE_FOLLOWER (0x1 << 4)
295#define CEC_MODE_EXCL_FOLLOWER (0x2 << 4)
296#define CEC_MODE_EXCL_FOLLOWER_PASSTHRU (0x3 << 4)
297#define CEC_MODE_MONITOR_PIN (0xd << 4)
298#define CEC_MODE_MONITOR (0xe << 4)
299#define CEC_MODE_MONITOR_ALL (0xf << 4)
300#define CEC_MODE_FOLLOWER_MSK 0xf0
301
302
303#define CEC_CAP_PHYS_ADDR (1 << 0)
304
305#define CEC_CAP_LOG_ADDRS (1 << 1)
306
307#define CEC_CAP_TRANSMIT (1 << 2)
308
309
310
311#define CEC_CAP_PASSTHROUGH (1 << 3)
312
313#define CEC_CAP_RC (1 << 4)
314
315#define CEC_CAP_MONITOR_ALL (1 << 5)
316
317#define CEC_CAP_NEEDS_HPD (1 << 6)
318
319#define CEC_CAP_MONITOR_PIN (1 << 7)
320
321#define CEC_CAP_CONNECTOR_INFO (1 << 8)
322
323
324
325
326
327
328
329
330
331struct cec_caps {
332 char driver[32];
333 char name[32];
334 __u32 available_log_addrs;
335 __u32 capabilities;
336 __u32 version;
337};
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357struct cec_log_addrs {
358 __u8 log_addr[CEC_MAX_LOG_ADDRS];
359 __u16 log_addr_mask;
360 __u8 cec_version;
361 __u8 num_log_addrs;
362 __u32 vendor_id;
363 __u32 flags;
364 char osd_name[15];
365 __u8 primary_device_type[CEC_MAX_LOG_ADDRS];
366 __u8 log_addr_type[CEC_MAX_LOG_ADDRS];
367
368
369 __u8 all_device_types[CEC_MAX_LOG_ADDRS];
370 __u8 features[CEC_MAX_LOG_ADDRS][12];
371};
372
373
374#define CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK (1 << 0)
375
376#define CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU (1 << 1)
377
378#define CEC_LOG_ADDRS_FL_CDC_ONLY (1 << 2)
379
380
381
382
383
384
385
386struct cec_drm_connector_info {
387 __u32 card_no;
388 __u32 connector_id;
389};
390
391#define CEC_CONNECTOR_TYPE_NO_CONNECTOR 0
392#define CEC_CONNECTOR_TYPE_DRM 1
393
394
395
396
397
398
399
400
401struct cec_connector_info {
402 __u32 type;
403 union {
404 struct cec_drm_connector_info drm;
405 __u32 raw[16];
406 };
407};
408
409
410
411
412#define CEC_EVENT_STATE_CHANGE 1
413
414
415
416
417#define CEC_EVENT_LOST_MSGS 2
418#define CEC_EVENT_PIN_CEC_LOW 3
419#define CEC_EVENT_PIN_CEC_HIGH 4
420#define CEC_EVENT_PIN_HPD_LOW 5
421#define CEC_EVENT_PIN_HPD_HIGH 6
422#define CEC_EVENT_PIN_5V_LOW 7
423#define CEC_EVENT_PIN_5V_HIGH 8
424
425#define CEC_EVENT_FL_INITIAL_STATE (1 << 0)
426#define CEC_EVENT_FL_DROPPED_EVENTS (1 << 1)
427
428
429
430
431
432
433
434
435
436
437
438
439struct cec_event_state_change {
440 __u16 phys_addr;
441 __u16 log_addr_mask;
442 __u16 have_conn_info;
443};
444
445
446
447
448
449struct cec_event_lost_msgs {
450 __u32 lost_msgs;
451};
452
453
454
455
456
457
458
459
460
461
462struct cec_event {
463 __u64 ts;
464 __u32 event;
465 __u32 flags;
466 union {
467 struct cec_event_state_change state_change;
468 struct cec_event_lost_msgs lost_msgs;
469 __u32 raw[16];
470 };
471};
472
473
474
475
476#define CEC_ADAP_G_CAPS _IOWR('a', 0, struct cec_caps)
477
478
479
480
481
482
483
484
485
486
487
488
489
490#define CEC_ADAP_G_PHYS_ADDR _IOR('a', 1, __u16)
491#define CEC_ADAP_S_PHYS_ADDR _IOW('a', 2, __u16)
492
493
494
495
496
497
498
499
500
501#define CEC_ADAP_G_LOG_ADDRS _IOR('a', 3, struct cec_log_addrs)
502#define CEC_ADAP_S_LOG_ADDRS _IOWR('a', 4, struct cec_log_addrs)
503
504
505#define CEC_TRANSMIT _IOWR('a', 5, struct cec_msg)
506#define CEC_RECEIVE _IOWR('a', 6, struct cec_msg)
507
508
509#define CEC_DQEVENT _IOWR('a', 7, struct cec_event)
510
511
512
513
514#define CEC_G_MODE _IOR('a', 8, __u32)
515#define CEC_S_MODE _IOW('a', 9, __u32)
516
517
518#define CEC_ADAP_G_CONNECTOR_INFO _IOR('a', 10, struct cec_connector_info)
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538#define CEC_MSG_ACTIVE_SOURCE 0x82
539#define CEC_MSG_IMAGE_VIEW_ON 0x04
540#define CEC_MSG_TEXT_VIEW_ON 0x0d
541
542
543
544
545
546
547
548
549
550#define CEC_MSG_INACTIVE_SOURCE 0x9d
551#define CEC_MSG_REQUEST_ACTIVE_SOURCE 0x85
552#define CEC_MSG_ROUTING_CHANGE 0x80
553#define CEC_MSG_ROUTING_INFORMATION 0x81
554#define CEC_MSG_SET_STREAM_PATH 0x86
555
556
557
558#define CEC_MSG_STANDBY 0x36
559
560
561
562#define CEC_MSG_RECORD_OFF 0x0b
563#define CEC_MSG_RECORD_ON 0x09
564
565#define CEC_OP_RECORD_SRC_OWN 1
566#define CEC_OP_RECORD_SRC_DIGITAL 2
567#define CEC_OP_RECORD_SRC_ANALOG 3
568#define CEC_OP_RECORD_SRC_EXT_PLUG 4
569#define CEC_OP_RECORD_SRC_EXT_PHYS_ADDR 5
570
571#define CEC_OP_SERVICE_ID_METHOD_BY_DIG_ID 0
572#define CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL 1
573
574#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_GEN 0x00
575#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_GEN 0x01
576#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_GEN 0x02
577#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_BS 0x08
578#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_CS 0x09
579#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_T 0x0a
580#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_CABLE 0x10
581#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_SAT 0x11
582#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_T 0x12
583#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_C 0x18
584#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S 0x19
585#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S2 0x1a
586#define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_T 0x1b
587
588#define CEC_OP_ANA_BCAST_TYPE_CABLE 0
589#define CEC_OP_ANA_BCAST_TYPE_SATELLITE 1
590#define CEC_OP_ANA_BCAST_TYPE_TERRESTRIAL 2
591
592#define CEC_OP_BCAST_SYSTEM_PAL_BG 0x00
593#define CEC_OP_BCAST_SYSTEM_SECAM_LQ 0x01
594#define CEC_OP_BCAST_SYSTEM_PAL_M 0x02
595#define CEC_OP_BCAST_SYSTEM_NTSC_M 0x03
596#define CEC_OP_BCAST_SYSTEM_PAL_I 0x04
597#define CEC_OP_BCAST_SYSTEM_SECAM_DK 0x05
598#define CEC_OP_BCAST_SYSTEM_SECAM_BG 0x06
599#define CEC_OP_BCAST_SYSTEM_SECAM_L 0x07
600#define CEC_OP_BCAST_SYSTEM_PAL_DK 0x08
601#define CEC_OP_BCAST_SYSTEM_OTHER 0x1f
602
603#define CEC_OP_CHANNEL_NUMBER_FMT_1_PART 0x01
604#define CEC_OP_CHANNEL_NUMBER_FMT_2_PART 0x02
605
606#define CEC_MSG_RECORD_STATUS 0x0a
607
608#define CEC_OP_RECORD_STATUS_CUR_SRC 0x01
609#define CEC_OP_RECORD_STATUS_DIG_SERVICE 0x02
610#define CEC_OP_RECORD_STATUS_ANA_SERVICE 0x03
611#define CEC_OP_RECORD_STATUS_EXT_INPUT 0x04
612#define CEC_OP_RECORD_STATUS_NO_DIG_SERVICE 0x05
613#define CEC_OP_RECORD_STATUS_NO_ANA_SERVICE 0x06
614#define CEC_OP_RECORD_STATUS_NO_SERVICE 0x07
615#define CEC_OP_RECORD_STATUS_INVALID_EXT_PLUG 0x09
616#define CEC_OP_RECORD_STATUS_INVALID_EXT_PHYS_ADDR 0x0a
617#define CEC_OP_RECORD_STATUS_UNSUP_CA 0x0b
618#define CEC_OP_RECORD_STATUS_NO_CA_ENTITLEMENTS 0x0c
619#define CEC_OP_RECORD_STATUS_CANT_COPY_SRC 0x0d
620#define CEC_OP_RECORD_STATUS_NO_MORE_COPIES 0x0e
621#define CEC_OP_RECORD_STATUS_NO_MEDIA 0x10
622#define CEC_OP_RECORD_STATUS_PLAYING 0x11
623#define CEC_OP_RECORD_STATUS_ALREADY_RECORDING 0x12
624#define CEC_OP_RECORD_STATUS_MEDIA_PROT 0x13
625#define CEC_OP_RECORD_STATUS_NO_SIGNAL 0x14
626#define CEC_OP_RECORD_STATUS_MEDIA_PROBLEM 0x15
627#define CEC_OP_RECORD_STATUS_NO_SPACE 0x16
628#define CEC_OP_RECORD_STATUS_PARENTAL_LOCK 0x17
629#define CEC_OP_RECORD_STATUS_TERMINATED_OK 0x1a
630#define CEC_OP_RECORD_STATUS_ALREADY_TERM 0x1b
631#define CEC_OP_RECORD_STATUS_OTHER 0x1f
632
633#define CEC_MSG_RECORD_TV_SCREEN 0x0f
634
635
636
637#define CEC_MSG_CLEAR_ANALOGUE_TIMER 0x33
638
639#define CEC_OP_REC_SEQ_SUNDAY 0x01
640#define CEC_OP_REC_SEQ_MONDAY 0x02
641#define CEC_OP_REC_SEQ_TUESDAY 0x04
642#define CEC_OP_REC_SEQ_WEDNESDAY 0x08
643#define CEC_OP_REC_SEQ_THURSDAY 0x10
644#define CEC_OP_REC_SEQ_FRIDAY 0x20
645#define CEC_OP_REC_SEQ_SATURDAY 0x40
646#define CEC_OP_REC_SEQ_ONCE_ONLY 0x00
647
648#define CEC_MSG_CLEAR_DIGITAL_TIMER 0x99
649
650#define CEC_MSG_CLEAR_EXT_TIMER 0xa1
651
652#define CEC_OP_EXT_SRC_PLUG 0x04
653#define CEC_OP_EXT_SRC_PHYS_ADDR 0x05
654
655#define CEC_MSG_SET_ANALOGUE_TIMER 0x34
656#define CEC_MSG_SET_DIGITAL_TIMER 0x97
657#define CEC_MSG_SET_EXT_TIMER 0xa2
658
659#define CEC_MSG_SET_TIMER_PROGRAM_TITLE 0x67
660#define CEC_MSG_TIMER_CLEARED_STATUS 0x43
661
662#define CEC_OP_TIMER_CLR_STAT_RECORDING 0x00
663#define CEC_OP_TIMER_CLR_STAT_NO_MATCHING 0x01
664#define CEC_OP_TIMER_CLR_STAT_NO_INFO 0x02
665#define CEC_OP_TIMER_CLR_STAT_CLEARED 0x80
666
667#define CEC_MSG_TIMER_STATUS 0x35
668
669#define CEC_OP_TIMER_OVERLAP_WARNING_NO_OVERLAP 0
670#define CEC_OP_TIMER_OVERLAP_WARNING_OVERLAP 1
671
672#define CEC_OP_MEDIA_INFO_UNPROT_MEDIA 0
673#define CEC_OP_MEDIA_INFO_PROT_MEDIA 1
674#define CEC_OP_MEDIA_INFO_NO_MEDIA 2
675
676#define CEC_OP_PROG_IND_NOT_PROGRAMMED 0
677#define CEC_OP_PROG_IND_PROGRAMMED 1
678
679#define CEC_OP_PROG_INFO_ENOUGH_SPACE 0x08
680#define CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE 0x09
681#define CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE 0x0b
682#define CEC_OP_PROG_INFO_NONE_AVAILABLE 0x0a
683
684#define CEC_OP_PROG_ERROR_NO_FREE_TIMER 0x01
685#define CEC_OP_PROG_ERROR_DATE_OUT_OF_RANGE 0x02
686#define CEC_OP_PROG_ERROR_REC_SEQ_ERROR 0x03
687#define CEC_OP_PROG_ERROR_INV_EXT_PLUG 0x04
688#define CEC_OP_PROG_ERROR_INV_EXT_PHYS_ADDR 0x05
689#define CEC_OP_PROG_ERROR_CA_UNSUPP 0x06
690#define CEC_OP_PROG_ERROR_INSUF_CA_ENTITLEMENTS 0x07
691#define CEC_OP_PROG_ERROR_RESOLUTION_UNSUPP 0x08
692#define CEC_OP_PROG_ERROR_PARENTAL_LOCK 0x09
693#define CEC_OP_PROG_ERROR_CLOCK_FAILURE 0x0a
694#define CEC_OP_PROG_ERROR_DUPLICATE 0x0e
695
696
697
698#define CEC_MSG_CEC_VERSION 0x9e
699
700#define CEC_OP_CEC_VERSION_1_3A 4
701#define CEC_OP_CEC_VERSION_1_4 5
702#define CEC_OP_CEC_VERSION_2_0 6
703
704#define CEC_MSG_GET_CEC_VERSION 0x9f
705#define CEC_MSG_GIVE_PHYSICAL_ADDR 0x83
706#define CEC_MSG_GET_MENU_LANGUAGE 0x91
707#define CEC_MSG_REPORT_PHYSICAL_ADDR 0x84
708
709#define CEC_OP_PRIM_DEVTYPE_TV 0
710#define CEC_OP_PRIM_DEVTYPE_RECORD 1
711#define CEC_OP_PRIM_DEVTYPE_TUNER 3
712#define CEC_OP_PRIM_DEVTYPE_PLAYBACK 4
713#define CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM 5
714#define CEC_OP_PRIM_DEVTYPE_SWITCH 6
715#define CEC_OP_PRIM_DEVTYPE_PROCESSOR 7
716
717#define CEC_MSG_SET_MENU_LANGUAGE 0x32
718#define CEC_MSG_REPORT_FEATURES 0xa6
719
720#define CEC_OP_ALL_DEVTYPE_TV 0x80
721#define CEC_OP_ALL_DEVTYPE_RECORD 0x40
722#define CEC_OP_ALL_DEVTYPE_TUNER 0x20
723#define CEC_OP_ALL_DEVTYPE_PLAYBACK 0x10
724#define CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM 0x08
725#define CEC_OP_ALL_DEVTYPE_SWITCH 0x04
726
727
728
729
730
731
732#define CEC_OP_FEAT_EXT 0x80
733
734#define CEC_OP_FEAT_RC_TV_PROFILE_NONE 0x00
735#define CEC_OP_FEAT_RC_TV_PROFILE_1 0x02
736#define CEC_OP_FEAT_RC_TV_PROFILE_2 0x06
737#define CEC_OP_FEAT_RC_TV_PROFILE_3 0x0a
738#define CEC_OP_FEAT_RC_TV_PROFILE_4 0x0e
739#define CEC_OP_FEAT_RC_SRC_HAS_DEV_ROOT_MENU 0x50
740#define CEC_OP_FEAT_RC_SRC_HAS_DEV_SETUP_MENU 0x48
741#define CEC_OP_FEAT_RC_SRC_HAS_CONTENTS_MENU 0x44
742#define CEC_OP_FEAT_RC_SRC_HAS_MEDIA_TOP_MENU 0x42
743#define CEC_OP_FEAT_RC_SRC_HAS_MEDIA_CONTEXT_MENU 0x41
744
745#define CEC_OP_FEAT_DEV_HAS_RECORD_TV_SCREEN 0x40
746#define CEC_OP_FEAT_DEV_HAS_SET_OSD_STRING 0x20
747#define CEC_OP_FEAT_DEV_HAS_DECK_CONTROL 0x10
748#define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE 0x08
749#define CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX 0x04
750#define CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX 0x02
751
752#define CEC_MSG_GIVE_FEATURES 0xa5
753
754
755
756#define CEC_MSG_DECK_CONTROL 0x42
757
758#define CEC_OP_DECK_CTL_MODE_SKIP_FWD 1
759#define CEC_OP_DECK_CTL_MODE_SKIP_REV 2
760#define CEC_OP_DECK_CTL_MODE_STOP 3
761#define CEC_OP_DECK_CTL_MODE_EJECT 4
762
763#define CEC_MSG_DECK_STATUS 0x1b
764
765#define CEC_OP_DECK_INFO_PLAY 0x11
766#define CEC_OP_DECK_INFO_RECORD 0x12
767#define CEC_OP_DECK_INFO_PLAY_REV 0x13
768#define CEC_OP_DECK_INFO_STILL 0x14
769#define CEC_OP_DECK_INFO_SLOW 0x15
770#define CEC_OP_DECK_INFO_SLOW_REV 0x16
771#define CEC_OP_DECK_INFO_FAST_FWD 0x17
772#define CEC_OP_DECK_INFO_FAST_REV 0x18
773#define CEC_OP_DECK_INFO_NO_MEDIA 0x19
774#define CEC_OP_DECK_INFO_STOP 0x1a
775#define CEC_OP_DECK_INFO_SKIP_FWD 0x1b
776#define CEC_OP_DECK_INFO_SKIP_REV 0x1c
777#define CEC_OP_DECK_INFO_INDEX_SEARCH_FWD 0x1d
778#define CEC_OP_DECK_INFO_INDEX_SEARCH_REV 0x1e
779#define CEC_OP_DECK_INFO_OTHER 0x1f
780
781#define CEC_MSG_GIVE_DECK_STATUS 0x1a
782
783#define CEC_OP_STATUS_REQ_ON 1
784#define CEC_OP_STATUS_REQ_OFF 2
785#define CEC_OP_STATUS_REQ_ONCE 3
786
787#define CEC_MSG_PLAY 0x41
788
789#define CEC_OP_PLAY_MODE_PLAY_FWD 0x24
790#define CEC_OP_PLAY_MODE_PLAY_REV 0x20
791#define CEC_OP_PLAY_MODE_PLAY_STILL 0x25
792#define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MIN 0x05
793#define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MED 0x06
794#define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MAX 0x07
795#define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MIN 0x09
796#define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MED 0x0a
797#define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MAX 0x0b
798#define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MIN 0x15
799#define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MED 0x16
800#define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MAX 0x17
801#define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MIN 0x19
802#define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MED 0x1a
803#define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MAX 0x1b
804
805
806
807#define CEC_MSG_GIVE_TUNER_DEVICE_STATUS 0x08
808#define CEC_MSG_SELECT_ANALOGUE_SERVICE 0x92
809#define CEC_MSG_SELECT_DIGITAL_SERVICE 0x93
810#define CEC_MSG_TUNER_DEVICE_STATUS 0x07
811
812#define CEC_OP_REC_FLAG_NOT_USED 0
813#define CEC_OP_REC_FLAG_USED 1
814
815#define CEC_OP_TUNER_DISPLAY_INFO_DIGITAL 0
816#define CEC_OP_TUNER_DISPLAY_INFO_NONE 1
817#define CEC_OP_TUNER_DISPLAY_INFO_ANALOGUE 2
818
819#define CEC_MSG_TUNER_STEP_DECREMENT 0x06
820#define CEC_MSG_TUNER_STEP_INCREMENT 0x05
821
822
823
824
825
826
827
828
829
830#define CEC_MSG_DEVICE_VENDOR_ID 0x87
831#define CEC_MSG_GIVE_DEVICE_VENDOR_ID 0x8c
832#define CEC_MSG_VENDOR_COMMAND 0x89
833#define CEC_MSG_VENDOR_COMMAND_WITH_ID 0xa0
834#define CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN 0x8a
835#define CEC_MSG_VENDOR_REMOTE_BUTTON_UP 0x8b
836
837
838
839#define CEC_MSG_SET_OSD_STRING 0x64
840
841#define CEC_OP_DISP_CTL_DEFAULT 0x00
842#define CEC_OP_DISP_CTL_UNTIL_CLEARED 0x40
843#define CEC_OP_DISP_CTL_CLEAR 0x80
844
845
846
847#define CEC_MSG_GIVE_OSD_NAME 0x46
848#define CEC_MSG_SET_OSD_NAME 0x47
849
850
851
852#define CEC_MSG_MENU_REQUEST 0x8d
853
854#define CEC_OP_MENU_REQUEST_ACTIVATE 0x00
855#define CEC_OP_MENU_REQUEST_DEACTIVATE 0x01
856#define CEC_OP_MENU_REQUEST_QUERY 0x02
857
858#define CEC_MSG_MENU_STATUS 0x8e
859
860#define CEC_OP_MENU_STATE_ACTIVATED 0x00
861#define CEC_OP_MENU_STATE_DEACTIVATED 0x01
862
863#define CEC_MSG_USER_CONTROL_PRESSED 0x44
864
865#define CEC_OP_UI_CMD_SELECT 0x00
866#define CEC_OP_UI_CMD_UP 0x01
867#define CEC_OP_UI_CMD_DOWN 0x02
868#define CEC_OP_UI_CMD_LEFT 0x03
869#define CEC_OP_UI_CMD_RIGHT 0x04
870#define CEC_OP_UI_CMD_RIGHT_UP 0x05
871#define CEC_OP_UI_CMD_RIGHT_DOWN 0x06
872#define CEC_OP_UI_CMD_LEFT_UP 0x07
873#define CEC_OP_UI_CMD_LEFT_DOWN 0x08
874#define CEC_OP_UI_CMD_DEVICE_ROOT_MENU 0x09
875#define CEC_OP_UI_CMD_DEVICE_SETUP_MENU 0x0a
876#define CEC_OP_UI_CMD_CONTENTS_MENU 0x0b
877#define CEC_OP_UI_CMD_FAVORITE_MENU 0x0c
878#define CEC_OP_UI_CMD_BACK 0x0d
879#define CEC_OP_UI_CMD_MEDIA_TOP_MENU 0x10
880#define CEC_OP_UI_CMD_MEDIA_CONTEXT_SENSITIVE_MENU 0x11
881#define CEC_OP_UI_CMD_NUMBER_ENTRY_MODE 0x1d
882#define CEC_OP_UI_CMD_NUMBER_11 0x1e
883#define CEC_OP_UI_CMD_NUMBER_12 0x1f
884#define CEC_OP_UI_CMD_NUMBER_0_OR_NUMBER_10 0x20
885#define CEC_OP_UI_CMD_NUMBER_1 0x21
886#define CEC_OP_UI_CMD_NUMBER_2 0x22
887#define CEC_OP_UI_CMD_NUMBER_3 0x23
888#define CEC_OP_UI_CMD_NUMBER_4 0x24
889#define CEC_OP_UI_CMD_NUMBER_5 0x25
890#define CEC_OP_UI_CMD_NUMBER_6 0x26
891#define CEC_OP_UI_CMD_NUMBER_7 0x27
892#define CEC_OP_UI_CMD_NUMBER_8 0x28
893#define CEC_OP_UI_CMD_NUMBER_9 0x29
894#define CEC_OP_UI_CMD_DOT 0x2a
895#define CEC_OP_UI_CMD_ENTER 0x2b
896#define CEC_OP_UI_CMD_CLEAR 0x2c
897#define CEC_OP_UI_CMD_NEXT_FAVORITE 0x2f
898#define CEC_OP_UI_CMD_CHANNEL_UP 0x30
899#define CEC_OP_UI_CMD_CHANNEL_DOWN 0x31
900#define CEC_OP_UI_CMD_PREVIOUS_CHANNEL 0x32
901#define CEC_OP_UI_CMD_SOUND_SELECT 0x33
902#define CEC_OP_UI_CMD_INPUT_SELECT 0x34
903#define CEC_OP_UI_CMD_DISPLAY_INFORMATION 0x35
904#define CEC_OP_UI_CMD_HELP 0x36
905#define CEC_OP_UI_CMD_PAGE_UP 0x37
906#define CEC_OP_UI_CMD_PAGE_DOWN 0x38
907#define CEC_OP_UI_CMD_POWER 0x40
908#define CEC_OP_UI_CMD_VOLUME_UP 0x41
909#define CEC_OP_UI_CMD_VOLUME_DOWN 0x42
910#define CEC_OP_UI_CMD_MUTE 0x43
911#define CEC_OP_UI_CMD_PLAY 0x44
912#define CEC_OP_UI_CMD_STOP 0x45
913#define CEC_OP_UI_CMD_PAUSE 0x46
914#define CEC_OP_UI_CMD_RECORD 0x47
915#define CEC_OP_UI_CMD_REWIND 0x48
916#define CEC_OP_UI_CMD_FAST_FORWARD 0x49
917#define CEC_OP_UI_CMD_EJECT 0x4a
918#define CEC_OP_UI_CMD_SKIP_FORWARD 0x4b
919#define CEC_OP_UI_CMD_SKIP_BACKWARD 0x4c
920#define CEC_OP_UI_CMD_STOP_RECORD 0x4d
921#define CEC_OP_UI_CMD_PAUSE_RECORD 0x4e
922#define CEC_OP_UI_CMD_ANGLE 0x50
923#define CEC_OP_UI_CMD_SUB_PICTURE 0x51
924#define CEC_OP_UI_CMD_VIDEO_ON_DEMAND 0x52
925#define CEC_OP_UI_CMD_ELECTRONIC_PROGRAM_GUIDE 0x53
926#define CEC_OP_UI_CMD_TIMER_PROGRAMMING 0x54
927#define CEC_OP_UI_CMD_INITIAL_CONFIGURATION 0x55
928#define CEC_OP_UI_CMD_SELECT_BROADCAST_TYPE 0x56
929#define CEC_OP_UI_CMD_SELECT_SOUND_PRESENTATION 0x57
930#define CEC_OP_UI_CMD_AUDIO_DESCRIPTION 0x58
931#define CEC_OP_UI_CMD_INTERNET 0x59
932#define CEC_OP_UI_CMD_3D_MODE 0x5a
933#define CEC_OP_UI_CMD_PLAY_FUNCTION 0x60
934#define CEC_OP_UI_CMD_PAUSE_PLAY_FUNCTION 0x61
935#define CEC_OP_UI_CMD_RECORD_FUNCTION 0x62
936#define CEC_OP_UI_CMD_PAUSE_RECORD_FUNCTION 0x63
937#define CEC_OP_UI_CMD_STOP_FUNCTION 0x64
938#define CEC_OP_UI_CMD_MUTE_FUNCTION 0x65
939#define CEC_OP_UI_CMD_RESTORE_VOLUME_FUNCTION 0x66
940#define CEC_OP_UI_CMD_TUNE_FUNCTION 0x67
941#define CEC_OP_UI_CMD_SELECT_MEDIA_FUNCTION 0x68
942#define CEC_OP_UI_CMD_SELECT_AV_INPUT_FUNCTION 0x69
943#define CEC_OP_UI_CMD_SELECT_AUDIO_INPUT_FUNCTION 0x6a
944#define CEC_OP_UI_CMD_POWER_TOGGLE_FUNCTION 0x6b
945#define CEC_OP_UI_CMD_POWER_OFF_FUNCTION 0x6c
946#define CEC_OP_UI_CMD_POWER_ON_FUNCTION 0x6d
947#define CEC_OP_UI_CMD_F1_BLUE 0x71
948#define CEC_OP_UI_CMD_F2_RED 0x72
949#define CEC_OP_UI_CMD_F3_GREEN 0x73
950#define CEC_OP_UI_CMD_F4_YELLOW 0x74
951#define CEC_OP_UI_CMD_F5 0x75
952#define CEC_OP_UI_CMD_DATA 0x76
953
954#define CEC_OP_UI_BCAST_TYPE_TOGGLE_ALL 0x00
955#define CEC_OP_UI_BCAST_TYPE_TOGGLE_DIG_ANA 0x01
956#define CEC_OP_UI_BCAST_TYPE_ANALOGUE 0x10
957#define CEC_OP_UI_BCAST_TYPE_ANALOGUE_T 0x20
958#define CEC_OP_UI_BCAST_TYPE_ANALOGUE_CABLE 0x30
959#define CEC_OP_UI_BCAST_TYPE_ANALOGUE_SAT 0x40
960#define CEC_OP_UI_BCAST_TYPE_DIGITAL 0x50
961#define CEC_OP_UI_BCAST_TYPE_DIGITAL_T 0x60
962#define CEC_OP_UI_BCAST_TYPE_DIGITAL_CABLE 0x70
963#define CEC_OP_UI_BCAST_TYPE_DIGITAL_SAT 0x80
964#define CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT 0x90
965#define CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT2 0x91
966#define CEC_OP_UI_BCAST_TYPE_IP 0xa0
967
968#define CEC_OP_UI_SND_PRES_CTL_DUAL_MONO 0x10
969#define CEC_OP_UI_SND_PRES_CTL_KARAOKE 0x20
970#define CEC_OP_UI_SND_PRES_CTL_DOWNMIX 0x80
971#define CEC_OP_UI_SND_PRES_CTL_REVERB 0x90
972#define CEC_OP_UI_SND_PRES_CTL_EQUALIZER 0xa0
973#define CEC_OP_UI_SND_PRES_CTL_BASS_UP 0xb1
974#define CEC_OP_UI_SND_PRES_CTL_BASS_NEUTRAL 0xb2
975#define CEC_OP_UI_SND_PRES_CTL_BASS_DOWN 0xb3
976#define CEC_OP_UI_SND_PRES_CTL_TREBLE_UP 0xc1
977#define CEC_OP_UI_SND_PRES_CTL_TREBLE_NEUTRAL 0xc2
978#define CEC_OP_UI_SND_PRES_CTL_TREBLE_DOWN 0xc3
979
980#define CEC_MSG_USER_CONTROL_RELEASED 0x45
981
982
983
984
985
986
987
988
989
990
991
992
993#define CEC_MSG_GIVE_DEVICE_POWER_STATUS 0x8f
994#define CEC_MSG_REPORT_POWER_STATUS 0x90
995
996#define CEC_OP_POWER_STATUS_ON 0
997#define CEC_OP_POWER_STATUS_STANDBY 1
998#define CEC_OP_POWER_STATUS_TO_ON 2
999#define CEC_OP_POWER_STATUS_TO_STANDBY 3
1000
1001
1002
1003#define CEC_MSG_FEATURE_ABORT 0x00
1004
1005#define CEC_OP_ABORT_UNRECOGNIZED_OP 0
1006#define CEC_OP_ABORT_INCORRECT_MODE 1
1007#define CEC_OP_ABORT_NO_SOURCE 2
1008#define CEC_OP_ABORT_INVALID_OP 3
1009#define CEC_OP_ABORT_REFUSED 4
1010#define CEC_OP_ABORT_UNDETERMINED 5
1011
1012#define CEC_MSG_ABORT 0xff
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022#define CEC_MSG_GIVE_AUDIO_STATUS 0x71
1023#define CEC_MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS 0x7d
1024#define CEC_MSG_REPORT_AUDIO_STATUS 0x7a
1025
1026#define CEC_OP_AUD_MUTE_STATUS_OFF 0
1027#define CEC_OP_AUD_MUTE_STATUS_ON 1
1028
1029#define CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR 0xa3
1030#define CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR 0xa4
1031#define CEC_MSG_SET_SYSTEM_AUDIO_MODE 0x72
1032
1033#define CEC_OP_SYS_AUD_STATUS_OFF 0
1034#define CEC_OP_SYS_AUD_STATUS_ON 1
1035
1036#define CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST 0x70
1037#define CEC_MSG_SYSTEM_AUDIO_MODE_STATUS 0x7e
1038
1039#define CEC_OP_AUD_FMT_ID_CEA861 0
1040#define CEC_OP_AUD_FMT_ID_CEA861_CXT 1
1041
1042
1043
1044#define CEC_MSG_SET_AUDIO_RATE 0x9a
1045
1046#define CEC_OP_AUD_RATE_OFF 0
1047#define CEC_OP_AUD_RATE_WIDE_STD 1
1048#define CEC_OP_AUD_RATE_WIDE_FAST 2
1049#define CEC_OP_AUD_RATE_WIDE_SLOW 3
1050#define CEC_OP_AUD_RATE_NARROW_STD 4
1051#define CEC_OP_AUD_RATE_NARROW_FAST 5
1052#define CEC_OP_AUD_RATE_NARROW_SLOW 6
1053
1054
1055
1056#define CEC_MSG_INITIATE_ARC 0xc0
1057#define CEC_MSG_REPORT_ARC_INITIATED 0xc1
1058#define CEC_MSG_REPORT_ARC_TERMINATED 0xc2
1059#define CEC_MSG_REQUEST_ARC_INITIATION 0xc3
1060#define CEC_MSG_REQUEST_ARC_TERMINATION 0xc4
1061#define CEC_MSG_TERMINATE_ARC 0xc5
1062
1063
1064
1065
1066#define CEC_MSG_REQUEST_CURRENT_LATENCY 0xa7
1067#define CEC_MSG_REPORT_CURRENT_LATENCY 0xa8
1068
1069#define CEC_OP_LOW_LATENCY_MODE_OFF 0
1070#define CEC_OP_LOW_LATENCY_MODE_ON 1
1071
1072#define CEC_OP_AUD_OUT_COMPENSATED_NA 0
1073#define CEC_OP_AUD_OUT_COMPENSATED_DELAY 1
1074#define CEC_OP_AUD_OUT_COMPENSATED_NO_DELAY 2
1075#define CEC_OP_AUD_OUT_COMPENSATED_PARTIAL_DELAY 3
1076
1077
1078
1079#define CEC_MSG_CDC_MESSAGE 0xf8
1080
1081#define CEC_MSG_CDC_HEC_INQUIRE_STATE 0x00
1082#define CEC_MSG_CDC_HEC_REPORT_STATE 0x01
1083
1084#define CEC_OP_HEC_FUNC_STATE_NOT_SUPPORTED 0
1085#define CEC_OP_HEC_FUNC_STATE_INACTIVE 1
1086#define CEC_OP_HEC_FUNC_STATE_ACTIVE 2
1087#define CEC_OP_HEC_FUNC_STATE_ACTIVATION_FIELD 3
1088
1089#define CEC_OP_HOST_FUNC_STATE_NOT_SUPPORTED 0
1090#define CEC_OP_HOST_FUNC_STATE_INACTIVE 1
1091#define CEC_OP_HOST_FUNC_STATE_ACTIVE 2
1092
1093#define CEC_OP_ENC_FUNC_STATE_EXT_CON_NOT_SUPPORTED 0
1094#define CEC_OP_ENC_FUNC_STATE_EXT_CON_INACTIVE 1
1095#define CEC_OP_ENC_FUNC_STATE_EXT_CON_ACTIVE 2
1096
1097#define CEC_OP_CDC_ERROR_CODE_NONE 0
1098#define CEC_OP_CDC_ERROR_CODE_CAP_UNSUPPORTED 1
1099#define CEC_OP_CDC_ERROR_CODE_WRONG_STATE 2
1100#define CEC_OP_CDC_ERROR_CODE_OTHER 3
1101
1102#define CEC_OP_HEC_SUPPORT_NO 0
1103#define CEC_OP_HEC_SUPPORT_YES 1
1104
1105#define CEC_OP_HEC_ACTIVATION_ON 0
1106#define CEC_OP_HEC_ACTIVATION_OFF 1
1107
1108#define CEC_MSG_CDC_HEC_SET_STATE_ADJACENT 0x02
1109#define CEC_MSG_CDC_HEC_SET_STATE 0x03
1110
1111#define CEC_OP_HEC_SET_STATE_DEACTIVATE 0
1112#define CEC_OP_HEC_SET_STATE_ACTIVATE 1
1113
1114#define CEC_MSG_CDC_HEC_REQUEST_DEACTIVATION 0x04
1115#define CEC_MSG_CDC_HEC_NOTIFY_ALIVE 0x05
1116#define CEC_MSG_CDC_HEC_DISCOVER 0x06
1117
1118#define CEC_MSG_CDC_HPD_SET_STATE 0x10
1119
1120#define CEC_OP_HPD_STATE_CP_EDID_DISABLE 0
1121#define CEC_OP_HPD_STATE_CP_EDID_ENABLE 1
1122#define CEC_OP_HPD_STATE_CP_EDID_DISABLE_ENABLE 2
1123#define CEC_OP_HPD_STATE_EDID_DISABLE 3
1124#define CEC_OP_HPD_STATE_EDID_ENABLE 4
1125#define CEC_OP_HPD_STATE_EDID_DISABLE_ENABLE 5
1126#define CEC_MSG_CDC_HPD_REPORT_STATE 0x11
1127
1128#define CEC_OP_HPD_ERROR_NONE 0
1129#define CEC_OP_HPD_ERROR_INITIATOR_NOT_CAPABLE 1
1130#define CEC_OP_HPD_ERROR_INITIATOR_WRONG_STATE 2
1131#define CEC_OP_HPD_ERROR_OTHER 3
1132#define CEC_OP_HPD_ERROR_NONE_NO_VIDEO 4
1133
1134
1135
1136
1137
1138static inline int cec_is_2nd_tv(const struct cec_log_addrs *las)
1139{
1140
1141
1142
1143
1144 return las->num_log_addrs &&
1145 las->log_addr[0] >= CEC_LOG_ADDR_SPECIFIC &&
1146 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_TV;
1147}
1148
1149static inline int cec_is_processor(const struct cec_log_addrs *las)
1150{
1151
1152
1153
1154
1155 return las->num_log_addrs &&
1156 las->log_addr[0] >= CEC_LOG_ADDR_BACKUP_1 &&
1157 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_PROCESSOR;
1158}
1159
1160static inline int cec_is_switch(const struct cec_log_addrs *las)
1161{
1162
1163
1164
1165
1166 return las->num_log_addrs == 1 &&
1167 las->log_addr[0] == CEC_LOG_ADDR_UNREGISTERED &&
1168 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_SWITCH &&
1169 !(las->flags & CEC_LOG_ADDRS_FL_CDC_ONLY);
1170}
1171
1172static inline int cec_is_cdc_only(const struct cec_log_addrs *las)
1173{
1174
1175
1176
1177
1178 return las->num_log_addrs == 1 &&
1179 las->log_addr[0] == CEC_LOG_ADDR_UNREGISTERED &&
1180 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_SWITCH &&
1181 (las->flags & CEC_LOG_ADDRS_FL_CDC_ONLY);
1182}
1183
1184#endif
1185