it66121: update and remove debug log
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / hdmi / chips / cat66121 / cat66121_hdmi_hw.c
1 #include <linux/delay.h>
2 #include "cat66121_hdmi.h"
3 #include "cat66121_hdmi_hw.h"
4 #include <asm/atomic.h>
5 #include <mach/io.h>
6 #include <mach/gpio.h>
7 #include <mach/iomux.h>
8
9 #define HDMITX_INPUT_SIGNAL_TYPE 0  // for default(Sync Sep Mode)
10 #define INPUT_SPDIF_ENABLE      0
11 extern int CAT66121_Interrupt_Process(void);
12 /*******************************
13  * Global Data
14  ******************************/
15 static _XDATA AVI_InfoFrame AviInfo;
16 static _XDATA Audio_InfoFrame AudioInfo;
17 static unsigned long VideoPixelClock;
18 static unsigned int pixelrep;
19
20 /* I2C read/write funcs */
21 BYTE HDMITX_ReadI2C_Byte(BYTE RegAddr)
22 {
23         struct i2c_msg msgs[2];
24         SYS_STATUS ret = -1;
25         BYTE buf[1];
26
27         buf[0] = RegAddr;
28
29         /* Write device addr fisrt */
30         msgs[0].addr    = cat66121_hdmi->client->addr;
31         msgs[0].flags   = !I2C_M_RD;
32         msgs[0].len             = 1;
33         msgs[0].buf             = &buf[0];
34         msgs[0].scl_rate= 100*1000;
35         /* Then, begin to read data */
36         msgs[1].addr    = cat66121_hdmi->client->addr;
37         msgs[1].flags   = I2C_M_RD;
38         msgs[1].len             = 1;
39         msgs[1].buf             = &buf[0];
40         msgs[1].scl_rate= 100*1000;
41         
42         ret = i2c_transfer(cat66121_hdmi->client->adapter, msgs, 2);
43         if(ret != 2)
44                 printk("I2C transfer Error! ret = %d\n", ret);
45
46         //ErrorF("Reg%02xH: 0x%02x\n", RegAddr, buf[0]);
47         return buf[0];
48 }
49
50 SYS_STATUS HDMITX_WriteI2C_Byte(BYTE RegAddr, BYTE data)
51 {
52         struct i2c_msg msg;
53         SYS_STATUS ret = -1;
54         BYTE buf[2];
55
56         buf[0] = RegAddr;
57         buf[1] = data;
58
59         msg.addr        = cat66121_hdmi->client->addr;
60         msg.flags       = !I2C_M_RD;
61         msg.len         = 2;
62         msg.buf         = buf;          
63         msg.scl_rate= 100*1000;
64         
65         ret = i2c_transfer(cat66121_hdmi->client->adapter, &msg, 1);
66         if(ret != 1)
67                 printk("I2C transfer Error!\n");
68
69         return ret;
70 }
71
72 SYS_STATUS HDMITX_ReadI2C_ByteN(BYTE RegAddr, BYTE *pData, int N)
73 {
74         struct i2c_msg msgs[2];
75         SYS_STATUS ret = -1;
76
77         pData[0] = RegAddr;
78
79         msgs[0].addr    = cat66121_hdmi->client->addr;
80         msgs[0].flags   = !I2C_M_RD;
81         msgs[0].len             = 1;
82         msgs[0].buf             = &pData[0];
83         msgs[0].scl_rate= 100*1000;
84
85         msgs[1].addr    = cat66121_hdmi->client->addr;
86         msgs[1].flags   = I2C_M_RD;
87         msgs[1].len             = N;
88         msgs[1].buf             = pData;
89         msgs[1].scl_rate= 100*1000;
90         
91         ret = i2c_transfer(cat66121_hdmi->client->adapter, msgs, 2);
92         if(ret != 2)
93                 printk("I2C transfer Error! ret = %d\n", ret);
94
95         return ret;
96 }
97
98 SYS_STATUS HDMITX_WriteI2C_ByteN(BYTE RegAddr, BYTE *pData, int N)
99 {
100         struct i2c_msg msg;
101         SYS_STATUS ret = -1;
102         BYTE buf[N + 1];
103
104         buf[0] = RegAddr;
105         memcpy(&buf[1], pData, N);
106
107         msg.addr        = cat66121_hdmi->client->addr;
108         msg.flags       = !I2C_M_RD;
109         msg.len         = N + 1;
110         msg.buf         = buf;          // gModify.Exp."Include RegAddr"
111         msg.scl_rate= 100*1000;
112         
113         ret = i2c_transfer(cat66121_hdmi->client->adapter, &msg, 1);
114         if(ret != 1)
115                 printk("I2C transfer Error! ret = %d\n", ret);
116
117         return ret;
118 }
119 SYS_STATUS HDMITX_SetI2C_Byte(BYTE Reg,BYTE Mask,BYTE Value)
120 {
121     BYTE Temp;
122     if( Mask != 0xFF )
123     {
124         Temp=HDMITX_ReadI2C_Byte(Reg);
125         Temp&=(~Mask);
126         Temp|=Value&Mask;
127     }
128     else
129     {
130         Temp=Value;
131     }
132     return HDMITX_WriteI2C_Byte(Reg,Temp);
133 }
134 int cat66121_hdmi_sys_init(void)
135 {
136         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
137         VideoPixelClock = 0;
138         pixelrep = 0;
139         InitHDMITX_Variable();
140         InitHDMITX();
141         msleep(100);
142         return HDMI_ERROR_SUCESS;
143 }
144
145 void cat66121_hdmi_interrupt()
146 {
147         char interrupt = 0;
148
149         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
150         if(hdmi->state == HDMI_SLEEP)
151                 hdmi->state = WAIT_HOTPLUG;
152         queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, msecs_to_jiffies(10));   
153 }
154
155 int cat66121_hdmi_sys_detect_hpd(void)
156 {
157         char hdmi_status = 0;
158         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
159         //      BYTE sysstat;
160
161         //sysstat = HDMITX_ReadI2C_Byte(REG_SYS_STATUS) ;   
162         //*hpdstatus = ((sysstat & B_HPDETECT) == B_HPDETECT)?TRUE:FALSE ;
163         hdmi_status = HDMITX_DevLoopProc();
164         if(hdmi_status)
165                 return HDMI_HPD_ACTIVED;
166         else
167                 return HDMI_HPD_REMOVED;
168 }
169
170 int cat66121_hdmi_sys_read_edid(int block, unsigned char *buff)
171 {
172         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
173         return (getHDMITX_EDIDBlock(block, buff) == TRUE)?HDMI_ERROR_SUCESS:HDMI_ERROR_FALSE;
174 }
175
176 static void cat66121_sys_config_avi(int VIC, int bOutputColorMode, int aspec, int Colorimetry, int pixelrep)
177 {
178         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
179 //     AVI_InfoFrame AviInfo;
180
181 }
182
183 int cat66121_hdmi_sys_config_video(struct hdmi_video_para *vpara)
184 {
185         HDMITX_ChangeDisplayOption(vpara->vic,HDMI_RGB444) ;
186         return HDMI_ERROR_SUCESS;
187 }
188
189 static void cat66121_hdmi_config_aai(void)
190 {
191         printk( "[%s]\n", __FUNCTION__);
192 }
193
194 int cat66121_hdmi_sys_config_audio(struct hdmi_audio *audio)
195 {
196         printk( "[%s]\n", __FUNCTION__);
197         return HDMI_ERROR_SUCESS;
198 }
199
200 void cat66121_hdmi_sys_enalbe_output(int enable)
201 {
202         
203         printk( "[%s]\n", __FUNCTION__);
204 }
205
206 int cat66121_hdmi_sys_insert(void)
207 {
208         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
209         printk( "[%s]\n", __FUNCTION__);
210         return 0;
211 }
212
213 int cat66121_hdmi_sys_remove(void)
214 {
215         hdmi_dbg(hdmi->dev, "[%s]\n", __FUNCTION__);
216 //      printk( "[%s]\n", __FUNCTION__);
217
218         return 0;
219 }