CONFIG_SPIM_RK29=y
CONFIG_SPIM0_RK29=y
CONFIG_SPIM1_RK29=y
+CONFIG_LCD_USE_SPIM_CONTROL=y
#
# SPI Protocol Masters
CONFIG_SPIM_RK29=y
CONFIG_SPIM0_RK29=y
CONFIG_SPIM1_RK29=y
+CONFIG_LCD_USE_SPIM_CONTROL=y
#
# SPI Protocol Masters
bool "RK29 SPI1 master controller"
depends on SPIM_RK29
help
- enable SPI1 master controller for RK29
+ enable SPI1 master controller for RK29
+
+config LCD_USE_SPIM_CONTROL
+ bool "switch gpio to spim with spin lock"
+ depends on SPIM_RK29
+ help
+ switch gpio that used for lcd to spim with spin lock.
#
# There are lots of SPI device types, with sensors and memory
#include <linux/clk.h>\r
#include <linux/cpufreq.h>\r
#include <mach/gpio.h>\r
+#include <mach/irqs.h>\r
#include <linux/dma-mapping.h>\r
#include <asm/dma.h>\r
-\r
+#include <linux/preempt.h>\r
#include "rk29_spim.h"\r
#include <linux/spi/spi.h>\r
#include <mach/board.h>\r
#define RXBUSY (1<<2)\r
#define TXBUSY (1<<3)\r
\r
+//\r
+#ifdef CONFIG_LCD_USE_SPIM_CONTROL\r
+void rk29_lcd_spim_spin_lock(void)\r
+{\r
+ disable_irq(IRQ_SPI0);\r
+ disable_irq(IRQ_SPI1);\r
+ preempt_disable();\r
+}\r
+\r
+void rk29_lcd_spim_spin_unlock(void)\r
+{\r
+ enable_irq(IRQ_SPI0);\r
+ enable_irq(IRQ_SPI1);\r
+ preempt_enable();\r
+}\r
+#else\r
+void rk29_lcd_spim_spin_lock(void)\r
+{\r
+ return;\r
+}\r
+\r
+void rk29_lcd_spim_spin_unlock(void)\r
+{\r
+ return;\r
+}\r
+#endif\r
+\r
+\r
static void spi_dump_regs(struct rk29xx_spi *dws) {\r
DBG("MRST SPI0 registers:\n");\r
DBG("=================================\n");\r
return 0;\r
}\r
\r
+extern void rk29_lcd_spim_spin_lock(void);\r
+extern void rk29_lcd_spim_spin_unlock(void);\r
int lcd_standby(u8 enable)\r
{\r
- if(gLcd_info)\r
+ rk29_lcd_spim_spin_lock();\r
+ if(gLcd_info)\r
gLcd_info->io_init();\r
\r
if(enable) {\r
\r
if(gLcd_info)\r
gLcd_info->io_deinit();\r
+ rk29_lcd_spim_spin_unlock();\r
\r
return 0;\r
}\r
return 0;
}
+extern void rk29_lcd_spim_spin_lock(void);
+extern void rk29_lcd_spim_spin_unlock(void);
int lcd_standby(u8 enable) //***enable =1 means suspend, 0 means resume
{
-
- if(gLcd_info)
+ rk29_lcd_spim_spin_lock();
+ if(gLcd_info)
gLcd_info->io_init();
printk("lcd standby\n");
if(enable) {
if(gLcd_info)
gLcd_info->io_deinit();
+ rk29_lcd_spim_spin_unlock();
return 0;
}
#define SWAP_RB 0\r
\r
static struct rk29lcd_info *gLcd_info = NULL;\r
+\r
int init(void);\r
int standby(u8 enable);\r
\r
\r
return 0;\r
}\r
-\r
+extern void rk29_lcd_spim_spin_lock(void);\r
+extern void rk29_lcd_spim_spin_unlock(void);\r
int standby(u8 enable) //***enable =1 means suspend, 0 means resume \r
{\r
- if(gLcd_info)\r
+ rk29_lcd_spim_spin_lock();\r
+ if(gLcd_info)\r
gLcd_info->io_init();\r
\r
if(enable) {\r
if(gLcd_info)\r
gLcd_info->io_deinit();\r
\r
+ rk29_lcd_spim_spin_unlock();\r
+\r
return 0;\r
}\r
\r