dts: rk312x: default enable emmc
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / hdmi / chips / rk3036 / rk3036_hdmi_cec.h
1 #ifndef __RK3036_CEC_H__
2 #define __RK3036_CEC_H__
3
4 typedef enum
5 {
6         CEC_LOGADDR_TV          = 0x00,
7         CEC_LOGADDR_RECDEV1     = 0x01,
8         CEC_LOGADDR_RECDEV2     = 0x02,
9         CEC_LOGADDR_TUNER1      = 0x03,     /* STB1 in Spev v1.3*/
10         CEC_LOGADDR_PLAYBACK1   = 0x04,     /* DVD1 in Spev v1.3*/
11         CEC_LOGADDR_AUDSYS      = 0x05,
12         CEC_LOGADDR_TUNER2      = 0x06,     /* STB2 in Spec v1.3*/
13         CEC_LOGADDR_TUNER3      = 0x07,     /* STB3 in Spec v1.3*/
14         CEC_LOGADDR_PLAYBACK2   = 0x08,     /* DVD2 in Spec v1.3*/
15         CEC_LOGADDR_RECDEV3     = 0x09,
16         CEC_LOGADDR_TUNER4      = 0x0A,     /* RES1 in Spec v1.3*/
17         CEC_LOGADDR_PLAYBACK3   = 0x0B,     /* RES2 in Spec v1.3*/
18         CEC_LOGADDR_RES3        = 0x0C,
19         CEC_LOGADDR_RES4        = 0x0D,
20         CEC_LOGADDR_FREEUSE     = 0x0E,
21         CEC_LOGADDR_UNREGORBC   = 0x0F
22 } cec_log_addr_t;
23
24 typedef enum                    /* CEC Messages*/
25 {
26         CECOP_FEATURE_ABORT             = 0x00,
27         CECOP_IMAGE_VIEW_ON             = 0x04,
28         CECOP_TUNER_STEP_INCREMENT      = 0x05,     /* N/A*/
29         CECOP_TUNER_STEP_DECREMENT      = 0x06,     /* N/A*/
30         CECOP_TUNER_DEVICE_STATUS       = 0x07,     /* N/A*/
31         CECOP_GIVE_TUNER_DEVICE_STATUS  = 0x08,     /* N/A*/
32         CECOP_RECORD_ON                 = 0x09,     /* N/A*/
33         CECOP_RECORD_STATUS             = 0x0A,     /* N/A*/
34         CECOP_RECORD_OFF                = 0x0B,     /* N/A*/
35         CECOP_TEXT_VIEW_ON              = 0x0D,
36         CECOP_RECORD_TV_SCREEN          = 0x0F,     /* N/A*/
37         CECOP_GIVE_DECK_STATUS          = 0x1A,
38         CECOP_DECK_STATUS               = 0x1B,
39         CECOP_SET_MENU_LANGUAGE         = 0x32,
40         CECOP_CLEAR_ANALOGUE_TIMER      = 0x33,     /* Spec 1.3A*/
41         CECOP_SET_ANALOGUE_TIMER        = 0x34,     /* Spec 1.3A*/
42         CECOP_TIMER_STATUS              = 0x35,     /* Spec 1.3A*/
43         CECOP_STANDBY                   = 0x36,
44         CECOP_PLAY                      = 0x41,
45         CECOP_DECK_CONTROL              = 0x42,
46         CECOP_TIMER_CLEARED_STATUS      = 0x43,     /* Spec 1.3A*/
47         CECOP_USER_CONTROL_PRESSED      = 0x44,
48         CECOP_USER_CONTROL_RELEASED     = 0x45,
49         CECOP_GIVE_OSD_NAME             = 0x46,
50         CECOP_SET_OSD_NAME              = 0x47,
51         CECOP_SET_OSD_STRING            = 0x64,
52         CECOP_SET_TIMER_PROGRAM_TITLE   = 0x67,     /* Spec 1.3A*/
53         CECOP_SYSTEM_AUDIO_MODE_REQUEST = 0x70,     /* Spec 1.3A*/
54         CECOP_GIVE_AUDIO_STATUS         = 0x71,     /* Spec 1.3A*/
55         CECOP_SET_SYSTEM_AUDIO_MODE     = 0x72,     /* Spec 1.3A*/
56         CECOP_REPORT_AUDIO_STATUS       = 0x7A,     /* Spec 1.3A*/
57         CECOP_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D, /* Spec 1.3A*/
58         CECOP_SYSTEM_AUDIO_MODE_STATUS  = 0x7E,     /* Spec 1.3A*/
59         CECOP_ROUTING_CHANGE            = 0x80,
60         CECOP_ROUTING_INFORMATION       = 0x81,
61         CECOP_ACTIVE_SOURCE             = 0x82,
62         CECOP_GIVE_PHYSICAL_ADDRESS     = 0x83,
63         CECOP_REPORT_PHYSICAL_ADDRESS   = 0x84,
64         CECOP_REQUEST_ACTIVE_SOURCE     = 0x85,
65         CECOP_SET_STREAM_PATH           = 0x86,
66         CECOP_DEVICE_VENDOR_ID          = 0x87,
67         CECOP_VENDOR_COMMAND            = 0x89,
68         CECOP_VENDOR_REMOTE_BUTTON_DOWN = 0x8A,
69         CECOP_VENDOR_REMOTE_BUTTON_UP   = 0x8B,
70         CECOP_GIVE_DEVICE_VENDOR_ID     = 0x8C,
71         CECOP_MENU_REQUEST              = 0x8D,
72         CECOP_MENU_STATUS               = 0x8E,
73         CECOP_GIVE_DEVICE_POWER_STATUS  = 0x8F,
74         CECOP_REPORT_POWER_STATUS       = 0x90,
75         CECOP_GET_MENU_LANGUAGE         = 0x91,
76         CECOP_SELECT_ANALOGUE_SERVICE   = 0x92,     /* Spec 1.3A    N/A*/
77         CECOP_SELECT_DIGITAL_SERVICE    = 0x93,     /*              N/A*/
78         CECOP_SET_DIGITAL_TIMER         = 0x97,     /* Spec 1.3A*/
79         CECOP_CLEAR_DIGITAL_TIMER       = 0x99,     /* Spec 1.3A*/
80         CECOP_SET_AUDIO_RATE            = 0x9A,     /* Spec 1.3A*/
81         CECOP_INACTIVE_SOURCE           = 0x9D,     /* Spec 1.3A*/
82         CECOP_CEC_VERSION               = 0x9E,     /* Spec 1.3A*/
83         CECOP_GET_CEC_VERSION           = 0x9F,     /* Spec 1.3A*/
84         CECOP_VENDOR_COMMAND_WITH_ID    = 0xA0,     /* Spec 1.3A*/
85         CECOP_CLEAR_EXTERNAL_TIMER      = 0xA1,     /* Spec 1.3A*/
86         CECOP_SET_EXTERNAL_TIMER        = 0xA2,     /* Spec 1.3A*/
87         CDCOP_HEADER                    = 0xF8,
88         CECOP_ABORT                     = 0xFF,
89
90         CECOP_REPORT_SHORT_AUDIO        = 0xA3,     /* Spec 1.4*/
91         CECOP_REQUEST_SHORT_AUDIO       = 0xA4,     /* Spec 1.4*/
92
93         CECOP_ARC_INITIATE              = 0xC0,
94         CECOP_ARC_REPORT_INITIATED      = 0xC1,
95         CECOP_ARC_REPORT_TERMINATED     = 0xC2,
96
97         CECOP_ARC_REQUEST_INITIATION    = 0xC3,
98         CECOP_ARC_REQUEST_TERMINATION   = 0xC4,
99         CECOP_ARC_TERMINATE             = 0xC5,   
100 } cec_opcode_t;
101
102 typedef enum                        /* Operands for <Feature Abort> Opcode*/
103 {
104         CECAR_UNRECOG_OPCODE            = 0x00,
105         CECAR_NOT_CORRECT_MODE,
106         CECAR_CANT_PROVIDE_SOURCE,
107         CECAR_INVALID_OPERAND,
108         CECAR_REFUSED
109 } cec_abor_reason_t;
110     
111 enum                        /* Operands for <Power Status> Opcode*/
112 {
113         CEC_POWERSTATUS_ON              = 0x00,
114         CEC_POWERSTATUS_STANDBY         = 0x01,
115         CEC_POWERSTATUS_STANDBY_TO_ON   = 0x02,
116         CEC_POWERSTATUS_ON_TO_STANDBY   = 0x03,
117 };
118
119 enum {
120         EVENT_RX_FRAME,
121         EVENT_ENUMERATE,
122 };
123
124 #define MAKE_SRCDEST( src, dest)    (( src << 4) | dest )
125
126 #define MAX_CMD_SIZE 16
127
128 typedef struct
129 {
130         char srcdestaddr;            /*Source in upper nybble, dest in lower nybble*/
131         char opcode;
132         char args[ MAX_CMD_SIZE ];
133         char argcount;
134         char nextframeargcount;
135 } cec_framedata_t;
136
137 struct cec_delayed_work {
138         struct delayed_work work;
139         int event;
140         void *data;
141 };
142
143 typedef struct
144 {
145         struct workqueue_struct *workqueue;     
146         wait_queue_head_t wait;
147         int busfree;
148         int tx_done;
149         int address_phy;
150         int address_logic;
151         int powerstatus;
152 } cec_t;
153
154 //#define DEBUG
155 #ifdef DEBUG
156 #define CECDBG(format, ...) \
157                 printk(KERN_INFO format, ## __VA_ARGS__)
158 #else
159 #define CECDBG(format, ...)
160 #endif
161 #endif