/*
|
*********************************************************************************************************
|
* AR100 SYSTEM
|
* AR100 Software System Develop Kits
|
* pmu module
|
*
|
* (c) Copyright 2012-2016, Sunny China
|
* All Rights Reserved
|
*
|
* File : pmu.c
|
* By : Sunny
|
* Version : v1.0
|
* Date : 2012-5-22
|
* Descript: power management unit.
|
* Update : date auther ver notes
|
* 2012-5-22 13:33:03 Sunny 1.0 Create this file.
|
*********************************************************************************************************
|
*/
|
|
#include "pmu_i.h"
|
|
/**
|
* tcs4838 voltages info table,
|
* the index of table is voltage type.
|
*/
|
pmu_onoff_reg_bitmap_t tcs4838_onoff_reg_bitmap[] = {
|
//dev_addr //reg_addr //offset //state //dvm_en
|
{RSB_RTSADDR_TCS4838, TCS4838_VSEL0, 7, 1, 0},//TCS4838_DCDC0
|
{RSB_RTSADDR_TCS4838, TCS4838_VSEL1, 7, 1, 0},//TCS4838_DCDC1
|
};
|
|
/**
|
* tcs4838 check,
|
*/
|
s32 tcs4838_is_exist(void)
|
{
|
u8 devaddr;
|
u8 regaddr;
|
u8 data;
|
|
devaddr = RSB_RTSADDR_TCS4838;
|
regaddr = TCS4838_ID1;
|
|
pmu_reg_read(&devaddr, ®addr, &data, 1);
|
data &= 0xE0;
|
|
if (data == 0x80) {
|
return TRUE;
|
}
|
|
return FALSE;
|
}
|
|
/**
|
* tcs4838 specific function,
|
*/
|
|
s32 tcs4838_pmu_set_voltage_state(u32 type, u32 state)
|
{
|
u8 devaddr;
|
u8 regaddr;
|
u8 data;
|
u32 offset;
|
|
devaddr = tcs4838_onoff_reg_bitmap[type].devaddr;
|
regaddr = tcs4838_onoff_reg_bitmap[type].regaddr;
|
offset = tcs4838_onoff_reg_bitmap[type].offset;
|
// tcs4838_onoff_reg_bitmap[type].state = state;
|
|
//read-modify-write
|
pmu_reg_read(&devaddr, ®addr, &data, 1);
|
data &= (~(1 << offset));
|
data |= (state << offset);
|
pmu_reg_write(&devaddr, ®addr, &data, 1);
|
|
if (state == POWER_VOL_ON) {
|
//delay 1ms for open PMU output
|
time_mdelay(1);
|
}
|
|
return OK;
|
}
|