/*2012-09-26 junghoon-kim([email protected]) porting from bu61800 driver [END]*/

static int rt9396_get_intensity(struct rt9396_driver_data *drvdata)
{
	return drvdata->intensity;
}

#if 0 /*2012-09-26 junghoon-kim([email protected]) V3 not use [START]*/
int rt9396_force_set(void)
{
   struct rt9396_driver_data *drvdata = rt9396_ref;
   int brightness;

   brightness = rt9396_get_intensity(drvdata);
   
	if (drvdata->mode == NORMAL_MODE) 
   {
		if(brightness)
      {        
			rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_on, brightness);
         Is_Backlight_Set = 1; /* LGE_CHANGE_S: E0 [email protected] [2011-11-22] : BL control error fix */
		}
      else
      {
         rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_off, brightness);
         Is_Backlight_Set = 0; /* LGE_CHANGE_S: E0 [email protected] [2011-11-22] : BL control error fix */
      }		
	}
	else {
		dprintk("A manual setting for intensity is only permitted in normal mode\n");
	}
	return 0;

}
static void leds_brightness_set(struct led_classdev *led_cdev, enum led_brightness value)
{
	struct rt9396_driver_data *drvdata = dev_get_drvdata(led_cdev->dev->parent);
	int brightness;
	int next;	

	if (!drvdata) {
		eprintk("Error getting drvier data\n");
		return;
	}

	brightness = rt9396_get_intensity(drvdata);
	if(!value)
		next = value;
	else if(value !=0 && value < HAL_MIN_VALUE)
		value = HAL_MIN_VALUE;

	if(value == HAL_MIN_VALUE)
	{
		next = RT9396BL_MIN_BRIGHTNESS;
	}
	else if(value > HAL_MIN_VALUE && value <= HAL_20PER_VALUE)
	{				
		next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_20PER_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS)
			*(value-HAL_MIN_VALUE)/( HAL_20PER_VALUE - HAL_MIN_VALUE);
	}
	else if(value > HAL_20PER_VALUE && value <= HAL_40PER_VALUE)
	{
		next = RT9396BL_20PER_BRIGHTNESS + (RT9396BL_40PER_BRIGHTNESS - RT9396BL_20PER_BRIGHTNESS)
			*(value-HAL_20PER_VALUE)/( HAL_40PER_VALUE - HAL_20PER_VALUE);
	}
	else if(value > HAL_40PER_VALUE && value <= HAL_60PER_VALUE)
	{
		next = RT9396BL_40PER_BRIGHTNESS + (RT9396BL_60PER_BRIGHTNESS - RT9396BL_40PER_BRIGHTNESS)
			*(value-HAL_40PER_VALUE)/( HAL_60PER_VALUE - HAL_40PER_VALUE);
	}
	else if(value > HAL_60PER_VALUE && value <= HAL_80PER_VALUE)
	{
		next = RT9396BL_60PER_BRIGHTNESS + (RT9396BL_80PER_BRIGHTNESS - RT9396BL_60PER_BRIGHTNESS)
			*(value-HAL_60PER_VALUE)/( HAL_80PER_VALUE - HAL_60PER_VALUE);
	}
	else if(value > HAL_80PER_VALUE)
	{
		if(value > HAL_MAX_VALUE)
		{
			value = HAL_MAX_VALUE;
		}
	if(value == HAL_MAX_VALUE)
	{
		next = RT9396BL_MAX_BRIGHTNESS;
	}
	else
	{
		next = RT9396BL_80PER_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS - RT9396BL_80PER_BRIGHTNESS)
			*(value-HAL_80PER_VALUE)/( HAL_MAX_VALUE - HAL_80PER_VALUE);
	}
	}
	if (brightness != next) {
		rt9396_send_intensity(drvdata, next);
	}
}
static int rt9396_get_brightness(struct backlight_device *bd)
{
	struct rt9396_driver_data *drvdata = dev_get_drvdata(bd->dev.parent);
	return rt9396_get_intensity(drvdata);
}
static void leds_brightness_set(struct led_classdev *led_cdev, enum led_brightness value)
{
	struct rt9396_driver_data *drvdata = dev_get_drvdata(led_cdev->dev->parent);
	int brightness;
	int next;	

	if (!drvdata) {
		eprintk("Error getting drvier data\n");
		return;
	}

	brightness = rt9396_get_intensity(drvdata);	
   #if 1//2012-11-14 junghoon.kim([email protected]) HW brightness tuning.[START]   
   if(!value)
      next = value;
   else if(value !=0 && value < HAL_MIN_VALUE)
      value = HAL_MIN_VALUE;
   
   if(value == HAL_MIN_VALUE)
   {      
      next = RT9396BL_MIN_BRIGHTNESS;
   }
   else if(value > HAL_MIN_VALUE && value <= HAL_20PER_VALUE)
	{				
		next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_20PER_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS)
			*(value-HAL_MIN_VALUE)/( HAL_20PER_VALUE - HAL_MIN_VALUE);
	}
	else if(value > HAL_20PER_VALUE && value <= HAL_40PER_VALUE)
	{
		next = RT9396BL_20PER_BRIGHTNESS + (RT9396BL_40PER_BRIGHTNESS - RT9396BL_20PER_BRIGHTNESS)
			*(value-HAL_20PER_VALUE)/( HAL_40PER_VALUE - HAL_20PER_VALUE);
	}
   else if(value > HAL_40PER_VALUE && value <= HAL_60PER_VALUE)
	{
		next = RT9396BL_40PER_BRIGHTNESS + (RT9396BL_60PER_BRIGHTNESS - RT9396BL_40PER_BRIGHTNESS)
			*(value-HAL_40PER_VALUE)/( HAL_60PER_VALUE - HAL_40PER_VALUE);
	}
   else if(value > HAL_60PER_VALUE && value <= HAL_80PER_VALUE)
	{
		next = RT9396BL_60PER_BRIGHTNESS + (RT9396BL_80PER_BRIGHTNESS - RT9396BL_60PER_BRIGHTNESS)
			*(value-HAL_60PER_VALUE)/( HAL_80PER_VALUE - HAL_60PER_VALUE);
	}
	else if(value > HAL_80PER_VALUE)
	{
		if(value > HAL_MAX_VALUE)
		{			
			value = HAL_MAX_VALUE;
		}
      if(value == HAL_MAX_VALUE)
      {
         next = RT9396BL_MAX_BRIGHTNESS;
      }
      else
      {
         next = RT9396BL_80PER_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS - RT9396BL_80PER_BRIGHTNESS)
			*(value-HAL_80PER_VALUE)/( HAL_MAX_VALUE - HAL_80PER_VALUE);
      }		
	}
   #else
	if(value < MIN_VALUE)
	{
		if(value<0)
		{
			printk("%s, old value: %d\n", __func__,value );
			value=0;
		}			
		next = value*RT9396BL_MIN_BRIGHTNESS/MIN_VALUE;
	}
	else if(value >= MIN_VALUE && value <= DEFAULT_VALUE)

	{
		next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_DEFAULT_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS)
			*(value-MIN_VALUE)/( DEFAULT_VALUE - MIN_VALUE);
	}
	else if(value >DEFAULT_VALUE)
	{
		if(value>MAX_VALUE)
		{
			printk("%s, old value: %d\n", __func__,value );
			value=MAX_VALUE;
		}
		next = RT9396BL_DEFAULT_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS  - RT9396BL_DEFAULT_BRIGHTNESS)
			*(value-DEFAULT_VALUE)/(MAX_VALUE - DEFAULT_VALUE);
	}
   #endif//2012-11-14 junghoon.kim([email protected]) HW brightness tuning.[END] 
	
	if (brightness != next) {		
		//printk("%s, value: %d,after tuning next: %d \n", __func__, value, next );
		rt9396_send_intensity(drvdata, next);
	}
}