static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { #ifdef CONFIG_SUSPEND #ifdef CONFIG_EARLYSUSPEND suspend_state_t state = PM_SUSPEND_ON; #else suspend_state_t state = PM_SUSPEND_MIN; #endif const char * const *s; #endif char *p; int len; int error = -EINVAL; p = memchr(buf, '\n', n); len = p ? p - buf : n; /* First, check if we are requested to hibernate */ if (len == 4 && !strncmp(buf, "disk", len)) { error = hibernate(); goto Exit; } #ifdef CONFIG_SUSPEND for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++) { if (*s && len == strlen(*s) && !strncmp(buf, *s, len)) break; } #ifdef CONFIG_FAST_BOOT if (len == 4 && !strncmp(buf, "dmem", len)) { pr_info("%s: fake shut down!!!\n", __func__); fake_shut_down = true; state = PM_SUSPEND_MEM; } #endif if (state < PM_SUSPEND_MAX && *s) { #ifdef CONFIG_EARLYSUSPEND if (state == PM_SUSPEND_ON || valid_state(state)) { error = 0; request_suspend_state(state); } #ifdef CONFIG_FAST_BOOT if (fake_shut_down) wakelock_force_suspend(); #endif #else error = enter_state(state); #endif } #endif Exit: return error ? error : n; }
static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { #ifdef CONFIG_SUSPEND #ifdef CONFIG_EARLYSUSPEND suspend_state_t state = PM_SUSPEND_ON; #else suspend_state_t state = PM_SUSPEND_STANDBY; #endif const char * const *s; #endif /* CONFIG_SUSPEND */ char *p; int len; int error = -EINVAL; p = memchr(buf, '\n', n); len = p ? p - buf : n; /* First, check if we are requested to hibernate */ if (len == 4 && !strncmp(buf, "disk", len)) { error = hibernate(); goto Exit; } #ifdef CONFIG_SUSPEND for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++) { if (*s && len == strlen(*s) && !strncmp(buf, *s, len)) break; } if (state < PM_SUSPEND_MAX && *s) { printk(KERN_ERR "%s: state:%d (%s)\n", __func__, state, *s); #ifdef CONFIG_EARLYSUSPEND if (state == PM_SUSPEND_ON || valid_state(state)) { if(state == PM_SUSPEND_ON) { #ifdef FEATURE_FTM_SLEEP if (ftm_sleep == 1) { pr_info("%s: wake lock for FTM\n", __func__); ftm_sleep = 0; wake_lock_timeout(&ftm_wake_lock, 60 * HZ); if (ftm_enable_usb_sw) ftm_enable_usb_sw(1); } #endif /* FEATURE_FTM_SLEEP */ global_state = PM_SUSPEND_ON; } else { #ifdef FEATURE_FTM_SLEEP if (ftm_sleep == 1) { // when ftm sleep cmd if (ftm_enable_usb_sw) ftm_enable_usb_sw(0); } #endif /* FEATURE_FTM_SLEEP */ global_state = PM_SUSPEND_MEM; } error = 0; request_suspend_state(state); #ifdef FEATURE_FTM_SLEEP if (ftm_sleep && global_state == PM_SUSPEND_MEM) { wakelock_force_suspend(); } #endif /* FEATURE_FTM_SLEEP */ } #else error = enter_state(state); #endif } #endif /* CONFIG_SUSPEND */ Exit: return error ? error : n; }