/* ********************************************************************************************************* * 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; }