static int mt65xx_led_set_cust(struct cust_mt65xx_led *cust, int level) { if (level > LED_FULL) level = LED_FULL; else if (level < 0) level = 0; switch (cust->mode) { case MT65XX_LED_MODE_PWM: if(strcmp(cust->name,"lcd-backlight") == 0) { return brightness_set_pwm(cust->data, level,&cust->config_data); } else { return led_set_pwm(cust->data, level); } case MT65XX_LED_MODE_GPIO: return brightness_set_gpio(cust->data, level); case MT65XX_LED_MODE_PMIC: return brightness_set_pmic(cust->data, level); case MT65XX_LED_MODE_CUST: return ((cust_brightness_set)(cust->data))(level); case MT65XX_LED_MODE_NONE: default: break; } return -1; }
static void mt65xx_leds_shutdown(struct platform_device *pdev) { int i; struct nled_setting led_tmp_setting = {NLED_OFF,0,0}; LEDS_DRV_DEBUG("[LED]%s\n", __func__); LEDS_DRV_DEBUG("[LED]mt65xx_leds_shutdown: turn off backlight\n"); for (i = 0; i < MT65XX_LED_TYPE_TOTAL; i++) { if (!g_leds_data[i]) continue; switch (g_leds_data[i]->cust.mode) { case MT65XX_LED_MODE_PWM: if(strcmp(g_leds_data[i]->cust.name,"lcd-backlight") == 0) { //mt_set_pwm_disable(g_leds_data[i]->cust.data); //mt_pwm_power_off (g_leds_data[i]->cust.data); mt_led_pwm_disable(g_leds_data[i]->cust.data); }else { led_set_pwm(g_leds_data[i]->cust.data,&led_tmp_setting); } break; // case MT65XX_LED_MODE_GPIO: // brightness_set_gpio(g_leds_data[i]->cust.data, 0); // break; case MT65XX_LED_MODE_PMIC: brightness_set_pmic(g_leds_data[i]->cust.data, 0, 0); break; case MT65XX_LED_MODE_CUST_LCM: LEDS_DRV_DEBUG("[LED]backlight control through LCM!!1\n"); ((cust_brightness_set)(g_leds_data[i]->cust.data))(0, bl_div); break; case MT65XX_LED_MODE_CUST_BLS_PWM: LEDS_DRV_DEBUG("[LED]backlight control through BLS!!1\n"); ((cust_set_brightness)(g_leds_data[i]->cust.data))(0); break; case MT65XX_LED_MODE_NONE: default: break; } } }
static int mt65xx_led_set_cust(struct cust_mt65xx_led *cust, int level) { if (level > LED_FULL) level = LED_FULL; else if (level < 0) level = 0; switch (cust->mode) { case MT65XX_LED_MODE_PWM: if(strcmp(cust->name,"lcd-backlight") == 0) { mdelay(100); //added by chenfei //added by XIE Wei -- begin if (level) { upmu_boost_isink_hw_sel(0x1); upmu_boost_mode(3); upmu_boost_vrsel(0x07); upmu_boost_cabc_en(0); upmu_top2_bst_drv_ck_pdn(0x0); upmu_boost_en(0x1); } else { printf("[LEDS]MT65XX_LED_PMIC_LCD_BOOST:level=%d\n", level); upmu_boost_en(0x0); } //added by XIE Wei -- end return brightness_set_pwm(cust->data, level,&cust->config_data); } else { return led_set_pwm(cust->data, level); } case MT65XX_LED_MODE_GPIO: return brightness_set_gpio(cust->data, level); case MT65XX_LED_MODE_PMIC: return brightness_set_pmic(cust->data, level); case MT65XX_LED_MODE_CUST: return ((cust_brightness_set)(cust->data))(level); case MT65XX_LED_MODE_NONE: default: break; } return -1; }
int mt65xx_blink_set(enum mt65xx_led_type type, unsigned long delay_on, unsigned long delay_off) { //struct mt65xx_led_data *led_data = led_data_back; static int got_wake_lock = 0; struct nled_setting nled_tmp_setting = {0,0,0}; struct cust_mt65xx_led *cust_led_list = get_cust_led_list(); blink_led_data->cust = cust_led_list[type]; // only allow software blink when delay_on or delay_off changed if (delay_on != blink_led_data->delay_on || delay_off != blink_led_data->delay_off ||type != blink_led_data->type ) { blink_led_data->delay_on = delay_on; blink_led_data->delay_off = delay_off; blink_led_data->type = type; if (blink_led_data->delay_on && blink_led_data->delay_off) { // enable blink blink_led_data->level = 255; // when enable blink then to set the level (255) if(blink_led_data->cust.mode == MT65XX_LED_MODE_PWM && (blink_led_data->cust.data != PWM3 && blink_led_data->cust.data != PWM4 && blink_led_data->cust.data != PWM5)) { nled_tmp_setting.nled_mode = NLED_BLINK; nled_tmp_setting.blink_off_time = blink_led_data->delay_off; nled_tmp_setting.blink_on_time = blink_led_data->delay_on; led_blink_pmic(blink_led_data->cust.data, &nled_tmp_setting); return 0; } //#if defined (CONFIG_ARCH_MT6575) || defined (CONFIG_ARCH_MT6575T)|| defined (CONFIG_ARCH_MT6577) else if((blink_led_data->cust.mode == MT65XX_LED_MODE_PMIC) && (blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK4 || blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK5 || blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK0)) { if(get_chip_eco_ver() == CHIP_E2) { nled_tmp_setting.nled_mode = NLED_BLINK; nled_tmp_setting.blink_off_time = blink_led_data->delay_off; nled_tmp_setting.blink_on_time = blink_led_data->delay_on; led_blink_pmic(blink_led_data->cust.data, &nled_tmp_setting); return 0; } else { // wake_lock(&leds_suspend_lock); } } //#endif else if (!got_wake_lock) { // wake_lock(&leds_suspend_lock); got_wake_lock = 1; } } else if (!blink_led_data->delay_on && !blink_led_data->delay_off) { // disable blink if(blink_led_data->cust.mode == MT65XX_LED_MODE_PWM && (blink_led_data->cust.data != PWM3 && blink_led_data->cust.data != PWM4 && blink_led_data->cust.data != PWM5)) { brightness_set_pmic(blink_led_data->cust.data, 0); return 0; } //#if defined (CONFIG_ARCH_MT6575) || defined (CONFIG_ARCH_MT6575T)|| defined (CONFIG_ARCH_MT6577) else if((blink_led_data->cust.mode == MT65XX_LED_MODE_PMIC) && (blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK4 || blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK5 || blink_led_data->cust.data == MT65XX_LED_PMIC_NLED_ISINK0)) { if(get_chip_eco_ver() == CHIP_E2) { brightness_set_pmic(blink_led_data->cust.data, 0); return 0; } else { // wake_unlock(&leds_suspend_lock); } } //#endif else if (got_wake_lock) { // wake_unlock(&leds_suspend_lock); got_wake_lock = 0; } } return -1; } // delay_on and delay_off are not changed return 0; }