static ssize_t auto_brightness_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value; int ret; static unsigned int update; ret = kstrtouint(buf, 0, &value); if (ret < 0) return ret; dev_info(dev, "%s: value=%d\n", __func__, value); mutex_lock(&mdnie->lock); update = (IS_HBM(mdnie->auto_brightness) != IS_HBM(value)) ? 1 : 0; mdnie->hbm = IS_HBM(value) ? HBM_ON : HBM_OFF; mdnie->auto_brightness = value; mutex_unlock(&mdnie->lock); if (update) mdnie_update(mdnie); return count; }
static struct mdnie_table *mdnie_find_table(struct mdnie_info *mdnie) { struct mdnie_table *table = NULL; mutex_lock(&mdnie->lock); if (IS_ACCESSIBILITY(mdnie->accessibility)) { table = &accessibility_table[mdnie->accessibility]; goto exit; #ifdef CONFIG_LCD_HMT } else if (IS_HMT(mdnie->hmt_mode)) { table = &hmt_table[mdnie->hmt_mode]; goto exit; #endif } else if (IS_HBM(mdnie->auto_brightness)) { if((mdnie->scenario == BROWSER_MODE) || (mdnie->scenario == EBOOK_MODE)) table = &hbm_table[HBM_ON_TEXT]; else table = &hbm_table[HBM_ON]; goto exit; #if defined(CONFIG_TDMB) } else if (IS_DMB(mdnie->scenario)) { table = &dmb_table[mdnie->mode]; goto exit; #endif } else if (IS_SCENARIO(mdnie->scenario)) { table = &tuning_table[mdnie->scenario][mdnie->mode]; goto exit; } exit: mutex_unlock(&mdnie->lock); return table; }
static struct mdnie_table *mdnie_find_table(struct mdnie_info *mdnie) { struct mdnie_table *table = NULL; struct mdnie_trans_info *trans_info = mdnie->tune->trans_info; mutex_lock(&mdnie->lock); if (IS_ACCESSIBILITY(mdnie->accessibility)) { table = &mdnie->tune->accessibility_table[mdnie->accessibility]; goto exit; #ifdef CONFIG_LCD_HMT } else if (IS_HMT(mdnie->hmt_mode)) { table = &mdnie->tune->hmt_table[mdnie->hmt_mode]; goto exit; #endif } else if (IS_HBM(mdnie->auto_brightness)) { #if defined(CONFIG_PANEL_S6E3HA3_DYNAMIC) || defined(CONFIG_PANEL_S6E3HF3_DYNAMIC) if (mdnie->auto_brightness == AOLCE_MIN_BRIGHTNESS) table = &mdnie->tune->hbm_table[HBM_AOLCE_1]; else if (mdnie->auto_brightness >= AOLCE_MAX_BRIGHTNESS) table = &mdnie->tune->hbm_table[HBM_AOLCE_3]; else table = &mdnie->tune->hbm_table[HBM_AOLCE_2]; #else if ((mdnie->scenario == BROWSER_MODE) || (mdnie->scenario == EBOOK_MODE)) table = &mdnie->tune->hbm_table[HBM_ON_TEXT]; else table = &mdnie->tune->hbm_table[HBM_ON]; #endif goto exit; #if defined(CONFIG_TDMB) } else if (IS_DMB(mdnie->scenario)) { table = &mdnie->tune->dmb_table[mdnie->mode]; goto exit; #endif } else if (IS_SCENARIO(mdnie->scenario)) { table = &mdnie->tune->main_table[mdnie->scenario][mdnie->mode]; goto exit; } exit: if (trans_info->enable && mdnie->disable_trans_dimming && (table != NULL)) { dev_info(mdnie->dev, "%s: disable_trans_dimming=%d\n", __func__, mdnie->disable_trans_dimming); memcpy(&(mdnie->table_buffer), table, sizeof(struct mdnie_table)); memcpy(mdnie->sequence_buffer, table->seq[trans_info->index].cmd, table->seq[trans_info->index].len); mdnie->table_buffer.seq[trans_info->index].cmd = mdnie->sequence_buffer; mdnie->table_buffer.seq[trans_info->index].cmd[trans_info->offset] = 0x0; mutex_unlock(&mdnie->lock); return &(mdnie->table_buffer); } mutex_unlock(&mdnie->lock); return table; }
static ssize_t auto_brightness_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value; int ret; static unsigned int update; ret = kstrtouint(buf, 0, &value); if (ret < 0) return ret; dev_info(dev, "%s: value=%d\n", __func__, value); mutex_lock(&mdnie->lock); #if defined(CONFIG_PANEL_S6E3HA3_DYNAMIC) || defined(CONFIG_PANEL_S6E3HF3_DYNAMIC) update = 0; if (IS_HBM(mdnie->auto_brightness) == IS_HBM(value)) { if (IS_HBM(mdnie->auto_brightness)&&(mdnie->auto_brightness != value)) update = 1; } else update = 1; #else update = (IS_HBM(mdnie->auto_brightness) != IS_HBM(value)) ? 1 : 0; #endif mdnie->hbm = IS_HBM(value) ? HBM_ON : HBM_OFF; mdnie->auto_brightness = value; mutex_unlock(&mdnie->lock); if (update) mdnie_update(mdnie); return count; }
int gen_panel_get_tune_level(struct gen_panel_backlight_info *bl_info, int brightness) { int tune_level = 0, idx; struct brt_value *range = bl_info->range; if (unlikely(!range)) { pr_err("%s: brightness range not exist!\n", __func__); return -EINVAL; } if (brightness > range[BRT_VALUE_MAX].brightness || brightness < 0) { pr_err("%s: out of range (%d)\n", __func__, brightness); return -EINVAL; } if (IS_HBM(bl_info->auto_brightness) && brightness == range[BRT_VALUE_MAX].brightness) return bl_info->outdoor_value.tune_level; for (idx = 0; idx < MAX_BRT_VALUE_IDX; idx++) if (brightness <= range[idx].brightness) break; if (idx == MAX_BRT_VALUE_IDX) { pr_err("%s: out of brt_value table (%d)\n", __func__, brightness); return -EINVAL; } if (idx <= BRT_VALUE_MIN) tune_level = range[idx].tune_level; else tune_level = range[idx].tune_level - (range[idx].brightness - brightness) * (range[idx].tune_level - range[idx - 1].tune_level) / (range[idx].brightness - range[idx - 1].brightness); return tune_level; }