static ssize_t cpu_ss_debug_mode_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { char mode[20]; char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; if (count >= sizeof(mode)) { printk(KERN_ERR "[%s]: bad argument!! input length is over buffer size\n", __func__); return -EINVAL; } if (sscanf(buf, "%19s", mode) == 1) { if (!strcmp(mode, "enable")) { printk(KERN_DEBUG "[%s]: %s cpu speed switch debug mode\n", mode, __func__); mt_cpu_ss_debug_mode = true; } else if (!strcmp(mode, "disable")) { printk(KERN_DEBUG "[%s]: %s cpu speed switch debug mode\n", mode, __func__); mt_cpu_ss_debug_mode = false; } else printk(KERN_ERR "[%s]: bad argument!! should be \"enable\" or \"disable\"\n", __func__); } else printk(KERN_ERR "[%s]: bad argument!! should be \"enable\" or \"disable\"\n", __func__); free_page((unsigned long)buf); return count; }
static ssize_t ptp2_ctrl_lo_1_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; sscanf(buf, "%x", ptp2_ctrl_lo + 1); config_LO_CTRL( (ptp2_ctrl_lo[0]>>12) & 0x03, (ptp2_ctrl_lo[0]>>8) & 0x0F, (ptp2_ctrl_lo[0]>>4) & 0x0F, (ptp2_ctrl_lo[0]>>3) & 0x01, (ptp2_ctrl_lo[0]>>2) & 0x01, (ptp2_ctrl_lo[0]>>1) & 0x01, ptp2_ctrl_lo[0] & 0x01, (ptp2_ctrl_lo[1]>>28) & 0x0f, (ptp2_ctrl_lo[1]>>24) & 0x0f, (ptp2_ctrl_lo[1]>>20) & 0x0f, (ptp2_ctrl_lo[1]>>19) & 0x01, (ptp2_ctrl_lo[1]>>15) & 0x0f, (ptp2_ctrl_lo[1]>>11) & 0x0f, (ptp2_ctrl_lo[1]>>7) & 0x0f, (ptp2_ctrl_lo[1]>>6) & 0x01 ); free_page((unsigned long)buf); return count; }
static ssize_t cpu_ss_period_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { int s = 0, ns = 0; char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; if (sscanf(buf, "%d %d", &s, &ns) == 2) { printk(KERN_DEBUG "[%s]: set cpu speed switch period = %d (s), %d (ns)\n", __func__, s, ns); mt_cpu_ss_period_s = s; mt_cpu_ss_period_ns = ns; } else printk(KERN_ERR "[%s]: bad argument!! should be \"[s]\" or \"[ns]\"\n", __func__); return count; }
static ssize_t cpu_ss_period_mode_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { char mode[20]; ktime_t ktime = ktime_set(mt_cpu_ss_period_s, mt_cpu_ss_period_ns); char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; if (count >= sizeof(mode)) { printk(KERN_ERR "[%s]: bad argument!! input length is over buffer size\n", __func__); return -EINVAL; } if (sscanf(buf, "%19s", mode) == 1) { if (!strcmp(mode, "enable")) { printk(KERN_DEBUG "[%s]: %s cpu speed switch period mode\n", mode, __func__); mt_cpu_ss_period_mode = true; mt_cpu_ss_thread = kthread_run(mt_cpu_ss_thread_handler, 0, "cpu speed switch"); if (IS_ERR(mt_cpu_ss_thread)) printk("[%s]: failed to create cpu speed switch thread\n", __func__); hrtimer_start(&mt_cpu_ss_timer, ktime, HRTIMER_MODE_REL); } else if (!strcmp(mode, "disable")) { printk(KERN_DEBUG "[%s]: %s cpu speed switch period mode\n", mode, __func__); mt_cpu_ss_period_mode = false; kthread_stop(mt_cpu_ss_thread); mt_cpufreq_clock_switch(0, TOP_CKMUXSEL_ARMPLL); hrtimer_cancel(&mt_cpu_ss_timer); } else printk(KERN_ERR "[%s]: bad argument!! should be \"enable\" or \"disable\"\n", __func__); } else printk(KERN_ERR "[%s]: bad argument!! should be \"enable\" or \"disable\"\n", __func__); free_page((unsigned long)buf); return count; }
static ssize_t cpu_ss_mode_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { int mode = 0; char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; if (sscanf(buf, "%d", &mode) == 1) { if (mode) { printk(KERN_DEBUG "[%s]: config cpu speed switch mode = ARMPLL\n", __func__); mt_cpufreq_clock_switch(0, TOP_CKMUXSEL_ARMPLL); } else { printk(KERN_DEBUG "[%s]: config cpu speed switch mode = CLKSQ\n", __func__); mt_cpufreq_clock_switch(0, TOP_CKMUXSEL_CLKSQ); } } else printk(KERN_ERR "[%s]: bad argument!! should be \"1\" or \"0\"\n", __func__); return count; }
static ssize_t ptp2_lo_enable_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { int val = 0; char *buf = _copy_from_user_for_proc(buffer, count); if (!buf) return -EINVAL; sscanf(buf, "%d", &val); if (val == 1) { enable_LO(); ptp2_lo_enable = 1; } else { ptp2_lo_enable = 0; disable_LO(); } free_page((unsigned long)buf); return count; }
static int golden_test_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { char *buf = _copy_from_user_for_proc(buffer, count); char cmd[64]; unsigned int addr; unsigned int mask; unsigned int golden_val; ENTER_FUNC(FUNC_LV_BODY); // set golden setting (hex mode) if (sscanf(buf, "0x%x 0x%x 0x%x", &addr, &mask, &golden_val) == 3) _golden_setting_add(&_golden, addr, mask, golden_val); // set golden setting (dec mode) else if (sscanf(buf, "%d %d %d", &addr, &mask, &golden_val) == 3) _golden_setting_add(&_golden, addr, mask, golden_val); // set filter (func + line) else if (sscanf(buf, "filter %63s %d", _golden.func, &_golden.line) == 2) { // XXX: 63 = sizeof(_golden.func) - 1 } // set filter (func) else if (sscanf(buf, "filter %63s", _golden.func) == 1) // XXX: 63 = sizeof(_golden.func) - 1 _golden.line = 0; // set golden setting (mixed mode) else if (sscanf(buf, "0x%x 0b%63s", &addr, cmd) == 2) { // XXX: 63 = sizeof(cmd) - 1 if (!_parse_mask_val(cmd, &mask, &golden_val)) _golden_setting_add(&_golden, addr, mask, golden_val); } // set reg value (mask mode) else if (sscanf(buf, "set 0x%x 0x%x 0x%x", &addr, &mask, &golden_val) == 3) _golden_write_reg(addr, mask, golden_val); // set reg value (bit mode) else if (sscanf(buf, "set 0x%x %d %d", &addr, &mask, &golden_val) == 3) { if (0 <= mask && mask <= 31) { // XXX: mask is bit number (alias) golden_val = (golden_val & BIT(0)) << mask; mask = BIT(0) << mask; _golden_write_reg(addr, mask, golden_val); } } // set reg value (normal mode) else if (sscanf(buf, "set 0x%x 0x%x", &addr, &golden_val) == 2) _golden_write_reg(addr, 0xFFFFFFFF, golden_val); else if (sscanf(buf, "%63s", cmd) == 1) { // XXX: 63 = sizeof(cmd) - 1 if (!strcmp(cmd, "enable")) _golden_setting_enable(&_golden); else if (!strcmp(cmd, "disable")) _golden_setting_disable(&_golden); else if (!strcmp(cmd, "normal")) _golden_setting_set_mode(&_golden, MODE_NORMAL); else if (!strcmp(cmd, "compare")) _golden_setting_set_mode(&_golden, MODE_COMPARE); else if (!strcmp(cmd, "apply")) _golden_setting_set_mode(&_golden, MODE_APPLY); else if (!strcmp(cmd, "color")) _golden_setting_set_mode(&_golden, MODE_COLOR); else if (!strcmp(cmd, "diff")) _golden_setting_set_mode(&_golden, MODE_DIFF); else if (!strcmp(cmd, "filter")) _golden.func[0] = '\0'; } free_page((size_t)buf); EXIT_FUNC(FUNC_LV_BODY); return count; }