static void lcd_power_ctrl(Bool_t status) { mutex_lock(&lcd_power_mutex); printk(KERN_INFO "%s() Power %s\n", __FUNCTION__, (status ? "ON" : "OFF")); if (status) { //GPIOA27 -> LCD_PWR_EN#: 0 lcd 3.3v gpio_out(PAD_GPIOA_27, 1); lcd_mdelay(20); gpio_out(PAD_GPIOD_8, 1); //GPIOC2 -> VCCx3_EN: 0 gpio_out(PAD_GPIOC_2, 1); #ifdef CONFIG_AW_AXP axp_gpio_set_io(3,1); axp_gpio_set_value(3, 0); #endif lcd_mdelay(20); lcd_signals_ports_ctrl(ON); lcd_mdelay(10); gpio_out(PAD_GPIOD_6, 1); lcd_mdelay(200); data_status = status; } else { data_status = status; lcd_mdelay(30); gpio_out(PAD_GPIOD_6, 0); lcd_signals_ports_ctrl(OFF); lcd_mdelay(20); //GPIOC2 -> VCCx3_EN: 1 gpio_out(PAD_GPIOC_2, 0); #ifdef CONFIG_AW_AXP axp_gpio_set_io(3,0); #endif lcd_mdelay(20); gpio_out(PAD_GPIOD_8, 0); //GPIOA27 -> LCD_PWR_EN#: 1 lcd 3.3v gpio_out(PAD_GPIOA_27, 0); lcd_mdelay(100); //power down sequence, needed } printk(KERN_INFO "%s() Power %s finished\n", __FUNCTION__, (status ? "ON" : "OFF")); mutex_unlock(&lcd_power_mutex); }
static inline void _power_on_backlight(void) { mutex_lock(&bl_power_mutex); if (bl_real_status) { mutex_unlock(&bl_power_mutex); return; } aml_set_reg32_bits(P_LED_PWM_REG0, 1, 12, 2); lcd_mdelay(20); #if (BL_CTL==BL_CTL_GPIO) //BL_EN -> GPIOD_1: 1 gpio_out(PAD_GPIOD_1, 1); #elif (BL_CTL==BL_CTL_PWM) gpio_out(PAD_GPIOC_8, 1); aml_set_reg32_bits(P_PWM_MISC_REG_CD, PWM_PRE_DIV, 16, 7); aml_set_reg32_bits(P_PWM_MISC_REG_CD, 1, 23, 1); aml_set_reg32_bits(P_PWM_MISC_REG_CD, 1, 1, 1); //enable pwm_d aml_write_reg32(P_PERIPHS_PIN_MUX_2, aml_read_reg32(P_PERIPHS_PIN_MUX_2) | (1<<3)); //enable pwm pinmux #endif bl_real_status = 1; mutex_unlock(&bl_power_mutex); }
static void backlight_power_ctrl(Bool_t status) { mutex_lock(&bl_power_mutex); PRINT_INFO("%s(): bl_status=%s, data_status=%s, bl_level=%u\n", __FUNCTION__, (bl_status ? "ON" : "OFF"), (data_status ? "ON" : "OFF"), bl_level); if( status == ON ){ if ((bl_status == ON) || (data_status == OFF) || (bl_level == 0)) { mutex_unlock(&bl_power_mutex); return; } aml_set_reg32_bits(P_LED_PWM_REG0, 1, 12, 2); lcd_mdelay(20); #if (BL_CTL==BL_CTL_GPIO) //BL_EN -> GPIOD_1: 1 gpio_out(PAD_GPIOD_1, 1); #elif (BL_CTL==BL_CTL_PWM) aml_set_reg32_bits(P_PWM_MISC_REG_CD, PWM_PRE_DIV, 16, 7); aml_set_reg32_bits(P_PWM_MISC_REG_CD, 1, 23, 1); aml_set_reg32_bits(P_PWM_MISC_REG_CD, 1, 1, 1); //enable pwm_d aml_write_reg32(P_PERIPHS_PIN_MUX_2, aml_read_reg32(P_PERIPHS_PIN_MUX_2) | (1<<3)); //enable pwm pinmux #endif } else{ if (bl_status == OFF) { mutex_unlock(&bl_power_mutex); return; } #if (BL_CTL==BL_CTL_GPIO) gpio_out(PAD_GPIOD_1, 0); #elif (BL_CTL==BL_CTL_PWM) aml_set_reg32_bits(P_PWM_MISC_REG_CD, 0, 1, 1); //disable pwm_d #endif } bl_status = status; printk(KERN_INFO "%s() Power %s\n", __FUNCTION__, (status ? "ON" : "OFF")); mutex_unlock(&bl_power_mutex); }