1 /* drivers/video/sc8810/sc8810_lcd.h
3 * Spreadtrum LCD abstraction
5 * Copyright (C) 2010 Spreadtrum.com
7 * This software is licensed under the terms of the GNU General Public
8 * License version 2, as published by the Free Software Foundation, and
9 * may be copied, distributed, and modified under those terms.
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.
20 #include <asm/arch/sci_types.h>
22 #include <linux/types.h>
25 #define LCD_DelayMS(ms) udelay(1000*(ms))
28 #define SPRDFB_I2C_WRITE_DELAY 0xffff
32 #define LCD_MODE_MCU 0
33 #define LCD_MODE_RGB 1
34 #define LCD_MODE_DSI 2
35 #define LCD_MODE_LVDS 3
38 #define LCD_BUS_8080 0
39 #define LCD_BUS_6800 1
43 #define LCD_DIRECT_NORMAL 0
44 #define LCD_DIRECT_ROT_90 1
45 #define LCD_DIRECT_ROT_180 2
46 #define LCD_DIRECT_ROT_270 3
47 #define LCD_DIRECT_MIR_H 4
48 #define LCD_DIRECT_MIR_V 5
49 #define LCD_DIRECT_MIR_HV 6
51 #define PIN_PWM0_MOD_VALUE 0x20
53 #define SPRD_PWM_BASE 0x88000000
54 #define SPRD_PWM_REG(off) (SPRD_PWM_BASE + (off))
55 #define SPRD_PWM0_PRESCALE SPRD_PWM_REG(0x0000)
56 #define SPRD_PWM0_CNT SPRD_PWM_REG(0x0004)
57 #define SPRD_PWM0_TONE_DIV SPRD_PWM_REG(0x0008)
58 #define SPRD_PWM0_PAT_LOW SPRD_PWM_REG(0x000C)
59 #define SPRD_PWM0_PAT_HIG SPRD_PWM_REG(0x0010)
61 #define LCD_PWM_PRESCALE_VALUE 0x01
62 #define LCD_PWM_MOD_VALUE 0xFF
63 #define PWM_REG_MSK_VALUE 0xFFFF
65 #define LCD_PWM0_EN BIT_8
69 /* lcdc refresh, TE on, double timing, partial update*/
70 #define PANEL_CAP_NORMAL 0x0
72 /* only not support partial update*/
73 #define PANEL_CAP_NOT_PARTIAL_UPDATE 0x1
75 /* write register, grame have the same timing */
76 #define PANEL_CAP_UNIQUE_TIMING 0x2
78 /* lcd not support TE */
79 #define PANEL_CAP_NOT_TEAR_SYNC 0x4
81 /* only do command/data register, such as some mono oled display device */
82 #define PANEL_CAP_MANUAL_REFRESH 0x8
85 SPRDFB_PANEL_TYPE_MCU = 0,
86 SPRDFB_PANEL_TYPE_RGB,
87 SPRDFB_PANEL_TYPE_MIPI,
88 SPRDFB_PANEL_TYPE_LVDS,
89 SPRDFB_PANEL_TYPE_LIMIT
93 SPRDFB_POLARITY_POS = 0,
99 SPRDFB_RGB_BUS_TYPE_I2C = 0,
100 SPRDFB_RGB_BUS_TYPE_SPI,
101 SPRDFB_RGB_BUS_TYPE_LVDS,
102 SPRDFB_RGB_BUG_TYPE_LIMIT
106 SPRDFB_MIPI_MODE_CMD = 0,
107 SPRDFB_MIPI_MODE_VIDEO,
108 SPRDFB_MIPI_MODE_LIMIT
113 typedef int32_t (*send_cmd_t)(uint32_t data);
114 typedef int32_t (*send_data_t)(uint32_t data);
115 typedef int32_t (*send_cmd_data_t)(uint32_t cmd, uint32_t data);
116 typedef uint32_t (*read_data_t)(void);
119 typedef int32_t (*mipi_set_cmd_mode_t)(void);
120 typedef int32_t (*mipi_set_video_mode_t)(void);
121 typedef int32_t (*mipi_set_lp_mode_t)(void);//LiWei
122 typedef int32_t (*mipi_set_hs_mode_t)(void);//LiWei
123 typedef int32_t (*mipi_gen_write_t)(uint8_t *param, uint16_t param_length);
124 typedef int32_t (*mipi_gen_read_t)(uint8_t *param, uint16_t param_length, uint8_t bytes_to_read, uint8_t *read_buffer);
125 typedef int32_t (*mipi_dcs_write_t)(uint8_t *param, uint16_t param_length);
126 typedef int32_t (*mipi_dcs_read_t)(uint8_t command, uint8_t bytes_to_read, uint8_t *read_buffer);
127 typedef int32_t (*mipi_force_write_t)(uint8_t data_type, uint8_t *param, uint16_t param_length); //add for LCD adapter
128 typedef int32_t (*mipi_force_read_t)(uint8_t command, uint8_t bytes_to_read, uint8_t *read_buffer);
129 typedef int32_t (*mipi_eotp_set_t)(uint8_t rx_en, uint8_t tx_en);
131 typedef int32_t (*i2c_write_8bits_t)(uint8_t addr, uint8_t reg, uint8_t val);
132 typedef int32_t (*i2c_read_8bits_t)(uint8_t addr, uint8_t reg, uint8_t *val);
133 typedef int32_t (*i2c_write_16bits_t)(uint8_t addr, uint16_t reg, BOOLEAN reg_is_8bit, uint16_t val, BOOLEAN val_is_8bit);
134 typedef int32_t (*i2c_read_16bits_t)(uint8_t addr, uint16_t reg, BOOLEAN reg_is_8bit, uint16_t *val, BOOLEAN val_is_8bit);
135 typedef int32_t (*i2c_write_burst_t)(uint8_t addr, uint8_t* buf, int num);
137 typedef void (*spi_send_cmd_t)(uint32_t cmd);
138 typedef void (*spi_send_data_t)(uint32_t data);
139 typedef void (*spi_read_t)(uint32_t *data);
142 struct panel_operations {
143 int32_t (*panel_init)(struct panel_spec *self);
144 int32_t (*panel_close)(struct panel_spec *self);
145 int32_t (*panel_reset)(struct panel_spec *self);
146 int32_t (*panel_enter_sleep)(struct panel_spec *self, uint8_t is_sleep);
147 int32_t (*panel_set_contrast)(struct panel_spec *self, uint16_t contrast);
148 int32_t (*panel_set_brightness)(struct panel_spec *self,
149 uint16_t brightness);
150 int32_t (*panel_set_window)(struct panel_spec *self,
151 uint16_t left, uint16_t top,
152 uint16_t right, uint16_t bottom);
153 int32_t (*panel_invalidate)(struct panel_spec *self);
154 int32_t (*panel_invalidate_rect)(struct panel_spec *self,
155 uint16_t left, uint16_t top,
156 uint16_t right, uint16_t bottom);
157 int32_t (*panel_rotate_invalidate_rect)(struct panel_spec *self,
158 uint16_t left, uint16_t top,
159 uint16_t right, uint16_t bottom,
161 int32_t (*panel_set_direction)(struct panel_spec *self, uint16_t direction);
162 uint32_t (*panel_readid)(struct panel_spec *self);
165 /* MCU LCD specific properties */
175 /* RGB LCD specific properties */
186 int32_t (*send_cmd)(uint32_t cmd);
187 int32_t (*send_cmd_data)(uint32_t cmd, uint32_t data);
188 int32_t (*send_data)(uint32_t data);
189 uint32_t (*read_data)(void);
193 int32_t (*i2c_write_8bits)(uint8_t addr, uint8_t reg, uint8_t val);
194 int32_t (*i2c_read_8bits)(uint8_t addr, uint8_t reg, uint8_t *val);
195 int32_t (*i2c_write_16bits)(uint8_t addr, uint16_t reg, BOOLEAN reg_is_8bit, uint16_t val, BOOLEAN val_is_8bit);
196 int32_t (*i2c_read_16bits)(uint8_t addr, uint16_t reg, BOOLEAN reg_is_8bit, uint16_t *val, BOOLEAN val_is_8bit);
197 int32_t (*i2c_write_burst)(uint8_t addr, uint8_t* buf, int num);
201 void (*spi_send_cmd)(uint32_t cmd);
202 void (*spi_send_data)(uint32_t data);
203 void (*spi_read)(uint32_t *data);
207 int32_t (*mipi_set_cmd_mode)(void);
208 int32_t (*mipi_set_video_mode)(void);
209 int32_t (*mipi_set_lp_mode)(void);
210 int32_t (*mipi_set_hs_mode)(void);
211 int32_t (*mipi_gen_write)(uint8_t *param, uint16_t param_length);
212 int32_t (*mipi_gen_read)(uint8_t *param, uint16_t param_length, uint8_t bytes_to_read, uint8_t *read_buffer);
213 int32_t (*mipi_dcs_write)(uint8_t *param, uint16_t param_length);
214 int32_t (*mipi_dcs_read)(uint8_t command, uint8_t bytes_to_read, uint8_t *read_buffer);
215 int32_t (*mipi_force_write)(uint8_t data_type, uint8_t *param, uint16_t param_length); //add for LCD adapter
216 int32_t (*mipi_force_read)(uint8_t command, uint8_t bytes_to_read, uint8_t *read_buffer);
217 int32_t (*mipi_eotp_set)(uint8_t rx_en, uint8_t tx_en);
230 uint16_t work_mode; /*command_mode, video_mode*/
231 uint16_t video_bus_width;
237 uint16_t te_pol; /*only for command_mode*/
238 uint16_t color_mode_pol;
239 uint16_t shut_down_pol;
240 struct timing_rgb *timing;
241 struct ops_mipi *ops;
245 uint16_t cmd_bus_mode; /*spi, i2c*/
246 uint16_t video_bus_width;
250 struct timing_rgb *timing;
252 struct i2c_info *i2c;
253 struct spi_info *spi;
258 uint16_t bus_mode; /*8080, 6800*/
262 uint32_t te_sync_delay;
263 struct timing_mcu *timing;
268 /* LCD abstraction */
274 uint16_t type; /*mcu, rgb, mipi*/
276 uint16_t is_need_reset;
278 struct info_mcu *mcu;
279 struct info_rgb *rgb;
280 struct info_mipi * mipi;
282 struct panel_operations *ops;
287 struct panel_spec *panel;
290 extern void LCD_SetBackLightBrightness( unsigned long value);