Merge remote-tracking branch 'kernel-2.6.32/develop' into develop-2.6.36
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rk29 / board-rk29-phonesdk.c
index 5f8ee29210964b8865eb7ee5a9ada21d4f872838..ac57fc82ef18701e32a58cd8468ac5967b6105b3 100755 (executable)
 #else
 #define SDRAM_SIZE          SZ_512M
 #endif
-#define PMEM_GPU_SIZE       SZ_64M
+#define PMEM_GPU_SIZE       SZ_16M
 #define PMEM_UI_SIZE        SZ_32M
 #define PMEM_VPU_SIZE       SZ_64M
 #define PMEM_CAM_SIZE       PMEM_CAM_NECESSARY
 #endif
 #define MEM_FB_SIZE         (3*SZ_2M)
 #ifdef CONFIG_FB_WORK_IPP
+#ifdef CONFIG_FB_SCALING_OSD_1080P
+#define MEM_FBIPP_SIZE      SZ_16M   //1920 x 1080 x 2 x 2  //RGB565 = x2;RGB888 = x4
+#else
 #define MEM_FBIPP_SIZE      SZ_8M   //1920 x 1080 x 2 x 2  //RGB565 = x2;RGB888 = x4
+#endif
 #else
 #define MEM_FBIPP_SIZE      0
 #endif
@@ -1454,7 +1458,184 @@ struct wm831x_pdata wm831x_platdata = {
 };
 #endif
 
+#if defined(CONFIG_RK29_GPIO_SUSPEND)
+static void gpio_set_request(void)
+{
+       gpio_request(RK29_PIN6_PA0, NULL);
+       gpio_request(RK29_PIN6_PA1, NULL);
+       gpio_request(RK29_PIN6_PA2, NULL);
+       gpio_request(RK29_PIN6_PA3, NULL);
+       gpio_request(RK29_PIN6_PA4, NULL);
+       gpio_request(RK29_PIN6_PA5, NULL);
+       gpio_request(RK29_PIN6_PA6, NULL);
+
+       gpio_request(RK29_PIN2_PA5, NULL);
+       gpio_request(RK29_PIN2_PA4, NULL);
+       gpio_request(RK29_PIN2_PB0, NULL);
+       gpio_request(RK29_PIN2_PB1, NULL);
+       gpio_request(RK29_PIN2_PB2, NULL);
+       gpio_request(RK29_PIN2_PB3, NULL);
+
+       gpio_request(RK29_PIN1_PA4, NULL);
+       gpio_request(RK29_PIN1_PA3, NULL);
+
+       gpio_request(RK29_PIN2_PC7, NULL);
+       gpio_request(RK29_PIN2_PC6, NULL);
+       gpio_request(RK29_PIN2_PC5, NULL);
+       gpio_request(RK29_PIN2_PC4, NULL);
+       gpio_request(RK29_PIN2_PC3, NULL);
+       gpio_request(RK29_PIN2_PC2, NULL);
+       gpio_request(RK29_PIN2_PC1, NULL);
+       gpio_request(RK29_PIN2_PC0, NULL);
+}
+
+static void gpio_set_free(void)
+{
+       gpio_free(RK29_PIN6_PA0);
+       gpio_free(RK29_PIN6_PA1);
+       gpio_free(RK29_PIN6_PA2);
+       gpio_free(RK29_PIN6_PA3);
+       gpio_free(RK29_PIN6_PA4);
+       gpio_free(RK29_PIN6_PA5);
+       gpio_free(RK29_PIN6_PA6);
+
+       gpio_free(RK29_PIN2_PA5);
+       gpio_free(RK29_PIN2_PA4);
+       gpio_free(RK29_PIN2_PB0);
+       gpio_free(RK29_PIN2_PB1);
+       gpio_free(RK29_PIN2_PB2);
+       gpio_free(RK29_PIN2_PB3);
+
+       gpio_free(RK29_PIN1_PA4);
+       gpio_free(RK29_PIN1_PA3);
+
+       gpio_free(RK29_PIN2_PC7);
+       gpio_free(RK29_PIN2_PC6);
+       gpio_free(RK29_PIN2_PC5);
+       gpio_free(RK29_PIN2_PC4);
+       gpio_free(RK29_PIN2_PC3);
+       gpio_free(RK29_PIN2_PC2);
+       gpio_free(RK29_PIN2_PC1);
+       gpio_free(RK29_PIN2_PC0);
+}
+
+static void rk29_keygpio_suspend(void)
+{
+       gpio_pull_updown(RK29_PIN6_PA0, 0);
+       gpio_pull_updown(RK29_PIN6_PA1, 0);
+       gpio_pull_updown(RK29_PIN6_PA2, 0);
+       gpio_pull_updown(RK29_PIN6_PA3, 0);
+       gpio_pull_updown(RK29_PIN6_PA4, 0);
+       gpio_pull_updown(RK29_PIN6_PA5, 0);
+       gpio_pull_updown(RK29_PIN6_PA6, 0);//key pullup/pulldown disable
+
+       gpio_pull_updown(RK29_PIN2_PA4, 0);
+       gpio_pull_updown(RK29_PIN2_PA5, 0);
+       gpio_pull_updown(RK29_PIN2_PB0, 0);
+       gpio_pull_updown(RK29_PIN2_PB1, 0);
+       gpio_pull_updown(RK29_PIN2_PB2, 0);
+       gpio_pull_updown(RK29_PIN2_PB3, 0);
+}
+
+static void rk29_keygpio_resume(void)
+{
+       gpio_pull_updown(RK29_PIN6_PA0, 1);
+       gpio_pull_updown(RK29_PIN6_PA1, 1);
+       gpio_pull_updown(RK29_PIN6_PA2, 1);
+       gpio_pull_updown(RK29_PIN6_PA3, 1);
+       gpio_pull_updown(RK29_PIN6_PA4, 1);
+       gpio_pull_updown(RK29_PIN6_PA5, 1);
+       gpio_pull_updown(RK29_PIN6_PA6, 1);//key pullup/pulldown enable
+
+       gpio_pull_updown(RK29_PIN2_PA4, 1);
+       gpio_pull_updown(RK29_PIN2_PA5, 1);
+       gpio_pull_updown(RK29_PIN2_PB0, 1);
+       gpio_pull_updown(RK29_PIN2_PB1, 1);
+       gpio_pull_updown(RK29_PIN2_PB2, 1);
+       gpio_pull_updown(RK29_PIN2_PB3, 1);
+}
 
+static void spi_gpio_suspend(void)
+{      
+       rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_GPIO1A4);  //set iomux is gpio mode
+       rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_GPIO1A3);
+
+       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);
+       rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_GPIO2C3);
+       rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_GPIO2C2);
+       rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_GPIO2C1);
+       rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_GPIO2C0);
+
+       gpio_direction_input(RK29_PIN1_PA4);             //set gpio is input
+       gpio_direction_input(RK29_PIN1_PA3);
+       gpio_direction_input(RK29_PIN2_PC7);
+       gpio_direction_input(RK29_PIN2_PC6);
+       // gpio_direction_input(RK29_PIN2_PC5);
+       gpio_direction_input(RK29_PIN2_PC4);
+       gpio_direction_input(RK29_PIN2_PC3);
+       gpio_direction_input(RK29_PIN2_PC2);
+       gpio_direction_input(RK29_PIN2_PC1);
+       gpio_direction_input(RK29_PIN2_PC0);
+
+       gpio_pull_updown(RK29_PIN1_PA4, 0);   //set gpio pullup/down disable
+       gpio_pull_updown(RK29_PIN1_PA3, 0);
+
+       gpio_pull_updown(RK29_PIN2_PC7, 0);
+       gpio_pull_updown(RK29_PIN2_PC6, 0);
+       //gpio_pull_updown(RK29_PIN2_PC5, 0);
+       gpio_pull_updown(RK29_PIN2_PC4, 0);
+       gpio_pull_updown(RK29_PIN2_PC3, 0);
+       gpio_pull_updown(RK29_PIN2_PC2, 0);
+       gpio_pull_updown(RK29_PIN2_PC1, 0);
+       gpio_pull_updown(RK29_PIN2_PC0, 0);
+}
+
+static void spi_gpio_resume(void)
+{      
+       gpio_pull_updown(RK29_PIN1_PA4, 1);         //set gpio pullup/down enable
+       gpio_pull_updown(RK29_PIN1_PA3, 1);
+
+       gpio_pull_updown(RK29_PIN2_PC7, 1);
+       gpio_pull_updown(RK29_PIN2_PC6, 1);
+       //gpio_pull_updown(RK29_PIN2_PC5, 1);
+       gpio_pull_updown(RK29_PIN2_PC4, 1);
+       gpio_pull_updown(RK29_PIN2_PC3, 1);
+       gpio_pull_updown(RK29_PIN2_PC2, 1);
+       gpio_pull_updown(RK29_PIN2_PC1, 1);
+       gpio_pull_updown(RK29_PIN2_PC0, 1);
+
+       rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_SPI0_CSN1);   //set iomux is spi mode
+       rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_SPI1_CSN1);
+
+       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);
+       rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_SPI0_RXD);
+       rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_SPI0_TXD);
+       rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_SPI0_CSN0);
+       rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_SPI0_CLK);
+}
+
+void rk29_setgpio_suspend_board(void)
+{
+       gpio_set_request();
+       rk29_keygpio_suspend();
+       spi_gpio_suspend();
+       gpio_set_free();
+}
+
+void rk29_setgpio_resume_board(void)
+{
+       gpio_set_request();
+       rk29_keygpio_resume();
+       spi_gpio_resume();
+       gpio_set_free();
+}
+#endif
 
 #if defined(CONFIG_RK29_GPS)
 
@@ -3111,7 +3292,6 @@ static void __init machine_rk29_fixup(struct machine_desc *desc, struct tag *tag
 {
        mi->nr_banks = 1;
        mi->bank[0].start = RK29_SDRAM_PHYS;
-       mi->bank[0].node = PHYS_TO_NID(RK29_SDRAM_PHYS);
        mi->bank[0].size = LINUX_SIZE;
 #if SDRAM_SIZE > SZ_512M
        mi->nr_banks = 2;