Example #1
0
pm_err_flag_type pm_comm_read_byte(uint32 slave_id, uint32 addr, uint8* data, uint8 priority)
{
    pm_err_flag_type     err = PM_ERR_FLAG__SUCCESS ;
    SpmiBus_ResultType   spmi_result = SPMI_BUS_SUCCESS;
    
    if(TRUE == spmi_initialized())
    {
        /* check for out-of-bounds index */
        if ( addr > PM_MAX_REGS)
        { 
            err = PM_ERR_FLAG__SPMI_OPT_ERR ;
        }
        else
        {
            spmi_result = spmi_reg_read(slave_id, addr, data, priority);

            if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
        }
    }
    else
    {
        err = PM_ERR_FLAG__SPMI_OPT_ERR ;
    }

    return err ;
}
Example #2
0
/* Test if it's possible to read bus directly and indirectly */
static int dm_test_spmi_access(struct unit_test_state *uts)
{
	const char *pmic_name = "pm8916@0";
	struct udevice *bus, *pmic;

	ut_assertok(uclass_get_device(UCLASS_SPMI, 0, &bus));

	ut_assertok(device_get_child(bus, 0, &pmic));

	/* Sanity check if it's proper PMIC */
	ut_asserteq_str(pmic_name, pmic->name);

	/* Read PMIC ID reg using SPMI bus - it assumes it has slaveID == 0*/
	ut_asserteq(spmi_reg_read(bus, 0, 0xC0, 0x4), 0x10);
	ut_asserteq(spmi_reg_read(bus, 0, 0xC0, 0x5), 0x5);

	/* Read ID reg via pmic interface */
	ut_asserteq(pmic_reg_read(pmic, 0xC004), 0x10);
	ut_asserteq(pmic_reg_read(pmic, 0xC005), 0x5);

	return 0;
}
Example #3
0
pm_err_flag_type pm_comm_read_byte_mask(uint32 slave_id, uint32 addr, uint8 mask, uint8* data, uint8 priority)
{
    pm_err_flag_type     err = PM_ERR_FLAG__SUCCESS ;
   
    err = spmi_reg_read(slave_id, addr, data, priority);
    if ( err != PM_ERR_FLAG__SUCCESS ) 
    { 
        err = PM_ERR_FLAG__SPMI_OPT_ERR ; 
    }
    else 
    { 
        *data = *data & mask; 
    }

    
    return err ;
}
Example #4
0
pm_err_flag_type pm_comm_write_byte_mask(uint32 slave_id, uint32 addr, uint8 mask, uint8 value, uint8 priority)
{
    pm_err_flag_type         err = PM_ERR_FLAG__SUCCESS ;
    SpmiBus_ResultType       spmi_result = SPMI_BUS_SUCCESS;
    uint8                    data = 0 ;

    if(TRUE == spmi_initialized())
    {
        /* check for out-of-bounds index */
        if ( addr > PM_MAX_REGS)
        { 
            err = PM_ERR_FLAG__SPMI_OPT_ERR ;
        }
        else
        {
             /* Read the data from the SPMI and leave all the bits other than the mask to the previous state */
            spmi_result = spmi_reg_read(slave_id, addr, &data, priority);

            if ( spmi_result == SPMI_BUS_SUCCESS )
            {
                data &= (~mask) ; 
                data |= (value & mask) ;

                spmi_result = spmi_reg_write(slave_id, addr, &data, priority);

                if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
            }
        }
    }
    else
    {
        err = PM_ERR_FLAG__SPMI_OPT_ERR ;
    }


    return err ;
}