--- /dev/null
+#include <linux/fb.h>\r
+#include <linux/delay.h>\r
+#include "../../rk29_fb.h"\r
+#include <mach/gpio.h>\r
+#include <mach/iomux.h>\r
+#include <mach/board.h>\r
+\r
+#include <linux/interrupt.h>\r
+#include <linux/i2c.h>\r
+#include <linux/slab.h>\r
+#include <linux/irq.h>\r
+#include <linux/miscdevice.h>\r
+#include <linux/gpio.h>\r
+#include <asm/uaccess.h>\r
+#include <asm/atomic.h>\r
+#include <linux/delay.h>\r
+#include <linux/input.h>\r
+#include <linux/workqueue.h>\r
+#include <linux/freezer.h>\r
+#include <linux/input/mt.h>\r
+\r
+#ifdef CONFIG_HAS_EARLYSUSPEND\r
+#include <linux/earlysuspend.h>\r
+#endif\r
+#include <linux/ts-auto.h>\r
+#include "screen.h"\r
+\r
+\r
+//FOR ID0\r
+/* Base */\r
+#define OUT_TYPE_ID0 SCREEN_RGB\r
+\r
+#define OUT_FACE_ID0 OUT_P888\r
+#define OUT_CLK_ID0 50000000\r
+#define LCDC_ACLK_ID0 500000000\r
+\r
+/* Timing */\r
+#define H_PW_ID0 100\r
+#define H_BP_ID0 100\r
+#define H_VD_ID0 1024\r
+#define H_FP_ID0 120\r
+\r
+#define V_PW_ID0 10\r
+#define V_BP_ID0 10\r
+#define V_VD_ID0 600\r
+#define V_FP_ID0 15\r
+\r
+#define LCD_WIDTH_ID0 202\r
+#define LCD_HEIGHT_ID0 152\r
+/* Other */\r
+#define DCLK_POL_ID0 0\r
+#define SWAP_RB_ID0 0 \r
+\r
+//FOR ID2\r
+#define OUT_TYPE_ID2 SCREEN_RGB\r
+\r
+#define OUT_FACE_ID2 OUT_P888\r
+#define OUT_CLK_ID2 65000000\r
+#define LCDC_ACLK_ID2 500000000\r
+\r
+/* Timing */\r
+#define H_PW_ID2 100\r
+#define H_BP_ID2 100\r
+#define H_VD_ID2 1024\r
+#define H_FP_ID2 120\r
+\r
+#define V_PW_ID2 10\r
+#define V_BP_ID2 10\r
+#define V_VD_ID2 768\r
+#define V_FP_ID2 15\r
+\r
+#define LCD_WIDTH_ID2 216\r
+#define LCD_HEIGHT_ID2 162\r
+/* Other */\r
+#define DCLK_POL_ID2 0\r
+#define SWAP_RB_ID2 0 \r
+\r
+//FOR ID2\r
+/* Base */\r
+#define OUT_TYPE_ID3 SCREEN_RGB\r
+#define OUT_FACE_ID3 OUT_P888\r
+#define OUT_CLK_ID3 71000000\r
+#define LCDC_ACLK_ID3 500000000 \r
+\r
+/* Timing */\r
+#define H_PW_ID3 10\r
+#define H_BP_ID3 160\r
+#define H_VD_ID3 1280\r
+#define H_FP_ID3 16\r
+\r
+#define V_PW_ID3 3\r
+#define V_BP_ID3 23\r
+#define V_VD_ID3 800\r
+#define V_FP_ID3 12\r
+\r
+\r
+/* Other */\r
+#define DCLK_POL_ID3 0\r
+#define SWAP_RB_ID3 0\r
+\r
+#define LCD_WIDTH_ID3 270\r
+#define LCD_HEIGHT_ID3 202\r
+\r
+\r
+extern struct ts_private_data *g_ts;\r
+extern int rk_get_board_id(void);\r
+\r
+static int lcd_get_id(void)\r
+{\r
+ int id = -1;\r
+#if 0\r
+ id = rk_get_board_id();\r
+ \r
+#else\r
+ struct ts_max_pixel pixel;\r
+\r
+ if(!g_ts)\r
+ return -1;\r
+ \r
+ pixel = g_ts->ops->pixel;\r
+ if((pixel.max_x == 1024)&&(pixel.max_y == 600))\r
+ id = 0;\r
+ else if((pixel.max_x == 1024)&&(pixel.max_y == 768)) \r
+ id = 2;\r
+ else if((pixel.max_x == 1280)&&(pixel.max_y == 800)) \r
+ id = 3;\r
+#endif\r
+ return id;\r
+}\r
+\r
+\r
+void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )\r
+{\r
+ int id;\r
+ id = lcd_get_id();\r
+\r
+ switch(id)\r
+ {\r
+ case 0:\r
+ \r
+ /* screen type & face */\r
+ screen->type = OUT_TYPE_ID0;\r
+ screen->face = OUT_FACE_ID0;\r
+\r
+ /* Screen size */\r
+ screen->x_res = H_VD_ID0;\r
+ screen->y_res = V_VD_ID0;\r
+\r
+ screen->width = LCD_WIDTH_ID0;\r
+ screen->height = LCD_HEIGHT_ID0;\r
+\r
+ /* Timing */\r
+ screen->lcdc_aclk = LCDC_ACLK_ID0;\r
+ screen->pixclock = OUT_CLK_ID0;\r
+ screen->left_margin = H_BP_ID0;\r
+ screen->right_margin = H_FP_ID0;\r
+ screen->hsync_len = H_PW_ID0;\r
+ screen->upper_margin = V_BP_ID0;\r
+ screen->lower_margin = V_FP_ID0;\r
+ screen->vsync_len = V_PW_ID0;\r
+\r
+ /* Pin polarity */\r
+ screen->pin_hsync = 0;\r
+ screen->pin_vsync = 0;\r
+ screen->pin_den = 0;\r
+ screen->pin_dclk = DCLK_POL_ID0;\r
+\r
+ /* Swap rule */\r
+ screen->swap_rb = SWAP_RB_ID0;\r
+ screen->swap_rg = 0;\r
+ screen->swap_gb = 0;\r
+ screen->swap_delta = 0;\r
+ screen->swap_dumy = 0;\r
+\r
+ /* Operation function*/\r
+ screen->init = NULL;\r
+ screen->standby = NULL;\r
+\r
+ break;\r
+\r
+ case 2:\r
+ \r
+ /* screen type & face */\r
+ screen->type = OUT_TYPE_ID2;\r
+ screen->face = OUT_FACE_ID2;\r
+\r
+ /* Screen size */\r
+ screen->x_res = H_VD_ID2;\r
+ screen->y_res = V_VD_ID2;\r
+\r
+ screen->width = LCD_WIDTH_ID2;\r
+ screen->height = LCD_HEIGHT_ID2;\r
+\r
+ /* Timing */\r
+ screen->lcdc_aclk = LCDC_ACLK_ID2;\r
+ screen->pixclock = OUT_CLK_ID2;\r
+ screen->left_margin = H_BP_ID2;\r
+ screen->right_margin = H_FP_ID2;\r
+ screen->hsync_len = H_PW_ID2;\r
+ screen->upper_margin = V_BP_ID2;\r
+ screen->lower_margin = V_FP_ID2;\r
+ screen->vsync_len = V_PW_ID2;\r
+\r
+ /* Pin polarity */\r
+ screen->pin_hsync = 0;\r
+ screen->pin_vsync = 0;\r
+ screen->pin_den = 0;\r
+ screen->pin_dclk = DCLK_POL_ID2;\r
+\r
+ /* Swap rule */\r
+ screen->swap_rb = SWAP_RB_ID2;\r
+ screen->swap_rg = 0;\r
+ screen->swap_gb = 0;\r
+ screen->swap_delta = 0;\r
+ screen->swap_dumy = 0;\r
+\r
+ /* Operation function*/\r
+ screen->init = NULL;\r
+ screen->standby = NULL;\r
+\r
+ break;\r
+\r
+ case 3:\r
+ default:\r
+ \r
+ /* screen type & face */\r
+ screen->type = OUT_TYPE_ID3;\r
+ screen->face = OUT_FACE_ID3;\r
+\r
+ /* Screen size */\r
+ screen->x_res = H_VD_ID3;\r
+ screen->y_res = V_VD_ID3;\r
+\r
+ screen->width = LCD_WIDTH_ID3;\r
+ screen->height = LCD_HEIGHT_ID3;\r
+\r
+ /* Timing */\r
+ screen->lcdc_aclk = LCDC_ACLK_ID3;\r
+ screen->pixclock = OUT_CLK_ID3;\r
+ screen->left_margin = H_BP_ID3;\r
+ screen->right_margin = H_FP_ID3;\r
+ screen->hsync_len = H_PW_ID3;\r
+ screen->upper_margin = V_BP_ID3;\r
+ screen->lower_margin = V_FP_ID3;\r
+ screen->vsync_len = V_PW_ID3;\r
+\r
+ /* Pin polarity */\r
+ screen->pin_hsync = 0;\r
+ screen->pin_vsync = 0;\r
+ screen->pin_den = 0;\r
+ screen->pin_dclk = DCLK_POL_ID3;\r
+\r
+ /* Swap rule */\r
+ screen->swap_rb = SWAP_RB_ID3;\r
+ screen->swap_rg = 0;\r
+ screen->swap_gb = 0;\r
+ screen->swap_delta = 0;\r
+ screen->swap_dumy = 0;\r
+\r
+ /* Operation function*/\r
+ screen->init = NULL;\r
+ screen->standby = NULL;\r
+\r
+ break;\r
+\r
+ }\r
+\r
+\r
+ printk("%s:board_id=%d\n",__func__,id);\r
+ \r
+}\r
+\r
+\r
+\r