[boot] move boot related packages to their own folder
[openwrt.git] / package / boot / uboot-xburst / files / cpu / mips / jz_lcd.h
1 /*
2  * JzRISC lcd controller
3  *
4  * xiangfu liu <xiangfu.z@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19  * MA 02111-1307 USA
20  */
21
22 #ifndef __JZLCD_H__
23 #define __JZLCD_H__
24
25 #include <asm/io.h>
26 /*
27  * change u-boot macro to celinux macro
28  */
29 /* Chip type */
30 #if defined(CONFIG_JZ4740)
31 #define CONFIG_MIPS_JZ4740              1
32 #endif
33
34 /* board type */
35 #if defined(CONFIG_NANONOTE)
36 #define CONFIG_MIPS_JZ4740_PI           1
37 #endif
38
39 #define mdelay(n)               udelay((n)*1000)
40
41 /*
42  * change u-boot macro to celinux macro
43  */
44
45 #define NR_PALETTE      256
46
47 struct lcd_desc{
48         unsigned int next_desc; /* LCDDAx */
49         unsigned int databuf;   /* LCDSAx */
50         unsigned int frame_id;  /* LCDFIDx */
51         unsigned int cmd;       /* LCDCMDx */
52 };
53
54 #define MODE_MASK               0x0f
55 #define MODE_TFT_GEN            0x00
56 #define MODE_TFT_SHARP          0x01
57 #define MODE_TFT_CASIO          0x02
58 #define MODE_TFT_SAMSUNG        0x03
59 #define MODE_CCIR656_NONINT     0x04
60 #define MODE_CCIR656_INT        0x05
61 #define MODE_STN_COLOR_SINGLE   0x08
62 #define MODE_STN_MONO_SINGLE    0x09
63 #define MODE_STN_COLOR_DUAL     0x0a
64 #define MODE_STN_MONO_DUAL      0x0b
65 #define MODE_8BIT_SERIAL_TFT    0x0c
66
67 #define MODE_TFT_18BIT          (1<<7)
68
69 #define STN_DAT_PIN1    (0x00 << 4)
70 #define STN_DAT_PIN2    (0x01 << 4)
71 #define STN_DAT_PIN4    (0x02 << 4)
72 #define STN_DAT_PIN8    (0x03 << 4)
73 #define STN_DAT_PINMASK STN_DAT_PIN8
74
75 #define STFT_PSHI       (1 << 15)
76 #define STFT_CLSHI      (1 << 14)
77 #define STFT_SPLHI      (1 << 13)
78 #define STFT_REVHI      (1 << 12)
79
80 #define SYNC_MASTER     (0 << 16)
81 #define SYNC_SLAVE      (1 << 16)
82
83 #define DE_P            (0 << 9)
84 #define DE_N            (1 << 9)
85
86 #define PCLK_P          (0 << 10)
87 #define PCLK_N          (1 << 10)
88
89 #define HSYNC_P         (0 << 11)
90 #define HSYNC_N         (1 << 11)
91
92 #define VSYNC_P         (0 << 8)
93 #define VSYNC_N         (1 << 8)
94
95 #define DATA_NORMAL     (0 << 17)
96 #define DATA_INVERSE    (1 << 17)
97
98
99 /* Jz LCDFB supported I/O controls. */
100 #define FBIOSETBACKLIGHT        0x4688
101 #define FBIODISPON              0x4689
102 #define FBIODISPOFF             0x468a
103 #define FBIORESET               0x468b
104 #define FBIOPRINT_REG           0x468c
105
106 /*
107  * LCD panel specific definition
108  */
109
110 #if defined(CONFIG_JZLCD_FOXCONN_PT035TN01) || defined(CONFIG_JZLCD_INNOLUX_PT035TN01_SERIAL)
111
112 #if defined(CONFIG_JZLCD_FOXCONN_PT035TN01) /* board pmp */
113 #define MODE 0xcd               /* 24bit parellel RGB */
114 #endif
115 #if defined(CONFIG_JZLCD_INNOLUX_PT035TN01_SERIAL)
116 #define MODE 0xc9               /* 8bit serial RGB */
117 #endif
118
119 #if defined(CONFIG_MIPS_JZ4740_PI) /* board pavo */
120         #define SPEN    (32*2+21)       /*LCD_SPL */
121         #define SPCK    (32*2+23)       /*LCD_CLS */
122         #define SPDA    (32*2+22)       /*LCD_D12 */
123         #define LCD_RET (32*3+27) 
124 #else
125 #error "cpu/misp/Jzlcd.h, please define SPI pins on your board."
126 #endif
127
128         #define __spi_write_reg1(reg, val) \
129         do { \
130                 unsigned char no;\
131                 unsigned short value;\
132                 unsigned char a=0;\
133                 unsigned char b=0;\
134                 a=reg;\
135                 b=val;\
136                 __gpio_set_pin(SPEN);\
137                 __gpio_set_pin(SPCK);\
138                 __gpio_clear_pin(SPDA);\
139                 __gpio_clear_pin(SPEN);\
140                 udelay(25);\
141                 value=((a<<8)|(b&0xFF));\
142                 for(no=0;no<16;no++)\
143                 {\
144                         __gpio_clear_pin(SPCK);\
145                         if((value&0x8000)==0x8000)\
146                         __gpio_set_pin(SPDA);\
147                         else\
148                         __gpio_clear_pin(SPDA);\
149                         udelay(25);\
150                         __gpio_set_pin(SPCK);\
151                         value=(value<<1); \
152                         udelay(25);\
153                  }\
154                 __gpio_set_pin(SPEN);\
155                 udelay(100);\
156         } while (0)
157
158         #define __spi_write_reg(reg, val) \
159         do {\
160                 __spi_write_reg1((reg<<2|2), val);\
161                 udelay(100); \
162         }while(0)
163
164         
165         #define __lcd_special_pin_init() \
166         do { \
167                 __gpio_as_output(SPEN); /* use SPDA */\
168                 __gpio_as_output(SPCK); /* use SPCK */\
169                 __gpio_as_output(SPDA); /* use SPDA */\
170                 __gpio_as_output(LCD_RET);\
171         } while (0)
172
173 #if defined(CONFIG_NANONOTE)
174         #define __lcd_special_on() \
175                 do { \
176                 udelay(50);\
177                 __spi_write_reg1(0x05, 0x16); \
178                 __spi_write_reg1(0x04, 0x0b); \
179                 __spi_write_reg1(0x07, 0x8d); \
180                 __spi_write_reg1(0x01, 0x95); \
181                 __spi_write_reg1(0x08, 0xc0); \
182                 __spi_write_reg1(0x03, 0x40); \
183                 __spi_write_reg1(0x06, 0x15); \
184                 __spi_write_reg1(0x05, 0xd7); \
185                 } while (0)     /* reg 0x0a is control the display direction:DB0->horizontal level DB1->vertical level */
186
187         #define __lcd_special_off()                             \
188                           do {                                  \
189                                   __spi_write_reg1(0x05, 0x5e); \
190                           } while (0)
191 #endif  /* CONFIG_NANONOTE */
192 #endif  /* CONFIG_JZLCD_FOXCONN_PT035TN01 or CONFIG_JZLCD_INNOLUX_PT035TN01_SERIAL */
193
194 #ifndef __lcd_special_pin_init
195 #define __lcd_special_pin_init()
196 #endif
197 #ifndef __lcd_special_on
198 #define __lcd_special_on()
199 #endif
200 #ifndef __lcd_special_off
201 #define __lcd_special_off()
202 #endif
203
204
205 /*
206  * Platform specific definition
207  */
208
209 #if defined(CONFIG_MIPS_JZ4740_PI)
210
211         /* 100 level: 0,1,...,100 */
212         #define __lcd_set_backlight_level(n)\
213         do { \
214         __gpio_as_output(32*3+27); \
215         __gpio_set_pin(32*3+27); \
216         } while (0)
217
218         #define __lcd_close_backlight() \
219         do { \
220         __gpio_as_output(GPIO_PWM); \
221         __gpio_clear_pin(GPIO_PWM); \
222         } while (0)
223
224         #define __lcd_display_pin_init() \
225         do { \
226                 __gpio_as_output(GPIO_DISP_OFF_N); \
227                 __cpm_start_tcu(); \
228                 __lcd_special_pin_init(); \
229         } while (0)
230         /*      __lcd_set_backlight_level(100); \*/
231         #define __lcd_display_on() \
232         do { \
233                 __gpio_set_pin(GPIO_DISP_OFF_N); \
234                 __lcd_special_on(); \
235         } while (0)
236
237         #define __lcd_display_off() \
238         do { \
239                 __lcd_special_off(); \
240                 __gpio_clear_pin(GPIO_DISP_OFF_N); \
241         } while (0)
242
243 #endif /* CONFIG_MIPS_JZ4740_PI) */
244
245 /*****************************************************************************
246  * LCD display pin dummy macros
247  *****************************************************************************/
248 #ifndef __lcd_display_pin_init
249 #define __lcd_display_pin_init()
250 #endif
251 #ifndef __lcd_display_on
252 #define __lcd_display_on()
253 #endif
254 #ifndef __lcd_display_off
255 #define __lcd_display_off()
256 #endif
257 #ifndef __lcd_set_backlight_level
258 #define __lcd_set_backlight_level(n)
259 #endif
260