| Balaji Rao | f5714dc | 2009-01-09 01:50:55 +0100 | [diff] [blame] | 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 |  | 
|  | 31 | enum 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 |  | 
|  | 45 | enum 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 |  | 
|  | 55 | enum 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 |  | 
|  | 68 | enum pcf50633_reg_mbcc8 { | 
|  | 69 | PCF50633_MBCC8_USBENASUS	= 0x10, | 
|  | 70 | }; | 
|  | 71 |  | 
|  | 72 | enum 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 |  | 
|  | 85 | enum 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 | 
|  | 100 | enum 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 |  | 
|  | 108 | enum 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 |  | 
|  | 128 | int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma); | 
|  | 129 |  | 
|  | 130 | int pcf50633_mbc_get_status(struct pcf50633 *); | 
| Paul Fertser | c329795 | 2009-11-05 00:24:59 +0300 | [diff] [blame^] | 131 | int pcf50633_mbc_get_usb_online_status(struct pcf50633 *); | 
| Balaji Rao | f5714dc | 2009-01-09 01:50:55 +0100 | [diff] [blame] | 132 |  | 
|  | 133 | #endif | 
|  | 134 |  |