static ssize_t ddren_debug_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { u32 val, con; char cmd[32]; unsigned long flags; if (sscanf(buf, "%31s %x", cmd, &val) != 2) return -EPERM; spm_debug("ddren_debug: cmd = %s, val = 0x%x\n", cmd, val); if (!strcmp(cmd, "ddr_en_sel")) { spin_lock_irqsave(&__spm_lock, flags); con = spm_read(SPM_AP_STANBY_CON) & ~(1U << 22); spm_write(SPM_AP_STANBY_CON, con | (!!val << 22)); spin_unlock_irqrestore(&__spm_lock, flags); } else if (!strcmp(cmd, "md_ddr_en_out")) { spin_lock_irqsave(&__spm_lock, flags); __spm_dbgout_md_ddr_en(val); spin_unlock_irqrestore(&__spm_lock, flags); } else if (!strcmp(cmd, "mm_ddr_en_mask")) { spin_lock_irqsave(&__spm_lock, flags); spm_write(SPM_PCM_PASR_DPD_2, ~val & 0x1f); spin_unlock_irqrestore(&__spm_lock, flags); } else { return -EINVAL; } return count; }
static ssize_t auto_suspend_resume_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { u32 val, pcm_sec; if (sscanf(buf, "%d %d", &val, &pcm_sec) != 2) { spm_debug("auto_suspend_resume parameter fail\n"); return -EPERM; } spm_debug("auto_suspend_resume val = %d, pcm_sec = %d\n", val, pcm_sec); __spm_suspend.pwrctrl->timer_val_cust = pcm_sec*32768; slp_create_auto_suspend_resume_thread(); slp_start_auto_suspend_resume_timer(val); return count; }
/* * if in talking, modify @spm_flags based on @lpscen and return __spm_talking, * otherwise, do nothing and return @lpscen */ struct spm_lp_scen *spm_check_talking_get_lpscen(struct spm_lp_scen *lpscen, u32 *spm_flags) { if (can_enter_talking_dpidle()) { if (lpscen == &__spm_suspend) { *spm_flags &= ~SPM_CPU_DORMANT; spm_crit2("in talking\n"); } else { *spm_flags |= SPM_CPU_DORMANT; spm_debug("in talking\n"); } set_flags_for_mainpll(spm_flags); /* ANC needs MAINPLL on */ __spm_talking.pwrctrl->wake_src = lpscen->pwrctrl->wake_src; __spm_talking.pwrctrl->wake_src_md32 = lpscen->pwrctrl->wake_src_md32; lpscen = &__spm_talking; } return lpscen; }
/************************************** * xxx_ctrl_store Function **************************************/ static ssize_t store_pwr_ctrl(struct pwr_ctrl *pwrctrl, const char *buf, size_t count) { u32 val; char cmd[32]; if (sscanf(buf, "%31s %x", cmd, &val) != 2) return -EPERM; spm_debug("pwr_ctrl: cmd = %s, val = 0x%x\n", cmd, val); if (!strcmp(cmd, "pcm_flags")) pwrctrl->pcm_flags = val; else if (!strcmp(cmd, "pcm_flags_cust")) pwrctrl->pcm_flags_cust = val; else if (!strcmp(cmd, "pcm_reserve")) pwrctrl->pcm_reserve = val; else if (!strcmp(cmd, "timer_val")) pwrctrl->timer_val = val; else if (!strcmp(cmd, "timer_val_cust")) pwrctrl->timer_val_cust = val; else if (!strcmp(cmd, "wake_src")) pwrctrl->wake_src = val; else if (!strcmp(cmd, "wake_src_cust")) pwrctrl->wake_src_cust = val; else if (!strcmp(cmd, "wake_src_md32")) pwrctrl->wake_src_md32 = val; else if (!strcmp(cmd, "r0_ctrl_en")) pwrctrl->r0_ctrl_en = val; else if (!strcmp(cmd, "r7_ctrl_en")) pwrctrl->r7_ctrl_en = val; else if (!strcmp(cmd, "infra_dcm_lock")) pwrctrl->infra_dcm_lock = val; else if (!strcmp(cmd, "pcm_apsrc_req")) pwrctrl->pcm_apsrc_req = val; else if (!strcmp(cmd, "pcm_f26m_req")) pwrctrl->pcm_f26m_req = val; else if (!strcmp(cmd, "mcusys_idle_mask")) pwrctrl->mcusys_idle_mask = val; else if (!strcmp(cmd, "ca15top_idle_mask")) pwrctrl->ca15top_idle_mask = val; else if (!strcmp(cmd, "ca7top_idle_mask")) pwrctrl->ca7top_idle_mask = val; else if (!strcmp(cmd, "wfi_op")) pwrctrl->wfi_op = val; else if (!strcmp(cmd, "ca15_wfi0_en")) pwrctrl->ca15_wfi0_en = val; else if (!strcmp(cmd, "ca15_wfi1_en")) pwrctrl->ca15_wfi1_en = val; else if (!strcmp(cmd, "ca15_wfi2_en")) pwrctrl->ca15_wfi2_en = val; else if (!strcmp(cmd, "ca15_wfi3_en")) pwrctrl->ca15_wfi3_en = val; else if (!strcmp(cmd, "ca7_wfi0_en")) pwrctrl->ca7_wfi0_en = val; else if (!strcmp(cmd, "ca7_wfi1_en")) pwrctrl->ca7_wfi1_en = val; else if (!strcmp(cmd, "ca7_wfi2_en")) pwrctrl->ca7_wfi2_en = val; else if (!strcmp(cmd, "ca7_wfi3_en")) pwrctrl->ca7_wfi3_en = val; else if (!strcmp(cmd, "md1_req_mask")) pwrctrl->md1_req_mask = val; else if (!strcmp(cmd, "md2_req_mask")) pwrctrl->md2_req_mask = val; else if (!strcmp(cmd, "md_apsrc_sel")) pwrctrl->md_apsrc_sel = val; else if (!strcmp(cmd, "md2_apsrc_sel")) pwrctrl->md2_apsrc_sel = val; else if (!strcmp(cmd, "gce_req_mask")) pwrctrl->gce_req_mask = val; else if (!strcmp(cmd, "ccif0_to_ap_mask")) pwrctrl->ccif0_to_ap_mask = val; else if (!strcmp(cmd, "ccif0_to_md_mask")) pwrctrl->ccif0_to_md_mask = val; else if (!strcmp(cmd, "ccif1_to_ap_mask")) pwrctrl->ccif1_to_ap_mask = val; else if (!strcmp(cmd, "ccif1_to_md_mask")) pwrctrl->ccif1_to_md_mask = val; else if (!strcmp(cmd, "lte_mask")) pwrctrl->lte_mask = val; else if (!strcmp(cmd, "ccifmd_md1_event_mask")) pwrctrl->ccifmd_md1_event_mask = val; else if (!strcmp(cmd, "ccifmd_md2_event_mask")) pwrctrl->ccifmd_md2_event_mask = val; else if (!strcmp(cmd, "conn_mask")) pwrctrl->conn_mask = val; else if (!strcmp(cmd, "disp_req_mask")) pwrctrl->disp_req_mask = val; else if (!strcmp(cmd, "mfg_req_mask")) pwrctrl->mfg_req_mask = val; else if (!strcmp(cmd, "dsi0_ddr_en_mask")) pwrctrl->dsi0_ddr_en_mask = val; else if (!strcmp(cmd, "dsi1_ddr_en_mask")) pwrctrl->dsi1_ddr_en_mask = val; else if (!strcmp(cmd, "dpi_ddr_en_mask")) pwrctrl->dpi_ddr_en_mask = val; else if (!strcmp(cmd, "isp0_ddr_en_mask")) pwrctrl->isp0_ddr_en_mask = val; else if (!strcmp(cmd, "isp1_ddr_en_mask")) pwrctrl->isp1_ddr_en_mask = val; else if (!strcmp(cmd, "md32_req_mask")) pwrctrl->md32_req_mask = val; else if (!strcmp(cmd, "syspwreq_mask")) pwrctrl->syspwreq_mask = val; else if (!strcmp(cmd, "srclkenai_mask")) pwrctrl->srclkenai_mask = val; else if (!strcmp(cmd, "param1")) pwrctrl->param1 = val; else if (!strcmp(cmd, "param2")) pwrctrl->param2 = val; else if (!strcmp(cmd, "param3")) pwrctrl->param3 = val; else return -EINVAL; return count; }