rk30_phonepad:add auto lcd support
authorluowei <lw@rock-chips.com>
Tue, 9 Oct 2012 12:01:43 +0000 (20:01 +0800)
committerluowei <lw@rock-chips.com>
Tue, 9 Oct 2012 12:02:21 +0000 (20:02 +0800)
drivers/video/display/screen/Kconfig
drivers/video/display/screen/Makefile
drivers/video/display/screen/lcd_auto.c [new file with mode: 0644]

index 4f91721ad1509d75c63976301f8a2cbca77d0c49..f482e78ac80aba5fe335484f721c5c33fc58163b 100755 (executable)
@@ -100,6 +100,9 @@ config LCD_HJ080NA
 config LCD_HJ101NA
         bool "HJ101NA_4J 1280X800"
 
+config LCD_AUTO
+        bool "auto select lcd"
+
 config LCD_HSD07PFW1
        depends on MFD_RK610
        bool "RGB lcd panel HSD07PFW1"
index 553a45d80e1e913fd5a109511ba6810d009fcc56..43e3c71dc5d67a4fcd19c8ddf031eb028fd7c08b 100755 (executable)
@@ -43,7 +43,8 @@ obj-$(CONFIG_LCD_HSD100PXN_FOR_TDW851) += lcd_hsd100pxn_for_tdw851.o
 obj-$(CONFIG_LCD_HV070WSA100)    += lcd_hv070wsa.o
 obj-$(CONFIG_LCD_COMMON)    += lcd_common.o
 obj-$(CONFIG_LCD_RK2928_A720) += lcd_YQ70CPT9160.o
-obj-$(CONFIG_LCD_HSD07PFW1) += lcd_hsd07pfw1.o\r
+obj-$(CONFIG_LCD_HSD07PFW1) += lcd_hsd07pfw1.o
 obj-$(CONFIG_LCD_HJ080NA)    += lcd_hj080na.o
 obj-$(CONFIG_LCD_HJ101NA)   += lcd_hj101na.o
+obj-$(CONFIG_LCD_AUTO)   += lcd_auto.o
 obj-$(CONFIG_LCD_I30_800X480)   += lcd_I30_800x480.o
diff --git a/drivers/video/display/screen/lcd_auto.c b/drivers/video/display/screen/lcd_auto.c
new file mode 100644 (file)
index 0000000..dfec50c
--- /dev/null
@@ -0,0 +1,274 @@
+#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