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