static void touch_dvfs_work(struct work_struct *work) { if (kona_dvfs_data.enable) omap_cpufreq_min_limit(DVFS_LOCK_ID_TSP, TOUCH_DVFS_FREQ); else omap_cpufreq_min_limit_free(DVFS_LOCK_ID_TSP); }
static void espresso_set_dvfs(bool on) { #ifdef CONFIG_TOUCH_DVFS if (!board_is_espresso10()) { static bool is_on; if (on && !is_on) { omap_cpufreq_min_limit(DVFS_LOCK_ID_TSP, CONFIG_TOUCH_DVFS); is_on = true; } else if (!on && is_on) { omap_cpufreq_min_limit_free(DVFS_LOCK_ID_TSP); is_on = false; } } #endif }
static void cpufreq_min_limit(const char *buf, size_t count) { int ret, temp; mutex_lock(&cpufreq_min_mutex); temp = cpufreq_min_limit_val; ret = sscanf(buf, "%d", &cpufreq_min_limit_val); if (ret != 1) { pr_warn("%s: invalid format(%d)\n", __func__, ret); ret = -EINVAL; goto out; } if (cpufreq_min_limit_val == -1) { if (cpufreq_min_locked) { omap_cpufreq_min_limit_free(DVFS_LOCK_ID_USER); cpufreq_min_locked = 0; ret = 0; } else { pr_warn("%s: there is no min limit!\n", __func__); ret = -EINVAL; } goto out; } pr_debug("%s: current max freq=%d req max freq=%d\n", __func__, cpufreq_max_limit_val, cpufreq_min_limit_val); if (cpufreq_min_locked) omap_cpufreq_min_limit_free(DVFS_LOCK_ID_USER); omap_cpufreq_min_limit(DVFS_LOCK_ID_USER, cpufreq_min_limit_val); cpufreq_min_locked = 1; out: if (ret < 0) cpufreq_min_limit_val = temp; mutex_unlock(&cpufreq_min_mutex); return; }
static void irled_work(struct work_struct *work) { unsigned int period; unsigned int off_period; unsigned int duty; unsigned int on; unsigned int off; unsigned int i; unsigned int j; int ret; ret = omap_cpufreq_max_limit(DVFS_LOCK_ID_IR_LED, ir_data.cpu_frequency); ret |= omap_cpufreq_min_limit(DVFS_LOCK_ID_IR_LED, ir_data.cpu_frequency); if (unlikely(ret < 0)) pr_err("irled: failed to lock cpufreq\n"); gpio_direction_output(irled_gpios[GPIO_IRDA_EN].gpio, 1); __udelay(1000); period = (MICRO_SEC / ir_data.signal[0]) + ir_data.on_offset; duty = period / 4; on = duty; off = period - duty; local_irq_disable(); for (i = 1; i < MAX_SIZE; i += 2) { if (ir_data.signal[i] == 0) break; for (j = 0; j < ir_data.signal[i]; j++) { gpio_direction_output(irled_gpios [GPIO_IRDA_CONTROL].gpio, 1); __udelay(on); gpio_direction_output(irled_gpios [GPIO_IRDA_CONTROL].gpio, 0); __udelay(off); } period = (MICRO_SEC / ir_data.signal[0]) + ir_data.off_offset; off_period = ir_data.signal[i + 1] * period; if (off_period <= 9999) { if (off_period > 1000) { __udelay(off_period % 1000); mdelay(off_period / 1000); } else __udelay(off_period); } else { local_irq_enable(); __udelay(off_period % 1000); mdelay(off_period / 1000); local_irq_disable(); } } gpio_direction_output(irled_gpios[GPIO_IRDA_CONTROL].gpio, 1); __udelay(on); gpio_direction_output(irled_gpios[GPIO_IRDA_CONTROL].gpio, 0); __udelay(off); local_irq_enable(); omap_cpufreq_min_limit_free(DVFS_LOCK_ID_IR_LED); omap_cpufreq_max_limit_free(DVFS_LOCK_ID_IR_LED); gpio_direction_output(irled_gpios[GPIO_IRDA_EN].gpio, 0); }