diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mfd/abx500/ab8500.h | 11 | ||||
| -rw-r--r-- | include/linux/mfd/palmas.h | 24 | ||||
| -rw-r--r-- | include/linux/regulator/ab8500.h | 217 | ||||
| -rw-r--r-- | include/linux/regulator/consumer.h | 14 | ||||
| -rw-r--r-- | include/linux/regulator/driver.h | 9 | ||||
| -rw-r--r-- | include/linux/regulator/max8952.h | 10 | 
6 files changed, 241 insertions, 44 deletions
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h index 9db0bda446a..84f449475c2 100644 --- a/include/linux/mfd/abx500/ab8500.h +++ b/include/linux/mfd/abx500/ab8500.h @@ -364,8 +364,7 @@ struct ab8500 {  	const int *irq_reg_offset;  }; -struct regulator_reg_init; -struct regulator_init_data; +struct ab8500_regulator_platform_data;  struct ab8500_gpio_platform_data;  struct ab8500_codec_platform_data;  struct ab8500_sysctrl_platform_data; @@ -375,19 +374,13 @@ struct ab8500_sysctrl_platform_data;   * @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used   * @pm_power_off: Should machine pm power off hook be registered or not   * @init: board-specific initialization after detection of ab8500 - * @num_regulator_reg_init: number of regulator init registers - * @regulator_reg_init: regulator init registers - * @num_regulator: number of regulators   * @regulator: machine-specific constraints for regulators   */  struct ab8500_platform_data {  	int irq_base;  	bool pm_power_off;  	void (*init) (struct ab8500 *); -	int num_regulator_reg_init; -	struct ab8500_regulator_reg_init *regulator_reg_init; -	int num_regulator; -	struct regulator_init_data *regulator; +	struct ab8500_regulator_platform_data *regulator;  	struct abx500_gpio_platform_data *gpio;  	struct ab8500_codec_platform_data *codec;  	struct ab8500_sysctrl_platform_data *sysctrl; diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h index 3bbda22721e..ecddc5173c7 100644 --- a/include/linux/mfd/palmas.h +++ b/include/linux/mfd/palmas.h @@ -109,19 +109,6 @@ struct palmas_reg_init {  	 */  	int mode_sleep; -	/* tstep is the timestep loaded to the TSTEP register -	 * -	 * For SMPS -	 * -	 * 0: Jump (no slope control) -	 * 1: 10mV/us -	 * 2: 5mV/us -	 * 3: 2.5mV/us -	 * -	 * For LDO unused -	 */ -	int tstep; -  	/* voltage_sel is the bitfield loaded onto the SMPSX_VOLTAGE  	 * register. Set this is the default voltage set in OTP needs  	 * to be overridden. @@ -154,6 +141,12 @@ enum palmas_regulators {  	PALMAS_REG_LDO9,  	PALMAS_REG_LDOLN,  	PALMAS_REG_LDOUSB, +	/* External regulators */ +	PALMAS_REG_REGEN1, +	PALMAS_REG_REGEN2, +	PALMAS_REG_REGEN3, +	PALMAS_REG_SYSEN1, +	PALMAS_REG_SYSEN2,  	/* Total number of regulators */  	PALMAS_NUM_REGS,  }; @@ -171,6 +164,9 @@ struct palmas_pmic_platform_data {  	/* use LDO6 for vibrator control */  	int ldo6_vibrator; + +	/* Enable tracking mode of LDO8 */ +	bool enable_ldo8_tracking;  };  struct palmas_usb_platform_data { @@ -331,6 +327,8 @@ struct palmas_pmic {  	int smps457;  	int range[PALMAS_REG_SMPS10]; +	unsigned int ramp_delay[PALMAS_REG_SMPS10]; +	unsigned int current_reg_mode[PALMAS_REG_SMPS10];  };  struct palmas_resource { diff --git a/include/linux/regulator/ab8500.h b/include/linux/regulator/ab8500.h index 7bd73bbdfd1..7c5ff0c5577 100644 --- a/include/linux/regulator/ab8500.h +++ b/include/linux/regulator/ab8500.h @@ -5,11 +5,14 @@   *   * Authors: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson   *          Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson + *          Daniel Willerud <daniel.willerud@stericsson.com> for ST-Ericsson   */  #ifndef __LINUX_MFD_AB8500_REGULATOR_H  #define __LINUX_MFD_AB8500_REGULATOR_H +#include <linux/platform_device.h> +  /* AB8500 regulators */  enum ab8500_regulator_id {  	AB8500_LDO_AUX1, @@ -17,7 +20,6 @@ enum ab8500_regulator_id {  	AB8500_LDO_AUX3,  	AB8500_LDO_INTCORE,  	AB8500_LDO_TVOUT, -	AB8500_LDO_USB,  	AB8500_LDO_AUDIO,  	AB8500_LDO_ANAMIC1,  	AB8500_LDO_ANAMIC2, @@ -26,7 +28,28 @@ enum ab8500_regulator_id {  	AB8500_NUM_REGULATORS,  }; -/* AB9450 regulators */ +/* AB8505 regulators */ +enum ab8505_regulator_id { +	AB8505_LDO_AUX1, +	AB8505_LDO_AUX2, +	AB8505_LDO_AUX3, +	AB8505_LDO_AUX4, +	AB8505_LDO_AUX5, +	AB8505_LDO_AUX6, +	AB8505_LDO_INTCORE, +	AB8505_LDO_ADC, +	AB8505_LDO_USB, +	AB8505_LDO_AUDIO, +	AB8505_LDO_ANAMIC1, +	AB8505_LDO_ANAMIC2, +	AB8505_LDO_AUX8, +	AB8505_LDO_ANA, +	AB8505_SYSCLKREQ_2, +	AB8505_SYSCLKREQ_4, +	AB8505_NUM_REGULATORS, +}; + +/* AB9540 regulators */  enum ab9540_regulator_id {  	AB9540_LDO_AUX1,  	AB9540_LDO_AUX2, @@ -45,16 +68,39 @@ enum ab9540_regulator_id {  	AB9540_NUM_REGULATORS,  }; -/* AB8500 and AB9540 register initialization */ +/* AB8540 regulators */ +enum ab8540_regulator_id { +	AB8540_LDO_AUX1, +	AB8540_LDO_AUX2, +	AB8540_LDO_AUX3, +	AB8540_LDO_AUX4, +	AB8540_LDO_AUX5, +	AB8540_LDO_AUX6, +	AB8540_LDO_INTCORE, +	AB8540_LDO_TVOUT, +	AB8540_LDO_AUDIO, +	AB8540_LDO_ANAMIC1, +	AB8540_LDO_ANAMIC2, +	AB8540_LDO_DMIC, +	AB8540_LDO_ANA, +	AB8540_LDO_SDIO, +	AB8540_SYSCLKREQ_2, +	AB8540_SYSCLKREQ_4, +	AB8540_NUM_REGULATORS, +}; + +/* AB8500, AB8505, and AB9540 register initialization */  struct ab8500_regulator_reg_init {  	int id; +	u8 mask;  	u8 value;  }; -#define INIT_REGULATOR_REGISTER(_id, _value)	\ -	{					\ -		.id = _id,			\ -		.value = _value,		\ +#define INIT_REGULATOR_REGISTER(_id, _mask, _value)	\ +	{						\ +		.id = _id,				\ +		.mask = _mask,				\ +		.value = _value,			\  	}  /* AB8500 registers */ @@ -86,10 +132,58 @@ enum ab8500_regulator_reg {  	AB8500_REGUCTRL2SPARE,  	AB8500_REGUCTRLDISCH,  	AB8500_REGUCTRLDISCH2, -	AB8500_VSMPS1SEL1,  	AB8500_NUM_REGULATOR_REGISTERS,  }; +/* AB8505 registers */ +enum ab8505_regulator_reg { +	AB8505_REGUREQUESTCTRL1, +	AB8505_REGUREQUESTCTRL2, +	AB8505_REGUREQUESTCTRL3, +	AB8505_REGUREQUESTCTRL4, +	AB8505_REGUSYSCLKREQ1HPVALID1, +	AB8505_REGUSYSCLKREQ1HPVALID2, +	AB8505_REGUHWHPREQ1VALID1, +	AB8505_REGUHWHPREQ1VALID2, +	AB8505_REGUHWHPREQ2VALID1, +	AB8505_REGUHWHPREQ2VALID2, +	AB8505_REGUSWHPREQVALID1, +	AB8505_REGUSWHPREQVALID2, +	AB8505_REGUSYSCLKREQVALID1, +	AB8505_REGUSYSCLKREQVALID2, +	AB8505_REGUVAUX4REQVALID, +	AB8505_REGUMISC1, +	AB8505_VAUDIOSUPPLY, +	AB8505_REGUCTRL1VAMIC, +	AB8505_VSMPSAREGU, +	AB8505_VSMPSBREGU, +	AB8505_VSAFEREGU, /* NOTE! PRCMU register */ +	AB8505_VPLLVANAREGU, +	AB8505_EXTSUPPLYREGU, +	AB8505_VAUX12REGU, +	AB8505_VRF1VAUX3REGU, +	AB8505_VSMPSASEL1, +	AB8505_VSMPSASEL2, +	AB8505_VSMPSASEL3, +	AB8505_VSMPSBSEL1, +	AB8505_VSMPSBSEL2, +	AB8505_VSMPSBSEL3, +	AB8505_VSAFESEL1, /* NOTE! PRCMU register */ +	AB8505_VSAFESEL2, /* NOTE! PRCMU register */ +	AB8505_VSAFESEL3, /* NOTE! PRCMU register */ +	AB8505_VAUX1SEL, +	AB8505_VAUX2SEL, +	AB8505_VRF1VAUX3SEL, +	AB8505_VAUX4REQCTRL, +	AB8505_VAUX4REGU, +	AB8505_VAUX4SEL, +	AB8505_REGUCTRLDISCH, +	AB8505_REGUCTRLDISCH2, +	AB8505_REGUCTRLDISCH3, +	AB8505_CTRLVAUX5, +	AB8505_CTRLVAUX6, +	AB8505_NUM_REGULATOR_REGISTERS, +};  /* AB9540 registers */  enum ab9540_regulator_reg { @@ -139,4 +233,111 @@ enum ab9540_regulator_reg {  	AB9540_NUM_REGULATOR_REGISTERS,  }; +/* AB8540 registers */ +enum ab8540_regulator_reg { +	AB8540_REGUREQUESTCTRL1, +	AB8540_REGUREQUESTCTRL2, +	AB8540_REGUREQUESTCTRL3, +	AB8540_REGUREQUESTCTRL4, +	AB8540_REGUSYSCLKREQ1HPVALID1, +	AB8540_REGUSYSCLKREQ1HPVALID2, +	AB8540_REGUHWHPREQ1VALID1, +	AB8540_REGUHWHPREQ1VALID2, +	AB8540_REGUHWHPREQ2VALID1, +	AB8540_REGUHWHPREQ2VALID2, +	AB8540_REGUSWHPREQVALID1, +	AB8540_REGUSWHPREQVALID2, +	AB8540_REGUSYSCLKREQVALID1, +	AB8540_REGUSYSCLKREQVALID2, +	AB8540_REGUVAUX4REQVALID, +	AB8540_REGUVAUX5REQVALID, +	AB8540_REGUVAUX6REQVALID, +	AB8540_REGUVCLKBREQVALID, +	AB8540_REGUVRF1REQVALID, +	AB8540_REGUMISC1, +	AB8540_VAUDIOSUPPLY, +	AB8540_REGUCTRL1VAMIC, +	AB8540_VHSIC, +	AB8540_VSDIO, +	AB8540_VSMPS1REGU, +	AB8540_VSMPS2REGU, +	AB8540_VSMPS3REGU, +	AB8540_VPLLVANAREGU, +	AB8540_EXTSUPPLYREGU, +	AB8540_VAUX12REGU, +	AB8540_VRF1VAUX3REGU, +	AB8540_VSMPS1SEL1, +	AB8540_VSMPS1SEL2, +	AB8540_VSMPS1SEL3, +	AB8540_VSMPS2SEL1, +	AB8540_VSMPS2SEL2, +	AB8540_VSMPS2SEL3, +	AB8540_VSMPS3SEL1, +	AB8540_VSMPS3SEL2, +	AB8540_VAUX1SEL, +	AB8540_VAUX2SEL, +	AB8540_VRF1VAUX3SEL, +	AB8540_REGUCTRL2SPARE, +	AB8540_VAUX4REQCTRL, +	AB8540_VAUX4REGU, +	AB8540_VAUX4SEL, +	AB8540_VAUX5REQCTRL, +	AB8540_VAUX5REGU, +	AB8540_VAUX5SEL, +	AB8540_VAUX6REQCTRL, +	AB8540_VAUX6REGU, +	AB8540_VAUX6SEL, +	AB8540_VCLKBREQCTRL, +	AB8540_VCLKBREGU, +	AB8540_VCLKBSEL, +	AB8540_VRF1REQCTRL, +	AB8540_REGUCTRLDISCH, +	AB8540_REGUCTRLDISCH2, +	AB8540_REGUCTRLDISCH3, +	AB8540_REGUCTRLDISCH4, +	AB8540_VSIMSYSCLKCTRL, +	AB8540_VANAVPLLSEL, +	AB8540_NUM_REGULATOR_REGISTERS, +}; + +/* AB8500 external regulators */ +struct ab8500_ext_regulator_cfg { +	bool hwreq; /* requires hw mode or high power mode */ +}; + +enum ab8500_ext_regulator_id { +	AB8500_EXT_SUPPLY1, +	AB8500_EXT_SUPPLY2, +	AB8500_EXT_SUPPLY3, +	AB8500_NUM_EXT_REGULATORS, +}; + +/* AB8500 regulator platform data */ +struct ab8500_regulator_platform_data { +	int num_reg_init; +	struct ab8500_regulator_reg_init *reg_init; +	int num_regulator; +	struct regulator_init_data *regulator; +	int num_ext_regulator; +	struct regulator_init_data *ext_regulator; +}; + +#ifdef CONFIG_REGULATOR_AB8500_DEBUG +int ab8500_regulator_debug_init(struct platform_device *pdev); +int ab8500_regulator_debug_exit(struct platform_device *pdev); +#else +static inline int ab8500_regulator_debug_init(struct platform_device *pdev) +{ +	return 0; +} +static inline int ab8500_regulator_debug_exit(struct platform_device *pdev) +{ +	return 0; +} +#endif + +/* AB8500 external regulator functions. */ +int ab8500_ext_regulator_init(struct platform_device *pdev); +void ab8500_ext_regulator_exit(struct platform_device *pdev); +  #endif diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 7bc732ce6e5..145022a8308 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h @@ -141,18 +141,18 @@ void regulator_put(struct regulator *regulator);  void devm_regulator_put(struct regulator *regulator);  /* regulator output control and status */ -int regulator_enable(struct regulator *regulator); +int __must_check regulator_enable(struct regulator *regulator);  int regulator_disable(struct regulator *regulator);  int regulator_force_disable(struct regulator *regulator);  int regulator_is_enabled(struct regulator *regulator);  int regulator_disable_deferred(struct regulator *regulator, int ms); -int regulator_bulk_get(struct device *dev, int num_consumers, -		       struct regulator_bulk_data *consumers); -int devm_regulator_bulk_get(struct device *dev, int num_consumers, -			    struct regulator_bulk_data *consumers); -int regulator_bulk_enable(int num_consumers, -			  struct regulator_bulk_data *consumers); +int __must_check regulator_bulk_get(struct device *dev, int num_consumers, +				    struct regulator_bulk_data *consumers); +int __must_check devm_regulator_bulk_get(struct device *dev, int num_consumers, +					 struct regulator_bulk_data *consumers); +int __must_check regulator_bulk_enable(int num_consumers, +				       struct regulator_bulk_data *consumers);  int regulator_bulk_disable(int num_consumers,  			   struct regulator_bulk_data *consumers);  int regulator_bulk_force_disable(int num_consumers, diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 7df93f52db0..6700cc94bdd 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -22,6 +22,7 @@  struct regmap;  struct regulator_dev;  struct regulator_init_data; +struct regulator_enable_gpio;  enum regulator_status {  	REGULATOR_STATUS_OFF, @@ -199,6 +200,8 @@ enum regulator_type {   *                output when using regulator_set_voltage_sel_regmap   * @enable_reg: Register for control when using regmap enable/disable ops   * @enable_mask: Mask for control when using regmap enable/disable ops + * @enable_is_inverted: A flag to indicate set enable_mask bits to disable + *                      when using regulator_enable_regmap and friends APIs.   * @bypass_reg: Register for control when using regmap set_bypass   * @bypass_mask: Mask for control when using regmap set_bypass   * @@ -228,6 +231,7 @@ struct regulator_desc {  	unsigned int apply_bit;  	unsigned int enable_reg;  	unsigned int enable_mask; +	bool enable_is_inverted;  	unsigned int bypass_reg;  	unsigned int bypass_mask; @@ -302,8 +306,7 @@ struct regulator_dev {  	struct dentry *debugfs; -	int ena_gpio; -	unsigned int ena_gpio_invert:1; +	struct regulator_enable_gpio *ena_pin;  	unsigned int ena_gpio_state:1;  }; @@ -329,6 +332,8 @@ int regulator_map_voltage_linear(struct regulator_dev *rdev,  				  int min_uV, int max_uV);  int regulator_map_voltage_iterate(struct regulator_dev *rdev,  				  int min_uV, int max_uV); +int regulator_map_voltage_ascend(struct regulator_dev *rdev, +				  int min_uV, int max_uV);  int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev);  int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel);  int regulator_is_enabled_regmap(struct regulator_dev *rdev); diff --git a/include/linux/regulator/max8952.h b/include/linux/regulator/max8952.h index 45e42855ad0..4dbb63a1d4a 100644 --- a/include/linux/regulator/max8952.h +++ b/include/linux/regulator/max8952.h @@ -122,13 +122,13 @@ struct max8952_platform_data {  	int gpio_vid1;  	int gpio_en; -	u8 default_mode; -	u8 dvs_mode[MAX8952_NUM_DVS_MODE]; /* MAX8952_DVS_MODEx_XXXXmV */ +	u32 default_mode; +	u32 dvs_mode[MAX8952_NUM_DVS_MODE]; /* MAX8952_DVS_MODEx_XXXXmV */ -	u8 sync_freq; -	u8 ramp_speed; +	u32 sync_freq; +	u32 ramp_speed; -	struct regulator_init_data reg_data; +	struct regulator_init_data *reg_data;  };  |