~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/uapi/linux/cec-funcs.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/uapi/linux/cec-funcs.h (Version linux-6.12-rc7) and /include/uapi/linux/cec-funcs.h (Version linux-3.10.108)


  1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Lin      1 
  2 /*                                                
  3  * cec - HDMI Consumer Electronics Control mes    
  4  *                                                
  5  * Copyright 2016 Cisco Systems, Inc. and/or i    
  6  */                                               
  7                                                   
  8 #ifndef _CEC_UAPI_FUNCS_H                         
  9 #define _CEC_UAPI_FUNCS_H                         
 10                                                   
 11 #include <linux/cec.h>                            
 12                                                   
 13 /* One Touch Play Feature */                      
 14 static inline void cec_msg_active_source(struc    
 15 {                                                 
 16         msg->len = 4;                             
 17         msg->msg[0] |= 0xf; /* broadcast */       
 18         msg->msg[1] = CEC_MSG_ACTIVE_SOURCE;      
 19         msg->msg[2] = phys_addr >> 8;             
 20         msg->msg[3] = phys_addr & 0xff;           
 21 }                                                 
 22                                                   
 23 static inline void cec_ops_active_source(const    
 24                                          __u16    
 25 {                                                 
 26         *phys_addr = (msg->msg[2] << 8) | msg-    
 27 }                                                 
 28                                                   
 29 static inline void cec_msg_image_view_on(struc    
 30 {                                                 
 31         msg->len = 2;                             
 32         msg->msg[1] = CEC_MSG_IMAGE_VIEW_ON;      
 33 }                                                 
 34                                                   
 35 static inline void cec_msg_text_view_on(struct    
 36 {                                                 
 37         msg->len = 2;                             
 38         msg->msg[1] = CEC_MSG_TEXT_VIEW_ON;       
 39 }                                                 
 40                                                   
 41                                                   
 42 /* Routing Control Feature */                     
 43 static inline void cec_msg_inactive_source(str    
 44                                            __u    
 45 {                                                 
 46         msg->len = 4;                             
 47         msg->msg[1] = CEC_MSG_INACTIVE_SOURCE;    
 48         msg->msg[2] = phys_addr >> 8;             
 49         msg->msg[3] = phys_addr & 0xff;           
 50 }                                                 
 51                                                   
 52 static inline void cec_ops_inactive_source(con    
 53                                            __u    
 54 {                                                 
 55         *phys_addr = (msg->msg[2] << 8) | msg-    
 56 }                                                 
 57                                                   
 58 static inline void cec_msg_request_active_sour    
 59                                                   
 60 {                                                 
 61         msg->len = 2;                             
 62         msg->msg[0] |= 0xf; /* broadcast */       
 63         msg->msg[1] = CEC_MSG_REQUEST_ACTIVE_S    
 64         msg->reply = reply ? CEC_MSG_ACTIVE_SO    
 65 }                                                 
 66                                                   
 67 static inline void cec_msg_routing_information    
 68                                                   
 69 {                                                 
 70         msg->len = 4;                             
 71         msg->msg[0] |= 0xf; /* broadcast */       
 72         msg->msg[1] = CEC_MSG_ROUTING_INFORMAT    
 73         msg->msg[2] = phys_addr >> 8;             
 74         msg->msg[3] = phys_addr & 0xff;           
 75 }                                                 
 76                                                   
 77 static inline void cec_ops_routing_information    
 78                                                   
 79 {                                                 
 80         *phys_addr = (msg->msg[2] << 8) | msg-    
 81 }                                                 
 82                                                   
 83 static inline void cec_msg_routing_change(stru    
 84                                           int     
 85                                           __u1    
 86                                           __u1    
 87 {                                                 
 88         msg->len = 6;                             
 89         msg->msg[0] |= 0xf; /* broadcast */       
 90         msg->msg[1] = CEC_MSG_ROUTING_CHANGE;     
 91         msg->msg[2] = orig_phys_addr >> 8;        
 92         msg->msg[3] = orig_phys_addr & 0xff;      
 93         msg->msg[4] = new_phys_addr >> 8;         
 94         msg->msg[5] = new_phys_addr & 0xff;       
 95         msg->reply = reply ? CEC_MSG_ROUTING_I    
 96 }                                                 
 97                                                   
 98 static inline void cec_ops_routing_change(cons    
 99                                           __u1    
100                                           __u1    
101 {                                                 
102         *orig_phys_addr = (msg->msg[2] << 8) |    
103         *new_phys_addr = (msg->msg[4] << 8) |     
104 }                                                 
105                                                   
106 static inline void cec_msg_set_stream_path(str    
107 {                                                 
108         msg->len = 4;                             
109         msg->msg[0] |= 0xf; /* broadcast */       
110         msg->msg[1] = CEC_MSG_SET_STREAM_PATH;    
111         msg->msg[2] = phys_addr >> 8;             
112         msg->msg[3] = phys_addr & 0xff;           
113 }                                                 
114                                                   
115 static inline void cec_ops_set_stream_path(con    
116                                            __u    
117 {                                                 
118         *phys_addr = (msg->msg[2] << 8) | msg-    
119 }                                                 
120                                                   
121                                                   
122 /* Standby Feature */                             
123 static inline void cec_msg_standby(struct cec_    
124 {                                                 
125         msg->len = 2;                             
126         msg->msg[1] = CEC_MSG_STANDBY;            
127 }                                                 
128                                                   
129                                                   
130 /* One Touch Record Feature */                    
131 static inline void cec_msg_record_off(struct c    
132 {                                                 
133         msg->len = 2;                             
134         msg->msg[1] = CEC_MSG_RECORD_OFF;         
135         msg->reply = reply ? CEC_MSG_RECORD_ST    
136 }                                                 
137                                                   
138 struct cec_op_arib_data {                         
139         __u16 transport_id;                       
140         __u16 service_id;                         
141         __u16 orig_network_id;                    
142 };                                                
143                                                   
144 struct cec_op_atsc_data {                         
145         __u16 transport_id;                       
146         __u16 program_number;                     
147 };                                                
148                                                   
149 struct cec_op_dvb_data {                          
150         __u16 transport_id;                       
151         __u16 service_id;                         
152         __u16 orig_network_id;                    
153 };                                                
154                                                   
155 struct cec_op_channel_data {                      
156         __u8 channel_number_fmt;                  
157         __u16 major;                              
158         __u16 minor;                              
159 };                                                
160                                                   
161 struct cec_op_digital_service_id {                
162         __u8 service_id_method;                   
163         __u8 dig_bcast_system;                    
164         union {                                   
165                 struct cec_op_arib_data arib;     
166                 struct cec_op_atsc_data atsc;     
167                 struct cec_op_dvb_data dvb;       
168                 struct cec_op_channel_data cha    
169         };                                        
170 };                                                
171                                                   
172 struct cec_op_record_src {                        
173         __u8 type;                                
174         union {                                   
175                 struct cec_op_digital_service_    
176                 struct {                          
177                         __u8 ana_bcast_type;      
178                         __u16 ana_freq;           
179                         __u8 bcast_system;        
180                 } analog;                         
181                 struct {                          
182                         __u8 plug;                
183                 } ext_plug;                       
184                 struct {                          
185                         __u16 phys_addr;          
186                 } ext_phys_addr;                  
187         };                                        
188 };                                                
189                                                   
190 static inline void cec_set_digital_service_id(    
191               const struct cec_op_digital_serv    
192 {                                                 
193         *msg++ = (digital->service_id_method <    
194         if (digital->service_id_method == CEC_    
195                 *msg++ = (digital->channel.cha    
196                          (digital->channel.maj    
197                 *msg++ = digital->channel.majo    
198                 *msg++ = digital->channel.mino    
199                 *msg++ = digital->channel.mino    
200                 *msg++ = 0;                       
201                 *msg++ = 0;                       
202                 return;                           
203         }                                         
204         switch (digital->dig_bcast_system) {      
205         case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_A    
206         case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_A    
207         case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_A    
208         case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_A    
209                 *msg++ = digital->atsc.transpo    
210                 *msg++ = digital->atsc.transpo    
211                 *msg++ = digital->atsc.program    
212                 *msg++ = digital->atsc.program    
213                 *msg++ = 0;                       
214                 *msg++ = 0;                       
215                 break;                            
216         default:                                  
217                 *msg++ = digital->dvb.transpor    
218                 *msg++ = digital->dvb.transpor    
219                 *msg++ = digital->dvb.service_    
220                 *msg++ = digital->dvb.service_    
221                 *msg++ = digital->dvb.orig_net    
222                 *msg++ = digital->dvb.orig_net    
223                 break;                            
224         }                                         
225 }                                                 
226                                                   
227 static inline void cec_get_digital_service_id(    
228               struct cec_op_digital_service_id    
229 {                                                 
230         digital->service_id_method = msg[0] >>    
231         digital->dig_bcast_system = msg[0] & 0    
232         if (digital->service_id_method == CEC_    
233                 digital->channel.channel_numbe    
234                 digital->channel.major = ((msg    
235                 digital->channel.minor = (msg[    
236                 return;                           
237         }                                         
238         digital->dvb.transport_id = (msg[1] <<    
239         digital->dvb.service_id = (msg[3] << 8    
240         digital->dvb.orig_network_id = (msg[5]    
241 }                                                 
242                                                   
243 static inline void cec_msg_record_on_own(struc    
244 {                                                 
245         msg->len = 3;                             
246         msg->msg[1] = CEC_MSG_RECORD_ON;          
247         msg->msg[2] = CEC_OP_RECORD_SRC_OWN;      
248 }                                                 
249                                                   
250 static inline void cec_msg_record_on_digital(s    
251                              const struct cec_    
252 {                                                 
253         msg->len = 10;                            
254         msg->msg[1] = CEC_MSG_RECORD_ON;          
255         msg->msg[2] = CEC_OP_RECORD_SRC_DIGITA    
256         cec_set_digital_service_id(msg->msg +     
257 }                                                 
258                                                   
259 static inline void cec_msg_record_on_analog(st    
260                                             __    
261                                             __    
262                                             __    
263 {                                                 
264         msg->len = 7;                             
265         msg->msg[1] = CEC_MSG_RECORD_ON;          
266         msg->msg[2] = CEC_OP_RECORD_SRC_ANALOG    
267         msg->msg[3] = ana_bcast_type;             
268         msg->msg[4] = ana_freq >> 8;              
269         msg->msg[5] = ana_freq & 0xff;            
270         msg->msg[6] = bcast_system;               
271 }                                                 
272                                                   
273 static inline void cec_msg_record_on_plug(stru    
274                                           __u8    
275 {                                                 
276         msg->len = 4;                             
277         msg->msg[1] = CEC_MSG_RECORD_ON;          
278         msg->msg[2] = CEC_OP_RECORD_SRC_EXT_PL    
279         msg->msg[3] = plug;                       
280 }                                                 
281                                                   
282 static inline void cec_msg_record_on_phys_addr    
283                                                   
284 {                                                 
285         msg->len = 5;                             
286         msg->msg[1] = CEC_MSG_RECORD_ON;          
287         msg->msg[2] = CEC_OP_RECORD_SRC_EXT_PH    
288         msg->msg[3] = phys_addr >> 8;             
289         msg->msg[4] = phys_addr & 0xff;           
290 }                                                 
291                                                   
292 static inline void cec_msg_record_on(struct ce    
293                                      int reply    
294                                      const str    
295 {                                                 
296         switch (rec_src->type) {                  
297         case CEC_OP_RECORD_SRC_OWN:               
298                 cec_msg_record_on_own(msg);       
299                 break;                            
300         case CEC_OP_RECORD_SRC_DIGITAL:           
301                 cec_msg_record_on_digital(msg,    
302                 break;                            
303         case CEC_OP_RECORD_SRC_ANALOG:            
304                 cec_msg_record_on_analog(msg,     
305                                          rec_s    
306                                          rec_s    
307                                          rec_s    
308                 break;                            
309         case CEC_OP_RECORD_SRC_EXT_PLUG:          
310                 cec_msg_record_on_plug(msg, re    
311                 break;                            
312         case CEC_OP_RECORD_SRC_EXT_PHYS_ADDR:     
313                 cec_msg_record_on_phys_addr(ms    
314                                             re    
315                 break;                            
316         }                                         
317         msg->reply = reply ? CEC_MSG_RECORD_ST    
318 }                                                 
319                                                   
320 static inline void cec_ops_record_on(const str    
321                                      struct ce    
322 {                                                 
323         rec_src->type = msg->msg[2];              
324         switch (rec_src->type) {                  
325         case CEC_OP_RECORD_SRC_OWN:               
326                 break;                            
327         case CEC_OP_RECORD_SRC_DIGITAL:           
328                 cec_get_digital_service_id(msg    
329                 break;                            
330         case CEC_OP_RECORD_SRC_ANALOG:            
331                 rec_src->analog.ana_bcast_type    
332                 rec_src->analog.ana_freq =        
333                         (msg->msg[4] << 8) | m    
334                 rec_src->analog.bcast_system =    
335                 break;                            
336         case CEC_OP_RECORD_SRC_EXT_PLUG:          
337                 rec_src->ext_plug.plug = msg->    
338                 break;                            
339         case CEC_OP_RECORD_SRC_EXT_PHYS_ADDR:     
340                 rec_src->ext_phys_addr.phys_ad    
341                         (msg->msg[3] << 8) | m    
342                 break;                            
343         }                                         
344 }                                                 
345                                                   
346 static inline void cec_msg_record_status(struc    
347 {                                                 
348         msg->len = 3;                             
349         msg->msg[1] = CEC_MSG_RECORD_STATUS;      
350         msg->msg[2] = rec_status;                 
351 }                                                 
352                                                   
353 static inline void cec_ops_record_status(const    
354                                          __u8     
355 {                                                 
356         *rec_status = msg->msg[2];                
357 }                                                 
358                                                   
359 static inline void cec_msg_record_tv_screen(st    
360                                             in    
361 {                                                 
362         msg->len = 2;                             
363         msg->msg[1] = CEC_MSG_RECORD_TV_SCREEN    
364         msg->reply = reply ? CEC_MSG_RECORD_ON    
365 }                                                 
366                                                   
367                                                   
368 /* Timer Programming Feature */                   
369 static inline void cec_msg_timer_status(struct    
370                                         __u8 t    
371                                         __u8 m    
372                                         __u8 p    
373                                         __u8 p    
374                                         __u8 d    
375                                         __u8 d    
376 {                                                 
377         msg->len = 3;                             
378         msg->msg[1] = CEC_MSG_TIMER_STATUS;       
379         msg->msg[2] = (timer_overlap_warning <    
380                 (media_info << 5) |               
381                 (prog_info ? 0x10 : 0) |          
382                 (prog_info ? prog_info : prog_    
383         if (prog_info == CEC_OP_PROG_INFO_NOT_    
384             prog_info == CEC_OP_PROG_INFO_MIGH    
385             prog_error == CEC_OP_PROG_ERROR_DU    
386                 msg->len += 2;                    
387                 msg->msg[3] = ((duration_hr /     
388                 msg->msg[4] = ((duration_min /    
389         }                                         
390 }                                                 
391                                                   
392 static inline void cec_ops_timer_status(const     
393                                         __u8 *    
394                                         __u8 *    
395                                         __u8 *    
396                                         __u8 *    
397                                         __u8 *    
398                                         __u8 *    
399 {                                                 
400         *timer_overlap_warning = msg->msg[2] >    
401         *media_info = (msg->msg[2] >> 5) & 3;     
402         if (msg->msg[2] & 0x10) {                 
403                 *prog_info = msg->msg[2] & 0xf    
404                 *prog_error = 0;                  
405         } else {                                  
406                 *prog_info = 0;                   
407                 *prog_error = msg->msg[2] & 0x    
408         }                                         
409         if (*prog_info == CEC_OP_PROG_INFO_NOT    
410             *prog_info == CEC_OP_PROG_INFO_MIG    
411             *prog_error == CEC_OP_PROG_ERROR_D    
412                 *duration_hr = (msg->msg[3] >>    
413                 *duration_min = (msg->msg[4] >    
414         } else {                                  
415                 *duration_hr = *duration_min =    
416         }                                         
417 }                                                 
418                                                   
419 static inline void cec_msg_timer_cleared_statu    
420                                                   
421 {                                                 
422         msg->len = 3;                             
423         msg->msg[1] = CEC_MSG_TIMER_CLEARED_ST    
424         msg->msg[2] = timer_cleared_status;       
425 }                                                 
426                                                   
427 static inline void cec_ops_timer_cleared_statu    
428                                                   
429 {                                                 
430         *timer_cleared_status = msg->msg[2];      
431 }                                                 
432                                                   
433 static inline void cec_msg_clear_analogue_time    
434                                                   
435                                                   
436                                                   
437                                                   
438                                                   
439                                                   
440                                                   
441                                                   
442                                                   
443                                                   
444                                                   
445 {                                                 
446         msg->len = 13;                            
447         msg->msg[1] = CEC_MSG_CLEAR_ANALOGUE_T    
448         msg->msg[2] = day;                        
449         msg->msg[3] = month;                      
450         /* Hours and minutes are in BCD format    
451         msg->msg[4] = ((start_hr / 10) << 4) |    
452         msg->msg[5] = ((start_min / 10) << 4)     
453         msg->msg[6] = ((duration_hr / 10) << 4    
454         msg->msg[7] = ((duration_min / 10) <<     
455         msg->msg[8] = recording_seq;              
456         msg->msg[9] = ana_bcast_type;             
457         msg->msg[10] = ana_freq >> 8;             
458         msg->msg[11] = ana_freq & 0xff;           
459         msg->msg[12] = bcast_system;              
460         msg->reply = reply ? CEC_MSG_TIMER_CLE    
461 }                                                 
462                                                   
463 static inline void cec_ops_clear_analogue_time    
464                                                   
465                                                   
466                                                   
467                                                   
468                                                   
469                                                   
470                                                   
471                                                   
472                                                   
473                                                   
474 {                                                 
475         *day = msg->msg[2];                       
476         *month = msg->msg[3];                     
477         /* Hours and minutes are in BCD format    
478         *start_hr = (msg->msg[4] >> 4) * 10 +     
479         *start_min = (msg->msg[5] >> 4) * 10 +    
480         *duration_hr = (msg->msg[6] >> 4) * 10    
481         *duration_min = (msg->msg[7] >> 4) * 1    
482         *recording_seq = msg->msg[8];             
483         *ana_bcast_type = msg->msg[9];            
484         *ana_freq = (msg->msg[10] << 8) | msg-    
485         *bcast_system = msg->msg[12];             
486 }                                                 
487                                                   
488 static inline void cec_msg_clear_digital_timer    
489                                 int reply,        
490                                 __u8 day,         
491                                 __u8 month,       
492                                 __u8 start_hr,    
493                                 __u8 start_min    
494                                 __u8 duration_    
495                                 __u8 duration_    
496                                 __u8 recording    
497                                 const struct c    
498 {                                                 
499         msg->len = 16;                            
500         msg->reply = reply ? CEC_MSG_TIMER_CLE    
501         msg->msg[1] = CEC_MSG_CLEAR_DIGITAL_TI    
502         msg->msg[2] = day;                        
503         msg->msg[3] = month;                      
504         /* Hours and minutes are in BCD format    
505         msg->msg[4] = ((start_hr / 10) << 4) |    
506         msg->msg[5] = ((start_min / 10) << 4)     
507         msg->msg[6] = ((duration_hr / 10) << 4    
508         msg->msg[7] = ((duration_min / 10) <<     
509         msg->msg[8] = recording_seq;              
510         cec_set_digital_service_id(msg->msg +     
511 }                                                 
512                                                   
513 static inline void cec_ops_clear_digital_timer    
514                                 __u8 *day,        
515                                 __u8 *month,      
516                                 __u8 *start_hr    
517                                 __u8 *start_mi    
518                                 __u8 *duration    
519                                 __u8 *duration    
520                                 __u8 *recordin    
521                                 struct cec_op_    
522 {                                                 
523         *day = msg->msg[2];                       
524         *month = msg->msg[3];                     
525         /* Hours and minutes are in BCD format    
526         *start_hr = (msg->msg[4] >> 4) * 10 +     
527         *start_min = (msg->msg[5] >> 4) * 10 +    
528         *duration_hr = (msg->msg[6] >> 4) * 10    
529         *duration_min = (msg->msg[7] >> 4) * 1    
530         *recording_seq = msg->msg[8];             
531         cec_get_digital_service_id(msg->msg +     
532 }                                                 
533                                                   
534 static inline void cec_msg_clear_ext_timer(str    
535                                            int    
536                                            __u    
537                                            __u    
538                                            __u    
539                                            __u    
540                                            __u    
541                                            __u    
542                                            __u    
543                                            __u    
544                                            __u    
545                                            __u    
546 {                                                 
547         msg->len = 13;                            
548         msg->msg[1] = CEC_MSG_CLEAR_EXT_TIMER;    
549         msg->msg[2] = day;                        
550         msg->msg[3] = month;                      
551         /* Hours and minutes are in BCD format    
552         msg->msg[4] = ((start_hr / 10) << 4) |    
553         msg->msg[5] = ((start_min / 10) << 4)     
554         msg->msg[6] = ((duration_hr / 10) << 4    
555         msg->msg[7] = ((duration_min / 10) <<     
556         msg->msg[8] = recording_seq;              
557         msg->msg[9] = ext_src_spec;               
558         msg->msg[10] = plug;                      
559         msg->msg[11] = phys_addr >> 8;            
560         msg->msg[12] = phys_addr & 0xff;          
561         msg->reply = reply ? CEC_MSG_TIMER_CLE    
562 }                                                 
563                                                   
564 static inline void cec_ops_clear_ext_timer(con    
565                                            __u    
566                                            __u    
567                                            __u    
568                                            __u    
569                                            __u    
570                                            __u    
571                                            __u    
572                                            __u    
573                                            __u    
574                                            __u    
575 {                                                 
576         *day = msg->msg[2];                       
577         *month = msg->msg[3];                     
578         /* Hours and minutes are in BCD format    
579         *start_hr = (msg->msg[4] >> 4) * 10 +     
580         *start_min = (msg->msg[5] >> 4) * 10 +    
581         *duration_hr = (msg->msg[6] >> 4) * 10    
582         *duration_min = (msg->msg[7] >> 4) * 1    
583         *recording_seq = msg->msg[8];             
584         *ext_src_spec = msg->msg[9];              
585         *plug = msg->msg[10];                     
586         *phys_addr = (msg->msg[11] << 8) | msg    
587 }                                                 
588                                                   
589 static inline void cec_msg_set_analogue_timer(    
590                                                   
591                                                   
592                                                   
593                                                   
594                                                   
595                                                   
596                                                   
597                                                   
598                                                   
599                                                   
600                                                   
601 {                                                 
602         msg->len = 13;                            
603         msg->msg[1] = CEC_MSG_SET_ANALOGUE_TIM    
604         msg->msg[2] = day;                        
605         msg->msg[3] = month;                      
606         /* Hours and minutes are in BCD format    
607         msg->msg[4] = ((start_hr / 10) << 4) |    
608         msg->msg[5] = ((start_min / 10) << 4)     
609         msg->msg[6] = ((duration_hr / 10) << 4    
610         msg->msg[7] = ((duration_min / 10) <<     
611         msg->msg[8] = recording_seq;              
612         msg->msg[9] = ana_bcast_type;             
613         msg->msg[10] = ana_freq >> 8;             
614         msg->msg[11] = ana_freq & 0xff;           
615         msg->msg[12] = bcast_system;              
616         msg->reply = reply ? CEC_MSG_TIMER_STA    
617 }                                                 
618                                                   
619 static inline void cec_ops_set_analogue_timer(    
620                                                   
621                                                   
622                                                   
623                                                   
624                                                   
625                                                   
626                                                   
627                                                   
628                                                   
629                                                   
630 {                                                 
631         *day = msg->msg[2];                       
632         *month = msg->msg[3];                     
633         /* Hours and minutes are in BCD format    
634         *start_hr = (msg->msg[4] >> 4) * 10 +     
635         *start_min = (msg->msg[5] >> 4) * 10 +    
636         *duration_hr = (msg->msg[6] >> 4) * 10    
637         *duration_min = (msg->msg[7] >> 4) * 1    
638         *recording_seq = msg->msg[8];             
639         *ana_bcast_type = msg->msg[9];            
640         *ana_freq = (msg->msg[10] << 8) | msg-    
641         *bcast_system = msg->msg[12];             
642 }                                                 
643                                                   
644 static inline void cec_msg_set_digital_timer(s    
645                         int reply,                
646                         __u8 day,                 
647                         __u8 month,               
648                         __u8 start_hr,            
649                         __u8 start_min,           
650                         __u8 duration_hr,         
651                         __u8 duration_min,        
652                         __u8 recording_seq,       
653                         const struct cec_op_di    
654 {                                                 
655         msg->len = 16;                            
656         msg->reply = reply ? CEC_MSG_TIMER_STA    
657         msg->msg[1] = CEC_MSG_SET_DIGITAL_TIME    
658         msg->msg[2] = day;                        
659         msg->msg[3] = month;                      
660         /* Hours and minutes are in BCD format    
661         msg->msg[4] = ((start_hr / 10) << 4) |    
662         msg->msg[5] = ((start_min / 10) << 4)     
663         msg->msg[6] = ((duration_hr / 10) << 4    
664         msg->msg[7] = ((duration_min / 10) <<     
665         msg->msg[8] = recording_seq;              
666         cec_set_digital_service_id(msg->msg +     
667 }                                                 
668                                                   
669 static inline void cec_ops_set_digital_timer(c    
670                         __u8 *day,                
671                         __u8 *month,              
672                         __u8 *start_hr,           
673                         __u8 *start_min,          
674                         __u8 *duration_hr,        
675                         __u8 *duration_min,       
676                         __u8 *recording_seq,      
677                         struct cec_op_digital_    
678 {                                                 
679         *day = msg->msg[2];                       
680         *month = msg->msg[3];                     
681         /* Hours and minutes are in BCD format    
682         *start_hr = (msg->msg[4] >> 4) * 10 +     
683         *start_min = (msg->msg[5] >> 4) * 10 +    
684         *duration_hr = (msg->msg[6] >> 4) * 10    
685         *duration_min = (msg->msg[7] >> 4) * 1    
686         *recording_seq = msg->msg[8];             
687         cec_get_digital_service_id(msg->msg +     
688 }                                                 
689                                                   
690 static inline void cec_msg_set_ext_timer(struc    
691                                          int r    
692                                          __u8     
693                                          __u8     
694                                          __u8     
695                                          __u8     
696                                          __u8     
697                                          __u8     
698                                          __u8     
699                                          __u8     
700                                          __u8     
701                                          __u16    
702 {                                                 
703         msg->len = 13;                            
704         msg->msg[1] = CEC_MSG_SET_EXT_TIMER;      
705         msg->msg[2] = day;                        
706         msg->msg[3] = month;                      
707         /* Hours and minutes are in BCD format    
708         msg->msg[4] = ((start_hr / 10) << 4) |    
709         msg->msg[5] = ((start_min / 10) << 4)     
710         msg->msg[6] = ((duration_hr / 10) << 4    
711         msg->msg[7] = ((duration_min / 10) <<     
712         msg->msg[8] = recording_seq;              
713         msg->msg[9] = ext_src_spec;               
714         msg->msg[10] = plug;                      
715         msg->msg[11] = phys_addr >> 8;            
716         msg->msg[12] = phys_addr & 0xff;          
717         msg->reply = reply ? CEC_MSG_TIMER_STA    
718 }                                                 
719                                                   
720 static inline void cec_ops_set_ext_timer(const    
721                                          __u8     
722                                          __u8     
723                                          __u8     
724                                          __u8     
725                                          __u8     
726                                          __u8     
727                                          __u8     
728                                          __u8     
729                                          __u8     
730                                          __u16    
731 {                                                 
732         *day = msg->msg[2];                       
733         *month = msg->msg[3];                     
734         /* Hours and minutes are in BCD format    
735         *start_hr = (msg->msg[4] >> 4) * 10 +     
736         *start_min = (msg->msg[5] >> 4) * 10 +    
737         *duration_hr = (msg->msg[6] >> 4) * 10    
738         *duration_min = (msg->msg[7] >> 4) * 1    
739         *recording_seq = msg->msg[8];             
740         *ext_src_spec = msg->msg[9];              
741         *plug = msg->msg[10];                     
742         *phys_addr = (msg->msg[11] << 8) | msg    
743 }                                                 
744                                                   
745 static inline void cec_msg_set_timer_program_t    
746                                                   
747 {                                                 
748         unsigned int len = strlen(prog_title);    
749                                                   
750         if (len > 14)                             
751                 len = 14;                         
752         msg->len = 2 + len;                       
753         msg->msg[1] = CEC_MSG_SET_TIMER_PROGRA    
754         memcpy(msg->msg + 2, prog_title, len);    
755 }                                                 
756                                                   
757 static inline void cec_ops_set_timer_program_t    
758                                                   
759 {                                                 
760         unsigned int len = msg->len > 2 ? msg-    
761                                                   
762         if (len > 14)                             
763                 len = 14;                         
764         memcpy(prog_title, msg->msg + 2, len);    
765         prog_title[len] = '\0';                   
766 }                                                 
767                                                   
768 /* System Information Feature */                  
769 static inline void cec_msg_cec_version(struct     
770 {                                                 
771         msg->len = 3;                             
772         msg->msg[1] = CEC_MSG_CEC_VERSION;        
773         msg->msg[2] = cec_version;                
774 }                                                 
775                                                   
776 static inline void cec_ops_cec_version(const s    
777                                        __u8 *c    
778 {                                                 
779         *cec_version = msg->msg[2];               
780 }                                                 
781                                                   
782 static inline void cec_msg_get_cec_version(str    
783                                            int    
784 {                                                 
785         msg->len = 2;                             
786         msg->msg[1] = CEC_MSG_GET_CEC_VERSION;    
787         msg->reply = reply ? CEC_MSG_CEC_VERSI    
788 }                                                 
789                                                   
790 static inline void cec_msg_report_physical_add    
791                                         __u16     
792 {                                                 
793         msg->len = 5;                             
794         msg->msg[0] |= 0xf; /* broadcast */       
795         msg->msg[1] = CEC_MSG_REPORT_PHYSICAL_    
796         msg->msg[2] = phys_addr >> 8;             
797         msg->msg[3] = phys_addr & 0xff;           
798         msg->msg[4] = prim_devtype;               
799 }                                                 
800                                                   
801 static inline void cec_ops_report_physical_add    
802                                         __u16     
803 {                                                 
804         *phys_addr = (msg->msg[2] << 8) | msg-    
805         *prim_devtype = msg->msg[4];              
806 }                                                 
807                                                   
808 static inline void cec_msg_give_physical_addr(    
809                                                   
810 {                                                 
811         msg->len = 2;                             
812         msg->msg[1] = CEC_MSG_GIVE_PHYSICAL_AD    
813         msg->reply = reply ? CEC_MSG_REPORT_PH    
814 }                                                 
815                                                   
816 static inline void cec_msg_set_menu_language(s    
817                                              c    
818 {                                                 
819         msg->len = 5;                             
820         msg->msg[0] |= 0xf; /* broadcast */       
821         msg->msg[1] = CEC_MSG_SET_MENU_LANGUAG    
822         memcpy(msg->msg + 2, language, 3);        
823 }                                                 
824                                                   
825 static inline void cec_ops_set_menu_language(c    
826                                              c    
827 {                                                 
828         memcpy(language, msg->msg + 2, 3);        
829         language[3] = '\0';                       
830 }                                                 
831                                                   
832 static inline void cec_msg_get_menu_language(s    
833                                              i    
834 {                                                 
835         msg->len = 2;                             
836         msg->msg[1] = CEC_MSG_GET_MENU_LANGUAG    
837         msg->reply = reply ? CEC_MSG_SET_MENU_    
838 }                                                 
839                                                   
840 /*                                                
841  * Assumes a single RC Profile byte and a sing    
842  * i.e. no extended features are supported by     
843  *                                                
844  * As of CEC 2.0 no extended features are defi    
845  * in the future, then this function needs to     
846  * should be added.                               
847  */                                               
848 static inline void cec_msg_report_features(str    
849                                 __u8 cec_versi    
850                                 __u8 rc_profil    
851 {                                                 
852         msg->len = 6;                             
853         msg->msg[0] |= 0xf; /* broadcast */       
854         msg->msg[1] = CEC_MSG_REPORT_FEATURES;    
855         msg->msg[2] = cec_version;                
856         msg->msg[3] = all_device_types;           
857         msg->msg[4] = rc_profile;                 
858         msg->msg[5] = dev_features;               
859 }                                                 
860                                                   
861 static inline void cec_ops_report_features(con    
862                         __u8 *cec_version, __u    
863                         const __u8 **rc_profil    
864 {                                                 
865         const __u8 *p = &msg->msg[4];             
866                                                   
867         *cec_version = msg->msg[2];               
868         *all_device_types = msg->msg[3];          
869         *rc_profile = p;                          
870         *dev_features = NULL;                     
871         while (p < &msg->msg[14] && (*p & CEC_    
872                 p++;                              
873         if (!(*p & CEC_OP_FEAT_EXT)) {            
874                 *dev_features = p + 1;            
875                 while (p < &msg->msg[15] && (*    
876                         p++;                      
877         }                                         
878         if (*p & CEC_OP_FEAT_EXT)                 
879                 *rc_profile = *dev_features =     
880 }                                                 
881                                                   
882 static inline void cec_msg_give_features(struc    
883                                          int r    
884 {                                                 
885         msg->len = 2;                             
886         msg->msg[1] = CEC_MSG_GIVE_FEATURES;      
887         msg->reply = reply ? CEC_MSG_REPORT_FE    
888 }                                                 
889                                                   
890 /* Deck Control Feature */                        
891 static inline void cec_msg_deck_control(struct    
892                                         __u8 d    
893 {                                                 
894         msg->len = 3;                             
895         msg->msg[1] = CEC_MSG_DECK_CONTROL;       
896         msg->msg[2] = deck_control_mode;          
897 }                                                 
898                                                   
899 static inline void cec_ops_deck_control(const     
900                                         __u8 *    
901 {                                                 
902         *deck_control_mode = msg->msg[2];         
903 }                                                 
904                                                   
905 static inline void cec_msg_deck_status(struct     
906                                        __u8 de    
907 {                                                 
908         msg->len = 3;                             
909         msg->msg[1] = CEC_MSG_DECK_STATUS;        
910         msg->msg[2] = deck_info;                  
911 }                                                 
912                                                   
913 static inline void cec_ops_deck_status(const s    
914                                        __u8 *d    
915 {                                                 
916         *deck_info = msg->msg[2];                 
917 }                                                 
918                                                   
919 static inline void cec_msg_give_deck_status(st    
920                                             in    
921                                             __    
922 {                                                 
923         msg->len = 3;                             
924         msg->msg[1] = CEC_MSG_GIVE_DECK_STATUS    
925         msg->msg[2] = status_req;                 
926         msg->reply = (reply && status_req != C    
927                                 CEC_MSG_DECK_S    
928 }                                                 
929                                                   
930 static inline void cec_ops_give_deck_status(co    
931                                             __    
932 {                                                 
933         *status_req = msg->msg[2];                
934 }                                                 
935                                                   
936 static inline void cec_msg_play(struct cec_msg    
937                                 __u8 play_mode    
938 {                                                 
939         msg->len = 3;                             
940         msg->msg[1] = CEC_MSG_PLAY;               
941         msg->msg[2] = play_mode;                  
942 }                                                 
943                                                   
944 static inline void cec_ops_play(const struct c    
945                                 __u8 *play_mod    
946 {                                                 
947         *play_mode = msg->msg[2];                 
948 }                                                 
949                                                   
950                                                   
951 /* Tuner Control Feature */                       
952 struct cec_op_tuner_device_info {                 
953         __u8 rec_flag;                            
954         __u8 tuner_display_info;                  
955         __u8 is_analog;                           
956         union {                                   
957                 struct cec_op_digital_service_    
958                 struct {                          
959                         __u8 ana_bcast_type;      
960                         __u16 ana_freq;           
961                         __u8 bcast_system;        
962                 } analog;                         
963         };                                        
964 };                                                
965                                                   
966 static inline void cec_msg_tuner_device_status    
967                                                   
968                                                   
969                                                   
970                                                   
971                                                   
972 {                                                 
973         msg->len = 7;                             
974         msg->msg[1] = CEC_MSG_TUNER_DEVICE_STA    
975         msg->msg[2] = (rec_flag << 7) | tuner_    
976         msg->msg[3] = ana_bcast_type;             
977         msg->msg[4] = ana_freq >> 8;              
978         msg->msg[5] = ana_freq & 0xff;            
979         msg->msg[6] = bcast_system;               
980 }                                                 
981                                                   
982 static inline void cec_msg_tuner_device_status    
983                    __u8 rec_flag, __u8 tuner_d    
984                    const struct cec_op_digital    
985 {                                                 
986         msg->len = 10;                            
987         msg->msg[1] = CEC_MSG_TUNER_DEVICE_STA    
988         msg->msg[2] = (rec_flag << 7) | tuner_    
989         cec_set_digital_service_id(msg->msg +     
990 }                                                 
991                                                   
992 static inline void cec_msg_tuner_device_status    
993                         const struct cec_op_tu    
994 {                                                 
995         if (tuner_dev_info->is_analog)            
996                 cec_msg_tuner_device_status_an    
997                         tuner_dev_info->rec_fl    
998                         tuner_dev_info->tuner_    
999                         tuner_dev_info->analog    
1000                         tuner_dev_info->analo    
1001                         tuner_dev_info->analo    
1002         else                                     
1003                 cec_msg_tuner_device_status_d    
1004                         tuner_dev_info->rec_f    
1005                         tuner_dev_info->tuner    
1006                         &tuner_dev_info->digi    
1007 }                                                
1008                                                  
1009 static inline void cec_ops_tuner_device_statu    
1010                                 struct cec_op    
1011 {                                                
1012         tuner_dev_info->is_analog = msg->len     
1013         tuner_dev_info->rec_flag = msg->msg[2    
1014         tuner_dev_info->tuner_display_info =     
1015         if (tuner_dev_info->is_analog) {         
1016                 tuner_dev_info->analog.ana_bc    
1017                 tuner_dev_info->analog.ana_fr    
1018                 tuner_dev_info->analog.bcast_    
1019                 return;                          
1020         }                                        
1021         cec_get_digital_service_id(msg->msg +    
1022 }                                                
1023                                                  
1024 static inline void cec_msg_give_tuner_device_    
1025                                                  
1026                                                  
1027 {                                                
1028         msg->len = 3;                            
1029         msg->msg[1] = CEC_MSG_GIVE_TUNER_DEVI    
1030         msg->msg[2] = status_req;                
1031         msg->reply = (reply && status_req !=     
1032                                 CEC_MSG_TUNER    
1033 }                                                
1034                                                  
1035 static inline void cec_ops_give_tuner_device_    
1036                                                  
1037 {                                                
1038         *status_req = msg->msg[2];               
1039 }                                                
1040                                                  
1041 static inline void cec_msg_select_analogue_se    
1042                                                  
1043                                                  
1044                                                  
1045 {                                                
1046         msg->len = 6;                            
1047         msg->msg[1] = CEC_MSG_SELECT_ANALOGUE    
1048         msg->msg[2] = ana_bcast_type;            
1049         msg->msg[3] = ana_freq >> 8;             
1050         msg->msg[4] = ana_freq & 0xff;           
1051         msg->msg[5] = bcast_system;              
1052 }                                                
1053                                                  
1054 static inline void cec_ops_select_analogue_se    
1055                                                  
1056                                                  
1057                                                  
1058 {                                                
1059         *ana_bcast_type = msg->msg[2];           
1060         *ana_freq = (msg->msg[3] << 8) | msg-    
1061         *bcast_system = msg->msg[5];             
1062 }                                                
1063                                                  
1064 static inline void cec_msg_select_digital_ser    
1065                                 const struct     
1066 {                                                
1067         msg->len = 9;                            
1068         msg->msg[1] = CEC_MSG_SELECT_DIGITAL_    
1069         cec_set_digital_service_id(msg->msg +    
1070 }                                                
1071                                                  
1072 static inline void cec_ops_select_digital_ser    
1073                                 struct cec_op    
1074 {                                                
1075         cec_get_digital_service_id(msg->msg +    
1076 }                                                
1077                                                  
1078 static inline void cec_msg_tuner_step_decreme    
1079 {                                                
1080         msg->len = 2;                            
1081         msg->msg[1] = CEC_MSG_TUNER_STEP_DECR    
1082 }                                                
1083                                                  
1084 static inline void cec_msg_tuner_step_increme    
1085 {                                                
1086         msg->len = 2;                            
1087         msg->msg[1] = CEC_MSG_TUNER_STEP_INCR    
1088 }                                                
1089                                                  
1090                                                  
1091 /* Vendor Specific Commands Feature */           
1092 static inline void cec_msg_device_vendor_id(s    
1093 {                                                
1094         msg->len = 5;                            
1095         msg->msg[0] |= 0xf; /* broadcast */      
1096         msg->msg[1] = CEC_MSG_DEVICE_VENDOR_I    
1097         msg->msg[2] = vendor_id >> 16;           
1098         msg->msg[3] = (vendor_id >> 8) & 0xff    
1099         msg->msg[4] = vendor_id & 0xff;          
1100 }                                                
1101                                                  
1102 static inline void cec_ops_device_vendor_id(c    
1103                                             _    
1104 {                                                
1105         *vendor_id = (msg->msg[2] << 16) | (m    
1106 }                                                
1107                                                  
1108 static inline void cec_msg_give_device_vendor    
1109                                                  
1110 {                                                
1111         msg->len = 2;                            
1112         msg->msg[1] = CEC_MSG_GIVE_DEVICE_VEN    
1113         msg->reply = reply ? CEC_MSG_DEVICE_V    
1114 }                                                
1115                                                  
1116 static inline void cec_msg_vendor_command(str    
1117                                           __u    
1118 {                                                
1119         if (size > 14)                           
1120                 size = 14;                       
1121         msg->len = 2 + size;                     
1122         msg->msg[1] = CEC_MSG_VENDOR_COMMAND;    
1123         memcpy(msg->msg + 2, vendor_cmd, size    
1124 }                                                
1125                                                  
1126 static inline void cec_ops_vendor_command(con    
1127                                           __u    
1128                                           con    
1129 {                                                
1130         *size = msg->len - 2;                    
1131                                                  
1132         if (*size > 14)                          
1133                 *size = 14;                      
1134         *vendor_cmd = msg->msg + 2;              
1135 }                                                
1136                                                  
1137 static inline void cec_msg_vendor_command_wit    
1138                                                  
1139                                                  
1140 {                                                
1141         if (size > 11)                           
1142                 size = 11;                       
1143         msg->len = 5 + size;                     
1144         msg->msg[1] = CEC_MSG_VENDOR_COMMAND_    
1145         msg->msg[2] = vendor_id >> 16;           
1146         msg->msg[3] = (vendor_id >> 8) & 0xff    
1147         msg->msg[4] = vendor_id & 0xff;          
1148         memcpy(msg->msg + 5, vendor_cmd, size    
1149 }                                                
1150                                                  
1151 static inline void cec_ops_vendor_command_wit    
1152                                                  
1153                                                  
1154 {                                                
1155         *size = msg->len - 5;                    
1156                                                  
1157         if (*size > 11)                          
1158                 *size = 11;                      
1159         *vendor_id = (msg->msg[2] << 16) | (m    
1160         *vendor_cmd = msg->msg + 5;              
1161 }                                                
1162                                                  
1163 static inline void cec_msg_vendor_remote_butt    
1164                                                  
1165                                                  
1166 {                                                
1167         if (size > 14)                           
1168                 size = 14;                       
1169         msg->len = 2 + size;                     
1170         msg->msg[1] = CEC_MSG_VENDOR_REMOTE_B    
1171         memcpy(msg->msg + 2, rc_code, size);     
1172 }                                                
1173                                                  
1174 static inline void cec_ops_vendor_remote_butt    
1175                                                  
1176                                                  
1177 {                                                
1178         *size = msg->len - 2;                    
1179                                                  
1180         if (*size > 14)                          
1181                 *size = 14;                      
1182         *rc_code = msg->msg + 2;                 
1183 }                                                
1184                                                  
1185 static inline void cec_msg_vendor_remote_butt    
1186 {                                                
1187         msg->len = 2;                            
1188         msg->msg[1] = CEC_MSG_VENDOR_REMOTE_B    
1189 }                                                
1190                                                  
1191                                                  
1192 /* OSD Display Feature */                        
1193 static inline void cec_msg_set_osd_string(str    
1194                                           __u    
1195                                           con    
1196 {                                                
1197         unsigned int len = strlen(osd);          
1198                                                  
1199         if (len > 13)                            
1200                 len = 13;                        
1201         msg->len = 3 + len;                      
1202         msg->msg[1] = CEC_MSG_SET_OSD_STRING;    
1203         msg->msg[2] = disp_ctl;                  
1204         memcpy(msg->msg + 3, osd, len);          
1205 }                                                
1206                                                  
1207 static inline void cec_ops_set_osd_string(con    
1208                                           __u    
1209                                           cha    
1210 {                                                
1211         unsigned int len = msg->len > 3 ? msg    
1212                                                  
1213         *disp_ctl = msg->msg[2];                 
1214         if (len > 13)                            
1215                 len = 13;                        
1216         memcpy(osd, msg->msg + 3, len);          
1217         osd[len] = '\0';                         
1218 }                                                
1219                                                  
1220                                                  
1221 /* Device OSD Transfer Feature */                
1222 static inline void cec_msg_set_osd_name(struc    
1223 {                                                
1224         unsigned int len = strlen(name);         
1225                                                  
1226         if (len > 14)                            
1227                 len = 14;                        
1228         msg->len = 2 + len;                      
1229         msg->msg[1] = CEC_MSG_SET_OSD_NAME;      
1230         memcpy(msg->msg + 2, name, len);         
1231 }                                                
1232                                                  
1233 static inline void cec_ops_set_osd_name(const    
1234                                         char     
1235 {                                                
1236         unsigned int len = msg->len > 2 ? msg    
1237                                                  
1238         if (len > 14)                            
1239                 len = 14;                        
1240         memcpy(name, msg->msg + 2, len);         
1241         name[len] = '\0';                        
1242 }                                                
1243                                                  
1244 static inline void cec_msg_give_osd_name(stru    
1245                                          int     
1246 {                                                
1247         msg->len = 2;                            
1248         msg->msg[1] = CEC_MSG_GIVE_OSD_NAME;     
1249         msg->reply = reply ? CEC_MSG_SET_OSD_    
1250 }                                                
1251                                                  
1252                                                  
1253 /* Device Menu Control Feature */                
1254 static inline void cec_msg_menu_status(struct    
1255                                        __u8 m    
1256 {                                                
1257         msg->len = 3;                            
1258         msg->msg[1] = CEC_MSG_MENU_STATUS;       
1259         msg->msg[2] = menu_state;                
1260 }                                                
1261                                                  
1262 static inline void cec_ops_menu_status(const     
1263                                        __u8 *    
1264 {                                                
1265         *menu_state = msg->msg[2];               
1266 }                                                
1267                                                  
1268 static inline void cec_msg_menu_request(struc    
1269                                         int r    
1270                                         __u8     
1271 {                                                
1272         msg->len = 3;                            
1273         msg->msg[1] = CEC_MSG_MENU_REQUEST;      
1274         msg->msg[2] = menu_req;                  
1275         msg->reply = reply ? CEC_MSG_MENU_STA    
1276 }                                                
1277                                                  
1278 static inline void cec_ops_menu_request(const    
1279                                         __u8     
1280 {                                                
1281         *menu_req = msg->msg[2];                 
1282 }                                                
1283                                                  
1284 struct cec_op_ui_command {                       
1285         __u8 ui_cmd;                             
1286         __u8 has_opt_arg;                        
1287         union {                                  
1288                 struct cec_op_channel_data ch    
1289                 __u8 ui_broadcast_type;          
1290                 __u8 ui_sound_presentation_co    
1291                 __u8 play_mode;                  
1292                 __u8 ui_function_media;          
1293                 __u8 ui_function_select_av_in    
1294                 __u8 ui_function_select_audio    
1295         };                                       
1296 };                                               
1297                                                  
1298 static inline void cec_msg_user_control_press    
1299                                         const    
1300 {                                                
1301         msg->len = 3;                            
1302         msg->msg[1] = CEC_MSG_USER_CONTROL_PR    
1303         msg->msg[2] = ui_cmd->ui_cmd;            
1304         if (!ui_cmd->has_opt_arg)                
1305                 return;                          
1306         switch (ui_cmd->ui_cmd) {                
1307         case CEC_OP_UI_CMD_SELECT_BROADCAST_T    
1308         case CEC_OP_UI_CMD_SELECT_SOUND_PRESE    
1309         case CEC_OP_UI_CMD_PLAY_FUNCTION:        
1310         case CEC_OP_UI_CMD_SELECT_MEDIA_FUNCT    
1311         case CEC_OP_UI_CMD_SELECT_AV_INPUT_FU    
1312         case CEC_OP_UI_CMD_SELECT_AUDIO_INPUT    
1313                 /* The optional operand is on    
1314                 msg->len++;                      
1315                 msg->msg[3] = ui_cmd->play_mo    
1316                 break;                           
1317         case CEC_OP_UI_CMD_TUNE_FUNCTION:        
1318                 msg->len += 4;                   
1319                 msg->msg[3] = (ui_cmd->channe    
1320                               (ui_cmd->channe    
1321                 msg->msg[4] = ui_cmd->channel    
1322                 msg->msg[5] = ui_cmd->channel    
1323                 msg->msg[6] = ui_cmd->channel    
1324                 break;                           
1325         }                                        
1326 }                                                
1327                                                  
1328 static inline void cec_ops_user_control_press    
1329                                                  
1330 {                                                
1331         ui_cmd->ui_cmd = msg->msg[2];            
1332         ui_cmd->has_opt_arg = 0;                 
1333         if (msg->len == 3)                       
1334                 return;                          
1335         switch (ui_cmd->ui_cmd) {                
1336         case CEC_OP_UI_CMD_SELECT_BROADCAST_T    
1337         case CEC_OP_UI_CMD_SELECT_SOUND_PRESE    
1338         case CEC_OP_UI_CMD_PLAY_FUNCTION:        
1339         case CEC_OP_UI_CMD_SELECT_MEDIA_FUNCT    
1340         case CEC_OP_UI_CMD_SELECT_AV_INPUT_FU    
1341         case CEC_OP_UI_CMD_SELECT_AUDIO_INPUT    
1342                 /* The optional operand is on    
1343                 ui_cmd->play_mode = msg->msg[    
1344                 ui_cmd->has_opt_arg = 1;         
1345                 break;                           
1346         case CEC_OP_UI_CMD_TUNE_FUNCTION:        
1347                 if (msg->len < 7)                
1348                         break;                   
1349                 ui_cmd->has_opt_arg = 1;         
1350                 ui_cmd->channel_identifier.ch    
1351                 ui_cmd->channel_identifier.ma    
1352                 ui_cmd->channel_identifier.mi    
1353                 break;                           
1354         }                                        
1355 }                                                
1356                                                  
1357 static inline void cec_msg_user_control_relea    
1358 {                                                
1359         msg->len = 2;                            
1360         msg->msg[1] = CEC_MSG_USER_CONTROL_RE    
1361 }                                                
1362                                                  
1363 /* Remote Control Passthrough Feature */         
1364                                                  
1365 /* Power Status Feature */                       
1366 static inline void cec_msg_report_power_statu    
1367                                                  
1368 {                                                
1369         msg->len = 3;                            
1370         msg->msg[1] = CEC_MSG_REPORT_POWER_ST    
1371         msg->msg[2] = pwr_state;                 
1372 }                                                
1373                                                  
1374 static inline void cec_ops_report_power_statu    
1375                                                  
1376 {                                                
1377         *pwr_state = msg->msg[2];                
1378 }                                                
1379                                                  
1380 static inline void cec_msg_give_device_power_    
1381                                                  
1382 {                                                
1383         msg->len = 2;                            
1384         msg->msg[1] = CEC_MSG_GIVE_DEVICE_POW    
1385         msg->reply = reply ? CEC_MSG_REPORT_P    
1386 }                                                
1387                                                  
1388 /* General Protocol Messages */                  
1389 static inline void cec_msg_feature_abort(stru    
1390                                          __u8    
1391 {                                                
1392         msg->len = 4;                            
1393         msg->msg[1] = CEC_MSG_FEATURE_ABORT;     
1394         msg->msg[2] = abort_msg;                 
1395         msg->msg[3] = reason;                    
1396 }                                                
1397                                                  
1398 static inline void cec_ops_feature_abort(cons    
1399                                          __u8    
1400 {                                                
1401         *abort_msg = msg->msg[2];                
1402         *reason = msg->msg[3];                   
1403 }                                                
1404                                                  
1405 /* This changes the current message into a fe    
1406 static inline void cec_msg_reply_feature_abor    
1407 {                                                
1408         cec_msg_set_reply_to(msg, msg);          
1409         msg->len = 4;                            
1410         msg->msg[2] = msg->msg[1];               
1411         msg->msg[3] = reason;                    
1412         msg->msg[1] = CEC_MSG_FEATURE_ABORT;     
1413 }                                                
1414                                                  
1415 static inline void cec_msg_abort(struct cec_m    
1416 {                                                
1417         msg->len = 2;                            
1418         msg->msg[1] = CEC_MSG_ABORT;             
1419 }                                                
1420                                                  
1421                                                  
1422 /* System Audio Control Feature */               
1423 static inline void cec_msg_report_audio_statu    
1424                                                  
1425                                                  
1426 {                                                
1427         msg->len = 3;                            
1428         msg->msg[1] = CEC_MSG_REPORT_AUDIO_ST    
1429         msg->msg[2] = (aud_mute_status << 7)     
1430 }                                                
1431                                                  
1432 static inline void cec_ops_report_audio_statu    
1433                                                  
1434                                                  
1435 {                                                
1436         *aud_mute_status = msg->msg[2] >> 7;     
1437         *aud_vol_status = msg->msg[2] & 0x7f;    
1438 }                                                
1439                                                  
1440 static inline void cec_msg_give_audio_status(    
1441                                                  
1442 {                                                
1443         msg->len = 2;                            
1444         msg->msg[1] = CEC_MSG_GIVE_AUDIO_STAT    
1445         msg->reply = reply ? CEC_MSG_REPORT_A    
1446 }                                                
1447                                                  
1448 static inline void cec_msg_set_system_audio_m    
1449                                                  
1450 {                                                
1451         msg->len = 3;                            
1452         msg->msg[1] = CEC_MSG_SET_SYSTEM_AUDI    
1453         msg->msg[2] = sys_aud_status;            
1454 }                                                
1455                                                  
1456 static inline void cec_ops_set_system_audio_m    
1457                                                  
1458 {                                                
1459         *sys_aud_status = msg->msg[2];           
1460 }                                                
1461                                                  
1462 static inline void cec_msg_system_audio_mode_    
1463                                                  
1464                                                  
1465 {                                                
1466         msg->len = phys_addr == 0xffff ? 2 :     
1467         msg->msg[1] = CEC_MSG_SYSTEM_AUDIO_MO    
1468         msg->msg[2] = phys_addr >> 8;            
1469         msg->msg[3] = phys_addr & 0xff;          
1470         msg->reply = reply ? CEC_MSG_SET_SYST    
1471                                                  
1472 }                                                
1473                                                  
1474 static inline void cec_ops_system_audio_mode_    
1475                                                  
1476 {                                                
1477         if (msg->len < 4)                        
1478                 *phys_addr = 0xffff;             
1479         else                                     
1480                 *phys_addr = (msg->msg[2] <<     
1481 }                                                
1482                                                  
1483 static inline void cec_msg_system_audio_mode_    
1484                                                  
1485 {                                                
1486         msg->len = 3;                            
1487         msg->msg[1] = CEC_MSG_SYSTEM_AUDIO_MO    
1488         msg->msg[2] = sys_aud_status;            
1489 }                                                
1490                                                  
1491 static inline void cec_ops_system_audio_mode_    
1492                                                  
1493 {                                                
1494         *sys_aud_status = msg->msg[2];           
1495 }                                                
1496                                                  
1497 static inline void cec_msg_give_system_audio_    
1498                                                  
1499 {                                                
1500         msg->len = 2;                            
1501         msg->msg[1] = CEC_MSG_GIVE_SYSTEM_AUD    
1502         msg->reply = reply ? CEC_MSG_SYSTEM_A    
1503 }                                                
1504                                                  
1505 static inline void cec_msg_report_short_audio    
1506                                         __u8     
1507                                         const    
1508 {                                                
1509         unsigned int i;                          
1510                                                  
1511         if (num_descriptors > 4)                 
1512                 num_descriptors = 4;             
1513         msg->len = 2 + num_descriptors * 3;      
1514         msg->msg[1] = CEC_MSG_REPORT_SHORT_AU    
1515         for (i = 0; i < num_descriptors; i++)    
1516                 msg->msg[2 + i * 3] = (descri    
1517                 msg->msg[3 + i * 3] = (descri    
1518                 msg->msg[4 + i * 3] = descrip    
1519         }                                        
1520 }                                                
1521                                                  
1522 static inline void cec_ops_report_short_audio    
1523                                                  
1524                                                  
1525 {                                                
1526         unsigned int i;                          
1527                                                  
1528         *num_descriptors = (msg->len - 2) / 3    
1529         if (*num_descriptors > 4)                
1530                 *num_descriptors = 4;            
1531         for (i = 0; i < *num_descriptors; i++    
1532                 descriptors[i] = (msg->msg[2     
1533                         (msg->msg[3 + i * 3]     
1534                         msg->msg[4 + i * 3];     
1535 }                                                
1536                                                  
1537 static inline void cec_msg_request_short_audi    
1538                                         int r    
1539                                         __u8     
1540                                         const    
1541                                         const    
1542 {                                                
1543         unsigned int i;                          
1544                                                  
1545         if (num_descriptors > 4)                 
1546                 num_descriptors = 4;             
1547         msg->len = 2 + num_descriptors;          
1548         msg->msg[1] = CEC_MSG_REQUEST_SHORT_A    
1549         msg->reply = reply ? CEC_MSG_REPORT_S    
1550         for (i = 0; i < num_descriptors; i++)    
1551                 msg->msg[2 + i] = (audio_form    
1552                                   (audio_form    
1553 }                                                
1554                                                  
1555 static inline void cec_ops_request_short_audi    
1556                                         __u8     
1557                                         __u8     
1558                                         __u8     
1559 {                                                
1560         unsigned int i;                          
1561                                                  
1562         *num_descriptors = msg->len - 2;         
1563         if (*num_descriptors > 4)                
1564                 *num_descriptors = 4;            
1565         for (i = 0; i < *num_descriptors; i++    
1566                 audio_format_id[i] = msg->msg    
1567                 audio_format_code[i] = msg->m    
1568         }                                        
1569 }                                                
1570                                                  
1571 static inline void cec_msg_set_audio_volume_l    
1572                                                  
1573 {                                                
1574         msg->len = 3;                            
1575         msg->msg[1] = CEC_MSG_SET_AUDIO_VOLUM    
1576         msg->msg[2] = audio_volume_level;        
1577 }                                                
1578                                                  
1579 static inline void cec_ops_set_audio_volume_l    
1580                                                  
1581 {                                                
1582         *audio_volume_level = msg->msg[2];       
1583 }                                                
1584                                                  
1585                                                  
1586 /* Audio Rate Control Feature */                 
1587 static inline void cec_msg_set_audio_rate(str    
1588                                           __u    
1589 {                                                
1590         msg->len = 3;                            
1591         msg->msg[1] = CEC_MSG_SET_AUDIO_RATE;    
1592         msg->msg[2] = audio_rate;                
1593 }                                                
1594                                                  
1595 static inline void cec_ops_set_audio_rate(con    
1596                                           __u    
1597 {                                                
1598         *audio_rate = msg->msg[2];               
1599 }                                                
1600                                                  
1601                                                  
1602 /* Audio Return Channel Control Feature */       
1603 static inline void cec_msg_report_arc_initiat    
1604 {                                                
1605         msg->len = 2;                            
1606         msg->msg[1] = CEC_MSG_REPORT_ARC_INIT    
1607 }                                                
1608                                                  
1609 static inline void cec_msg_initiate_arc(struc    
1610                                         int r    
1611 {                                                
1612         msg->len = 2;                            
1613         msg->msg[1] = CEC_MSG_INITIATE_ARC;      
1614         msg->reply = reply ? CEC_MSG_REPORT_A    
1615 }                                                
1616                                                  
1617 static inline void cec_msg_request_arc_initia    
1618                                                  
1619 {                                                
1620         msg->len = 2;                            
1621         msg->msg[1] = CEC_MSG_REQUEST_ARC_INI    
1622         msg->reply = reply ? CEC_MSG_INITIATE    
1623 }                                                
1624                                                  
1625 static inline void cec_msg_report_arc_termina    
1626 {                                                
1627         msg->len = 2;                            
1628         msg->msg[1] = CEC_MSG_REPORT_ARC_TERM    
1629 }                                                
1630                                                  
1631 static inline void cec_msg_terminate_arc(stru    
1632                                          int     
1633 {                                                
1634         msg->len = 2;                            
1635         msg->msg[1] = CEC_MSG_TERMINATE_ARC;     
1636         msg->reply = reply ? CEC_MSG_REPORT_A    
1637 }                                                
1638                                                  
1639 static inline void cec_msg_request_arc_termin    
1640                                                  
1641 {                                                
1642         msg->len = 2;                            
1643         msg->msg[1] = CEC_MSG_REQUEST_ARC_TER    
1644         msg->reply = reply ? CEC_MSG_TERMINAT    
1645 }                                                
1646                                                  
1647                                                  
1648 /* Dynamic Audio Lipsync Feature */              
1649 /* Only for CEC 2.0 and up */                    
1650 static inline void cec_msg_report_current_lat    
1651                                                  
1652                                                  
1653                                                  
1654                                                  
1655                                                  
1656 {                                                
1657         msg->len = 6;                            
1658         msg->msg[0] |= 0xf; /* broadcast */      
1659         msg->msg[1] = CEC_MSG_REPORT_CURRENT_    
1660         msg->msg[2] = phys_addr >> 8;            
1661         msg->msg[3] = phys_addr & 0xff;          
1662         msg->msg[4] = video_latency;             
1663         msg->msg[5] = (low_latency_mode << 2)    
1664         if (audio_out_compensated == 3)          
1665                 msg->msg[msg->len++] = audio_    
1666 }                                                
1667                                                  
1668 static inline void cec_ops_report_current_lat    
1669                                                  
1670                                                  
1671                                                  
1672                                                  
1673                                                  
1674 {                                                
1675         *phys_addr = (msg->msg[2] << 8) | msg    
1676         *video_latency = msg->msg[4];            
1677         *low_latency_mode = (msg->msg[5] >> 2    
1678         *audio_out_compensated = msg->msg[5]     
1679         if (*audio_out_compensated == 3 && ms    
1680                 *audio_out_delay = msg->msg[6    
1681         else                                     
1682                 *audio_out_delay = 1;            
1683 }                                                
1684                                                  
1685 static inline void cec_msg_request_current_la    
1686                                                  
1687                                                  
1688 {                                                
1689         msg->len = 4;                            
1690         msg->msg[0] |= 0xf; /* broadcast */      
1691         msg->msg[1] = CEC_MSG_REQUEST_CURRENT    
1692         msg->msg[2] = phys_addr >> 8;            
1693         msg->msg[3] = phys_addr & 0xff;          
1694         msg->reply = reply ? CEC_MSG_REPORT_C    
1695 }                                                
1696                                                  
1697 static inline void cec_ops_request_current_la    
1698                                                  
1699 {                                                
1700         *phys_addr = (msg->msg[2] << 8) | msg    
1701 }                                                
1702                                                  
1703                                                  
1704 /* Capability Discovery and Control Feature *    
1705 static inline void cec_msg_cdc_hec_inquire_st    
1706                                                  
1707                                                  
1708 {                                                
1709         msg->len = 9;                            
1710         msg->msg[0] |= 0xf; /* broadcast */      
1711         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1712         /* msg[2] and msg[3] (phys_addr) are     
1713         msg->msg[4] = CEC_MSG_CDC_HEC_INQUIRE    
1714         msg->msg[5] = phys_addr1 >> 8;           
1715         msg->msg[6] = phys_addr1 & 0xff;         
1716         msg->msg[7] = phys_addr2 >> 8;           
1717         msg->msg[8] = phys_addr2 & 0xff;         
1718 }                                                
1719                                                  
1720 static inline void cec_ops_cdc_hec_inquire_st    
1721                                                  
1722                                                  
1723                                                  
1724 {                                                
1725         *phys_addr = (msg->msg[2] << 8) | msg    
1726         *phys_addr1 = (msg->msg[5] << 8) | ms    
1727         *phys_addr2 = (msg->msg[7] << 8) | ms    
1728 }                                                
1729                                                  
1730 static inline void cec_msg_cdc_hec_report_sta    
1731                                                  
1732                                                  
1733                                                  
1734                                                  
1735                                                  
1736                                                  
1737                                                  
1738 {                                                
1739         msg->len = has_field ? 10 : 8;           
1740         msg->msg[0] |= 0xf; /* broadcast */      
1741         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1742         /* msg[2] and msg[3] (phys_addr) are     
1743         msg->msg[4] = CEC_MSG_CDC_HEC_REPORT_    
1744         msg->msg[5] = target_phys_addr >> 8;     
1745         msg->msg[6] = target_phys_addr & 0xff    
1746         msg->msg[7] = (hec_func_state << 6) |    
1747                       (host_func_state << 4)     
1748                       (enc_func_state << 2) |    
1749                       cdc_errcode;               
1750         if (has_field) {                         
1751                 msg->msg[8] = hec_field >> 8;    
1752                 msg->msg[9] = hec_field & 0xf    
1753         }                                        
1754 }                                                
1755                                                  
1756 static inline void cec_ops_cdc_hec_report_sta    
1757                                                  
1758                                                  
1759                                                  
1760                                                  
1761                                                  
1762                                                  
1763                                                  
1764                                                  
1765 {                                                
1766         *phys_addr = (msg->msg[2] << 8) | msg    
1767         *target_phys_addr = (msg->msg[5] << 8    
1768         *hec_func_state = msg->msg[7] >> 6;      
1769         *host_func_state = (msg->msg[7] >> 4)    
1770         *enc_func_state = (msg->msg[7] >> 4)     
1771         *cdc_errcode = msg->msg[7] & 3;          
1772         *has_field = msg->len >= 10;             
1773         *hec_field = *has_field ? ((msg->msg[    
1774 }                                                
1775                                                  
1776 static inline void cec_msg_cdc_hec_set_state(    
1777                                                  
1778                                                  
1779                                                  
1780                                                  
1781                                                  
1782                                                  
1783 {                                                
1784         msg->len = 10;                           
1785         msg->msg[0] |= 0xf; /* broadcast */      
1786         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1787         /* msg[2] and msg[3] (phys_addr) are     
1788         msg->msg[4] = CEC_MSG_CDC_HEC_INQUIRE    
1789         msg->msg[5] = phys_addr1 >> 8;           
1790         msg->msg[6] = phys_addr1 & 0xff;         
1791         msg->msg[7] = phys_addr2 >> 8;           
1792         msg->msg[8] = phys_addr2 & 0xff;         
1793         msg->msg[9] = hec_set_state;             
1794         if (phys_addr3 != CEC_PHYS_ADDR_INVAL    
1795                 msg->msg[msg->len++] = phys_a    
1796                 msg->msg[msg->len++] = phys_a    
1797                 if (phys_addr4 != CEC_PHYS_AD    
1798                         msg->msg[msg->len++]     
1799                         msg->msg[msg->len++]     
1800                         if (phys_addr5 != CEC    
1801                                 msg->msg[msg-    
1802                                 msg->msg[msg-    
1803                         }                        
1804                 }                                
1805         }                                        
1806 }                                                
1807                                                  
1808 static inline void cec_ops_cdc_hec_set_state(    
1809                                                  
1810                                                  
1811                                                  
1812                                                  
1813                                                  
1814                                                  
1815                                                  
1816 {                                                
1817         *phys_addr = (msg->msg[2] << 8) | msg    
1818         *phys_addr1 = (msg->msg[5] << 8) | ms    
1819         *phys_addr2 = (msg->msg[7] << 8) | ms    
1820         *hec_set_state = msg->msg[9];            
1821         *phys_addr3 = *phys_addr4 = *phys_add    
1822         if (msg->len >= 12)                      
1823                 *phys_addr3 = (msg->msg[10] <    
1824         if (msg->len >= 14)                      
1825                 *phys_addr4 = (msg->msg[12] <    
1826         if (msg->len >= 16)                      
1827                 *phys_addr5 = (msg->msg[14] <    
1828 }                                                
1829                                                  
1830 static inline void cec_msg_cdc_hec_set_state_    
1831                                                  
1832                                                  
1833 {                                                
1834         msg->len = 8;                            
1835         msg->msg[0] |= 0xf; /* broadcast */      
1836         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1837         /* msg[2] and msg[3] (phys_addr) are     
1838         msg->msg[4] = CEC_MSG_CDC_HEC_SET_STA    
1839         msg->msg[5] = phys_addr1 >> 8;           
1840         msg->msg[6] = phys_addr1 & 0xff;         
1841         msg->msg[7] = hec_set_state;             
1842 }                                                
1843                                                  
1844 static inline void cec_ops_cdc_hec_set_state_    
1845                                                  
1846                                                  
1847                                                  
1848 {                                                
1849         *phys_addr = (msg->msg[2] << 8) | msg    
1850         *phys_addr1 = (msg->msg[5] << 8) | ms    
1851         *hec_set_state = msg->msg[7];            
1852 }                                                
1853                                                  
1854 static inline void cec_msg_cdc_hec_request_de    
1855                                                  
1856                                                  
1857                                                  
1858 {                                                
1859         msg->len = 11;                           
1860         msg->msg[0] |= 0xf; /* broadcast */      
1861         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1862         /* msg[2] and msg[3] (phys_addr) are     
1863         msg->msg[4] = CEC_MSG_CDC_HEC_REQUEST    
1864         msg->msg[5] = phys_addr1 >> 8;           
1865         msg->msg[6] = phys_addr1 & 0xff;         
1866         msg->msg[7] = phys_addr2 >> 8;           
1867         msg->msg[8] = phys_addr2 & 0xff;         
1868         msg->msg[9] = phys_addr3 >> 8;           
1869         msg->msg[10] = phys_addr3 & 0xff;        
1870 }                                                
1871                                                  
1872 static inline void cec_ops_cdc_hec_request_de    
1873                                                  
1874                                                  
1875                                                  
1876                                                  
1877 {                                                
1878         *phys_addr = (msg->msg[2] << 8) | msg    
1879         *phys_addr1 = (msg->msg[5] << 8) | ms    
1880         *phys_addr2 = (msg->msg[7] << 8) | ms    
1881         *phys_addr3 = (msg->msg[9] << 8) | ms    
1882 }                                                
1883                                                  
1884 static inline void cec_msg_cdc_hec_notify_ali    
1885 {                                                
1886         msg->len = 5;                            
1887         msg->msg[0] |= 0xf; /* broadcast */      
1888         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1889         /* msg[2] and msg[3] (phys_addr) are     
1890         msg->msg[4] = CEC_MSG_CDC_HEC_NOTIFY_    
1891 }                                                
1892                                                  
1893 static inline void cec_ops_cdc_hec_notify_ali    
1894                                                  
1895 {                                                
1896         *phys_addr = (msg->msg[2] << 8) | msg    
1897 }                                                
1898                                                  
1899 static inline void cec_msg_cdc_hec_discover(s    
1900 {                                                
1901         msg->len = 5;                            
1902         msg->msg[0] |= 0xf; /* broadcast */      
1903         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1904         /* msg[2] and msg[3] (phys_addr) are     
1905         msg->msg[4] = CEC_MSG_CDC_HEC_DISCOVE    
1906 }                                                
1907                                                  
1908 static inline void cec_ops_cdc_hec_discover(c    
1909                                             _    
1910 {                                                
1911         *phys_addr = (msg->msg[2] << 8) | msg    
1912 }                                                
1913                                                  
1914 static inline void cec_msg_cdc_hpd_set_state(    
1915                                                  
1916                                                  
1917 {                                                
1918         msg->len = 6;                            
1919         msg->msg[0] |= 0xf; /* broadcast */      
1920         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1921         /* msg[2] and msg[3] (phys_addr) are     
1922         msg->msg[4] = CEC_MSG_CDC_HPD_SET_STA    
1923         msg->msg[5] = (input_port << 4) | hpd    
1924 }                                                
1925                                                  
1926 static inline void cec_ops_cdc_hpd_set_state(    
1927                                             _    
1928                                             _    
1929                                             _    
1930 {                                                
1931         *phys_addr = (msg->msg[2] << 8) | msg    
1932         *input_port = msg->msg[5] >> 4;          
1933         *hpd_state = msg->msg[5] & 0xf;          
1934 }                                                
1935                                                  
1936 static inline void cec_msg_cdc_hpd_report_sta    
1937                                                  
1938                                                  
1939 {                                                
1940         msg->len = 6;                            
1941         msg->msg[0] |= 0xf; /* broadcast */      
1942         msg->msg[1] = CEC_MSG_CDC_MESSAGE;       
1943         /* msg[2] and msg[3] (phys_addr) are     
1944         msg->msg[4] = CEC_MSG_CDC_HPD_REPORT_    
1945         msg->msg[5] = (hpd_state << 4) | hpd_    
1946 }                                                
1947                                                  
1948 static inline void cec_ops_cdc_hpd_report_sta    
1949                                                  
1950                                                  
1951                                                  
1952 {                                                
1953         *phys_addr = (msg->msg[2] << 8) | msg    
1954         *hpd_state = msg->msg[5] >> 4;           
1955         *hpd_error = msg->msg[5] & 0xf;          
1956 }                                                
1957                                                  
1958 #endif                                           
1959                                                  

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php