From a7e2f65e221ee9b430c7a6f387272ba7276ad2ca Mon Sep 17 00:00:00 2001 From: root Date: Thu, 30 Jun 2011 00:41:45 +0800 Subject: [PATCH] A22:add spi bus selection for LCD --- arch/arm/mach-rk29/board-rk29-a22.c | 29 +++++++++++++++++++++++++++++ drivers/spi/Kconfig | 16 +++++++++++++++- drivers/spi/rk29_spim.c | 14 +++++++++++++- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-rk29/board-rk29-a22.c b/arch/arm/mach-rk29/board-rk29-a22.c index a8b428e79ce2..92f023d996ca 100755 --- a/arch/arm/mach-rk29/board-rk29-a22.c +++ b/arch/arm/mach-rk29/board-rk29-a22.c @@ -180,9 +180,17 @@ struct rk29_nand_platform_data rk29_nand_data = { * author: zyw@rock-chips.com *****************************************************************************************/ //#ifdef CONFIG_LCD_TD043MGEA1 +#ifdef CONFIG_LCD_USE_SPI0 +#define LCD_TXD_PIN RK29_PIN2_PC2 +#define LCD_CLK_PIN RK29_PIN2_PC0 +#define LCD_CS_PIN RK29_PIN1_PA4 +#endif + +#ifdef CONFIG_LCD_USE_SPI1 #define LCD_TXD_PIN RK29_PIN2_PC6 #define LCD_CLK_PIN RK29_PIN2_PC4 #define LCD_CS_PIN RK29_PIN2_PC5 +#endif /***************************************************************************************** * frame buffer devices * author: zyw@rock-chips.com @@ -205,10 +213,21 @@ static int rk29_lcd_io_init(void) ret = gpio_request(LCD_TXD_PIN, NULL); ret = gpio_request(LCD_CLK_PIN, NULL); ret = gpio_request(LCD_CS_PIN, NULL); + +#ifdef CONFIG_LCD_USE_SPI0 + //rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_GPIO2C7); + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_GPIO2C2); + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_GPIO1A4); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_GPIO2C0); +#endif + +#ifdef CONFIG_LCD_USE_SPI1 //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); +#endif + return ret; } @@ -220,10 +239,20 @@ static int rk29_lcd_io_deinit(void) gpio_free(LCD_CLK_PIN); gpio_free(LCD_TXD_PIN); //gpio_free(LCD_RXD_PIN); + +#ifdef CONFIG_LCD_USE_SPI0 + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_SPI0_TXD); + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_SPI0_CSN1); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_SPI0_CLK); +#endif + +#ifdef CONFIG_LCD_USE_SPI1 //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); +#endif + return ret; } diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index d3dffa7d16dd..519f9bfb2551 100755 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -273,11 +273,25 @@ config SPIM1_RK29 enable SPI1 master controller for RK29 config LCD_USE_SPIM_CONTROL - bool "switch gpio to spim with spin lock" + bool "Switch gpio to spim with spin lock" depends on SPIM_RK29 help switch gpio that used for lcd to spim with spin lock. +config LCD_USE_SPI0 + bool "If lcd use spi0 to init lcd then select this item" + depends on SPIM_RK29 && LCD_USE_SPIM_CONTROL + help + choose spi bus num to use. + +config LCD_USE_SPI1 + bool "If lcd use spi1 to init lcd then select this item" + depends on SPIM_RK29 && LCD_USE_SPIM_CONTROL + default y if LCD_USE_SPIM_CONTROL + help + choose spi bus num to use. + + # # There are lots of SPI device types, with sensors and memory # being probably the most widely used ones. diff --git a/drivers/spi/rk29_spim.c b/drivers/spi/rk29_spim.c index 4cd50405e527..dcf46e271893 100755 --- a/drivers/spi/rk29_spim.c +++ b/drivers/spi/rk29_spim.c @@ -93,16 +93,28 @@ struct chip_data { #ifdef CONFIG_LCD_USE_SPIM_CONTROL void rk29_lcd_spim_spin_lock(void) { +#ifdef CONFIG_LCD_USE_SPI0 disable_irq(IRQ_SPI0); +#endif + +#ifdef CONFIG_LCD_USE_SPI1 disable_irq(IRQ_SPI1); +#endif + preempt_disable(); } void rk29_lcd_spim_spin_unlock(void) { preempt_enable(); - enable_irq(IRQ_SPI1); + +#ifdef CONFIG_LCD_USE_SPI0 enable_irq(IRQ_SPI0); +#endif + +#ifdef CONFIG_LCD_USE_SPI1 + enable_irq(IRQ_SPI1); +#endif } #else void rk29_lcd_spim_spin_lock(void) -- 2.34.1