Tuesday, September 22, 2009

LCD: no more garbage

Finaly! I find out how to disable LCD without leaving garbage on it! It's time to polish my patches and send them upstream :)

I've used haret to capture gpio values.

Here's code to disable LCD sanely:

/* GPC11-GPC15->OUTPUT */
s3c2410_gpio_cfgpin(S3C2410_GPC11, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC12, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC13, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC14, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC15, S3C2410_GPIO_OUTPUT);

/* GPC11-GPC15->1 */
s3c2410_gpio_setpin(S3C2410_GPC8, 1);
s3c2410_gpio_setpin(S3C2410_GPC9, 1);
s3c2410_gpio_setpin(S3C2410_GPC10, 1);
s3c2410_gpio_setpin(S3C2410_GPC11, 1);
s3c2410_gpio_setpin(S3C2410_GPC12, 1);
s3c2410_gpio_setpin(S3C2410_GPC13, 1);
s3c2410_gpio_setpin(S3C2410_GPC14, 1);
s3c2410_gpio_setpin(S3C2410_GPC15, 1);

/* Wait a bit here... */
mdelay(100);

/* GPD2-GPD7->OUTPUT */
s3c2410_gpio_cfgpin(S3C2410_GPD2, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD3, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD4, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD5, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD6, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD7, S3C2410_GPIO_OUTPUT);

/* GPD11-GPD15->OUTPUT */
s3c2410_gpio_cfgpin(S3C2410_GPD11, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD12, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD14, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPD15, S3C2410_GPIO_OUTPUT);

/* GPD2-GPD7->1, GPD11-GPD15->1 */
s3c2410_gpio_setpin(S3C2410_GPD2, 1);
s3c2410_gpio_setpin(S3C2410_GPD3, 1);
s3c2410_gpio_setpin(S3C2410_GPD4, 1);
s3c2410_gpio_setpin(S3C2410_GPD5, 1);
s3c2410_gpio_setpin(S3C2410_GPD6, 1);
s3c2410_gpio_setpin(S3C2410_GPD7, 1);
s3c2410_gpio_setpin(S3C2410_GPD11, 1);
s3c2410_gpio_setpin(S3C2410_GPD12, 1);
s3c2410_gpio_setpin(S3C2410_GPD13, 1);
s3c2410_gpio_setpin(S3C2410_GPD14, 1);
s3c2410_gpio_setpin(S3C2410_GPD15, 1);

/* Wait a bit here...*/
mdelay(100);

/* GPB0->OUTPUT, GPB0->0 */
s3c2410_gpio_setpin(S3C2410_GPB0, 0);
s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPIO_OUTPUT);

/* GPC1-GPC4->OUTPUT, GPC2->0 */
s3c2410_gpio_cfgpin(S3C2410_GPC1, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC2, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_setpin(S3C2410_GPC2, 0);
s3c2410_gpio_cfgpin(S3C2410_GPC3, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC4, S3C2410_GPIO_OUTPUT);

/* GPC15-GPC11->0 */
s3c2410_gpio_setpin(S3C2410_GPC11, 0);
s3c2410_gpio_setpin(S3C2410_GPC12, 0);
s3c2410_gpio_setpin(S3C2410_GPC13, 0);
s3c2410_gpio_setpin(S3C2410_GPC14, 0);
s3c2410_gpio_setpin(S3C2410_GPC15, 0);

/* GPD15-GPD11->0, GPD3->GPD8->0 */
s3c2410_gpio_setpin(S3C2410_GPD11, 0);
s3c2410_gpio_setpin(S3C2410_GPD12, 0);
s3c2410_gpio_setpin(S3C2410_GPD13, 0);
s3c2410_gpio_setpin(S3C2410_GPD14, 0);
s3c2410_gpio_setpin(S3C2410_GPD15, 0);
s3c2410_gpio_setpin(S3C2410_GPD2, 0);
s3c2410_gpio_setpin(S3C2410_GPD3, 0);
s3c2410_gpio_setpin(S3C2410_GPD4, 0);
s3c2410_gpio_setpin(S3C2410_GPD5, 0);
s3c2410_gpio_setpin(S3C2410_GPD6, 0);
s3c2410_gpio_setpin(S3C2410_GPD7, 0);

/* GPC6->0, GPC7->0, GPC5->0 */
s3c2410_gpio_setpin(S3C2410_GPC6, 0);
s3c2410_gpio_setpin(S3C2410_GPC7, 0);
s3c2410_gpio_setpin(S3C2410_GPC5, 0);

/* GPB1->OUTPUT, GPB1->0 */
s3c2410_gpio_setpin(S3C2410_GPB1, 0);
s3c2410_gpio_cfgpin(S3C2410_GPB1, S3C2410_GPIO_OUTPUT);
pwm_config(lcd_power->pwm, 0, lcd_power->period);
pwm_disable(lcd_power->pwm);

/* GPC0->0, GPC10->0 */
s3c2410_gpio_setpin(S3C2410_GPC0, 0);
s3c2410_gpio_setpin(S3C2410_GPC10, 0);

No comments: