/*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 int rt9396_send_intensity(struct rt9396_driver_data *drvdata, int next)
{
	if (next > drvdata->max_intensity)
		next = drvdata->max_intensity;
	if (next < LCD_LED_MIN)
		next = LCD_LED_MIN;

   #if 0/*2012-09-10 junghoon-kim([email protected]) porting from bu61800 driver [START]*/
	if (drvdata->state == NORMAL_STATE && drvdata->intensity != next){
		rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_on, next);
	}
   #else
   if ((drvdata->intensity != next) && (next != 0))
   {
		rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_on, next);
      printk("[%s] LCD-backlight ON !!!!! val:%d \n", __func__,next);
      Is_Backlight_Set = 1; /* LGE_CHANGE_S: E0 [email protected] [2011-11-22] : BL control error fix */
	}
   else if(next ==0)
   {
      printk("[%s] LCD-backlight OFF !!!!!\n", __func__);
      rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_off, next);
      Is_Backlight_Set = 0; /* LGE_CHANGE_S: E0 [email protected] [2011-11-22] : BL control error fix */
   }   
   #endif /*2012-09-10 junghoon-kim([email protected]) porting from bu61800 driver[END]*/

	drvdata->intensity = next;
	return 0;

}
static int rt9396_set_ldos(struct i2c_client *i2c_dev, unsigned num, int enable)
{
	int err = 0;
	struct rt9396_driver_data *drvdata = i2c_get_clientdata(i2c_dev);

	if (drvdata) {
		if (enable) 
			{
			switch(num)
				{
				case 1 :
					drvdata->reg_addrs.ldo_1 = RT9396BL_REG_LDO1_ON;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_1, RT9396BL_VAL_LDO1);
					break;
				case 2 :
					drvdata->reg_addrs.ldo_2 = RT9396BL_REG_LDO2_ON;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_2, RT9396BL_VAL_LDO2);
					break;
				case 3 :
					drvdata->reg_addrs.ldo_3 = RT9396BL_REG_LDO3_ON;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_3, RT9396BL_VAL_LDO3);
					break;
				case 4 :
					drvdata->reg_addrs.ldo_4 = RT9396BL_REG_LDO4_ON;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_4, RT9396BL_VAL_LDO4);
					break;
				default:
					break;
				}
		
			}
		else {
			switch(num)
				{
				case 1 :
					drvdata->reg_addrs.ldo_1 = RT9396BL_REG_LDO1_OFF;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_1, RT9396BL_VAL_LDO1);
					break;
				case 2 :
					drvdata->reg_addrs.ldo_2 = RT9396BL_REG_LDO2_OFF;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_2, RT9396BL_VAL_LDO2);
					break;
				case 3 :
					drvdata->reg_addrs.ldo_3 = RT9396BL_REG_LDO3_OFF;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_3, RT9396BL_VAL_LDO3);
					break;
				case 4 :
					drvdata->reg_addrs.ldo_4 = RT9396BL_REG_LDO4_OFF;
					err = rt9396_write(i2c_dev, drvdata->reg_addrs.ldo_4, RT9396BL_VAL_LDO4);
					break;
				default:
					break;
				}
		}
		return err; 
	
	}
	return -ENODEV;
}
static int rt9396_set_table(struct rt9396_driver_data *drvdata, struct rt9396_ctrl_tbl *ptbl)
{
	unsigned int i = 0;
	unsigned long delay = 0;

	if (ptbl == NULL) {
		eprintk("input ptr is null\n");
		return -EIO;
	}

	for( ;;) 
	{
		if (ptbl->reg == 0xFF) {
			if (ptbl->val != 0xFE) {
				delay = (unsigned long)ptbl->val;
				udelay(delay);
			}
			else
			break;
		}
		else {
		   if (rt9396_write(drvdata->client, ptbl->reg, ptbl->val) != 0)
			 dprintk("i2c failed addr:%d, value:%d\n", ptbl->reg, ptbl->val);
			}
		ptbl++;
		i++;
	}
	return 0;
}
int rt9396_send_intensity_button(struct rt9396_driver_data *drvdata, int level)
{
// [Caio99BR][[email protected]] Workaround for bug of screen still awake after lock
#ifndef CONFIG_MACH_LGE_2ND_GEN_KK_WORKAROUD
	if(level)
	{
	printk("[%s] key-backlight ON ! \n", __func__);
	rt9396_write(drvdata->client, RT9396BL_REG_KEYLED_ON, RT9396BL_VAL_KEYLED_SET);
	}
	else
	{
	printk("[%s] key-backlight OFF !\n", __func__);
	rt9396_write(drvdata->client, RT9396BL_REG_KEYLED_OFF, RT9396BL_VAL_KEYLED_SET);
	}
#endif
	return 0;
}
int rt9396_send_intensity_button(struct rt9396_driver_data *drvdata, int level)
{
   /*[12-12-30][[email protected]] key led disable at rev_11(except single EU) [START]*/
   #if !defined( CONFIG_MACH_MSM7X25A_V3EU_REV_11) && !defined( CONFIG_MACH_MSM7X25A_V3BR_REV_11)
	if(level)
	{
      printk("[%s] key-backlight ON !!!!! \n", __func__);
      rt9396_write(drvdata->client, RT9396BL_REG_KEYLED_ON, RT9396BL_VAL_KEYLED_SET);
	}
	else
	{
      printk("[%s] key-backlight OFF !!!!!\n", __func__);
      rt9396_write(drvdata->client, RT9396BL_REG_KEYLED_OFF, RT9396BL_VAL_KEYLED_SET);
	}  
   #endif /*[12-12-30][[email protected]] key led disable at rev_11(except single EU) [END]*/
	return 0;
}
static int rt9396_send_intensity(struct rt9396_driver_data *drvdata, int next)
{
	if (next > drvdata->max_intensity)
		next = drvdata->max_intensity;
	if (next < LCD_LED_MIN)
		next = LCD_LED_MIN;

   if ((drvdata->intensity != next) && (next != 0))
   {
	rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_on, next);
	// printk("[%s] LCD-backlight ON ! val:%d \n", __func__,next);
	Is_Backlight_Set = 1;
	}
   else if(next ==0)
   {
	rt9396_write(drvdata->client, drvdata->reg_addrs.led_set_off, next);
	// printk("[%s] LCD-backlight OFF !\n", __func__);
	Is_Backlight_Set = 0;
   }
	drvdata->intensity = next;
	return 0;

}