Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}