STATIC unsigned char vbus_status(void) { unsigned char vbus_status; vbus_status = pmussi_reg_read(0x002); vbus_status &= (1<<5); return vbus_status; }
static int smart_power_off(struct notifier_block *self, unsigned long event, void *data) { PMIC_MNTN_DESC * mntn_desc = &smart_mntn_ops; unsigned int reg_id = 0; unsigned int vote_id = 0; pr_err("PMU SMART POWER DOWN SHOW\n"); mntn_desc->mntn_ops->no_pwr_read(); mntn_desc->mntn_ops->irq_read(); mntn_desc->mntn_ops->record_read(); pmic_poweron_show(); pr_err("mask register\n"); for(reg_id = SOC_SMART_IRQ1_MASK_ADDR(0); reg_id <= SOC_SMART_COUL_IRQ_MASK_ADDR(0); reg_id++) { pr_err("reg addr 0x%x data 0x%x\n",reg_id,pmussi_reg_read(reg_id)); } pr_err("usr vote mask unmask\n"); for(vote_id = 0; vote_id < IRQ_PMU_NR_END-IRQ_PMU_NR_BASE; vote_id++) { pr_err(" %d %d %d\n",vote_id,smart_mask_vote[vote_id],smart_unmask_vote[vote_id]); } return NOTIFY_OK; }
void smart_mntn_init(struct work_struct *work) { int ret = 0; NV_HW_CONFIG_STRU drv_55nv; volatile unsigned char otmp = 0; PMIC_MNTN_DESC * mntn_desc = &smart_mntn_ops; if(PMIC_EXC_PD == mntn_desc->stat.is_exc_pd) { pr_err("%s save pmu_reboot \n",__func__); mach_call_usermodeshell(PMU_SHELL_SCRIPT,1,print_string_buf); } ret = DR_NV_Read(en_NV_Item_HW_CONFIG, &drv_55nv, sizeof(NV_HW_CONFIG_STRU)); if (ret != NV_OK) { pr_err("%s: en_NV_Item_HW_CONFIG use default data\n", __func__); } otmp = pmussi_reg_read(SOC_SMART_BANDGAP_THSD_ADJ2_ADDR(0)); otmp &= ~(0x03<<SOC_SMART_BANDGAP_THSD_ADJ2_thsd_set_tmp_START); otmp |= drv_55nv.PMU_PROTECT.OTMP_TMP<<SOC_SMART_BANDGAP_THSD_ADJ2_thsd_set_tmp_START; pmussi_reg_write(SOC_SMART_BANDGAP_THSD_ADJ2_ADDR(0),otmp); }
/* read register */ static unsigned long k3_led_reg_read(u32 led_address) { /* return readl(k3_led_pdata->k3_led_base + led_address); */ /* + 2013-06-24; use the new API fanjicun*/ return pmussi_reg_read(led_address); /* - 2013-06-24; use the new API fanjicun*/ }
int pmu_version_check(void) { unsigned int regval = 0; int ret = SSI_DEVICE_ERR; regval = pmussi_reg_read(PMU_VERSION_ADDR); if((regval >= PMU_VER_START) && (regval <= PMU_VER_END)) { ret = SSI_DEVICE_OK; } return ret; }
int pmu_32kclk_check(void) { unsigned int regval = 0; int ret = SSI_DEVICE_ERR; regval = pmussi_reg_read(PMU_32K_STAT_ADDR); regval &= PMU_32K_FLAG_OFFSET; if(PMU_32K_OK_FLAG == regval) { ret = SSI_DEVICE_OK; } return ret; }
void set_sim_en_int(char *sim_name, unsigned int sim_status) { #if 0 /* Acore不控制sim的电源开关操作,全部放到Ccore */ SOC_SMART_SIMCARD_EN_UNION simcard_en; unsigned int reg_addr = SOC_SMART_SIMCARD_EN_ADDR(0); simcard_en = (SOC_SMART_SIMCARD_EN_UNION)pmussi_reg_read(reg_addr); pr_info("set_sim_en_int RO simcard_en [%d] , sim_status [%u]\n", simcard_en, sim_status); if (!strcmp(SIM1 , sim_name)) { if(sim_status) { simcard_en.reg.en_ldo9_int = 1; simcard_en.reg.sim0_en_int = 1; } else { simcard_en.reg.en_ldo9_int = 0; simcard_en.reg.sim0_en_int = 0; } } if (!strcmp(SIM2 , sim_name)) { if(sim_status) { simcard_en.reg.en_ldo11_int = 1; simcard_en.reg.sim1_en_int = 1; } else { simcard_en.reg.en_ldo11_int = 0; simcard_en.reg.sim1_en_int = 0; } } pmussi_reg_write (reg_addr, simcard_en.value); pr_info("set_sim_en_int W simcard_en [%d]\n", simcard_en.value); #endif }
/* pmu read */ STATIC unsigned char pmu_version(void) { return pmussi_reg_read(0x115); }
/***************************************************************************** 函 数 名 : DRV_PMU_REG_GET 功能描述 : get PMU register data 输入参数 : BSP_U32 regAddr --- 待读寄存器地址,PMU地址位宽为8bit,32bit留作扩展 输出参数 : BSP_U32 * getData --- 存放寄存器值,PMU数据位宽为8bit,32bit留作扩展 返 回 值 : BSP_OK - successful BSP_ERROR - unsuccessful 调用函数 : BSP_SSI_ReceiveData 被调函数 : NA *****************************************************************************/ BSP_S32 BSP_PMU_RegGet( BSP_U32 regAddr, BSP_U32 * getData ) { *getData = pmussi_reg_read(regAddr); return BSP_OK; }
void smart_ocp_scp_wq_hander(struct work_struct *work) { PMUIRQ_STAT* cur_stat = (PMUIRQ_STAT*)NULL; BSP_U32*reg_base_addr = (BSP_U32*)NULL; BSP_U32*stat_reg_buf = (BSP_U32*)NULL; PMUIRQ_RES_CTRL* pmu_res_ctrl = NULL; BSP_U32 reg_size=0; BSP_U32 reg_id = 0; BSP_U32 data_width = 0; PMIC_MNTN_DESC * mntn_desc = &smart_mntn_ops; cur_stat = pmic_get_pmustat(); pmu_res_ctrl = pmic_get_pmuctrl(); mntn_desc->mntn_ops->record_read(); reg_base_addr = pmu_res_ctrl->stat_reg[PMIC_RECORD_REG_TYPE_ID]; stat_reg_buf = cur_stat->stat_reg_buf[PMIC_RECORD_REG_TYPE_ID]; reg_size = pmu_res_ctrl->stat_reg_size[PMIC_RECORD_REG_TYPE_ID]; data_width = pmu_res_ctrl->data_width; for(reg_id= 0; reg_id<reg_size; reg_id++) { if(0 != stat_reg_buf[reg_id]) { char string_buf[128] = "\0"; volatile unsigned char ocp_deb_data = 0; ocp_deb_data = pmussi_reg_read(SOC_SMART_OCP_DEB_ADDR(0)); pr_err("PMU OCP DEB: 0x%x\n",ocp_deb_data); pr_err("PMU OCP SCP:addr 0x%x data 0x%x\n",reg_base_addr[reg_id],stat_reg_buf[reg_id]); snprintf(string_buf,128,"PMU DEB:0x%x OCP SCP:addr 0x%x data 0x%x\n",ocp_deb_data,reg_base_addr[reg_id],stat_reg_buf[reg_id]); if(SOC_SMART_OCP_RECORD3_ADDR(0) == reg_base_addr[reg_id]) { unsigned char reg_data = (unsigned char)stat_reg_buf[reg_id]; unsigned char ocp_ldo9_bit = reg_data&BIT(SOC_SMART_OCP_RECORD3_ocp_ldo9_START); unsigned char ocp_ldo11_bit = reg_data&BIT(SOC_SMART_OCP_RECORD3_ocp_ldo11_START); unsigned char ocp_ldo10_bit = reg_data&BIT(SOC_SMART_OCP_RECORD3_ocp_ldo10_START); reg_data &= ~(BIT(SOC_SMART_OCP_RECORD3_ocp_ldo9_START)|\ BIT(SOC_SMART_OCP_RECORD3_ocp_ldo11_START)|\ BIT(SOC_SMART_OCP_RECORD3_ocp_ldo10_START)); reg_data &= ~smart_dont_ocp_mask(reg_base_addr[reg_id]); if(reg_data) { systemError(BSP_MODU_PMU,EXCH_S_PMU,0,string_buf,strlen(string_buf)); } if(ocp_ldo9_bit) { unsigned char ldo9_onoff_status = pmussi_reg_read(SOC_SMART_SIMCARD_EN_ADDR(0)); ldo9_onoff_status &= ~(BIT(SOC_SMART_SIMCARD_EN_en_ldo9_int_START)); pmussi_reg_write(SOC_SMART_SIMCARD_EN_ADDR(0),ldo9_onoff_status); } /*SD card ocp, close SD power ldo10,then clear record and irq*/ if(ocp_ldo10_bit) { unsigned char disable_ldo10 = 0; disable_ldo10 |= BIT(SOC_SMART_DISABLE3_dis_ldo10_int_START); pmussi_reg_write(SOC_SMART_DISABLE3_ADDR(0),disable_ldo10); } if(ocp_ldo11_bit) { unsigned char ldo11_onoff_status = pmussi_reg_read(SOC_SMART_SIMCARD_EN_ADDR(0)); ldo11_onoff_status &= ~(BIT(SOC_SMART_SIMCARD_EN_en_ldo11_int_START)); pmussi_reg_write(SOC_SMART_SIMCARD_EN_ADDR(0),ldo11_onoff_status); } smart_ocp_scp_finally_work(mntn_desc); } else { unsigned char reg_data = (unsigned char)stat_reg_buf[reg_id]; reg_data &= ~smart_dont_ocp_mask(reg_base_addr[reg_id]); if (reg_data) { systemError(BSP_MODU_PMU,EXCH_S_PMU,0,string_buf,strlen(string_buf)); } smart_ocp_scp_finally_work(mntn_desc); } } } }