rk29:modify lcd driver

This commit is contained in:
hhb
2011-03-29 16:52:21 +08:00
parent f8101a61d0
commit 3e03c25b28
2 changed files with 76 additions and 93 deletions

58
arch/arm/mach-rk29/board-rk29-phonesdk.c Executable file → Normal file
View File

@@ -133,9 +133,10 @@ struct rk29_nand_platform_data rk29_nand_data = {
* author: zyw@rock-chips.com
*****************************************************************************************/
//#ifdef CONFIG_LCD_TD043MGEA1
#define LCD_TXD_PIN INVALID_GPIO
#define LCD_CLK_PIN INVALID_GPIO
#define LCD_CS_PIN INVALID_GPIO
#define LCD_RXD_PIN RK29_PIN2_PC7
#define LCD_TXD_PIN RK29_PIN2_PC6
#define LCD_CLK_PIN RK29_PIN2_PC4
#define LCD_CS_PIN RK29_PIN2_PC5
/*****************************************************************************************
* frame buffer devices
* author: zyw@rock-chips.com
@@ -153,12 +154,30 @@ struct rk29_nand_platform_data rk29_nand_data = {
static int rk29_lcd_io_init(void)
{
int ret = 0;
printk("rk29_lcd_io_init\n");
ret = gpio_request(LCD_RXD_PIN, NULL);
ret = gpio_request(LCD_TXD_PIN, NULL);
ret = gpio_request(LCD_CLK_PIN, NULL);
ret = gpio_request(LCD_CS_PIN, NULL);
rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_GPIO2C7);
rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_GPIO2C6);
rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_GPIO2C5);
rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,GPIO2H_GPIO2C4);
return ret;
}
static int rk29_lcd_io_deinit(void)
{
int ret = 0;
printk("rk29_lcd_io_deinit\n");
gpio_free(LCD_CS_PIN);
gpio_free(LCD_CLK_PIN);
gpio_free(LCD_TXD_PIN);
gpio_free(LCD_RXD_PIN);
rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_SPI1_RXD);
rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_SPI1_TXD);
rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_SPI1_CSN0);
rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,GPIO2H_SPI1_CLK);
return ret;
}
@@ -417,30 +436,6 @@ static struct eeti_egalax_platform_data eeti_egalax_info = {
};
#endif
/* GT801 touch I2C */
#if defined (CONFIG_GT801)
#include <drivers/input/touchscreen/gt801.h>
#define TOUCH_RESET_PIN RK29_PIN6_PC3
#define TOUCH_INT_PIN RK29_PIN4_PD5
static struct gt801_platform_data gt801_info = {
.model = 801,
.swap_xy = 0,
.x_min = 0,
.x_max = 480,
.y_min = 0,
.y_max = 800,
.gpio_reset = TOUCH_RESET_PIN,
.gpio_reset_active_low = 1,
.gpio_pendown = TOUCH_INT_PIN,
.pendown_iomux_name = GPIO4D5_CPUTRACECTL_NAME,
.resetpin_iomux_name = "FFF",
.pendown_iomux_mode = GPIO4H_GPIO4D5,
.resetpin_iomux_mode = 0,
.get_pendown_state = NULL,
};
#endif
/*MMA8452 gsensor*/
#if defined (CONFIG_GS_MMA8452)
#define MMA8452_INT_PIN RK29_PIN6_PC4
@@ -1573,15 +1568,6 @@ static struct i2c_board_info __initdata board_i2c2_devices[] = {
.platform_data = &gt801_info,
},
#endif
#if defined (CONFIG_GT801)
{
.type = "gt801_touch",
.addr = 0x55,
.flags = 0,
.irq = RK29_PIN4_PD5,
.platform_data = &gt801_info,
},
#endif
#if defined (CONFIG_MFD_WM831X_I2C)
{
.type = "wm8310",

View File

@@ -27,7 +27,7 @@
/* Base */
#define OUT_TYPE SCREEN_RGB
#define OUT_FACE OUT_P888
#define OUT_CLK 26 //***27
#define OUT_CLK (26*1000000) //***27 uint Hz
#define LCDC_ACLK 150000000 //29 lcdc axi DMA Ƶ<><C6B5> //rk29
/* Timing */
@@ -57,7 +57,7 @@ int lcd_standby(u8 enable);
#define CLK_PORT RK2818_PIN_PB5 //gLcd_info->clk_pin
#define CS_PORT RK2818_PIN_PB4 // gLcd_info->cs_pin
*/
#define RXD_PORT 1
#define RXD_PORT RK29_PIN2_PC7
#define TXD_PORT gLcd_info->txd_pin
#define CLK_PORT gLcd_info->clk_pin
#define CS_PORT gLcd_info->cs_pin
@@ -98,16 +98,16 @@ u32 spi_screenreg_get(u32 Addr)
printk("addr is 0x%x \n", Addr);
for(i = 0; i < 9; i++) //reg
{
if(Addr &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
if(Addr &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
}
CS_SET();
@@ -118,18 +118,18 @@ u32 spi_screenreg_get(u32 Addr)
CS_CLR();
for(i = 0; i < 9; i++)
{
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
if(RXD_GET())
{
data |= 1<<(8-i);
}
else
{
data &= ~(1<<(8-i));
}
DRVDelayUs(2);
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
if(RXD_GET())
{
data |= 1<<(8-i);
}
else
{
data &= ~(1<<(8-i));
}
DRVDelayUs(2);
}
CS_SET();
CLK_CLR();
@@ -163,16 +163,16 @@ void spi_screenreg_set(u32 Addr, u32 Data0, u32 Data1)
//printk("addr is 0x%x \n", Addr);
for(i = 0; i < 9; i++) //reg
{
if(Addr &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
if(Addr &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
}
CS_SET();
@@ -190,16 +190,16 @@ void spi_screenreg_set(u32 Addr, u32 Data0, u32 Data1)
//printk("data0 is 0x%x \n", Data);
for(i = 0; i < 9; i++) //data
{
if(Data0 &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
if(Data0 &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
}
CS_SET();
@@ -217,16 +217,16 @@ void spi_screenreg_set(u32 Addr, u32 Data0, u32 Data1)
//printk("data1 is 0x%x \n", Data);
for(i = 0; i < 9; i++) //data
{
if(Data1 &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
if(Data1 &(1<<(8-i)))
TXD_SET();
else
TXD_CLR();
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
// \u6a21\u62dfCLK
CLK_SET();
DRVDelayUs(2);
CLK_CLR();
DRVDelayUs(2);
}
CS_SET();
@@ -237,7 +237,6 @@ void spi_screenreg_set(u32 Addr, u32 Data0, u32 Data1)
void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )
{
//printk("lcd_hx8357 set_lcd_info \n");
/* screen type & face */
screen->type = OUT_TYPE;
screen->face = OUT_FACE;
@@ -281,12 +280,10 @@ void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )
int lcd_init(void)
{
volatile u32 data;
// rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME,IOMUXA_GPIO0_B567);
// rk2818_mux_api_set(GPIOB4_SPI0CS0_MMC0D4_NAME,IOMUXA_GPIO0_B4);
//gpio_pull_updown(RK2818_PIN_PB7, GPIOPullUp);
if(gLcd_info)
{printk("lcd init11111111111111111111111111...\n");
gLcd_info->io_init();}
if(gLcd_info){
printk("lcd init11111111111111111111111111...\n");
gLcd_info->io_init();
}
printk("lcd init22222222222222222222222222...\n");
printk("lcd init...\n");
spi_screenreg_set(0x29, 0xffff, 0xffff);