This source file includes following definitions.
- cec_msg_initiator
- cec_msg_destination
- cec_msg_opcode
- cec_msg_is_broadcast
- cec_msg_init
- cec_msg_set_reply_to
- cec_msg_status_is_ok
- cec_has_tv
- cec_has_record
- cec_has_tuner
- cec_has_playback
- cec_has_audiosystem
- cec_has_backup
- cec_has_specific
- cec_is_unregistered
- cec_is_unconfigured
- cec_is_2nd_tv
- cec_is_processor
- cec_is_switch
- cec_is_cdc_only
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
57 struct 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
78 static inline __u8 cec_msg_initiator(const struct cec_msg *msg)
79 {
80 return msg->msg[0] >> 4;
81 }
82
83
84
85
86
87 static inline __u8 cec_msg_destination(const struct cec_msg *msg)
88 {
89 return msg->msg[0] & 0xf;
90 }
91
92
93
94
95
96 static 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
105 static 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
119 static 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
136 static 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
164 static 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
234 static inline int cec_has_tv(__u16 log_addr_mask)
235 {
236 return log_addr_mask & CEC_LOG_ADDR_MASK_TV;
237 }
238
239 static inline int cec_has_record(__u16 log_addr_mask)
240 {
241 return log_addr_mask & CEC_LOG_ADDR_MASK_RECORD;
242 }
243
244 static inline int cec_has_tuner(__u16 log_addr_mask)
245 {
246 return log_addr_mask & CEC_LOG_ADDR_MASK_TUNER;
247 }
248
249 static inline int cec_has_playback(__u16 log_addr_mask)
250 {
251 return log_addr_mask & CEC_LOG_ADDR_MASK_PLAYBACK;
252 }
253
254 static inline int cec_has_audiosystem(__u16 log_addr_mask)
255 {
256 return log_addr_mask & CEC_LOG_ADDR_MASK_AUDIOSYSTEM;
257 }
258
259 static inline int cec_has_backup(__u16 log_addr_mask)
260 {
261 return log_addr_mask & CEC_LOG_ADDR_MASK_BACKUP;
262 }
263
264 static inline int cec_has_specific(__u16 log_addr_mask)
265 {
266 return log_addr_mask & CEC_LOG_ADDR_MASK_SPECIFIC;
267 }
268
269 static inline int cec_is_unregistered(__u16 log_addr_mask)
270 {
271 return log_addr_mask & CEC_LOG_ADDR_MASK_UNREGISTERED;
272 }
273
274 static 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
322
323
324
325
326
327
328
329 struct cec_caps {
330 char driver[32];
331 char name[32];
332 __u32 available_log_addrs;
333 __u32 capabilities;
334 __u32 version;
335 };
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355 struct cec_log_addrs {
356 __u8 log_addr[CEC_MAX_LOG_ADDRS];
357 __u16 log_addr_mask;
358 __u8 cec_version;
359 __u8 num_log_addrs;
360 __u32 vendor_id;
361 __u32 flags;
362 char osd_name[15];
363 __u8 primary_device_type[CEC_MAX_LOG_ADDRS];
364 __u8 log_addr_type[CEC_MAX_LOG_ADDRS];
365
366
367 __u8 all_device_types[CEC_MAX_LOG_ADDRS];
368 __u8 features[CEC_MAX_LOG_ADDRS][12];
369 };
370
371
372 #define CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK (1 << 0)
373
374 #define CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU (1 << 1)
375
376 #define CEC_LOG_ADDRS_FL_CDC_ONLY (1 << 2)
377
378
379
380
381 #define CEC_EVENT_STATE_CHANGE 1
382
383
384
385
386 #define CEC_EVENT_LOST_MSGS 2
387 #define CEC_EVENT_PIN_CEC_LOW 3
388 #define CEC_EVENT_PIN_CEC_HIGH 4
389 #define CEC_EVENT_PIN_HPD_LOW 5
390 #define CEC_EVENT_PIN_HPD_HIGH 6
391 #define CEC_EVENT_PIN_5V_LOW 7
392 #define CEC_EVENT_PIN_5V_HIGH 8
393
394 #define CEC_EVENT_FL_INITIAL_STATE (1 << 0)
395 #define CEC_EVENT_FL_DROPPED_EVENTS (1 << 1)
396
397
398
399
400
401
402 struct cec_event_state_change {
403 __u16 phys_addr;
404 __u16 log_addr_mask;
405 };
406
407
408
409
410
411 struct cec_event_lost_msgs {
412 __u32 lost_msgs;
413 };
414
415
416
417
418
419
420
421
422
423
424 struct cec_event {
425 __u64 ts;
426 __u32 event;
427 __u32 flags;
428 union {
429 struct cec_event_state_change state_change;
430 struct cec_event_lost_msgs lost_msgs;
431 __u32 raw[16];
432 };
433 };
434
435
436
437
438 #define CEC_ADAP_G_CAPS _IOWR('a', 0, struct cec_caps)
439
440
441
442
443
444
445
446
447
448
449
450
451
452 #define CEC_ADAP_G_PHYS_ADDR _IOR('a', 1, __u16)
453 #define CEC_ADAP_S_PHYS_ADDR _IOW('a', 2, __u16)
454
455
456
457
458
459
460
461
462
463 #define CEC_ADAP_G_LOG_ADDRS _IOR('a', 3, struct cec_log_addrs)
464 #define CEC_ADAP_S_LOG_ADDRS _IOWR('a', 4, struct cec_log_addrs)
465
466
467 #define CEC_TRANSMIT _IOWR('a', 5, struct cec_msg)
468 #define CEC_RECEIVE _IOWR('a', 6, struct cec_msg)
469
470
471 #define CEC_DQEVENT _IOWR('a', 7, struct cec_event)
472
473
474
475
476 #define CEC_G_MODE _IOR('a', 8, __u32)
477 #define CEC_S_MODE _IOW('a', 9, __u32)
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497 #define CEC_MSG_ACTIVE_SOURCE 0x82
498 #define CEC_MSG_IMAGE_VIEW_ON 0x04
499 #define CEC_MSG_TEXT_VIEW_ON 0x0d
500
501
502
503
504
505
506
507
508
509 #define CEC_MSG_INACTIVE_SOURCE 0x9d
510 #define CEC_MSG_REQUEST_ACTIVE_SOURCE 0x85
511 #define CEC_MSG_ROUTING_CHANGE 0x80
512 #define CEC_MSG_ROUTING_INFORMATION 0x81
513 #define CEC_MSG_SET_STREAM_PATH 0x86
514
515
516
517 #define CEC_MSG_STANDBY 0x36
518
519
520
521 #define CEC_MSG_RECORD_OFF 0x0b
522 #define CEC_MSG_RECORD_ON 0x09
523
524 #define CEC_OP_RECORD_SRC_OWN 1
525 #define CEC_OP_RECORD_SRC_DIGITAL 2
526 #define CEC_OP_RECORD_SRC_ANALOG 3
527 #define CEC_OP_RECORD_SRC_EXT_PLUG 4
528 #define CEC_OP_RECORD_SRC_EXT_PHYS_ADDR 5
529
530 #define CEC_OP_SERVICE_ID_METHOD_BY_DIG_ID 0
531 #define CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL 1
532
533 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_GEN 0x00
534 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_GEN 0x01
535 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_GEN 0x02
536 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_BS 0x08
537 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_CS 0x09
538 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_T 0x0a
539 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_CABLE 0x10
540 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_SAT 0x11
541 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_T 0x12
542 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_C 0x18
543 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S 0x19
544 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S2 0x1a
545 #define CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_T 0x1b
546
547 #define CEC_OP_ANA_BCAST_TYPE_CABLE 0
548 #define CEC_OP_ANA_BCAST_TYPE_SATELLITE 1
549 #define CEC_OP_ANA_BCAST_TYPE_TERRESTRIAL 2
550
551 #define CEC_OP_BCAST_SYSTEM_PAL_BG 0x00
552 #define CEC_OP_BCAST_SYSTEM_SECAM_LQ 0x01
553 #define CEC_OP_BCAST_SYSTEM_PAL_M 0x02
554 #define CEC_OP_BCAST_SYSTEM_NTSC_M 0x03
555 #define CEC_OP_BCAST_SYSTEM_PAL_I 0x04
556 #define CEC_OP_BCAST_SYSTEM_SECAM_DK 0x05
557 #define CEC_OP_BCAST_SYSTEM_SECAM_BG 0x06
558 #define CEC_OP_BCAST_SYSTEM_SECAM_L 0x07
559 #define CEC_OP_BCAST_SYSTEM_PAL_DK 0x08
560 #define CEC_OP_BCAST_SYSTEM_OTHER 0x1f
561
562 #define CEC_OP_CHANNEL_NUMBER_FMT_1_PART 0x01
563 #define CEC_OP_CHANNEL_NUMBER_FMT_2_PART 0x02
564
565 #define CEC_MSG_RECORD_STATUS 0x0a
566
567 #define CEC_OP_RECORD_STATUS_CUR_SRC 0x01
568 #define CEC_OP_RECORD_STATUS_DIG_SERVICE 0x02
569 #define CEC_OP_RECORD_STATUS_ANA_SERVICE 0x03
570 #define CEC_OP_RECORD_STATUS_EXT_INPUT 0x04
571 #define CEC_OP_RECORD_STATUS_NO_DIG_SERVICE 0x05
572 #define CEC_OP_RECORD_STATUS_NO_ANA_SERVICE 0x06
573 #define CEC_OP_RECORD_STATUS_NO_SERVICE 0x07
574 #define CEC_OP_RECORD_STATUS_INVALID_EXT_PLUG 0x09
575 #define CEC_OP_RECORD_STATUS_INVALID_EXT_PHYS_ADDR 0x0a
576 #define CEC_OP_RECORD_STATUS_UNSUP_CA 0x0b
577 #define CEC_OP_RECORD_STATUS_NO_CA_ENTITLEMENTS 0x0c
578 #define CEC_OP_RECORD_STATUS_CANT_COPY_SRC 0x0d
579 #define CEC_OP_RECORD_STATUS_NO_MORE_COPIES 0x0e
580 #define CEC_OP_RECORD_STATUS_NO_MEDIA 0x10
581 #define CEC_OP_RECORD_STATUS_PLAYING 0x11
582 #define CEC_OP_RECORD_STATUS_ALREADY_RECORDING 0x12
583 #define CEC_OP_RECORD_STATUS_MEDIA_PROT 0x13
584 #define CEC_OP_RECORD_STATUS_NO_SIGNAL 0x14
585 #define CEC_OP_RECORD_STATUS_MEDIA_PROBLEM 0x15
586 #define CEC_OP_RECORD_STATUS_NO_SPACE 0x16
587 #define CEC_OP_RECORD_STATUS_PARENTAL_LOCK 0x17
588 #define CEC_OP_RECORD_STATUS_TERMINATED_OK 0x1a
589 #define CEC_OP_RECORD_STATUS_ALREADY_TERM 0x1b
590 #define CEC_OP_RECORD_STATUS_OTHER 0x1f
591
592 #define CEC_MSG_RECORD_TV_SCREEN 0x0f
593
594
595
596 #define CEC_MSG_CLEAR_ANALOGUE_TIMER 0x33
597
598 #define CEC_OP_REC_SEQ_SUNDAY 0x01
599 #define CEC_OP_REC_SEQ_MONDAY 0x02
600 #define CEC_OP_REC_SEQ_TUESDAY 0x04
601 #define CEC_OP_REC_SEQ_WEDNESDAY 0x08
602 #define CEC_OP_REC_SEQ_THURSDAY 0x10
603 #define CEC_OP_REC_SEQ_FRIDAY 0x20
604 #define CEC_OP_REC_SEQ_SATERDAY 0x40
605 #define CEC_OP_REC_SEQ_ONCE_ONLY 0x00
606
607 #define CEC_MSG_CLEAR_DIGITAL_TIMER 0x99
608
609 #define CEC_MSG_CLEAR_EXT_TIMER 0xa1
610
611 #define CEC_OP_EXT_SRC_PLUG 0x04
612 #define CEC_OP_EXT_SRC_PHYS_ADDR 0x05
613
614 #define CEC_MSG_SET_ANALOGUE_TIMER 0x34
615 #define CEC_MSG_SET_DIGITAL_TIMER 0x97
616 #define CEC_MSG_SET_EXT_TIMER 0xa2
617
618 #define CEC_MSG_SET_TIMER_PROGRAM_TITLE 0x67
619 #define CEC_MSG_TIMER_CLEARED_STATUS 0x43
620
621 #define CEC_OP_TIMER_CLR_STAT_RECORDING 0x00
622 #define CEC_OP_TIMER_CLR_STAT_NO_MATCHING 0x01
623 #define CEC_OP_TIMER_CLR_STAT_NO_INFO 0x02
624 #define CEC_OP_TIMER_CLR_STAT_CLEARED 0x80
625
626 #define CEC_MSG_TIMER_STATUS 0x35
627
628 #define CEC_OP_TIMER_OVERLAP_WARNING_NO_OVERLAP 0
629 #define CEC_OP_TIMER_OVERLAP_WARNING_OVERLAP 1
630
631 #define CEC_OP_MEDIA_INFO_UNPROT_MEDIA 0
632 #define CEC_OP_MEDIA_INFO_PROT_MEDIA 1
633 #define CEC_OP_MEDIA_INFO_NO_MEDIA 2
634
635 #define CEC_OP_PROG_IND_NOT_PROGRAMMED 0
636 #define CEC_OP_PROG_IND_PROGRAMMED 1
637
638 #define CEC_OP_PROG_INFO_ENOUGH_SPACE 0x08
639 #define CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE 0x09
640 #define CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE 0x0b
641 #define CEC_OP_PROG_INFO_NONE_AVAILABLE 0x0a
642
643 #define CEC_OP_PROG_ERROR_NO_FREE_TIMER 0x01
644 #define CEC_OP_PROG_ERROR_DATE_OUT_OF_RANGE 0x02
645 #define CEC_OP_PROG_ERROR_REC_SEQ_ERROR 0x03
646 #define CEC_OP_PROG_ERROR_INV_EXT_PLUG 0x04
647 #define CEC_OP_PROG_ERROR_INV_EXT_PHYS_ADDR 0x05
648 #define CEC_OP_PROG_ERROR_CA_UNSUPP 0x06
649 #define CEC_OP_PROG_ERROR_INSUF_CA_ENTITLEMENTS 0x07
650 #define CEC_OP_PROG_ERROR_RESOLUTION_UNSUPP 0x08
651 #define CEC_OP_PROG_ERROR_PARENTAL_LOCK 0x09
652 #define CEC_OP_PROG_ERROR_CLOCK_FAILURE 0x0a
653 #define CEC_OP_PROG_ERROR_DUPLICATE 0x0e
654
655
656
657 #define CEC_MSG_CEC_VERSION 0x9e
658
659 #define CEC_OP_CEC_VERSION_1_3A 4
660 #define CEC_OP_CEC_VERSION_1_4 5
661 #define CEC_OP_CEC_VERSION_2_0 6
662
663 #define CEC_MSG_GET_CEC_VERSION 0x9f
664 #define CEC_MSG_GIVE_PHYSICAL_ADDR 0x83
665 #define CEC_MSG_GET_MENU_LANGUAGE 0x91
666 #define CEC_MSG_REPORT_PHYSICAL_ADDR 0x84
667
668 #define CEC_OP_PRIM_DEVTYPE_TV 0
669 #define CEC_OP_PRIM_DEVTYPE_RECORD 1
670 #define CEC_OP_PRIM_DEVTYPE_TUNER 3
671 #define CEC_OP_PRIM_DEVTYPE_PLAYBACK 4
672 #define CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM 5
673 #define CEC_OP_PRIM_DEVTYPE_SWITCH 6
674 #define CEC_OP_PRIM_DEVTYPE_PROCESSOR 7
675
676 #define CEC_MSG_SET_MENU_LANGUAGE 0x32
677 #define CEC_MSG_REPORT_FEATURES 0xa6
678
679 #define CEC_OP_ALL_DEVTYPE_TV 0x80
680 #define CEC_OP_ALL_DEVTYPE_RECORD 0x40
681 #define CEC_OP_ALL_DEVTYPE_TUNER 0x20
682 #define CEC_OP_ALL_DEVTYPE_PLAYBACK 0x10
683 #define CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM 0x08
684 #define CEC_OP_ALL_DEVTYPE_SWITCH 0x04
685
686
687
688
689
690
691 #define CEC_OP_FEAT_EXT 0x80
692
693 #define CEC_OP_FEAT_RC_TV_PROFILE_NONE 0x00
694 #define CEC_OP_FEAT_RC_TV_PROFILE_1 0x02
695 #define CEC_OP_FEAT_RC_TV_PROFILE_2 0x06
696 #define CEC_OP_FEAT_RC_TV_PROFILE_3 0x0a
697 #define CEC_OP_FEAT_RC_TV_PROFILE_4 0x0e
698 #define CEC_OP_FEAT_RC_SRC_HAS_DEV_ROOT_MENU 0x50
699 #define CEC_OP_FEAT_RC_SRC_HAS_DEV_SETUP_MENU 0x48
700 #define CEC_OP_FEAT_RC_SRC_HAS_CONTENTS_MENU 0x44
701 #define CEC_OP_FEAT_RC_SRC_HAS_MEDIA_TOP_MENU 0x42
702 #define CEC_OP_FEAT_RC_SRC_HAS_MEDIA_CONTEXT_MENU 0x41
703
704 #define CEC_OP_FEAT_DEV_HAS_RECORD_TV_SCREEN 0x40
705 #define CEC_OP_FEAT_DEV_HAS_SET_OSD_STRING 0x20
706 #define CEC_OP_FEAT_DEV_HAS_DECK_CONTROL 0x10
707 #define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE 0x08
708 #define CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX 0x04
709 #define CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX 0x02
710
711 #define CEC_MSG_GIVE_FEATURES 0xa5
712
713
714
715 #define CEC_MSG_DECK_CONTROL 0x42
716
717 #define CEC_OP_DECK_CTL_MODE_SKIP_FWD 1
718 #define CEC_OP_DECK_CTL_MODE_SKIP_REV 2
719 #define CEC_OP_DECK_CTL_MODE_STOP 3
720 #define CEC_OP_DECK_CTL_MODE_EJECT 4
721
722 #define CEC_MSG_DECK_STATUS 0x1b
723
724 #define CEC_OP_DECK_INFO_PLAY 0x11
725 #define CEC_OP_DECK_INFO_RECORD 0x12
726 #define CEC_OP_DECK_INFO_PLAY_REV 0x13
727 #define CEC_OP_DECK_INFO_STILL 0x14
728 #define CEC_OP_DECK_INFO_SLOW 0x15
729 #define CEC_OP_DECK_INFO_SLOW_REV 0x16
730 #define CEC_OP_DECK_INFO_FAST_FWD 0x17
731 #define CEC_OP_DECK_INFO_FAST_REV 0x18
732 #define CEC_OP_DECK_INFO_NO_MEDIA 0x19
733 #define CEC_OP_DECK_INFO_STOP 0x1a
734 #define CEC_OP_DECK_INFO_SKIP_FWD 0x1b
735 #define CEC_OP_DECK_INFO_SKIP_REV 0x1c
736 #define CEC_OP_DECK_INFO_INDEX_SEARCH_FWD 0x1d
737 #define CEC_OP_DECK_INFO_INDEX_SEARCH_REV 0x1e
738 #define CEC_OP_DECK_INFO_OTHER 0x1f
739
740 #define CEC_MSG_GIVE_DECK_STATUS 0x1a
741
742 #define CEC_OP_STATUS_REQ_ON 1
743 #define CEC_OP_STATUS_REQ_OFF 2
744 #define CEC_OP_STATUS_REQ_ONCE 3
745
746 #define CEC_MSG_PLAY 0x41
747
748 #define CEC_OP_PLAY_MODE_PLAY_FWD 0x24
749 #define CEC_OP_PLAY_MODE_PLAY_REV 0x20
750 #define CEC_OP_PLAY_MODE_PLAY_STILL 0x25
751 #define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MIN 0x05
752 #define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MED 0x06
753 #define CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MAX 0x07
754 #define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MIN 0x09
755 #define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MED 0x0a
756 #define CEC_OP_PLAY_MODE_PLAY_FAST_REV_MAX 0x0b
757 #define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MIN 0x15
758 #define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MED 0x16
759 #define CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MAX 0x17
760 #define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MIN 0x19
761 #define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MED 0x1a
762 #define CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MAX 0x1b
763
764
765
766 #define CEC_MSG_GIVE_TUNER_DEVICE_STATUS 0x08
767 #define CEC_MSG_SELECT_ANALOGUE_SERVICE 0x92
768 #define CEC_MSG_SELECT_DIGITAL_SERVICE 0x93
769 #define CEC_MSG_TUNER_DEVICE_STATUS 0x07
770
771 #define CEC_OP_REC_FLAG_NOT_USED 0
772 #define CEC_OP_REC_FLAG_USED 1
773
774 #define CEC_OP_TUNER_DISPLAY_INFO_DIGITAL 0
775 #define CEC_OP_TUNER_DISPLAY_INFO_NONE 1
776 #define CEC_OP_TUNER_DISPLAY_INFO_ANALOGUE 2
777
778 #define CEC_MSG_TUNER_STEP_DECREMENT 0x06
779 #define CEC_MSG_TUNER_STEP_INCREMENT 0x05
780
781
782
783
784
785
786
787
788
789 #define CEC_MSG_DEVICE_VENDOR_ID 0x87
790 #define CEC_MSG_GIVE_DEVICE_VENDOR_ID 0x8c
791 #define CEC_MSG_VENDOR_COMMAND 0x89
792 #define CEC_MSG_VENDOR_COMMAND_WITH_ID 0xa0
793 #define CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN 0x8a
794 #define CEC_MSG_VENDOR_REMOTE_BUTTON_UP 0x8b
795
796
797
798 #define CEC_MSG_SET_OSD_STRING 0x64
799
800 #define CEC_OP_DISP_CTL_DEFAULT 0x00
801 #define CEC_OP_DISP_CTL_UNTIL_CLEARED 0x40
802 #define CEC_OP_DISP_CTL_CLEAR 0x80
803
804
805
806 #define CEC_MSG_GIVE_OSD_NAME 0x46
807 #define CEC_MSG_SET_OSD_NAME 0x47
808
809
810
811 #define CEC_MSG_MENU_REQUEST 0x8d
812
813 #define CEC_OP_MENU_REQUEST_ACTIVATE 0x00
814 #define CEC_OP_MENU_REQUEST_DEACTIVATE 0x01
815 #define CEC_OP_MENU_REQUEST_QUERY 0x02
816
817 #define CEC_MSG_MENU_STATUS 0x8e
818
819 #define CEC_OP_MENU_STATE_ACTIVATED 0x00
820 #define CEC_OP_MENU_STATE_DEACTIVATED 0x01
821
822 #define CEC_MSG_USER_CONTROL_PRESSED 0x44
823
824 #define CEC_OP_UI_BCAST_TYPE_TOGGLE_ALL 0x00
825 #define CEC_OP_UI_BCAST_TYPE_TOGGLE_DIG_ANA 0x01
826 #define CEC_OP_UI_BCAST_TYPE_ANALOGUE 0x10
827 #define CEC_OP_UI_BCAST_TYPE_ANALOGUE_T 0x20
828 #define CEC_OP_UI_BCAST_TYPE_ANALOGUE_CABLE 0x30
829 #define CEC_OP_UI_BCAST_TYPE_ANALOGUE_SAT 0x40
830 #define CEC_OP_UI_BCAST_TYPE_DIGITAL 0x50
831 #define CEC_OP_UI_BCAST_TYPE_DIGITAL_T 0x60
832 #define CEC_OP_UI_BCAST_TYPE_DIGITAL_CABLE 0x70
833 #define CEC_OP_UI_BCAST_TYPE_DIGITAL_SAT 0x80
834 #define CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT 0x90
835 #define CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT2 0x91
836 #define CEC_OP_UI_BCAST_TYPE_IP 0xa0
837
838 #define CEC_OP_UI_SND_PRES_CTL_DUAL_MONO 0x10
839 #define CEC_OP_UI_SND_PRES_CTL_KARAOKE 0x20
840 #define CEC_OP_UI_SND_PRES_CTL_DOWNMIX 0x80
841 #define CEC_OP_UI_SND_PRES_CTL_REVERB 0x90
842 #define CEC_OP_UI_SND_PRES_CTL_EQUALIZER 0xa0
843 #define CEC_OP_UI_SND_PRES_CTL_BASS_UP 0xb1
844 #define CEC_OP_UI_SND_PRES_CTL_BASS_NEUTRAL 0xb2
845 #define CEC_OP_UI_SND_PRES_CTL_BASS_DOWN 0xb3
846 #define CEC_OP_UI_SND_PRES_CTL_TREBLE_UP 0xc1
847 #define CEC_OP_UI_SND_PRES_CTL_TREBLE_NEUTRAL 0xc2
848 #define CEC_OP_UI_SND_PRES_CTL_TREBLE_DOWN 0xc3
849
850 #define CEC_MSG_USER_CONTROL_RELEASED 0x45
851
852
853
854
855
856
857
858
859
860
861
862
863 #define CEC_MSG_GIVE_DEVICE_POWER_STATUS 0x8f
864 #define CEC_MSG_REPORT_POWER_STATUS 0x90
865
866 #define CEC_OP_POWER_STATUS_ON 0
867 #define CEC_OP_POWER_STATUS_STANDBY 1
868 #define CEC_OP_POWER_STATUS_TO_ON 2
869 #define CEC_OP_POWER_STATUS_TO_STANDBY 3
870
871
872
873 #define CEC_MSG_FEATURE_ABORT 0x00
874
875 #define CEC_OP_ABORT_UNRECOGNIZED_OP 0
876 #define CEC_OP_ABORT_INCORRECT_MODE 1
877 #define CEC_OP_ABORT_NO_SOURCE 2
878 #define CEC_OP_ABORT_INVALID_OP 3
879 #define CEC_OP_ABORT_REFUSED 4
880 #define CEC_OP_ABORT_UNDETERMINED 5
881
882 #define CEC_MSG_ABORT 0xff
883
884
885
886
887
888
889
890
891
892 #define CEC_MSG_GIVE_AUDIO_STATUS 0x71
893 #define CEC_MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS 0x7d
894 #define CEC_MSG_REPORT_AUDIO_STATUS 0x7a
895
896 #define CEC_OP_AUD_MUTE_STATUS_OFF 0
897 #define CEC_OP_AUD_MUTE_STATUS_ON 1
898
899 #define CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR 0xa3
900 #define CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR 0xa4
901 #define CEC_MSG_SET_SYSTEM_AUDIO_MODE 0x72
902
903 #define CEC_OP_SYS_AUD_STATUS_OFF 0
904 #define CEC_OP_SYS_AUD_STATUS_ON 1
905
906 #define CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST 0x70
907 #define CEC_MSG_SYSTEM_AUDIO_MODE_STATUS 0x7e
908
909 #define CEC_OP_AUD_FMT_ID_CEA861 0
910 #define CEC_OP_AUD_FMT_ID_CEA861_CXT 1
911
912
913
914 #define CEC_MSG_SET_AUDIO_RATE 0x9a
915
916 #define CEC_OP_AUD_RATE_OFF 0
917 #define CEC_OP_AUD_RATE_WIDE_STD 1
918 #define CEC_OP_AUD_RATE_WIDE_FAST 2
919 #define CEC_OP_AUD_RATE_WIDE_SLOW 3
920 #define CEC_OP_AUD_RATE_NARROW_STD 4
921 #define CEC_OP_AUD_RATE_NARROW_FAST 5
922 #define CEC_OP_AUD_RATE_NARROW_SLOW 6
923
924
925
926 #define CEC_MSG_INITIATE_ARC 0xc0
927 #define CEC_MSG_REPORT_ARC_INITIATED 0xc1
928 #define CEC_MSG_REPORT_ARC_TERMINATED 0xc2
929 #define CEC_MSG_REQUEST_ARC_INITIATION 0xc3
930 #define CEC_MSG_REQUEST_ARC_TERMINATION 0xc4
931 #define CEC_MSG_TERMINATE_ARC 0xc5
932
933
934
935
936 #define CEC_MSG_REQUEST_CURRENT_LATENCY 0xa7
937 #define CEC_MSG_REPORT_CURRENT_LATENCY 0xa8
938
939 #define CEC_OP_LOW_LATENCY_MODE_OFF 0
940 #define CEC_OP_LOW_LATENCY_MODE_ON 1
941
942 #define CEC_OP_AUD_OUT_COMPENSATED_NA 0
943 #define CEC_OP_AUD_OUT_COMPENSATED_DELAY 1
944 #define CEC_OP_AUD_OUT_COMPENSATED_NO_DELAY 2
945 #define CEC_OP_AUD_OUT_COMPENSATED_PARTIAL_DELAY 3
946
947
948
949 #define CEC_MSG_CDC_MESSAGE 0xf8
950
951 #define CEC_MSG_CDC_HEC_INQUIRE_STATE 0x00
952 #define CEC_MSG_CDC_HEC_REPORT_STATE 0x01
953
954 #define CEC_OP_HEC_FUNC_STATE_NOT_SUPPORTED 0
955 #define CEC_OP_HEC_FUNC_STATE_INACTIVE 1
956 #define CEC_OP_HEC_FUNC_STATE_ACTIVE 2
957 #define CEC_OP_HEC_FUNC_STATE_ACTIVATION_FIELD 3
958
959 #define CEC_OP_HOST_FUNC_STATE_NOT_SUPPORTED 0
960 #define CEC_OP_HOST_FUNC_STATE_INACTIVE 1
961 #define CEC_OP_HOST_FUNC_STATE_ACTIVE 2
962
963 #define CEC_OP_ENC_FUNC_STATE_EXT_CON_NOT_SUPPORTED 0
964 #define CEC_OP_ENC_FUNC_STATE_EXT_CON_INACTIVE 1
965 #define CEC_OP_ENC_FUNC_STATE_EXT_CON_ACTIVE 2
966
967 #define CEC_OP_CDC_ERROR_CODE_NONE 0
968 #define CEC_OP_CDC_ERROR_CODE_CAP_UNSUPPORTED 1
969 #define CEC_OP_CDC_ERROR_CODE_WRONG_STATE 2
970 #define CEC_OP_CDC_ERROR_CODE_OTHER 3
971
972 #define CEC_OP_HEC_SUPPORT_NO 0
973 #define CEC_OP_HEC_SUPPORT_YES 1
974
975 #define CEC_OP_HEC_ACTIVATION_ON 0
976 #define CEC_OP_HEC_ACTIVATION_OFF 1
977
978 #define CEC_MSG_CDC_HEC_SET_STATE_ADJACENT 0x02
979 #define CEC_MSG_CDC_HEC_SET_STATE 0x03
980
981 #define CEC_OP_HEC_SET_STATE_DEACTIVATE 0
982 #define CEC_OP_HEC_SET_STATE_ACTIVATE 1
983
984 #define CEC_MSG_CDC_HEC_REQUEST_DEACTIVATION 0x04
985 #define CEC_MSG_CDC_HEC_NOTIFY_ALIVE 0x05
986 #define CEC_MSG_CDC_HEC_DISCOVER 0x06
987
988 #define CEC_MSG_CDC_HPD_SET_STATE 0x10
989
990 #define CEC_OP_HPD_STATE_CP_EDID_DISABLE 0
991 #define CEC_OP_HPD_STATE_CP_EDID_ENABLE 1
992 #define CEC_OP_HPD_STATE_CP_EDID_DISABLE_ENABLE 2
993 #define CEC_OP_HPD_STATE_EDID_DISABLE 3
994 #define CEC_OP_HPD_STATE_EDID_ENABLE 4
995 #define CEC_OP_HPD_STATE_EDID_DISABLE_ENABLE 5
996 #define CEC_MSG_CDC_HPD_REPORT_STATE 0x11
997
998 #define CEC_OP_HPD_ERROR_NONE 0
999 #define CEC_OP_HPD_ERROR_INITIATOR_NOT_CAPABLE 1
1000 #define CEC_OP_HPD_ERROR_INITIATOR_WRONG_STATE 2
1001 #define CEC_OP_HPD_ERROR_OTHER 3
1002 #define CEC_OP_HPD_ERROR_NONE_NO_VIDEO 4
1003
1004
1005
1006
1007
1008 static inline int cec_is_2nd_tv(const struct cec_log_addrs *las)
1009 {
1010
1011
1012
1013
1014 return las->num_log_addrs &&
1015 las->log_addr[0] >= CEC_LOG_ADDR_SPECIFIC &&
1016 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_TV;
1017 }
1018
1019 static inline int cec_is_processor(const struct cec_log_addrs *las)
1020 {
1021
1022
1023
1024
1025 return las->num_log_addrs &&
1026 las->log_addr[0] >= CEC_LOG_ADDR_BACKUP_1 &&
1027 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_PROCESSOR;
1028 }
1029
1030 static inline int cec_is_switch(const struct cec_log_addrs *las)
1031 {
1032
1033
1034
1035
1036 return las->num_log_addrs == 1 &&
1037 las->log_addr[0] == CEC_LOG_ADDR_UNREGISTERED &&
1038 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_SWITCH &&
1039 !(las->flags & CEC_LOG_ADDRS_FL_CDC_ONLY);
1040 }
1041
1042 static inline int cec_is_cdc_only(const struct cec_log_addrs *las)
1043 {
1044
1045
1046
1047
1048 return las->num_log_addrs == 1 &&
1049 las->log_addr[0] == CEC_LOG_ADDR_UNREGISTERED &&
1050 las->primary_device_type[0] == CEC_OP_PRIM_DEVTYPE_SWITCH &&
1051 (las->flags & CEC_LOG_ADDRS_FL_CDC_ONLY);
1052 }
1053
1054 #endif