blob: 38892ba7b8a42bbecb53621a891a52a2fd70fd43 (
plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __MFD_88PM886_H
#define __MFD_88PM886_H
#include <linux/i2c.h>
#include <linux/regmap.h>
#define PM886_A1_CHIP_ID 0xa1
#define PM886_IRQ_ONKEY 0
#define PM886_PAGE_OFFSET_REGULATORS 1
#define PM886_PAGE_OFFSET_GPADC 2
#define PM886_REG_ID 0x00
#define PM886_REG_STATUS1 0x01
#define PM886_ONKEY_STS1 BIT(0)
#define PM886_REG_INT_STATUS1 0x05
#define PM886_REG_INT_ENA_1 0x0a
#define PM886_INT_ENA1_ONKEY BIT(0)
#define PM886_REG_MISC_CONFIG1 0x14
#define PM886_SW_PDOWN BIT(5)
#define PM886_REG_MISC_CONFIG2 0x15
#define PM886_INT_INV BIT(0)
#define PM886_INT_CLEAR BIT(1)
#define PM886_INT_RC 0x00
#define PM886_INT_WC BIT(1)
#define PM886_INT_MASK_MODE BIT(2)
#define PM886_REG_RTC_CNT1 0xd1
#define PM886_REG_RTC_CNT2 0xd2
#define PM886_REG_RTC_CNT3 0xd3
#define PM886_REG_RTC_CNT4 0xd4
#define PM886_REG_RTC_SPARE1 0xea
#define PM886_REG_RTC_SPARE2 0xeb
#define PM886_REG_RTC_SPARE3 0xec
#define PM886_REG_RTC_SPARE4 0xed
#define PM886_REG_RTC_SPARE5 0xee
#define PM886_REG_RTC_SPARE6 0xef
#define PM886_REG_BUCK_EN 0x08
#define PM886_REG_LDO_EN1 0x09
#define PM886_REG_LDO_EN2 0x0a
#define PM886_REG_LDO1_VOUT 0x20
#define PM886_REG_LDO2_VOUT 0x26
#define PM886_REG_LDO3_VOUT 0x2c
#define PM886_REG_LDO4_VOUT 0x32
#define PM886_REG_LDO5_VOUT 0x38
#define PM886_REG_LDO6_VOUT 0x3e
#define PM886_REG_LDO7_VOUT 0x44
#define PM886_REG_LDO8_VOUT 0x4a
#define PM886_REG_LDO9_VOUT 0x50
#define PM886_REG_LDO10_VOUT 0x56
#define PM886_REG_LDO11_VOUT 0x5c
#define PM886_REG_LDO12_VOUT 0x62
#define PM886_REG_LDO13_VOUT 0x68
#define PM886_REG_LDO14_VOUT 0x6e
#define PM886_REG_LDO15_VOUT 0x74
#define PM886_REG_LDO16_VOUT 0x7a
#define PM886_REG_BUCK1_VOUT 0xa5
#define PM886_REG_BUCK2_VOUT 0xb3
#define PM886_REG_BUCK3_VOUT 0xc1
#define PM886_REG_BUCK4_VOUT 0xcf
#define PM886_REG_BUCK5_VOUT 0xdd
#define PM886_LDO_VSEL_MASK 0x0f
#define PM886_BUCK_VSEL_MASK 0x7f
/* GPADC enable/disable registers */
#define PM886_REG_GPADC_CONFIG(n) (n)
#define PM886_GPADC_VSC_EN BIT(0)
#define PM886_GPADC_VBAT_EN BIT(1)
#define PM886_GPADC_GNDDET1_EN BIT(3)
#define PM886_GPADC_VBUS_EN BIT(4)
#define PM886_GPADC_VCHG_PWR_EN BIT(5)
#define PM886_GPADC_VCF_OUT_EN BIT(6)
#define PM886_GPADC_CONFIG1_EN_ALL \
(PM886_GPADC_VSC_EN | \
PM886_GPADC_VBAT_EN | \
PM886_GPADC_GNDDET1_EN | \
PM886_GPADC_VBUS_EN | \
PM886_GPADC_VCHG_PWR_EN | \
PM886_GPADC_VCF_OUT_EN)
#define PM886_GPADC_TINT_EN BIT(0)
#define PM886_GPADC_PMODE_EN BIT(1)
#define PM886_GPADC_GPADC0_EN BIT(2)
#define PM886_GPADC_GPADC1_EN BIT(3)
#define PM886_GPADC_GPADC2_EN BIT(4)
#define PM886_GPADC_GPADC3_EN BIT(5)
#define PM886_GPADC_MIC_DET_EN BIT(6)
#define PM886_GPADC_CONFIG2_EN_ALL \
(PM886_GPADC_TINT_EN | \
PM886_GPADC_GPADC0_EN | \
PM886_GPADC_GPADC1_EN | \
PM886_GPADC_GPADC2_EN | \
PM886_GPADC_GPADC3_EN | \
PM886_GPADC_MIC_DET_EN)
/* No CONFIG3_EN_ALL because this is the only bit there. */
#define PM886_GPADC_GND_DET2_EN BIT(0)
/* GPADC channel registers */
#define PM886_REG_GPADC_VSC 0x40
#define PM886_REG_GPADC_VCHG_PWR 0x4c
#define PM886_REG_GPADC_VCF_OUT 0x4e
#define PM886_REG_GPADC_TINT 0x50
#define PM886_REG_GPADC_GPADC0 0x54
#define PM886_REG_GPADC_GPADC1 0x56
#define PM886_REG_GPADC_GPADC2 0x58
#define PM886_REG_GPADC_VBAT 0xa0
#define PM886_REG_GPADC_GND_DET1 0xa4
#define PM886_REG_GPADC_GND_DET2 0xa6
#define PM886_REG_GPADC_VBUS 0xa8
#define PM886_REG_GPADC_GPADC3 0xaa
#define PM886_REG_GPADC_MIC_DET 0xac
#define PM886_REG_GPADC_VBAT_SLP 0xb0
/* VBAT_SLP is the last register and is 2 bytes wide like other channels. */
#define PM886_GPADC_MAX_REGISTER (PM886_REG_GPADC_VBAT_SLP + 1)
#define PM886_GPADC_BIAS_LEVELS 16
#define PM886_GPADC_INDEX_TO_BIAS_uA(i) (1 + (i) * 5)
struct pm886_chip {
struct i2c_client *client;
unsigned int chip_id;
struct regmap *regmap;
};
#endif /* __MFD_88PM886_H */
|