int disp_bls_set_backlight(unsigned int level) { printf("[DDP] disp_bls_set_backlight: %d, CG = 0x%x, BLS_EN = 0x%x, PWM_DUTY = %d\n", level, DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0), DISP_REG_GET(DISP_REG_BLS_EN), DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); if (level && (!(DISP_REG_GET(DISP_REG_BLS_EN) & 0x10000))) { disp_bls_config(); } #ifdef USE_DISP_BLS_MUTEX disp_bls_get_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, brightness_mapping(level)); printf("[DDP] PWM_DUTY: %x\n", DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); #ifdef USE_DISP_BLS_MUTEX disp_bls_release_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif return 0; }
int disp_bls_config(void) { #if !defined(MTK_AAL_SUPPORT) struct cust_mt65xx_led *cust_led_list = get_cust_led_list(); struct cust_mt65xx_led *cust = NULL; struct PWM_config *config_data = NULL; if(cust_led_list) { cust = &cust_led_list[MT65XX_LED_TYPE_LCD]; if((strcmp(cust->name,"lcd-backlight") == 0) && (cust->mode == MT65XX_LED_MODE_CUST_BLS_PWM)) { config_data = &cust->config_data; if (config_data->clock_source >= 0 && config_data->clock_source <= 3) { unsigned int regVal = DISP_REG_GET(CLK_CFG_1); DISP_REG_SET(CLK_CFG_1, (regVal & ~0x3) | config_data->clock_source); printf("disp_bls_config : CLK_CFG_1 0x%x => 0x%x\n", regVal, DISP_REG_GET(CLK_CFG_1)); } gPWMDiv = (config_data->div == 0) ? PWM_DEFAULT_DIV_VALUE : config_data->div; gPWMDiv &= 0x3FF; printf("disp_bls_config : PWM config data (%d,%d)\n", config_data->clock_source, config_data->div); } } printf("[DDP] disp_bls_config : CG = 0x%x, BLS_EN = 0x%x, PWM_DUTY = %d\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0), DISP_REG_GET(DISP_REG_BLS_EN), DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); #ifdef USE_DISP_BLS_MUTEX printf("[DDP] disp_bls_config : gBLSMutexID = %d\n", gBLSMutexID); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 1); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 0); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_MOD(gBLSMutexID), 0x200); // BLS DISP_REG_SET(DISP_REG_CONFIG_MUTEX_SOF(gBLSMutexID), 0); // single mode DISP_REG_SET(DISP_REG_CONFIG_MUTEX_EN(gBLSMutexID), 1); if (disp_bls_get_mutex() == 0) { #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, 0); DISP_REG_SET(DISP_REG_BLS_PWM_CON, 0x0 | (gPWMDiv << 16)); DISP_REG_SET(DISP_REG_BLS_EN, 0x00010000); #ifdef USE_DISP_BLS_MUTEX if (disp_bls_release_mutex() == 0) return 0; } return -1; #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif #endif return 0; }
int disp_bls_set_backlight(unsigned int level) { unsigned int mapped_level; DISP_MSG("disp_bls_set_backlight: %d, gBLSPowerOn = %d\n", level, gBLSPowerOn); mutex_lock(&backlight_mutex); if(level && !clock_is_on(MT_CG_PWM_MM_SW_CG)) enable_clock(MT_CG_PWM_MM_SW_CG, "DDP"); if (level && !clock_is_on(MT_CG_MDP_BLS_26M_SW_CG)) { // remove CG control to DDP path ASSERT(0); if (!gBLSPowerOn) { // config BLS parameter disp_bls_config(); } } #ifdef USE_DISP_BLS_MUTEX disp_bls_get_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif mapped_level = brightness_mapping(level); DISP_MSG("after mapping, mapped_level: %d\n", mapped_level); DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, mapped_level); if (mapped_level) // enable PWM generator DISP_REG_SET(DISP_REG_BLS_EN, DISP_REG_GET(DISP_REG_BLS_EN) | 0x10000); else // disable PWM generator DISP_REG_SET(DISP_REG_BLS_EN, DISP_REG_GET(DISP_REG_BLS_EN) & 0xFFFEFFFF); DISP_MSG("after SET, PWM_DUTY: %d\n", DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); #ifdef USE_DISP_BLS_MUTEX disp_bls_release_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif if(!level && clock_is_on(MT_CG_PWM_MM_SW_CG)) disable_clock(MT_CG_PWM_MM_SW_CG, "DDP"); if (!level && gBLSPowerOn) { DISP_MSG("disp_bls_set_backlight: disable clock\n"); // disable_clock(MT_CG_DISP0_SMI_LARB0 , "DDP"); gBLSPowerOn = 0; } mutex_unlock(&backlight_mutex); return 0; }
int disp_bls_config(void) { #if !defined(MTK_AAL_SUPPORT) if (!clock_is_on(MT_CG_MDP_BLS_26M_SW_CG)) { // remove CG control to DDP path ASSERT(0); } if (!gBLSPowerOn) { DISP_MSG("disp_bls_config: enable clock\n"); // enable_clock(MT_CG_DISP0_SMI_LARB0, "DDP"); gBLSPowerOn = 1; } #ifdef USE_DISP_BLS_MUTEX DISP_MSG("disp_bls_config : gBLSMutexID = %d\n", gBLSMutexID); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 1); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 0); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_MOD(gBLSMutexID), 0x200); // BLS DISP_REG_SET(DISP_REG_CONFIG_MUTEX_SOF(gBLSMutexID), 0); // single mode if (disp_bls_get_mutex() == 0) { #else DISP_MSG("disp_bls_config\n"); DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); DISP_REG_SET(DISP_REG_BLS_PWM_CON, 0x0); DISP_REG_SET(DISP_REG_BLS_EN, 0x00010001); // enable BLS_EN #ifdef USE_DISP_BLS_MUTEX if (disp_bls_release_mutex() == 0) return 0; } return -1; #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif #endif DISP_MSG("disp_bls_config:-\n"); return 0; return 0; }
int disp_bls_set_backlight(unsigned int level) { unsigned int regVal; unsigned int mapped_level; BLS_MSG("disp_bls_set_backlight: %d, gBLSPowerOn = %d\n", level, gBLSPowerOn); mutex_lock(&backlight_mutex); // if (level && (!clock_is_on(MT_CG_DISP0_MDP_BLS_26M) || !gBLSPowerOn)) // { // disp_bls_config(); // } #ifdef USE_DISP_BLS_MUTEX disp_bls_get_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif mapped_level = brightness_mapping(level); BLS_MSG("after mapping, mapped_level: %d\n", mapped_level); DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, mapped_level); if(level != 0) { regVal = DISP_REG_GET(DISP_REG_BLS_EN); if (!(regVal & 0x10000)) DISP_REG_SET(DISP_REG_BLS_EN, regVal | 0x10000); } else { regVal = DISP_REG_GET(DISP_REG_BLS_EN); if (regVal & 0x10000) DISP_REG_SET(DISP_REG_BLS_EN, regVal & 0xFFFEFFFF); } BLS_MSG("after SET, PWM_DUTY: %d\n", DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); #ifdef USE_DISP_BLS_MUTEX disp_bls_release_mutex(); #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif // if (!level && (clock_is_on(MT_CG_DISP0_MDP_BLS_26M) && gBLSPowerOn)) // { // BLS_MSG("disp_bls_set_backlight: disable clock\n"); // disable_clock(MT_CG_DISP0_MDP_BLS_26M , "DDP"); // disable_clock(MT_CG_DISP0_SMI_LARB0 , "DDP"); // gBLSPowerOn = 0; // } mutex_unlock(&backlight_mutex); return 0; }
int disp_bls_config(void) { #if !defined(CONFIG_MTK_AAL_SUPPORT) struct cust_mt65xx_led *cust_led_list = get_cust_led_list(); struct cust_mt65xx_led *cust = NULL; struct PWM_config *config_data = NULL; if(cust_led_list) { cust = &cust_led_list[MT65XX_LED_TYPE_LCD]; if((strcmp(cust->name,"lcd-backlight") == 0) && (cust->mode == MT65XX_LED_MODE_CUST_BLS_PWM)) { config_data = &cust->config_data; if (config_data->clock_source >= 0 && config_data->clock_source <= 3) { unsigned int regVal = DISP_REG_GET(CLK_CFG_1); clkmux_sel(MT_MUX_PWM, config_data->clock_source, "DISP_PWM"); BLS_DBG("disp_bls_init : CLK_CFG_1 0x%x => 0x%x\n", regVal, DISP_REG_GET(CLK_CFG_1)); } gPWMDiv = (config_data->div == 0) ? PWM_DEFAULT_DIV_VALUE : config_data->div; gPWMDiv &= 0x3FF; BLS_MSG("disp_bls_config : PWM config data (%d,%d)\n", config_data->clock_source, config_data->div); } } if (!clock_is_on(MT_CG_DISP0_MDP_BLS_26M) || !gBLSPowerOn) { BLS_MSG("disp_bls_config: enable clock\n"); enable_clock(MT_CG_DISP0_SMI_LARB0, "DDP"); enable_clock(MT_CG_DISP0_MDP_BLS_26M , "DDP"); gBLSPowerOn = 1; } BLS_MSG("disp_bls_config : BLS_EN=0x%x, PWM_DUTY=%d, PWM_DUTY_RD=%d, CG=0x%x, %d, %d\n", DISP_REG_GET(DISP_REG_BLS_EN), DISP_REG_GET(DISP_REG_BLS_PWM_DUTY), DISP_REG_GET(DISP_REG_BLS_PWM_DUTY_RD), DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0), clock_is_on(MT_CG_DISP0_MDP_BLS_26M), clock_is_on(MT_CG_DISP0_DISP_BLS)); #ifdef USE_DISP_BLS_MUTEX BLS_MSG("disp_bls_config : gBLSMutexID = %d\n", gBLSMutexID); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 1); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_RST(gBLSMutexID), 0); DISP_REG_SET(DISP_REG_CONFIG_MUTEX_MOD(gBLSMutexID), 0x200); // BLS DISP_REG_SET(DISP_REG_CONFIG_MUTEX_SOF(gBLSMutexID), 0); // single mode DISP_REG_SET(DISP_REG_CONFIG_MUTEX_EN(gBLSMutexID), 1); if (disp_bls_get_mutex() == 0) { #else BLS_MSG("disp_bls_config\n"); DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x3); #endif if (!(DISP_REG_GET(DISP_REG_BLS_EN) & 0x10000)) DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, 0); DISP_REG_SET(DISP_REG_BLS_PWM_CON, 0x0 | (gPWMDiv << 16)); //DISP_REG_SET(DISP_REG_BLS_EN, 0x00010001); //Enable BLS_EN #ifdef USE_DISP_BLS_MUTEX if (disp_bls_release_mutex() == 0) return 0; } return -1; #else DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x0); #endif #endif BLS_MSG("disp_bls_config:-\n"); return 0; }