summaryrefslogtreecommitdiff
path: root/include/linux/mfd/88pm886.h
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 */