static void input_booster_change_dvfs_wacom_work(struct work_struct *work) { int retval = 0; struct input_booster *booster = container_of(work, struct input_booster, work_dvfs_chg.work); mutex_lock(&booster->dvfs_lock); switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_TRIPLE: retval = set_freq_limit(DVFS_TOUCH_ID, -1); booster->dvfs_freq = -1; break; case DVFS_STAGE_DUAL: retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); booster->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; break; } if (retval < 0) pr_info("%s: booster change failed(%d).\n", __func__, retval); mutex_unlock(&booster->dvfs_lock); }
static void wacom_change_dvfs_lock(struct work_struct *work) { struct wacom_i2c *wac_i2c = container_of(work, struct wacom_i2c, work_dvfs_chg.work); int retval = 0; mutex_lock(&wac_i2c->dvfs_lock); if (wac_i2c->dvfs_boost_mode == DVFS_STAGE_DUAL) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); wac_i2c->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; } else if (wac_i2c->dvfs_boost_mode == DVFS_STAGE_SINGLE || wac_i2c->dvfs_boost_mode == DVFS_STAGE_TRIPLE) { retval = set_freq_limit(DVFS_TOUCH_ID, -1); wac_i2c->dvfs_freq = -1; } if (retval < 0) dev_info(&wac_i2c->client->dev, "%s: booster change failed(%d).\n", __func__, retval); mutex_unlock(&wac_i2c->dvfs_lock); }
void wacom_set_dvfs_lock(struct wacom_i2c *wac_i2c, int on) { int ret = 0; if (wac_i2c->dvfs_boost_mode == DVFS_STAGE_NONE) { dev_dbg(&wac_i2c->client->dev, "%s: DVFS stage is none(%d)\n", __func__, wac_i2c->dvfs_boost_mode); return; } mutex_lock(&wac_i2c->dvfs_lock); if (on == 0) { if (wac_i2c->dvfs_lock_status) { schedule_delayed_work(&wac_i2c->work_dvfs_off, msecs_to_jiffies(TOUCH_BOOSTER_OFF_TIME)); } } else if (on > 0) { cancel_delayed_work(&wac_i2c->work_dvfs_off); if (!wac_i2c->dvfs_lock_status || wac_i2c->dvfs_old_stauts < on) { cancel_delayed_work(&wac_i2c->work_dvfs_chg); if (wac_i2c->dvfs_freq != MIN_TOUCH_LIMIT) { if (wac_i2c->dvfs_boost_mode == DVFS_STAGE_TRIPLE) ret = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); else ret = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); wac_i2c->dvfs_freq = MIN_TOUCH_LIMIT; if (ret < 0) dev_info(&wac_i2c->client->dev, "%s: cpu first lock failed(%d)\n", __func__, ret); } schedule_delayed_work(&wac_i2c->work_dvfs_chg, msecs_to_jiffies(TOUCH_BOOSTER_CHG_TIME)); wac_i2c->dvfs_lock_status = true; } } else if (on < 0) { if (wac_i2c->dvfs_lock_status) { cancel_delayed_work(&wac_i2c->work_dvfs_off); cancel_delayed_work(&wac_i2c->work_dvfs_chg); schedule_work(&wac_i2c->work_dvfs_off.work); } } wac_i2c->dvfs_old_stauts = on; mutex_unlock(&wac_i2c->dvfs_lock); }
static int input_booster_set_dvfs_off(struct input_booster *booster) { int retval; mutex_lock(&booster->dvfs_lock); retval = set_freq_limit(DVFS_TOUCH_ID, -1); if (retval < 0) pr_err("%s: booster stop failed(%d).\n", __func__, retval); if (booster->dvfs_id == INPUT_BOOSTER_ID_TKEY) { if (retval < 0) booster->dvfs_lock_status = false; else booster->dvfs_lock_status = true; } else { booster->dvfs_freq = -1; booster->dvfs_lock_status = false; } mutex_unlock(&booster->dvfs_lock); return retval; }
static ssize_t boost_level_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct wacom_i2c *wac_i2c = dev_get_drvdata(dev); int val, retval; dev_info(&wac_i2c->client->dev, "%s\n", __func__); sscanf(buf, "%d", &val); if (val != 1 && val != 2 && val != 3 && val != 0) { dev_info(&wac_i2c->client->dev, "%s: wrong cmd %d\n", __func__, val); return count; } wac_i2c->dvfs_boost_mode = val; dev_info(&wac_i2c->client->dev, "%s: dvfs_boost_mode = %d\n", __func__, wac_i2c->dvfs_boost_mode); if (wac_i2c->dvfs_boost_mode != DVFS_STAGE_TRIPLE) { wac_i2c->dvfs_freq = -1; } else if (wac_i2c->dvfs_boost_mode == DVFS_STAGE_NONE) { retval = set_freq_limit(DVFS_TOUCH_ID, -1); if (retval < 0) { dev_err(&wac_i2c->client->dev, "%s: booster stop failed(%d).\n", __func__, retval); wac_i2c->dvfs_lock_status = false; } } return count; }
static void gpio_key_set_dvfs_lock(struct gpio_button_data *bdata, uint32_t on) { int ret = 0; mutex_lock(&bdata->dvfs_lock); if (on == 0) { if (bdata->dvfs_lock_status) { schedule_delayed_work(&bdata->work_dvfs_off, msecs_to_jiffies(KEY_BOOSTER_OFF_TIME)); } } else if (on == 1) { cancel_delayed_work(&bdata->work_dvfs_off); if (!bdata->dvfs_lock_status) { ret = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); if (ret < 0) printk(KERN_ERR "%s: cpu first lock failed(%d)\n", __func__, ret); schedule_delayed_work(&bdata->work_dvfs_chg, msecs_to_jiffies(KEY_BOOSTER_CHG_TIME)); bdata->dvfs_lock_status = true; } } mutex_unlock(&bdata->dvfs_lock); }
static void change_dvfs_lock(struct work_struct *work) { struct cyttsp4_mt_data *md = container_of(work,struct cyttsp4_mt_data, work_dvfs_chg.work); int ret = 0; mutex_lock(&md->dvfs_lock); if (md->boost_level == DVFS_STAGE_DUAL) { ret = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); md->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; } else if (md->boost_level == DVFS_STAGE_SINGLE) { ret = set_freq_limit(DVFS_TOUCH_ID, -1); md->dvfs_freq = -1; } if (ret < 0) printk(KERN_ERR "[TSP] %s: booster stop failed(%d)\n",\ __func__, __LINE__); mutex_unlock(&md->dvfs_lock); }
static void set_dvfs_off(struct work_struct *work) { struct cyttsp4_mt_data *md = container_of(work,struct cyttsp4_mt_data, work_dvfs_off.work); int ret; mutex_lock(&md->dvfs_lock); ret = set_freq_limit(DVFS_TOUCH_ID, -1); if (ret < 0) printk(KERN_ERR "[TSP] %s: booster stop failed(%d)\n",\ __func__, __LINE__); md->dvfs_freq = -1; md->dvfs_lock_status = false; mutex_unlock(&md->dvfs_lock); }
static void gpio_key_set_dvfs_off(struct work_struct *work) { struct gpio_button_data *bdata = container_of(work, struct gpio_button_data, work_dvfs_off.work); int retval; mutex_lock(&bdata->dvfs_lock); retval = set_freq_limit(DVFS_TOUCH_ID, -1); if (retval < 0) printk(KERN_ERR "%s: booster stop failed(%d).\n", __func__, retval); bdata->dvfs_lock_status = false; mutex_unlock(&bdata->dvfs_lock); }
static void gpio_key_change_dvfs_lock(struct work_struct *work) { struct gpio_button_data *bdata = container_of(work, struct gpio_button_data, work_dvfs_chg.work); int retval; mutex_lock(&bdata->dvfs_lock); retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); if (retval < 0) printk(KERN_ERR "%s: booster change failed(%d).\n", __func__, retval); mutex_unlock(&bdata->dvfs_lock); }
static void set_dvfs_lock(struct cyttsp4_mt_data *md, int32_t on, bool mode) { int ret = 0; if (md->boost_level == DVFS_STAGE_NONE) { printk(KERN_INFO "%s: DVFS stage is none(%d)\n", __func__, md->boost_level); return; } mutex_lock(&md->dvfs_lock); if (on == 0) { if (md->dvfs_lock_status) { schedule_delayed_work(&md->work_dvfs_off,msecs_to_jiffies(TOUCH_BOOSTER_OFF_TIME)); } } else if (on == 1) { cancel_delayed_work(&md->work_dvfs_off); if (!md->dvfs_lock_status || mode) { if (md->dvfs_old_status != on) { cancel_delayed_work(&md->work_dvfs_chg); if (md->dvfs_freq != MIN_TOUCH_LIMIT) { ret = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); md->dvfs_freq = MIN_TOUCH_LIMIT; if (ret < 0) printk(KERN_ERR "%s: cpu first lock failed(%d)\n", __func__, ret); schedule_delayed_work(&md->work_dvfs_chg, msecs_to_jiffies(TOUCH_BOOSTER_CHG_TIME)); md->dvfs_lock_status = true; } } } } else if (on == 2) { if (md->dvfs_lock_status) { cancel_delayed_work(&md->work_dvfs_off); cancel_delayed_work(&md->work_dvfs_chg); schedule_work(&md->work_dvfs_off.work); } } md->dvfs_old_status = on; mutex_unlock(&md->dvfs_lock); }
static void wacom_set_dvfs_off(struct work_struct *work) { struct wacom_i2c *wac_i2c = container_of(work, struct wacom_i2c, work_dvfs_off.work); int retval; mutex_lock(&wac_i2c->dvfs_lock); retval = set_freq_limit(DVFS_TOUCH_ID, -1); if (retval < 0) dev_info(&wac_i2c->client->dev, "%s: booster stop failed(%d).\n", __func__, retval); wac_i2c->dvfs_lock_status = false; mutex_unlock(&wac_i2c->dvfs_lock); }
static void input_booster_change_dvfs_tkey_work(struct work_struct *work) { int retval = 0; struct input_booster *booster = container_of(work, struct input_booster, work_dvfs_chg.work); mutex_lock(&booster->dvfs_lock); retval = set_freq_limit(DVFS_TOUCH_ID, booster->dvfs_freq); if (retval < 0) pr_info("%s: booster change failed(%d).\n", __func__, retval); booster->dvfs_lock_status = false; mutex_unlock(&booster->dvfs_lock); }
static void gpio_key_change_dvfs_lock(struct work_struct *work) { struct gpio_button_data *bdata = container_of(work, struct gpio_button_data, work_dvfs_chg.work); int retval; unsigned int limit_second; mutex_lock(&bdata->dvfs_lock); limit_second = min_touch_limit_second; if (limit_second < CPU_MIN_FREQ) limit_second = CPU_MIN_FREQ; else if (limit_second > CPU_MAX_FREQ) limit_second = CPU_MAX_FREQ; retval = set_freq_limit(DVFS_TOUCH_ID, limit_second); if (retval < 0) printk(KERN_ERR "%s: booster change failed(%d).\n", __func__, retval); mutex_unlock(&bdata->dvfs_lock); }
static void gpio_key_set_dvfs_lock(struct gpio_button_data *bdata, uint32_t on) { int ret = 0; unsigned int limit; unsigned int delay; if (dvfs_boost_mode == 0) return; mutex_lock(&bdata->dvfs_lock); if (on == 0) { if (bdata->dvfs_lock_status) { delay = booster_off_time; schedule_delayed_work(&bdata->work_dvfs_off, msecs_to_jiffies(delay)); } } else if (on == 1) { cancel_delayed_work(&bdata->work_dvfs_off); if (!bdata->dvfs_lock_status) { limit = min_touch_limit; if (limit < CPU_MIN_FREQ) limit = CPU_MIN_FREQ; else if (limit > CPU_MAX_FREQ) limit = CPU_MAX_FREQ; ret = set_freq_limit(DVFS_TOUCH_ID, limit); if (ret < 0) printk(KERN_ERR "%s: cpu first lock failed(%d)\n", __func__, ret); delay = booster_chg_time; schedule_delayed_work(&bdata->work_dvfs_chg, msecs_to_jiffies(delay)); bdata->dvfs_lock_status = true; } } mutex_unlock(&bdata->dvfs_lock); }
static void input_booster_set_dvfs_tkey_lock(struct input_booster *booster, int on) { int retval = 0; if (booster->dvfs_boost_mode == DVFS_STAGE_NONE) { pr_debug("%s: DVFS stage is none(%d)\n", __func__, booster->dvfs_boost_mode); return; } mutex_lock(&booster->dvfs_lock); if (on == 0) { cancel_delayed_work(&booster->work_dvfs_chg); if (booster->dvfs_lock_status) { retval = set_freq_limit(DVFS_TOUCH_ID, booster->dvfs_freq); if (retval < 0) pr_info("%s: cpu first lock failed(%d)\n", __func__, retval); booster->dvfs_lock_status = false; } schedule_delayed_work(&booster->work_dvfs_off, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TKEY)); } else if (on == 1) { cancel_delayed_work(&booster->work_dvfs_off); schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_OFF_TIME_TKEY)); } else if (on == 2) { if (booster->dvfs_lock_status) { cancel_delayed_work(&booster->work_dvfs_off); cancel_delayed_work(&booster->work_dvfs_chg); schedule_work(&booster->work_dvfs_off.work); } } mutex_unlock(&booster->dvfs_lock); }
static void input_booster_change_dvfs_tsp_work(struct work_struct *work) { int retval = 0; struct input_booster *booster = container_of(work, struct input_booster, work_dvfs_chg.work); mutex_lock(&booster->dvfs_lock); switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_TRIPLE: case DVFS_STAGE_PENTA: retval = set_freq_limit(DVFS_TOUCH_ID, -1); #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: 0\n", __func__); request_bimc_clk(0); #endif booster->dvfs_freq = -1; break; case DVFS_STAGE_DUAL: #ifdef CONFIG_CPUFREQ_HARDLIMIT retval = set_freq_limit(DVFS_TOUCH_ID, check_cpufreq_hardlimit(touchboost_lo_freq)); #else retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); #endif #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_SECOND_LIMIT); request_bimc_clk(INPUT_BIMC_SECOND_LIMIT); #endif #ifdef CONFIG_CPUFREQ_HARDLIMIT booster->dvfs_freq = check_cpufreq_hardlimit(touchboost_lo_freq); #else booster->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; #endif break; case DVFS_STAGE_NINTH: #ifdef CONFIG_CPUFREQ_HARDLIMIT retval = set_freq_limit(DVFS_TOUCH_ID, check_cpufreq_hardlimit(touchboost_hi_freq)); #else retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); #endif #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_LIMIT); request_bimc_clk(INPUT_BIMC_LIMIT); #endif #ifdef CONFIG_CPUFREQ_HARDLIMIT booster->dvfs_freq = check_cpufreq_hardlimit(touchboost_hi_freq); #else booster->dvfs_freq = MIN_TOUCH_LIMIT; #endif break; } if (retval < 0) pr_err("%s: booster change failed(%d).\n", __func__, retval); mutex_unlock(&booster->dvfs_lock); }
static void input_booster_set_dvfs_tsp_lock(struct input_booster *booster, int on) { int retval = 0; if (booster->dvfs_boost_mode == DVFS_STAGE_NONE) { pr_debug("%s: DVFS stage is none(%d)\n", __func__, booster->dvfs_boost_mode); return; } mutex_lock(&booster->dvfs_lock); if (on == 0) { if (booster->dvfs_lock_status) { switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_DUAL: case DVFS_STAGE_TRIPLE: case DVFS_STAGE_PENTA: schedule_delayed_work(&booster->work_dvfs_off, msecs_to_jiffies(INPUT_BOOSTER_OFF_TIME_TSP)); break; case DVFS_STAGE_NINTH: schedule_delayed_work(&booster->work_dvfs_off, msecs_to_jiffies(INPUT_BOOSTER_HIGH_OFF_TIME_TSP)); break; } } } else if (on > 0) { cancel_delayed_work(&booster->work_dvfs_off); if ((!booster->dvfs_lock_status) || (booster->dvfs_old_stauts < on)) { cancel_delayed_work(&booster->work_dvfs_chg); switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_DUAL: if (booster->dvfs_freq != MIN_TOUCH_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); booster->dvfs_freq = MIN_TOUCH_LIMIT; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_TRIPLE: if (booster->dvfs_freq != MIN_TOUCH_LIMIT_SECOND) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); booster->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_PENTA: if (booster->dvfs_freq != MIN_TOUCH_LOW_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LOW_LIMIT); booster->dvfs_freq = MIN_TOUCH_LOW_LIMIT; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_NINTH: if (booster->dvfs_freq != MIN_TOUCH_HIGH_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_HIGH_LIMIT); booster->dvfs_freq = MIN_TOUCH_HIGH_LIMIT; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_HIGH_CHG_TIME_TSP)); break; } if (retval < 0) pr_err("%s: cpu first lock failed(%d)\n", __func__, retval); booster->dvfs_lock_status = true; } } else if (on < 0) { if (booster->dvfs_lock_status) { cancel_delayed_work(&booster->work_dvfs_off); cancel_delayed_work(&booster->work_dvfs_chg); schedule_work(&booster->work_dvfs_off.work); } } booster->dvfs_old_stauts = on; mutex_unlock(&booster->dvfs_lock); }
static void input_booster_set_dvfs_tsp_lock(struct input_booster *booster, int on) { int retval = 0; if (booster->dvfs_boost_mode == DVFS_STAGE_NONE) { pr_debug("%s: DVFS stage is none(%d)\n", __func__, booster->dvfs_boost_mode); return; } mutex_lock(&booster->dvfs_lock); if (on == 0) { if (booster->dvfs_lock_status) { switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_DUAL: case DVFS_STAGE_TRIPLE: case DVFS_STAGE_PENTA: schedule_delayed_work(&booster->work_dvfs_off, msecs_to_jiffies(INPUT_BOOSTER_OFF_TIME_TSP)); break; case DVFS_STAGE_NINTH: schedule_delayed_work(&booster->work_dvfs_off, msecs_to_jiffies(INPUT_BOOSTER_HIGH_OFF_TIME_TSP)); break; } } } else if (on > 0) { cancel_delayed_work(&booster->work_dvfs_off); if ((!booster->dvfs_lock_status) || (booster->dvfs_old_stauts < on)) { cancel_delayed_work(&booster->work_dvfs_chg); switch (booster->dvfs_boost_mode) { case DVFS_STAGE_SINGLE: case DVFS_STAGE_DUAL: #ifdef CONFIG_CPUFREQ_HARDLIMIT if (booster->dvfs_freq != check_cpufreq_hardlimit(touchboost_hi_freq)) { retval = set_freq_limit(DVFS_TOUCH_ID, check_cpufreq_hardlimit(touchboost_hi_freq)); #else if (booster->dvfs_freq != MIN_TOUCH_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT); #endif #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_LIMIT); request_bimc_clk(INPUT_BIMC_LIMIT); #endif #ifdef CONFIG_CPUFREQ_HARDLIMIT booster->dvfs_freq = check_cpufreq_hardlimit(touchboost_hi_freq); #else booster->dvfs_freq = MIN_TOUCH_LIMIT; #endif } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_TRIPLE: #ifdef CONFIG_CPUFREQ_HARDLIMIT if (booster->dvfs_freq != check_cpufreq_hardlimit(touchboost_lo_freq)) { retval = set_freq_limit(DVFS_TOUCH_ID, check_cpufreq_hardlimit(touchboost_lo_freq)); #else if (booster->dvfs_freq != MIN_TOUCH_LIMIT_SECOND) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LIMIT_SECOND); #endif #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_SECOND_LIMIT); request_bimc_clk(INPUT_BIMC_SECOND_LIMIT); #endif #ifdef CONFIG_CPUFREQ_HARDLIMIT booster->dvfs_freq = check_cpufreq_hardlimit(touchboost_lo_freq); #else booster->dvfs_freq = MIN_TOUCH_LIMIT_SECOND; #endif } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_PENTA: if (booster->dvfs_freq != MIN_TOUCH_LOW_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_LOW_LIMIT); #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_LOW_LIMIT); request_bimc_clk(INPUT_BIMC_LOW_LIMIT); #endif booster->dvfs_freq = MIN_TOUCH_LOW_LIMIT; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_CHG_TIME_TSP)); break; case DVFS_STAGE_NINTH: if (booster->dvfs_freq != MIN_TOUCH_HIGH_LIMIT) { retval = set_freq_limit(DVFS_TOUCH_ID, MIN_TOUCH_HIGH_LIMIT); #if INPUT_BIMC_MINLOCK pr_info("%s: bimc clk set: %d\n", __func__, INPUT_BIMC_HIGH_LIMIT); request_bimc_clk(INPUT_BIMC_HIGH_LIMIT); #endif booster->dvfs_freq = MIN_TOUCH_HIGH_LIMIT; } schedule_delayed_work(&booster->work_dvfs_chg, msecs_to_jiffies(INPUT_BOOSTER_HIGH_CHG_TIME_TSP)); break; } if (retval < 0) pr_err("%s: cpu first lock failed(%d)\n", __func__, retval); booster->dvfs_lock_status = true; } } else if (on < 0) {