1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * mbc.h  -- Driver for NXP PCF50633 Main Battery Charger
4  *
5  * (C) 2006-2008 by Openmoko, Inc.
6  * All rights reserved.
7  */
8 
9 #ifndef __LINUX_MFD_PCF50633_MBC_H
10 #define __LINUX_MFD_PCF50633_MBC_H
11 
12 #include <linux/mfd/pcf50633/core.h>
13 #include <linux/platform_device.h>
14 
15 #define PCF50633_REG_MBCC1	0x43
16 #define PCF50633_REG_MBCC2	0x44
17 #define PCF50633_REG_MBCC3	0x45
18 #define PCF50633_REG_MBCC4	0x46
19 #define PCF50633_REG_MBCC5	0x47
20 #define PCF50633_REG_MBCC6	0x48
21 #define PCF50633_REG_MBCC7	0x49
22 #define PCF50633_REG_MBCC8	0x4a
23 #define PCF50633_REG_MBCS1	0x4b
24 #define PCF50633_REG_MBCS2	0x4c
25 #define PCF50633_REG_MBCS3	0x4d
26 
27 enum pcf50633_reg_mbcc1 {
28 	PCF50633_MBCC1_CHGENA		= 0x01,	/* Charger enable */
29 	PCF50633_MBCC1_AUTOSTOP		= 0x02,
30 	PCF50633_MBCC1_AUTORES		= 0x04, /* automatic resume */
31 	PCF50633_MBCC1_RESUME		= 0x08, /* explicit resume cmd */
32 	PCF50633_MBCC1_RESTART		= 0x10, /* restart charging */
33 	PCF50633_MBCC1_PREWDTIME_60M	= 0x20,	/* max. precharging time */
34 	PCF50633_MBCC1_WDTIME_1H	= 0x00,
35 	PCF50633_MBCC1_WDTIME_2H	= 0x40,
36 	PCF50633_MBCC1_WDTIME_4H	= 0x80,
37 	PCF50633_MBCC1_WDTIME_6H	= 0xc0,
38 };
39 #define PCF50633_MBCC1_WDTIME_MASK	  0xc0
40 
41 enum pcf50633_reg_mbcc2 {
42 	PCF50633_MBCC2_VBATCOND_2V7	= 0x00,
43 	PCF50633_MBCC2_VBATCOND_2V85	= 0x01,
44 	PCF50633_MBCC2_VBATCOND_3V0	= 0x02,
45 	PCF50633_MBCC2_VBATCOND_3V15	= 0x03,
46 	PCF50633_MBCC2_VMAX_4V		= 0x00,
47 	PCF50633_MBCC2_VMAX_4V20	= 0x28,
48 	PCF50633_MBCC2_VRESDEBTIME_64S	= 0x80,	/* debounce time (32/64sec) */
49 };
50 
51 enum pcf50633_reg_mbcc7 {
52 	PCF50633_MBCC7_USB_100mA	= 0x00,
53 	PCF50633_MBCC7_USB_500mA	= 0x01,
54 	PCF50633_MBCC7_USB_1000mA	= 0x02,
55 	PCF50633_MBCC7_USB_SUSPEND	= 0x03,
56 	PCF50633_MBCC7_BATTEMP_EN	= 0x04,
57 	PCF50633_MBCC7_BATSYSIMAX_1A6	= 0x00,
58 	PCF50633_MBCC7_BATSYSIMAX_1A8	= 0x40,
59 	PCF50633_MBCC7_BATSYSIMAX_2A0	= 0x80,
60 	PCF50633_MBCC7_BATSYSIMAX_2A2	= 0xc0,
61 };
62 #define PCF50633_MBCC7_USB_MASK 0x03
63 
64 enum pcf50633_reg_mbcc8 {
65 	PCF50633_MBCC8_USBENASUS	= 0x10,
66 };
67 
68 enum pcf50633_reg_mbcs1 {
69 	PCF50633_MBCS1_USBPRES		= 0x01,
70 	PCF50633_MBCS1_USBOK		= 0x02,
71 	PCF50633_MBCS1_ADAPTPRES	= 0x04,
72 	PCF50633_MBCS1_ADAPTOK		= 0x08,
73 	PCF50633_MBCS1_TBAT_OK		= 0x00,
74 	PCF50633_MBCS1_TBAT_ABOVE	= 0x10,
75 	PCF50633_MBCS1_TBAT_BELOW	= 0x20,
76 	PCF50633_MBCS1_TBAT_UNDEF	= 0x30,
77 	PCF50633_MBCS1_PREWDTEXP	= 0x40,
78 	PCF50633_MBCS1_WDTEXP		= 0x80,
79 };
80 
81 enum pcf50633_reg_mbcs2_mbcmod {
82 	PCF50633_MBCS2_MBC_PLAY		= 0x00,
83 	PCF50633_MBCS2_MBC_USB_PRE	= 0x01,
84 	PCF50633_MBCS2_MBC_USB_PRE_WAIT	= 0x02,
85 	PCF50633_MBCS2_MBC_USB_FAST	= 0x03,
86 	PCF50633_MBCS2_MBC_USB_FAST_WAIT = 0x04,
87 	PCF50633_MBCS2_MBC_USB_SUSPEND	= 0x05,
88 	PCF50633_MBCS2_MBC_ADP_PRE	= 0x06,
89 	PCF50633_MBCS2_MBC_ADP_PRE_WAIT	= 0x07,
90 	PCF50633_MBCS2_MBC_ADP_FAST	= 0x08,
91 	PCF50633_MBCS2_MBC_ADP_FAST_WAIT = 0x09,
92 	PCF50633_MBCS2_MBC_BAT_FULL	= 0x0a,
93 	PCF50633_MBCS2_MBC_HALT		= 0x0b,
94 };
95 #define PCF50633_MBCS2_MBC_MASK		0x0f
96 enum pcf50633_reg_mbcs2_chgstat {
97 	PCF50633_MBCS2_CHGS_NONE	= 0x00,
98 	PCF50633_MBCS2_CHGS_ADAPTER	= 0x10,
99 	PCF50633_MBCS2_CHGS_USB		= 0x20,
100 	PCF50633_MBCS2_CHGS_BOTH	= 0x30,
101 };
102 #define PCF50633_MBCS2_RESSTAT_AUTO	0x40
103 
104 enum pcf50633_reg_mbcs3 {
105 	PCF50633_MBCS3_USBLIM_PLAY	= 0x01,
106 	PCF50633_MBCS3_USBLIM_CGH	= 0x02,
107 	PCF50633_MBCS3_TLIM_PLAY	= 0x04,
108 	PCF50633_MBCS3_TLIM_CHG		= 0x08,
109 	PCF50633_MBCS3_ILIM		= 0x10,	/* 1: Ibat > Icutoff */
110 	PCF50633_MBCS3_VLIM		= 0x20,	/* 1: Vbat == Vmax */
111 	PCF50633_MBCS3_VBATSTAT		= 0x40,	/* 1: Vbat > Vbatcond */
112 	PCF50633_MBCS3_VRES		= 0x80, /* 1: Vbat > Vth(RES) */
113 };
114 
115 #define PCF50633_MBCC2_VBATCOND_MASK	  0x03
116 #define PCF50633_MBCC2_VMAX_MASK	  0x3c
117 
118 /* Charger status */
119 #define PCF50633_MBC_USB_ONLINE		0x01
120 #define PCF50633_MBC_USB_ACTIVE		0x02
121 #define PCF50633_MBC_ADAPTER_ONLINE	0x04
122 #define PCF50633_MBC_ADAPTER_ACTIVE	0x08
123 
124 int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
125 
126 int pcf50633_mbc_get_status(struct pcf50633 *);
127 int pcf50633_mbc_get_usb_online_status(struct pcf50633 *);
128 
129 #endif
130 
131