static void aat28xx_wakeup(struct aat28xx_driver_data *drvdata) { if (!drvdata || drvdata->state == NORMAL_STATE) return; printk(KERN_INFO "%s: cur state=%d to wakeup state(1)\n", __func__, drvdata->state); if (drvdata->state == POWEROFF_STATE) { aat28xx_poweron(drvdata); } else if (drvdata->state == SLEEP_STATE) { if (drvdata->mode == NORMAL_MODE) { if(drvdata->version == 2862) { aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x00); /* Floor current : 0.48mA */ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, 0x9F); aat28xx_send_intensity_no_check(drvdata, drvdata->intensity); } else { aat28xx_set_table(drvdata, drvdata->cmds.normal); aat28xx_send_intensity_no_check(drvdata, drvdata->intensity); } drvdata->state = NORMAL_STATE; } else if (drvdata->mode == ALC_MODE) { printk(KERN_ERR "%s: invalide mode!!!\n", __func__); } } }
void aat28xx_switch_mode(struct device *dev, int next_mode) { struct aat28xx_driver_data *drvdata = dev_get_drvdata(dev); unsigned int aat28xx_intensity; if (!drvdata || drvdata->mode == next_mode) return; if (next_mode == ALC_MODE) { /* */ //aat28xx_set_table(drvdata, drvdata->cmds.alc); } else if (next_mode == NORMAL_MODE) { aat28xx_set_table(drvdata, drvdata->cmds.alc); if(drvdata->version == 2862) { aat28xx_intensity = (~(drvdata->intensity)& 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat28xx_intensity |= 0xE0; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat28xx_intensity); } else { aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, drvdata->intensity); } } else { printk(KERN_ERR "%s: invalid mode(%d)!!!\n", __func__, next_mode); return; } drvdata->mode = next_mode; return; }
static void aat28xx_wakeup(struct aat28xx_driver_data *drvdata) { unsigned int aat28xx_intensity; if (!drvdata || drvdata->state == NORMAL_STATE) return; dprintk("operation mode is %s\n", (drvdata->mode == NORMAL_MODE) ? "normal_mode" : "alc_mode"); if (drvdata->state == POWEROFF_STATE) { aat28xx_poweron(drvdata); //LG_CHANGE [[email protected]] 2011-10-12 , LCD brightness [START] aat28xx_go_opmode(drvdata); if (drvdata->mode == NORMAL_MODE) { if(drvdata->version == 2862) { /* LGE_CHANGE * Using 'Fade in' function supported by AAT2862 when wakeup. * 2010-08-21, [email protected] */ aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x00); /* Floor current : 0.48mA */ aat28xx_intensity = (~(drvdata->intensity)& 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat28xx_intensity |= 0xA0; /* MEQS(7)=1, Disable Fade(6)=0, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat28xx_intensity); aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x08); /* Fade in to intensity brightness in 1000ms. */ } else { aat28xx_set_table(drvdata, drvdata->cmds.normal); aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, drvdata->intensity); } drvdata->state = NORMAL_STATE; } //LG_CHANGE [[email protected]] 2011-10-12 , LCD brightness [END] } else if (drvdata->state == SLEEP_STATE) { if (drvdata->mode == NORMAL_MODE) { if(drvdata->version == 2862) { /* LGE_CHANGE * Using 'Fade in' function supported by AAT2862 when wakeup. * 2010-08-21, [email protected] */ aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x00); /* Floor current : 0.48mA */ aat28xx_intensity = (~(drvdata->intensity)& 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat28xx_intensity |= 0xA0; /* MEQS(7)=1, Disable Fade(6)=0, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat28xx_intensity); aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x08); /* Fade in to intensity brightness in 1000ms. */ } else { aat28xx_set_table(drvdata, drvdata->cmds.normal); aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, drvdata->intensity); } drvdata->state = NORMAL_STATE; } else if (drvdata->mode == ALC_MODE) { /* LGE_CHANGE * Remove ALC mode * 2010-07-26. [email protected] */ //aat28xx_set_table(drvdata, drvdata->cmds.alc); //drvdata->state = NORMAL_STATE; } } }
static int aat28xx_set_table(struct aat28xx_driver_data *drvdata, struct aat28xx_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 (aat28xx_write(drvdata->client, ptbl->reg, ptbl->val) != 0) dprintk("i2c failed addr:%d, value:%d\n", ptbl->reg, ptbl->val); } ptbl++; i++; } return 0; }
static int aat28xx_ldo_set_vout(struct i2c_client *i2c_dev, unsigned num, unsigned char val) { struct aat28xx_driver_data *drvdata = i2c_get_clientdata(i2c_dev); unsigned char *next_val; unsigned char reg; if (drvdata) { if (num <= 2) { reg = drvdata->reg_addrs.ldo_ab; next_val = &drvdata->reg_ldo_vout[0]; } else { reg = drvdata->reg_addrs.ldo_cd; next_val = &drvdata->reg_ldo_vout[1]; } if (num % 2) { *next_val &= 0x0F; val = val << 4; } else { *next_val &= 0xF0; } *next_val |= val; dprintk("target register[0x%x], value[0x%x]\n", reg, *next_val); return aat28xx_write(i2c_dev, reg, *next_val); } return -EIO; }
static int aat28xx_send_intensity_no_check(struct aat28xx_driver_data *drvdata, int next) { int aat2862_bl_next; if(drvdata->version == 2862) { if(next != 0) { aat2862_bl_next = (~next & 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat2862_bl_next |= 0xE0; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } else { // Off the backlight if brightness set level is 0. aat2862_bl_next = 0xDF; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=0*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } } else { /* 2870 */ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, next); } return 0; }
static int aat28xx_send_intensity(struct aat28xx_driver_data *drvdata, int next) { int aat2862_bl_next; if (drvdata->mode == NORMAL_MODE) { if (next > drvdata->max_intensity) next = drvdata->max_intensity; /* If value is not 0, should not backlight off by bongkyu.kim */ if (next != 0 && next < LCD_LED_MIN) next = LCD_LED_MIN; dprintk("next current is %d\n", next); if (drvdata->state == NORMAL_STATE && drvdata->intensity != next) { /* */ if(drvdata->version == 2862) { if(next != 0) { aat2862_bl_next = (~next & 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat2862_bl_next |= 0xE0; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } else { // Off the backlight if brightness set level is 0. aat2862_bl_next = 0xDF; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=0*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } } else /* 2870 */ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, next); } drvdata->intensity = next; } else { dprintk("A manual setting for intensity is only permitted in normal mode\n"); } return 0; }
static void aat28xx_wakeup(struct aat28xx_driver_data *drvdata) { unsigned int aat28xx_intensity; if (!drvdata || drvdata->state == NORMAL_STATE) return; dprintk("operation mode is %s\n", (drvdata->mode == NORMAL_MODE) ? "normal_mode" : "alc_mode"); if (drvdata->state == POWEROFF_STATE) { aat28xx_poweron(drvdata); /* */ //aat28xx_go_opmode(drvdata); } else if (drvdata->state == SLEEP_STATE) { if (drvdata->mode == NORMAL_MODE) { if(drvdata->version == 2862) { /* */ aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x00); /* Floor current : 0.48mA */ aat28xx_intensity = (~(drvdata->intensity)& 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat28xx_intensity |= 0xA0; /* MEQS(7)=1, Disable Fade(6)=0, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat28xx_intensity); aat28xx_write(drvdata->client, drvdata->reg_addrs.fade, 0x08); /* Fade in to intensity brightness in 1000ms. */ } else { aat28xx_set_table(drvdata, drvdata->cmds.normal); aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, drvdata->intensity); } drvdata->state = NORMAL_STATE; } else if (drvdata->mode == ALC_MODE) { /* */ //aat28xx_set_table(drvdata, drvdata->cmds.alc); //drvdata->state = NORMAL_STATE; } } }
static int aat28xx_send_intensity(struct aat28xx_driver_data *drvdata, int next) { int aat2862_bl_next; if (drvdata->mode == NORMAL_MODE) { if (next > drvdata->max_intensity) next = drvdata->max_intensity; if (next < LCD_LED_MIN) next = LCD_LED_MIN; dprintk("next current is %d\n", next); if (drvdata->state == NORMAL_STATE && drvdata->intensity != next) { /* LGE_CHANGE * [To support two BL driver ICs(AAT2870 and AAT2862)] * 2010-04-20, [email protected] */ if(drvdata->version == 2862) { if(next != 0) { aat2862_bl_next = (~next & 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat2862_bl_next |= 0xE0; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } else { // Off the backlight if brightness set level is 0. aat2862_bl_next = 0xDF; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=0*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat2862_bl_next); } } else /* 2870 */ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, next); } drvdata->intensity = next; } else { dprintk("A manual setting for intensity is only permitted in normal mode\n"); } return 0; }
static void aat28xx_poweron(struct aat28xx_driver_data *drvdata) { unsigned int aat28xx_intensity; if (!drvdata || drvdata->state != POWEROFF_STATE) return; dprintk("POWER ON \n"); aat28xx_device_init(drvdata); if (drvdata->mode == NORMAL_MODE) { if(drvdata->version == 2862) { aat28xx_intensity = (~(drvdata->intensity)& 0x1F); /* Invert BL control bits and Clear upper 3bits */ aat28xx_intensity |= 0xE0; /* MEQS(7)=1, Disable Fade(6)=1, LCD_ON(5)=1*/ aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, aat28xx_intensity); } else aat28xx_write(drvdata->client, drvdata->reg_addrs.bl_m, drvdata->intensity); } }
static int aat28xx_set_ldos(struct i2c_client *i2c_dev, unsigned num, int enable) { struct aat28xx_driver_data *drvdata = i2c_get_clientdata(i2c_dev); if (drvdata) { if (enable) drvdata->reg_ldo_enable |= 1 << (num-1); else drvdata->reg_ldo_enable &= ~(1 << (num-1)); dprintk("enable ldos, reg:0x13 value:0x%x\n", drvdata->reg_ldo_enable); return aat28xx_write(i2c_dev, drvdata->reg_addrs.ldo_en, drvdata->reg_ldo_enable); } return -EIO; }