From 38039c184ee27f29703119f1b4163b0ab3c0009d Mon Sep 17 00:00:00 2001 From: hhb Date: Fri, 21 Jun 2013 11:36:05 +0800 Subject: [PATCH] mipi dsi: add mipi lcd reference driver, lcd_LD089WU1_mipi.c --- drivers/video/rockchip/screen/Kconfig | 3 +- drivers/video/rockchip/screen/Makefile | 2 +- .../video/rockchip/screen/lcd_LD089WU1_mipi.c | 102 ++++++++++++++++++ 3 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c diff --git a/drivers/video/rockchip/screen/Kconfig b/drivers/video/rockchip/screen/Kconfig index d00e94cc5504..9882f8b4d9e0 100644 --- a/drivers/video/rockchip/screen/Kconfig +++ b/drivers/video/rockchip/screen/Kconfig @@ -182,7 +182,8 @@ config LCD_WY_800X480 config LCD_HH070D_LVDS bool "lcd lvds for 760" - +config LCD_LD089WU1_MIPI + bool "mipi dsi lcd LD089WU1 1920X1200" endchoice diff --git a/drivers/video/rockchip/screen/Makefile b/drivers/video/rockchip/screen/Makefile index 8acf96326b87..e415adfa24f4 100644 --- a/drivers/video/rockchip/screen/Makefile +++ b/drivers/video/rockchip/screen/Makefile @@ -61,7 +61,7 @@ obj-$(CONFIG_LCD_E242868_1024X600) += lcd_E242868_rk3168_86v.o obj-$(CONFIG_LCD_WY_800X480) += lcd_wy_800x480.o obj-$(CONFIG_LCD_HH070D_LVDS) += lcd_hh070d_lvds.o obj-$(CONFIG_LCD_MQ0801D) += lcd_mq0801d.o - +obj-$(CONFIG_LCD_LD089WU1_MIPI) += lcd_LD089WU1_mipi.o quiet_cmd_gen = GEN $@ diff --git a/drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c b/drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c new file mode 100644 index 000000000000..e5abb0d499ea --- /dev/null +++ b/drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c @@ -0,0 +1,102 @@ +#ifndef __LCD_LD089WU1__ +#define __LCD_LD089WU1__ + +#if defined(CONFIG_MIPI_DSI) +#include "../transmitter/mipi_dsi.h" +#endif + + +#if defined(CONFIG_RK610_LVDS) || defined(CONFIG_RK616_LVDS) +#define SCREEN_TYPE SCREEN_LVDS +#else +#define SCREEN_TYPE SCREEN_MIPI +#endif +#define LVDS_FORMAT 0 //mipi lcd don't need it, so 0 would be ok. +#define OUT_FACE OUT_P888 + + +#define DCLK 150*1000000 +#define LCDC_ACLK 300000000 //29 lcdc axi DMA ƵÂÊ + +/* Timing */ +#define H_PW 16 +#define H_BP 40 +#define H_VD 1920 +#define H_FP 24 + +#define V_PW 10 +#define V_BP 10 +#define V_VD 1200 +#define V_FP 16 + +#define LCD_WIDTH 204 +#define LCD_HEIGHT 136 +/* Other */ +#if defined(CONFIG_RK610_LVDS) || defined(CONFIG_RK616_LVDS) || defined(CONFIG_MIPI_DSI) +#define DCLK_POL 1 +#else +#define DCLK_POL 0 +#endif +#define DEN_POL 0 +#define VSYNC_POL 0 +#define HSYNC_POL 0 + +#define SWAP_RB 0 +#define SWAP_RG 0 +#define SWAP_GB 0 + +//#define RK_SCREEN_INIT 1 + +/* about mipi */ +#define MIPI_DSI_LANE 4 +#define MIPI_DSI_HS_CLK 1000*1000000 + +#if defined(RK_SCREEN_INIT) +static struct rk29lcd_info *gLcd_info = NULL; + +int rk_lcd_init(void) { + + u8 dcs[16] = {0}; + if(dsi_is_active() != 1) + return -1; + + /*below is changeable*/ + dsi_enable_hs_clk(1); + dsi_enable_video_mode(1); + dcs[0] = dcs_exit_sleep_mode; + dsi_send_dcs_packet(dcs, 1); + msleep(1); + dcs[0] = dcs_set_display_on; + dsi_send_dcs_packet(dcs, 1); + msleep(10); + //printk("++++++++++++++++%s:%d\n", __func__, __LINE__); +}; + + + +int rk_lcd_standby(u8 enable) { + + u8 dcs[16] = {0}; + if(dsi_is_active() != 1) + return -1; + + if(enable) { + /*below is changeable*/ + dcs[0] = dcs_set_display_off; + dsi_send_dcs_packet(dcs, 1); + msleep(1); + dcs[0] = dcs_enter_sleep_mode; + dsi_send_dcs_packet(dcs, 1); + msleep(1); + //printk("++++++++++++++++%s:%d\n", __func__, __LINE__); + + } else { + /*below is changeable*/ + rk_lcd_init(); + //printk("++++++++++++++++%s:%d\n", __func__, __LINE__); + + } +}; +#endif + +#endif -- 2.34.1