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; }
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(); }