void spi_gen(unsigned char spi_data) { int bit; unsigned char mask; for (bit = 7; bit >= 0; bit--) { mask = (unsigned char)1 << bit; LCD_SPI_CLK_LO; if (spi_data & mask) { LCD_SPI_SET_DI(1); } else { LCD_SPI_SET_DI(0); } LCD_SPI_CLK_HI; } }
void spi_gen(unsigned char spi_cmd, unsigned char spi_data) { int bit; unsigned char mask; if (spi_cmd <= CMD_DI_HI) { udelay(SPI_DELAY); LCD_SPI_CS_LO; udelay(SPI_DELAY); LCD_SPI_CLK_LO; LCD_SPI_SET_DI(spi_cmd); udelay(SPI_DELAY); LCD_SPI_CLK_HI; udelay(SPI_DELAY); LCD_SPI_CLK_LO; udelay(SPI_DELAY); for (bit = 7; bit >= 0; bit--) { mask = (unsigned char)1 << bit; LCD_SPI_CLK_LO; if (spi_data & mask) { LCD_SPI_SET_DI(1); } else { LCD_SPI_SET_DI(0); } udelay(SPI_DELAY); LCD_SPI_CLK_HI; udelay(SPI_DELAY); LCD_SPI_CLK_LO; udelay(SPI_DELAY); } LCD_SPI_CS_HI; } else if ( spi_cmd == CMD_DELAY ) { // delay LCD_SPI_CS_HI; LCD_SPI_SET_DI(1); LCD_SPI_CLK_LO; mdelay(spi_data); //?ms } else if ( spi_cmd == CMD_P2800 ) { PowerOn2800(); } else { pr_err("lcdc_auo: command = 0x%x is not supported\n", spi_cmd); } }
int ReadID(void) { int bit; unsigned char mask; int param; unsigned int CMD[] = { 0xDA, 0xDB, 0xDC, }; pr_debug("%s called\n", __func__); for (param = 0; param < 3; param++) { LCMID[param] = 0; /* RDID CMD */ udelay(SPI_DELAY*2); LCD_SPI_CS_LO; udelay(SPI_DELAY); LCD_SPI_CLK_LO; LCD_SPI_SET_DI(0x00); udelay(SPI_DELAY); LCD_SPI_CLK_HI; udelay(SPI_DELAY); LCD_SPI_CLK_LO; udelay(SPI_DELAY); for (bit = 7; bit >= 0; bit--) { mask = (unsigned char)1 << bit; LCD_SPI_CLK_LO; if (CMD[param] & mask) { LCD_SPI_SET_DI(1); } else { LCD_SPI_SET_DI(0); } udelay(SPI_DELAY); LCD_SPI_CLK_HI; udelay(SPI_DELAY); LCD_SPI_CLK_LO; udelay(SPI_DELAY); } gpio_output_enable(GPIO_SPI_DI, 0); udelay(SPI_DELAY); LCMID[param] = 0; for (bit = 7; bit >= 0; bit--) { LCD_SPI_CLK_HI; if (gpio_get_value(GPIO_SPI_DI)) LCMID[param] |= 1 << bit; LCD_SPI_CLK_LO; udelay(SPI_DELAY); } LCD_SPI_CS_HI; udelay(SPI_DELAY); pr_debug("%s CMD[] = 0x%02X LCMID[%d] = 0x%02X\n", __func__, CMD[param], param, LCMID[param]); gpio_output_enable(GPIO_SPI_DI, 1); } pr_debug("%s leaved\n", __func__); return 0; }
/* SAMSUNG LCM power on/off SPI commands */ void panel_poweron(int bOnOff) { unsigned long flag; int i; if (bOnOff == 1) { driver_ic_state = 0; pr_info("[SAMSUNG]panel_poweron ++ entering\n"); /* Start Power on sequence */ mdelay(25); LCD_RST_HI; mdelay(1); LCD_RST_LO; mdelay(1); LCD_RST_HI; mdelay(1); gpio_tlmm_config(GPIO_CFG(GPIO_PCLK, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_VSYNC, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_HSYNC, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_VDEN, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_SPI_CLK, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_SPI_DI, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_SPI_CS, 0, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); for(i = 0; i < 24; i++){ gpio_tlmm_config(GPIO_CFG(111 + i, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_6MA), GPIO_ENABLE); } LCD_SPI_CS_HI; LCD_SPI_CLK_HI; LCD_SPI_SET_DI(1); mdelay(20); /* QCT ADIE is playing or not */ spin_lock_irqsave(&lcdc_samsung_spin_lock, flag); if (/*get_adie_flag() == 1 ||*/ bt_flag == 1) { spin_unlock_irqrestore(&lcdc_samsung_spin_lock, flag); InitializingSequence(); PowerOnSettingSequence(); SPI_Write_8bits(0x1d,0xa0); /* STB off */ #ifdef CONFIG_MACH_ACER_A3 msleep(50); #else mdelay(250); #endif SPI_Write_8bits(0x14,0x03); /*DISP ON */ } else { InitializingSequence(); PowerOnSettingSequence(); SPI_Write_8bits(0x1d,0xa0); /* STB off */ #ifdef CONFIG_MACH_ACER_A3 mdelay(50); #else mdelay(250); #endif SPI_Write_8bits(0x14,0x03); /*DISP ON */ spin_unlock_irqrestore(&lcdc_samsung_spin_lock, flag); } pr_info("[SAMSUNG]panel_poweron -- leaving\n"); driver_ic_state = 1; } else { driver_ic_state = 0; pr_info("[SAMSUNG]panel_poweroff ++ entering\n"); /* assign power-off table */ SPI_Write_8bits(0x14,0x00); /* DISP off */ #ifdef CONFIG_MACH_ACER_A3 msleep(80); #else mdelay(80); #endif SPI_Write_8bits(0x1d,0xa1); /* STB ON */ #ifdef CONFIG_MACH_ACER_A3 msleep(200); #else mdelay(200); #endif /* RESTB Active */ LCD_RST_LO; mdelay(1); LCD_RST_HI; mdelay(1); LCD_RST_LO; pr_info("[SAMSUNG]panel_poweroff -- leaving\n"); } }