hc
2023-11-22 f743a7adbd6e230d66a6206fa115b59fec2d88eb
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
/*
 * mbc.h  -- Driver for NXP PCF50633 Main Battery Charger
 *
 * (C) 2006-2008 by Openmoko, Inc.
 * All rights reserved.
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */
 
#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