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;
          }
	}

}
Example #3
0
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;
}