A22:add spi bus selection for LCD
authorroot <root@lw.(none)>
Wed, 29 Jun 2011 16:41:45 +0000 (00:41 +0800)
committerroot <root@lw.(none)>
Wed, 29 Jun 2011 16:42:33 +0000 (00:42 +0800)
arch/arm/mach-rk29/board-rk29-a22.c
drivers/spi/Kconfig
drivers/spi/rk29_spim.c

index a8b428e79ce2b6cf57e628260aa2fe912776c0b1..92f023d996ca6d4fbe41ab6840314d9ed2bc3ed2 100755 (executable)
@@ -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;
 }
 
index d3dffa7d16dd031c2cb50279843e33673273ea0a..519f9bfb2551220e3b9b75b217745d03ab1cc9c4 100755 (executable)
@@ -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.
index 4cd50405e527a158d6da56ea428b141ccee456e4..dcf46e271893433aedb386fa92e6c01428ffdc47 100755 (executable)
@@ -93,16 +93,28 @@ struct chip_data {
 #ifdef CONFIG_LCD_USE_SPIM_CONTROL\r
 void rk29_lcd_spim_spin_lock(void)\r
 {\r
+#ifdef CONFIG_LCD_USE_SPI0\r
        disable_irq(IRQ_SPI0);\r
+#endif\r
+\r
+#ifdef CONFIG_LCD_USE_SPI1\r
        disable_irq(IRQ_SPI1);\r
+#endif\r
+\r
        preempt_disable();\r
 }\r
 \r
 void rk29_lcd_spim_spin_unlock(void)\r
 {\r
        preempt_enable();\r
-       enable_irq(IRQ_SPI1);\r
+       \r
+#ifdef CONFIG_LCD_USE_SPI0\r
        enable_irq(IRQ_SPI0);\r
+#endif\r
+\r
+#ifdef CONFIG_LCD_USE_SPI1\r
+       enable_irq(IRQ_SPI1);\r
+#endif\r
 }\r
 #else\r
 void rk29_lcd_spim_spin_lock(void)\r