コード例 #1
0
STATIC unsigned char vbus_status(void)
{
    unsigned char vbus_status;
    vbus_status = pmussi_reg_read(0x002);
    vbus_status &= (1<<5);
    return vbus_status;
}
コード例 #2
0
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;
}
コード例 #3
0
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);

}
コード例 #4
0
ファイル: k3-leds.c プロジェクト: printusrzero/hwp6s-kernel
/* 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*/
}
コード例 #5
0
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;
}
コード例 #6
0
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;
}
コード例 #7
0
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
}
コード例 #8
0
/* pmu read */
STATIC unsigned char pmu_version(void)
{
    return pmussi_reg_read(0x115);
}
コード例 #9
0
ファイル: pmic_ssi.c プロジェクト: printusrzero/hwp6s-kernel
/*****************************************************************************
 函 数 名  : 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;
}
コード例 #10
0
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);
            }
        }
    }
}