static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { unsigned short value; if (sscanf(buf, "%hu", &value) != 1 || (value != 0 && value != 1)) { printk(KERN_ERR "idle_store: Invalid value\n"); return -EINVAL; } if (attr == &sleep_while_idle_attr) { enable_dyn_sleep = value; } else if (attr == &clocks_off_while_idle_attr) { clocks_off_while_idle = value; } else if (attr == &enable_off_mode_attr) { enable_off_mode = value; omap3_pm_off_mode_enable(enable_off_mode); } else if (attr == &voltage_off_while_idle_attr) { voltage_off_while_idle = value; if (voltage_off_while_idle) prm_set_mod_reg_bits(OMAP3430_SEL_OFF, OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET); else prm_clear_mod_reg_bits(OMAP3430_SEL_OFF, OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET); } else { return -EINVAL; } return n; }
static int option_set(void *data, u64 val) { u32 *option = data; *option = val; if (option == &enable_off_mode) { if (val) omap_pm_enable_off_mode(); else omap_pm_disable_off_mode(); if (cpu_is_omap34xx()) omap3_pm_off_mode_enable(val); } return 0; }