huangcm
2025-07-03 a76b2fadf6ad4adf86e241e3753a63efe03ef80c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
*********************************************************************************************************
*                                                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, &regaddr, &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, &regaddr, &data, 1);
   data &= (~(1 << offset));
   data |= (state << offset);
   pmu_reg_write(&devaddr, &regaddr, &data, 1);
 
   if (state == POWER_VOL_ON) {
       //delay 1ms for open PMU output
       time_mdelay(1);
   }
 
   return OK;
}