0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/fb.h>
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #define LCD_CONN_TYPE(_x) ((_x) & 0x0f)
0028 #define LCD_CONN_WIDTH(_x) (((_x) >> 4) & 0x1f)
0029
0030 #define LCD_TYPE_MASK 0xf
0031 #define LCD_TYPE_UNKNOWN 0
0032 #define LCD_TYPE_MONO_STN 1
0033 #define LCD_TYPE_MONO_DSTN 2
0034 #define LCD_TYPE_COLOR_STN 3
0035 #define LCD_TYPE_COLOR_DSTN 4
0036 #define LCD_TYPE_COLOR_TFT 5
0037 #define LCD_TYPE_SMART_PANEL 6
0038 #define LCD_TYPE_MAX 7
0039
0040 #define LCD_MONO_STN_4BPP ((4 << 4) | LCD_TYPE_MONO_STN)
0041 #define LCD_MONO_STN_8BPP ((8 << 4) | LCD_TYPE_MONO_STN)
0042 #define LCD_MONO_DSTN_8BPP ((8 << 4) | LCD_TYPE_MONO_DSTN)
0043 #define LCD_COLOR_STN_8BPP ((8 << 4) | LCD_TYPE_COLOR_STN)
0044 #define LCD_COLOR_DSTN_16BPP ((16 << 4) | LCD_TYPE_COLOR_DSTN)
0045 #define LCD_COLOR_TFT_8BPP ((8 << 4) | LCD_TYPE_COLOR_TFT)
0046 #define LCD_COLOR_TFT_16BPP ((16 << 4) | LCD_TYPE_COLOR_TFT)
0047 #define LCD_COLOR_TFT_18BPP ((18 << 4) | LCD_TYPE_COLOR_TFT)
0048 #define LCD_SMART_PANEL_8BPP ((8 << 4) | LCD_TYPE_SMART_PANEL)
0049 #define LCD_SMART_PANEL_16BPP ((16 << 4) | LCD_TYPE_SMART_PANEL)
0050 #define LCD_SMART_PANEL_18BPP ((18 << 4) | LCD_TYPE_SMART_PANEL)
0051
0052 #define LCD_AC_BIAS_FREQ(x) (((x) & 0xff) << 10)
0053 #define LCD_BIAS_ACTIVE_HIGH (0 << 18)
0054 #define LCD_BIAS_ACTIVE_LOW (1 << 18)
0055 #define LCD_PCLK_EDGE_RISE (0 << 19)
0056 #define LCD_PCLK_EDGE_FALL (1 << 19)
0057 #define LCD_ALTERNATE_MAPPING (1 << 20)
0058
0059
0060
0061
0062
0063
0064 struct pxafb_mode_info {
0065 u_long pixclock;
0066
0067 u_short xres;
0068 u_short yres;
0069
0070 u_char bpp;
0071 u_int cmap_greyscale:1,
0072 depth:8,
0073 transparency:1,
0074 unused:22;
0075
0076
0077 u_char hsync_len;
0078 u_char left_margin;
0079 u_char right_margin;
0080
0081 u_char vsync_len;
0082 u_char upper_margin;
0083 u_char lower_margin;
0084 u_char sync;
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098 unsigned a0csrd_set_hld;
0099 unsigned a0cswr_set_hld;
0100 unsigned wr_pulse_width;
0101 unsigned rd_pulse_width;
0102 unsigned cmd_inh_time;
0103 unsigned op_hold_time;
0104 };
0105
0106 struct pxafb_mach_info {
0107 struct pxafb_mode_info *modes;
0108 unsigned int num_modes;
0109
0110 unsigned int lcd_conn;
0111 unsigned long video_mem_size;
0112
0113 u_int fixed_modes:1,
0114 cmap_inverse:1,
0115 cmap_static:1,
0116 acceleration_enabled:1,
0117 unused:28;
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 u_int lccr0;
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140 u_int lccr3;
0141
0142
0143
0144
0145
0146 u_int lccr4;
0147 void (*pxafb_backlight_power)(int);
0148 void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *);
0149 void (*smart_update)(struct fb_info *);
0150 };
0151
0152 void pxa_set_fb_info(struct device *, struct pxafb_mach_info *);
0153 unsigned long pxafb_get_hsync_time(struct device *dev);
0154
0155
0156 #define SMART_CMD_A0 (0x1 << 8)
0157 #define SMART_CMD_READ_STATUS_REG (0x0 << 9)
0158 #define SMART_CMD_READ_FRAME_BUFFER ((0x0 << 9) | SMART_CMD_A0)
0159 #define SMART_CMD_WRITE_COMMAND (0x1 << 9)
0160 #define SMART_CMD_WRITE_DATA ((0x1 << 9) | SMART_CMD_A0)
0161 #define SMART_CMD_WRITE_FRAME ((0x2 << 9) | SMART_CMD_A0)
0162 #define SMART_CMD_WAIT_FOR_VSYNC (0x3 << 9)
0163 #define SMART_CMD_NOOP (0x4 << 9)
0164 #define SMART_CMD_INTERRUPT (0x5 << 9)
0165
0166 #define SMART_CMD(x) (SMART_CMD_WRITE_COMMAND | ((x) & 0xff))
0167 #define SMART_DAT(x) (SMART_CMD_WRITE_DATA | ((x) & 0xff))
0168
0169
0170
0171
0172
0173 #define SMART_CMD_DELAY (0x6 << 9)
0174 #define SMART_DELAY(ms) (SMART_CMD_DELAY | ((ms) & 0xff))
0175
0176 #ifdef CONFIG_FB_PXA_SMARTPANEL
0177 extern int pxafb_smart_queue(struct fb_info *info, uint16_t *cmds, int);
0178 extern int pxafb_smart_flush(struct fb_info *info);
0179 #else
0180 static inline int pxafb_smart_queue(struct fb_info *info,
0181 uint16_t *cmds, int n)
0182 {
0183 return 0;
0184 }
0185
0186 static inline int pxafb_smart_flush(struct fb_info *info)
0187 {
0188 return 0;
0189 }
0190 #endif