static ssize_t power_always_on_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos)
{
	unsigned long val;
	int ret;
	char buf[32];

	cnt = min(cnt, sizeof(buf) - 1);
	if (copy_from_user(buf, ubuf, cnt)) {
		return -EFAULT;
	}
	buf[cnt] = '\0';

	ret = kstrtoul(buf, 10, &val);
	if (0 != ret) {
		return ret;
	}

	/* Update setting (not exactly thread safe) */
	if (1 == val && MALI_FALSE == power_always_on_enabled) {
		power_always_on_enabled = MALI_TRUE;
		_mali_osk_pm_dev_ref_get_sync();
	} else if (0 == val && MALI_TRUE == power_always_on_enabled) {
		power_always_on_enabled = MALI_FALSE;
		_mali_osk_pm_dev_ref_put();
	}

	*ppos += cnt;
	return cnt;
}
示例#2
0
void mali_pm_init_end(void)
{
	struct mali_pmu_core *pmu = mali_pmu_get_global_pmu_core();

	/* Ensure all PMU domains are off */
	if (NULL != pmu) {
		mali_pmu_power_down_all(pmu);
	}

	_mali_osk_pm_dev_ref_put();
}