int cpe_thread_handler(void *unused) { kal_uint32 ret = 0; do { ktime_t ktime = ktime_set(cpe_period, 0); wait_event_interruptible(cpe_timer_waiter, cpe_timer_flag != 0); cpe_timer_flag = 0; ret = mtk_cpe_one_shot_handler((kal_uint16)g_path1, (kal_uint16)g_path2, (kal_uint16)g_path3); xlog_printk(ANDROID_LOG_INFO, "Power/CPE", "got critical path rosc counter = %d\n", ret); hrtimer_start(&cpe_timer, ktime, HRTIMER_MODE_REL); } while (!kthread_should_stop()); return 0; }
static ssize_t cpe_one_shot_mode_write(struct file *file, const char *buffer, unsigned long count, void *data) { int len = 0; char mode[20], desc[32]; kal_uint32 ret = 0; len = (count < (sizeof(desc) - 1)) ? count : (sizeof(desc) - 1); if (copy_from_user(desc, buffer, len)) { return 0; } desc[len] = '\0'; printk("\n=============== Critical Path Emulator One Shot Mode ================\n"); if (sscanf(desc, "%s", mode) == 1) { if (!strcmp(mode, "enable")) { printk(" enable critical path emulator one shot mode\n"); ret = mtk_cpe_one_shot_handler(g_path1, g_path2, g_path3); printk(" got critical path rosc counter = %d\n", ret); printk("==========================================\n"); return count; } else { printk(" bad argument!! argument should be \"enable\" or \"disable\"\n"); printk( "==========================================\n"); } } else { printk(" bad argument!!\n"); printk( "==========================================\n"); } return -EINVAL; }