A22:add spi bus selection for LCD

This commit is contained in:
root
2011-06-30 00:41:45 +08:00
parent 3e3f4f2f7e
commit a7e2f65e22
3 changed files with 57 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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.

View File

@@ -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)