hc
2024-08-09 d3d58fa5ee2428cd2dde78fd8eeeeabe916b3835
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
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * mbc.h  -- Driver for NXP PCF50633 Main Battery Charger
 *
 * (C) 2006-2008 by Openmoko, Inc.
 * All rights reserved.
 */
 
#ifndef __LINUX_MFD_PCF50633_MBC_H
#define __LINUX_MFD_PCF50633_MBC_H
 
#include <linux/mfd/pcf50633/core.h>
#include <linux/platform_device.h>
 
#define PCF50633_REG_MBCC1    0x43
#define PCF50633_REG_MBCC2    0x44
#define PCF50633_REG_MBCC3    0x45
#define PCF50633_REG_MBCC4    0x46
#define PCF50633_REG_MBCC5    0x47
#define PCF50633_REG_MBCC6    0x48
#define PCF50633_REG_MBCC7    0x49
#define PCF50633_REG_MBCC8    0x4a
#define PCF50633_REG_MBCS1    0x4b
#define PCF50633_REG_MBCS2    0x4c
#define PCF50633_REG_MBCS3    0x4d
 
enum pcf50633_reg_mbcc1 {
   PCF50633_MBCC1_CHGENA        = 0x01,    /* Charger enable */
   PCF50633_MBCC1_AUTOSTOP        = 0x02,
   PCF50633_MBCC1_AUTORES        = 0x04, /* automatic resume */
   PCF50633_MBCC1_RESUME        = 0x08, /* explicit resume cmd */
   PCF50633_MBCC1_RESTART        = 0x10, /* restart charging */
   PCF50633_MBCC1_PREWDTIME_60M    = 0x20,    /* max. precharging time */
   PCF50633_MBCC1_WDTIME_1H    = 0x00,
   PCF50633_MBCC1_WDTIME_2H    = 0x40,
   PCF50633_MBCC1_WDTIME_4H    = 0x80,
   PCF50633_MBCC1_WDTIME_6H    = 0xc0,
};
#define PCF50633_MBCC1_WDTIME_MASK      0xc0
 
enum pcf50633_reg_mbcc2 {
   PCF50633_MBCC2_VBATCOND_2V7    = 0x00,
   PCF50633_MBCC2_VBATCOND_2V85    = 0x01,
   PCF50633_MBCC2_VBATCOND_3V0    = 0x02,
   PCF50633_MBCC2_VBATCOND_3V15    = 0x03,
   PCF50633_MBCC2_VMAX_4V        = 0x00,
   PCF50633_MBCC2_VMAX_4V20    = 0x28,
   PCF50633_MBCC2_VRESDEBTIME_64S    = 0x80,    /* debounce time (32/64sec) */
};
 
enum pcf50633_reg_mbcc7 {
   PCF50633_MBCC7_USB_100mA    = 0x00,
   PCF50633_MBCC7_USB_500mA    = 0x01,
   PCF50633_MBCC7_USB_1000mA    = 0x02,
   PCF50633_MBCC7_USB_SUSPEND    = 0x03,
   PCF50633_MBCC7_BATTEMP_EN    = 0x04,
   PCF50633_MBCC7_BATSYSIMAX_1A6    = 0x00,
   PCF50633_MBCC7_BATSYSIMAX_1A8    = 0x40,
   PCF50633_MBCC7_BATSYSIMAX_2A0    = 0x80,
   PCF50633_MBCC7_BATSYSIMAX_2A2    = 0xc0,
};
#define PCF50633_MBCC7_USB_MASK 0x03
 
enum pcf50633_reg_mbcc8 {
   PCF50633_MBCC8_USBENASUS    = 0x10,
};
 
enum pcf50633_reg_mbcs1 {
   PCF50633_MBCS1_USBPRES        = 0x01,
   PCF50633_MBCS1_USBOK        = 0x02,
   PCF50633_MBCS1_ADAPTPRES    = 0x04,
   PCF50633_MBCS1_ADAPTOK        = 0x08,
   PCF50633_MBCS1_TBAT_OK        = 0x00,
   PCF50633_MBCS1_TBAT_ABOVE    = 0x10,
   PCF50633_MBCS1_TBAT_BELOW    = 0x20,
   PCF50633_MBCS1_TBAT_UNDEF    = 0x30,
   PCF50633_MBCS1_PREWDTEXP    = 0x40,
   PCF50633_MBCS1_WDTEXP        = 0x80,
};
 
enum pcf50633_reg_mbcs2_mbcmod {
   PCF50633_MBCS2_MBC_PLAY        = 0x00,
   PCF50633_MBCS2_MBC_USB_PRE    = 0x01,
   PCF50633_MBCS2_MBC_USB_PRE_WAIT    = 0x02,
   PCF50633_MBCS2_MBC_USB_FAST    = 0x03,
   PCF50633_MBCS2_MBC_USB_FAST_WAIT = 0x04,
   PCF50633_MBCS2_MBC_USB_SUSPEND    = 0x05,
   PCF50633_MBCS2_MBC_ADP_PRE    = 0x06,
   PCF50633_MBCS2_MBC_ADP_PRE_WAIT    = 0x07,
   PCF50633_MBCS2_MBC_ADP_FAST    = 0x08,
   PCF50633_MBCS2_MBC_ADP_FAST_WAIT = 0x09,
   PCF50633_MBCS2_MBC_BAT_FULL    = 0x0a,
   PCF50633_MBCS2_MBC_HALT        = 0x0b,
};
#define PCF50633_MBCS2_MBC_MASK        0x0f
enum pcf50633_reg_mbcs2_chgstat {
   PCF50633_MBCS2_CHGS_NONE    = 0x00,
   PCF50633_MBCS2_CHGS_ADAPTER    = 0x10,
   PCF50633_MBCS2_CHGS_USB        = 0x20,
   PCF50633_MBCS2_CHGS_BOTH    = 0x30,
};
#define PCF50633_MBCS2_RESSTAT_AUTO    0x40
 
enum pcf50633_reg_mbcs3 {
   PCF50633_MBCS3_USBLIM_PLAY    = 0x01,
   PCF50633_MBCS3_USBLIM_CGH    = 0x02,
   PCF50633_MBCS3_TLIM_PLAY    = 0x04,
   PCF50633_MBCS3_TLIM_CHG        = 0x08,
   PCF50633_MBCS3_ILIM        = 0x10,    /* 1: Ibat > Icutoff */
   PCF50633_MBCS3_VLIM        = 0x20,    /* 1: Vbat == Vmax */
   PCF50633_MBCS3_VBATSTAT        = 0x40,    /* 1: Vbat > Vbatcond */
   PCF50633_MBCS3_VRES        = 0x80, /* 1: Vbat > Vth(RES) */
};
 
#define PCF50633_MBCC2_VBATCOND_MASK      0x03
#define PCF50633_MBCC2_VMAX_MASK      0x3c
 
/* Charger status */
#define PCF50633_MBC_USB_ONLINE        0x01
#define PCF50633_MBC_USB_ACTIVE        0x02
#define PCF50633_MBC_ADAPTER_ONLINE    0x04
#define PCF50633_MBC_ADAPTER_ACTIVE    0x08
 
int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
 
int pcf50633_mbc_get_status(struct pcf50633 *);
int pcf50633_mbc_get_usb_online_status(struct pcf50633 *);
 
#endif