void auo_board_lcd_enable(void) { /* Make sure dev is created and initialized properly */ dev = qup_i2c_init(GSBI_ID_8, 100000, 24000000); if (!dev) { dprintf(CRITICAL, "Error in qup_i2c_init\n"); while (1) ; } /* Setup RESX_N */ uint8_t open_drain_a = expander_read(GPIO_EXPANDER_REG_OPEN_DRAIN_A); uint8_t dir_a = expander_read(GPIO_EXPANDER_REG_DIR_A); uint8_t data_a = expander_read(GPIO_EXPANDER_REG_DATA_A); expander_write(GPIO_EXPANDER_REG_DIR_A, ~0x04 & dir_a); expander_write(GPIO_EXPANDER_REG_DATA_A, ~0x04 & data_a); /* Power on the appropiate PMIC LDO power rails */ if (lcd_power_on()) return; /* Toggle RESX_N */ mdelay(20); expander_write(GPIO_EXPANDER_REG_DATA_A, 0x04 | data_a); mdelay(1); expander_write(GPIO_EXPANDER_REG_DATA_A, ~0x04 & data_a); mdelay(1); expander_write(GPIO_EXPANDER_REG_DATA_A, 0x04 | data_a); mdelay(25); /* Enable the gpios for LCD */ lcd_gpio_cfg(1); auo_lcdc_init(); }
void board_lcd_enable(void) { int rc = -1; dev = qup_i2c_init(GSBI_ID_8, 100000, 24000000); /* Make sure dev is created and initialized properly */ if (!dev) { while (1) ; return; } /* Store current value of these registers as to not destroy their previous state. */ uint8_t open_drain_a = expander_read(GPIO_EXPANDER_REG_OPEN_DRAIN_A); uint8_t dir_b = expander_read(GPIO_EXPANDER_REG_DIR_B); uint8_t dir_a = expander_read(GPIO_EXPANDER_REG_DIR_A); uint8_t data_b = expander_read(GPIO_EXPANDER_REG_DATA_B); uint8_t data_a = expander_read(GPIO_EXPANDER_REG_DATA_A); /* Set the LVDS_SHUTDOWN_N to open drain and output low. */ dprintf(INFO, "Enable lvds_shutdown_n line for Open Drain.\n"); expander_write(GPIO_EXPANDER_REG_OPEN_DRAIN_A, 0x04 | open_drain_a); dprintf(INFO, "Enable lvds_shutdown_n line for output.\n"); expander_write(GPIO_EXPANDER_REG_DIR_A, ~0x04 & dir_a); dprintf(INFO, "Drive the LVDS_SHUTDOWN_N pin high here.\n"); expander_write(GPIO_EXPANDER_REG_DATA_A, 0x04 | data_a); /* Turn on the VREG_L2B to 3.3V. */ /* Power on the appropiate PMIC LDO power rails */ if (lcd_power_on()) return; /* Enable the GPIO as LCDC mode LCD. */ lcd_gpio_cfg(1); /* Arbitrary delay */ udelay(20000); /* Set the GPIOs needed for backlight */ bl_gpio_init(); /* Set backlight level with API (to 8 by default) */ rc = panel_set_backlight(8); if(rc) dprintf(CRITICAL,"Error in setting panel backlight\n"); dprintf(INFO, "Enable BACKLIGHT_EN line for output.\n"); expander_write(GPIO_EXPANDER_REG_DIR_B, ~0x10 & dir_b); dprintf(INFO, "Drive BACKLIGHT_EN to high\n"); expander_write(GPIO_EXPANDER_REG_DATA_B, 0x10 | data_b); }
void board_lcd_enable(void) { dev = qup_i2c_init(GSBI8_BASE, 100000, 24000000); /* Make sure dev is created and initialized properly */ if (!dev) { while (1) ; return; } /* Store current value of these registers as to not destroy their previous state. */ uint8_t open_drain_a = expander_read(GPIO_EXPANDER_REG_OPEN_DRAIN_A); uint8_t dir_b = expander_read(GPIO_EXPANDER_REG_DIR_B); uint8_t dir_a = expander_read(GPIO_EXPANDER_REG_DIR_A); uint8_t data_b = expander_read(GPIO_EXPANDER_REG_DATA_B); uint8_t data_a = expander_read(GPIO_EXPANDER_REG_DATA_A); /* Set the LVDS_SHUTDOWN_N to open drain and output low. */ dprintf(INFO, "Enable lvds_shutdown_n line for Open Drain.\n"); expander_write(GPIO_EXPANDER_REG_OPEN_DRAIN_A, 0x04 | open_drain_a); dprintf(INFO, "Enable lvds_shutdown_n line for output.\n"); expander_write(GPIO_EXPANDER_REG_DIR_A, ~0x04 & dir_a); dprintf(INFO, "Drive the LVDS_SHUTDOWN_N pin high here.\n"); expander_write(GPIO_EXPANDER_REG_DATA_A, 0x04 | data_a); /* Turn on the VREG_L2B to 3.3V. */ /* Power on the appropiate PMIC LDO power rails */ if (lcd_power_on()) return; /* Enable the GPIO as LCDC mode LCD. */ lcd_gpio_cfg(1); /* Arbitrary delay */ udelay(20000); /* Set the backlight duty cycle via the PM8058 LPG_DRV1 and LPG_DRV2 */ bl_duty_cycle_init(); dprintf(INFO, "Enable BACKLIGHT_EN line for output.\n"); expander_write(GPIO_EXPANDER_REG_DIR_B, ~0x10 & dir_b); dprintf(INFO, "Drive BACKLIGHT_EN to high\n"); expander_write(GPIO_EXPANDER_REG_DATA_B, 0x10 | data_b); }
uint8_t expander_write(uint8_t addr, uint8_t val) { uint8_t data_buf[] = { addr, val }; /* Create a i2c_msg buffer, that is used to put the controller into write mode and then to write some data. */ struct i2c_msg msg_buf[] = { {CORE_GPIO_EXPANDER_I2C_ADDRESS, I2C_M_WR, 2, data_buf} }; qup_i2c_xfer(dev, msg_buf, 1); /* Double check that the write worked. */ if (val != expander_read(addr)) { return -1; } return 0; }