Esempio n. 1
0
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;
	}

}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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;

}
Esempio n. 4
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");
	}

}