| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 1 | /* | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 2 | * max8998.h - Voltage regulator driver for the Maxim 8998 | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 3 | * | 
|  | 4 | *  Copyright (C) 2009-2010 Samsung Electrnoics | 
|  | 5 | *  Kyungmin Park <kyungmin.park@samsung.com> | 
|  | 6 | *  Marek Szyprowski <m.szyprowski@samsung.com> | 
|  | 7 | * | 
|  | 8 | * This program is free software; you can redistribute it and/or modify | 
|  | 9 | * it under the terms of the GNU General Public License as published by | 
|  | 10 | * the Free Software Foundation; either version 2 of the License, or | 
|  | 11 | * (at your option) any later version. | 
|  | 12 | * | 
|  | 13 | * This program is distributed in the hope that it will be useful, | 
|  | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 16 | * GNU General Public License for more details. | 
|  | 17 | * | 
|  | 18 | * You should have received a copy of the GNU General Public License | 
|  | 19 | * along with this program; if not, write to the Free Software | 
|  | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | 21 | */ | 
|  | 22 |  | 
|  | 23 | #ifndef __LINUX_MFD_MAX8998_PRIV_H | 
|  | 24 | #define __LINUX_MFD_MAX8998_PRIV_H | 
|  | 25 |  | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 26 | #define MAX8998_NUM_IRQ_REGS	4 | 
|  | 27 |  | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 28 | /* MAX 8998 registers */ | 
|  | 29 | enum { | 
|  | 30 | MAX8998_REG_IRQ1, | 
|  | 31 | MAX8998_REG_IRQ2, | 
|  | 32 | MAX8998_REG_IRQ3, | 
|  | 33 | MAX8998_REG_IRQ4, | 
|  | 34 | MAX8998_REG_IRQM1, | 
|  | 35 | MAX8998_REG_IRQM2, | 
|  | 36 | MAX8998_REG_IRQM3, | 
|  | 37 | MAX8998_REG_IRQM4, | 
|  | 38 | MAX8998_REG_STATUS1, | 
|  | 39 | MAX8998_REG_STATUS2, | 
|  | 40 | MAX8998_REG_STATUSM1, | 
|  | 41 | MAX8998_REG_STATUSM2, | 
|  | 42 | MAX8998_REG_CHGR1, | 
|  | 43 | MAX8998_REG_CHGR2, | 
|  | 44 | MAX8998_REG_LDO_ACTIVE_DISCHARGE1, | 
|  | 45 | MAX8998_REG_LDO_ACTIVE_DISCHARGE2, | 
|  | 46 | MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, | 
|  | 47 | MAX8998_REG_ONOFF1, | 
|  | 48 | MAX8998_REG_ONOFF2, | 
|  | 49 | MAX8998_REG_ONOFF3, | 
|  | 50 | MAX8998_REG_ONOFF4, | 
| Lukasz Majewski | 889cd5a | 2010-09-27 14:32:25 +0200 | [diff] [blame] | 51 | MAX8998_REG_BUCK1_VOLTAGE1, | 
|  | 52 | MAX8998_REG_BUCK1_VOLTAGE2, | 
|  | 53 | MAX8998_REG_BUCK1_VOLTAGE3, | 
|  | 54 | MAX8998_REG_BUCK1_VOLTAGE4, | 
|  | 55 | MAX8998_REG_BUCK2_VOLTAGE1, | 
|  | 56 | MAX8998_REG_BUCK2_VOLTAGE2, | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 57 | MAX8998_REG_BUCK3, | 
|  | 58 | MAX8998_REG_BUCK4, | 
|  | 59 | MAX8998_REG_LDO2_LDO3, | 
|  | 60 | MAX8998_REG_LDO4, | 
|  | 61 | MAX8998_REG_LDO5, | 
|  | 62 | MAX8998_REG_LDO6, | 
|  | 63 | MAX8998_REG_LDO7, | 
|  | 64 | MAX8998_REG_LDO8_LDO9, | 
|  | 65 | MAX8998_REG_LDO10_LDO11, | 
|  | 66 | MAX8998_REG_LDO12, | 
|  | 67 | MAX8998_REG_LDO13, | 
|  | 68 | MAX8998_REG_LDO14, | 
|  | 69 | MAX8998_REG_LDO15, | 
|  | 70 | MAX8998_REG_LDO16, | 
|  | 71 | MAX8998_REG_LDO17, | 
|  | 72 | MAX8998_REG_BKCHR, | 
|  | 73 | MAX8998_REG_LBCNFG1, | 
|  | 74 | MAX8998_REG_LBCNFG2, | 
|  | 75 | }; | 
|  | 76 |  | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 77 | /* IRQ definitions */ | 
|  | 78 | enum { | 
|  | 79 | MAX8998_IRQ_DCINF, | 
|  | 80 | MAX8998_IRQ_DCINR, | 
|  | 81 | MAX8998_IRQ_JIGF, | 
|  | 82 | MAX8998_IRQ_JIGR, | 
|  | 83 | MAX8998_IRQ_PWRONF, | 
|  | 84 | MAX8998_IRQ_PWRONR, | 
|  | 85 |  | 
|  | 86 | MAX8998_IRQ_WTSREVNT, | 
|  | 87 | MAX8998_IRQ_SMPLEVNT, | 
|  | 88 | MAX8998_IRQ_ALARM1, | 
|  | 89 | MAX8998_IRQ_ALARM0, | 
|  | 90 |  | 
|  | 91 | MAX8998_IRQ_ONKEY1S, | 
|  | 92 | MAX8998_IRQ_TOPOFFR, | 
|  | 93 | MAX8998_IRQ_DCINOVPR, | 
|  | 94 | MAX8998_IRQ_CHGRSTF, | 
|  | 95 | MAX8998_IRQ_DONER, | 
|  | 96 | MAX8998_IRQ_CHGFAULT, | 
|  | 97 |  | 
|  | 98 | MAX8998_IRQ_LOBAT1, | 
|  | 99 | MAX8998_IRQ_LOBAT2, | 
|  | 100 |  | 
|  | 101 | MAX8998_IRQ_NR, | 
|  | 102 | }; | 
|  | 103 |  | 
| Lukasz Majewski | 509bd47 | 2010-09-27 14:32:24 +0200 | [diff] [blame] | 104 | /* MAX8998 various variants */ | 
|  | 105 | enum { | 
|  | 106 | TYPE_MAX8998 = 0, /* Default */ | 
|  | 107 | TYPE_LP3974,	/* National version of MAX8998 */ | 
|  | 108 | TYPE_LP3979,	/* Added AVS */ | 
|  | 109 | }; | 
|  | 110 |  | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 111 | #define MAX8998_IRQ_DCINF_MASK		(1 << 2) | 
|  | 112 | #define MAX8998_IRQ_DCINR_MASK		(1 << 3) | 
|  | 113 | #define MAX8998_IRQ_JIGF_MASK		(1 << 4) | 
|  | 114 | #define MAX8998_IRQ_JIGR_MASK		(1 << 5) | 
|  | 115 | #define MAX8998_IRQ_PWRONF_MASK		(1 << 6) | 
|  | 116 | #define MAX8998_IRQ_PWRONR_MASK		(1 << 7) | 
|  | 117 |  | 
|  | 118 | #define MAX8998_IRQ_WTSREVNT_MASK	(1 << 0) | 
|  | 119 | #define MAX8998_IRQ_SMPLEVNT_MASK	(1 << 1) | 
|  | 120 | #define MAX8998_IRQ_ALARM1_MASK		(1 << 2) | 
|  | 121 | #define MAX8998_IRQ_ALARM0_MASK		(1 << 3) | 
|  | 122 |  | 
|  | 123 | #define MAX8998_IRQ_ONKEY1S_MASK	(1 << 0) | 
|  | 124 | #define MAX8998_IRQ_TOPOFFR_MASK	(1 << 2) | 
|  | 125 | #define MAX8998_IRQ_DCINOVPR_MASK	(1 << 3) | 
|  | 126 | #define MAX8998_IRQ_CHGRSTF_MASK	(1 << 4) | 
|  | 127 | #define MAX8998_IRQ_DONER_MASK		(1 << 5) | 
|  | 128 | #define MAX8998_IRQ_CHGFAULT_MASK	(1 << 7) | 
|  | 129 |  | 
|  | 130 | #define MAX8998_IRQ_LOBAT1_MASK		(1 << 0) | 
|  | 131 | #define MAX8998_IRQ_LOBAT2_MASK		(1 << 1) | 
|  | 132 |  | 
| Lukasz Majewski | 509bd47 | 2010-09-27 14:32:24 +0200 | [diff] [blame] | 133 | #define MAX8998_ENRAMP                  (1 << 4) | 
|  | 134 |  | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 135 | /** | 
|  | 136 | * struct max8998_dev - max8998 master device for sub-drivers | 
|  | 137 | * @dev: master device of the chip (can be used to access platform data) | 
| Joonyoung Shim | 9b16c0a | 2010-08-06 11:28:08 +0900 | [diff] [blame] | 138 | * @i2c: i2c client private data for regulator | 
|  | 139 | * @rtc: i2c client private data for rtc | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 140 | * @iolock: mutex for serializing io access | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 141 | * @irqlock: mutex for buslock | 
|  | 142 | * @irq_base: base IRQ number for max8998, required for IRQs | 
|  | 143 | * @irq: generic IRQ number for max8998 | 
|  | 144 | * @ono: power onoff IRQ number for max8998 | 
|  | 145 | * @irq_masks_cur: currently active value | 
|  | 146 | * @irq_masks_cache: cached hardware value | 
| Lukasz Majewski | 509bd47 | 2010-09-27 14:32:24 +0200 | [diff] [blame] | 147 | * @type: indicate which max8998 "variant" is used | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 148 | */ | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 149 | struct max8998_dev { | 
|  | 150 | struct device *dev; | 
| Joonyoung Shim | 676e02d | 2010-08-06 11:28:06 +0900 | [diff] [blame] | 151 | struct i2c_client *i2c; | 
| Joonyoung Shim | 9b16c0a | 2010-08-06 11:28:08 +0900 | [diff] [blame] | 152 | struct i2c_client *rtc; | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 153 | struct mutex iolock; | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 154 | struct mutex irqlock; | 
|  | 155 |  | 
|  | 156 | int irq_base; | 
|  | 157 | int irq; | 
|  | 158 | int ono; | 
|  | 159 | u8 irq_masks_cur[MAX8998_NUM_IRQ_REGS]; | 
|  | 160 | u8 irq_masks_cache[MAX8998_NUM_IRQ_REGS]; | 
| Lukasz Majewski | 509bd47 | 2010-09-27 14:32:24 +0200 | [diff] [blame] | 161 | int type; | 
| MyungJoo Ham | cdd137c | 2010-12-23 17:53:36 +0900 | [diff] [blame] | 162 | bool wakeup; | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 163 | }; | 
|  | 164 |  | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 165 | int max8998_irq_init(struct max8998_dev *max8998); | 
|  | 166 | void max8998_irq_exit(struct max8998_dev *max8998); | 
| MyungJoo Ham | cdd137c | 2010-12-23 17:53:36 +0900 | [diff] [blame] | 167 | int max8998_irq_resume(struct max8998_dev *max8998); | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 168 |  | 
| Joonyoung Shim | 676e02d | 2010-08-06 11:28:06 +0900 | [diff] [blame] | 169 | extern int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest); | 
| Joonyoung Shim | 2c7e6f5 | 2010-09-10 18:36:39 +0200 | [diff] [blame] | 170 | extern int max8998_bulk_read(struct i2c_client *i2c, u8 reg, int count, | 
|  | 171 | u8 *buf); | 
| Joonyoung Shim | 676e02d | 2010-08-06 11:28:06 +0900 | [diff] [blame] | 172 | extern int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value); | 
| Joonyoung Shim | 9b16c0a | 2010-08-06 11:28:08 +0900 | [diff] [blame] | 173 | extern int max8998_bulk_write(struct i2c_client *i2c, u8 reg, int count, | 
|  | 174 | u8 *buf); | 
| Joonyoung Shim | 676e02d | 2010-08-06 11:28:06 +0900 | [diff] [blame] | 175 | extern int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask); | 
| Kyungmin Park | 156f252 | 2010-06-16 09:04:16 +0200 | [diff] [blame] | 176 |  | 
|  | 177 | #endif /*  __LINUX_MFD_MAX8998_PRIV_H */ |