| 
									
										
										
										
											2012-03-16 11:10:19 +05:30
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Core driver interface for TI TPS65090 PMIC family | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2012 NVIDIA Corporation | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, but WITHOUT | 
					
						
							|  |  |  |  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 
					
						
							|  |  |  |  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for | 
					
						
							|  |  |  |  * more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License along | 
					
						
							|  |  |  |  * with this program; if not, write to the Free Software Foundation, Inc., | 
					
						
							|  |  |  |  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __LINUX_MFD_TPS65090_H
 | 
					
						
							|  |  |  | #define __LINUX_MFD_TPS65090_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-17 17:08:56 +08:00
										 |  |  | #include <linux/irq.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-20 08:44:48 +05:30
										 |  |  | #include <linux/regmap.h>
 | 
					
						
							| 
									
										
										
										
											2012-04-17 17:08:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-20 08:44:49 +05:30
										 |  |  | /* TPS65090 IRQs */ | 
					
						
							|  |  |  | enum { | 
					
						
							| 
									
										
										
										
											2013-03-12 18:08:06 -04:00
										 |  |  | 	TPS65090_IRQ_INTERRUPT, | 
					
						
							| 
									
										
										
										
											2012-11-20 08:44:49 +05:30
										 |  |  | 	TPS65090_IRQ_VAC_STATUS_CHANGE, | 
					
						
							|  |  |  | 	TPS65090_IRQ_VSYS_STATUS_CHANGE, | 
					
						
							|  |  |  | 	TPS65090_IRQ_BAT_STATUS_CHANGE, | 
					
						
							|  |  |  | 	TPS65090_IRQ_CHARGING_STATUS_CHANGE, | 
					
						
							|  |  |  | 	TPS65090_IRQ_CHARGING_COMPLETE, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_DCDC1, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_DCDC2, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_DCDC3, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET1, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET2, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET3, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET4, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET5, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET6, | 
					
						
							|  |  |  | 	TPS65090_IRQ_OVERLOAD_FET7, | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2012-04-17 17:08:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  | /* TPS65090 Regulator ID */ | 
					
						
							|  |  |  | enum { | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:00 +05:30
										 |  |  | 	TPS65090_REGULATOR_DCDC1, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_DCDC2, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_DCDC3, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET1, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET2, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET3, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET4, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET5, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET6, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_FET7, | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:01 +05:30
										 |  |  | 	TPS65090_REGULATOR_LDO1, | 
					
						
							|  |  |  | 	TPS65090_REGULATOR_LDO2, | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Last entry for maximum ID */ | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:00 +05:30
										 |  |  | 	TPS65090_REGULATOR_MAX, | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-16 16:12:27 -07:00
										 |  |  | /* Register addresses */ | 
					
						
							|  |  |  | #define TPS65090_REG_INTR_STS	0x00
 | 
					
						
							|  |  |  | #define TPS65090_REG_INTR_STS2	0x01
 | 
					
						
							|  |  |  | #define TPS65090_REG_INTR_MASK	0x02
 | 
					
						
							|  |  |  | #define TPS65090_REG_INTR_MASK2	0x03
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL0	0x04
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL1	0x05
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL2	0x06
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL3	0x07
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL4	0x08
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_CTRL5	0x09
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_STATUS1	0x0a
 | 
					
						
							|  |  |  | #define TPS65090_REG_CG_STATUS2	0x0b
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-17 17:08:56 +08:00
										 |  |  | struct tps65090 { | 
					
						
							|  |  |  | 	struct device		*dev; | 
					
						
							|  |  |  | 	struct regmap		*rmap; | 
					
						
							| 
									
										
										
										
											2012-11-20 08:44:49 +05:30
										 |  |  | 	struct regmap_irq_chip_data *irq_data; | 
					
						
							| 
									
										
										
										
											2012-03-16 11:10:19 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  | /*
 | 
					
						
							|  |  |  |  * struct tps65090_regulator_plat_data | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @reg_init_data: The regulator init data. | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:02 +05:30
										 |  |  |  * @enable_ext_control: Enable extrenal control or not. Only available for | 
					
						
							|  |  |  |  *     DCDC1, DCDC2 and DCDC3. | 
					
						
							|  |  |  |  * @gpio: Gpio number if external control is enabled and controlled through | 
					
						
							|  |  |  |  *     gpio. | 
					
						
							| 
									
										
										
										
											2014-04-16 16:12:28 -07:00
										 |  |  |  * @overcurrent_wait_valid: True if the overcurrent_wait should be applied. | 
					
						
							|  |  |  |  * @overcurrent_wait: Value to set as the overcurrent wait time.  This is the | 
					
						
							|  |  |  |  *     actual bitfield value, not a time in ms (valid value are 0 - 3). | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  |  */ | 
					
						
							|  |  |  | struct tps65090_regulator_plat_data { | 
					
						
							|  |  |  | 	struct regulator_init_data *reg_init_data; | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:02 +05:30
										 |  |  | 	bool enable_ext_control; | 
					
						
							|  |  |  | 	int gpio; | 
					
						
							| 
									
										
										
										
											2014-04-16 16:12:28 -07:00
										 |  |  | 	bool overcurrent_wait_valid; | 
					
						
							|  |  |  | 	int overcurrent_wait; | 
					
						
							| 
									
										
										
										
											2012-10-09 15:18:59 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-16 11:10:19 +05:30
										 |  |  | struct tps65090_platform_data { | 
					
						
							|  |  |  | 	int irq_base; | 
					
						
							| 
									
										
										
										
											2013-03-12 18:08:09 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	char **supplied_to; | 
					
						
							|  |  |  | 	size_t num_supplicants; | 
					
						
							|  |  |  | 	int enable_low_current_chrg; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 15:19:00 +05:30
										 |  |  | 	struct tps65090_regulator_plat_data *reg_pdata[TPS65090_REGULATOR_MAX]; | 
					
						
							| 
									
										
										
										
											2012-03-16 11:10:19 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * NOTE: the functions below are not intended for use outside | 
					
						
							|  |  |  |  * of the TPS65090 sub-device drivers | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-11-20 08:44:48 +05:30
										 |  |  | static inline int tps65090_write(struct device *dev, int reg, uint8_t val) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct tps65090 *tps = dev_get_drvdata(dev); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return regmap_write(tps->rmap, reg, val); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int tps65090_read(struct device *dev, int reg, uint8_t *val) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct tps65090 *tps = dev_get_drvdata(dev); | 
					
						
							|  |  |  | 	unsigned int temp_val; | 
					
						
							|  |  |  | 	int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ret = regmap_read(tps->rmap, reg, &temp_val); | 
					
						
							|  |  |  | 	if (!ret) | 
					
						
							|  |  |  | 		*val = temp_val; | 
					
						
							|  |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int tps65090_set_bits(struct device *dev, int reg, | 
					
						
							|  |  |  | 		uint8_t bit_num) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct tps65090 *tps = dev_get_drvdata(dev); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return regmap_update_bits(tps->rmap, reg, BIT(bit_num), ~0u); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int tps65090_clr_bits(struct device *dev, int reg, | 
					
						
							|  |  |  | 		uint8_t bit_num) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct tps65090 *tps = dev_get_drvdata(dev); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return regmap_update_bits(tps->rmap, reg, BIT(bit_num), 0u); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-16 11:10:19 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /*__LINUX_MFD_TPS65090_H */
 |