summaryrefslogtreecommitdiff
path: root/drivers/regulator/ab8500.c
AgeCommit message (Collapse)Author
2013-07-03Merge tag 'regulator-v3.11' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator Pull regulator updates from Mark Brown: "Very quiet release here, as well as the usual driver specific updates only a couple of new things: - New drivers for TI ABB LDOs and MAX77693 PMICs - Support for enabling bypass mode support via device tree" * tag 'regulator-v3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (23 commits) regulator: max77693: Remove NULL test for rmatch[i].init_data regulator: max77693: Fix trivial typo regulator: ab8500-ext: Staticize local symbols regulator: max77693: Add max77693 regualtor driver. regulator: max8973: fix a typo in documentation regulator: max8973: initial DT support regulators: max8973: fix multiple instance support regulator: of: Added a property to indicate bypass mode support regulator: ti-abb: Convert to use devm_ioremap_resource regulator: tps62360: Fix crash in i2c_driver .probe regulator: ab8500: Provide supply names for the AUX regulators regulator: ab8500-ext: Enable for Device Tree regulator: ab8500-ext: Register as a device in its own right regulator: ab8500-ext: Provide a set_voltage call-back operation regulator: ab8500: Ensure AB8500 external registers are probed first regulator: core: add regulator_get_linear_step() regulator: lp397x: use devm_kzalloc() to make cleanup paths simpler regulator: lp872x: support the device tree feature regulator: Remove unnecessary include of linux/delay.h from regulator drivers regulator: isl6271a: Use NULL instead of 0 ...
2013-06-11regulator: ab8500: Provide supply names for the AUX regulatorsLee Jones
On some platforms the AUX[1|2|3] regulators are supplied voltage by a separate regulator. For example on Snowball these are provided by the EXT3. If we list them here, we can supply voltage to them by simply listing them in as a consumer of EXT3 in the Snowball case. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonielinaro.org>
2013-06-11regulator: ab8500-ext: Register as a device in its own rightLee Jones
Some platforms don't support the AB8500 external regulators, so instead of having a list of is_<platform>() calls prior to calling ab8500_ext_regulator_init() from ab8500_regulator_probe(), we can only register as a platform device on platforms which require them. It means we also have more control over them when booting with Device Tree. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonielinaro.org>
2013-06-04ARM: ux500: Correct anamic2 typo in DT filesFabio Baltieri
Fix typo of VAMIC2 LDO regulator name in some DT-related files. This patch replaces all occurrences with the right name. Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2013-04-18regulator: ab8500: Get rid of voltage_shift field from struct ↵Axel Lin
ab8500_regulator_info The voltage_shift can be calculated from voltage_mask. Let's remove voltage_shift fied from struct ab8500_regulator_info, this change can prevent missing voltage_shift setting issue. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-18regulator: ab8500: Remove unused voltage_shift field from struct expand_registerAxel Lin
The voltage_shift field of struct expand_register is not used now, remove it. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-17regulator: ab8500: Fix set voltage for AB8540_LDO_AUX3Axel Lin
When setting voltage for AB8540_LDO_AUX3, current code only updates one of info->voltage_reg and info->expand_register registers which is wrong. To ensure we set to correct voltage, it always needs to clear or set expand_register.voltage_mask bit of expand_register. The function of the expand register bit is the following (from the user manual): 0: VAUX3 output voltage is determined by Vaux3Sel bit settings in register VldoCVaux3Sel 1: VAUX3 output voltage is set to 3.05V regardless of Vaux3Sel settings in register VldoCVaux3Sel (VldoCVaux3Sel is the register at 0x0421) So when going to 3.05V, set the expand register bit. When leaving 3.05V for another voltage, set the target voltage before clearing the expand register bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-17regulator: ab8500: Don't update lp_mode_req flag in set_mode() error pathsAxel Lin
Currently, set invalid mode setting for shared mode regulators may change sm->lp_mode_req flag. This patch ensures we don't set lp_mode_req flag to wrong status if set_mode() fails. This patch includes some clean up, and these changes makes this patch looks like code refactor. The clean up is mainly to avoid adding ugly code to handle failure paths. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-17regulator: ab8500: Don't update info->update_val if write to register failsAxel Lin
This patch ensures info->update_val is consistent with current register value. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-16regulator: ab8500: Optimize ab8540_aux3_regulator_get_voltage_selAxel Lin
We can save a register read operation in some case if read expand_register first. If info->expand_register.voltage_mask bit is set, no need to read voltage_reg. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-15regulator: ab8500: Fix voltage_shift setting for AB8540_LDO_DMICAxel Lin
The voltage_mask is 0xc0, thus we need to set voltage_shift = 6 to get correct selector in get_voltage_sel and set_voltage_sel. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-12regulator: ab8500: Fix voltage_mask for AB8505_LDO_AUDIOAxel Lin
The voltage_mask and voltage_shift settings of AB8505_LDO_AUDIO are not matched. It looks like a typo in the voltage_mask settings. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-11regulator: ab8500: Unregister ab8500-ext regulators in probe() failure pathAxel Lin
Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-11regulator: ab8500-ext: Make the return type of ab8500_ext_regulator_exit() voidAxel Lin
ab8500_ext_regulator_exit() never fails. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-08regulator: ab8500: Get rid of is_enabled from struct ab8500_regulator_infoAxel Lin
The intention of this patch is to simplify the code. Maintain the is_enabled flag is not trivial, it not only needs to set/clear the flag in disable()/enable() but also needs to set the flag in is_enable() to get initial status. The only benefit of keeping is_enabled flag is just save a register read when set_mode(). Remove is_enabled flag makes the code simpler. This patch also moves ab8500_regulator_is_enabled() close to ab8500_regulator_[en|dis]able functions. This is required to avoid a forward declaration because now we call ab8500_regulator_is_enabled() in ab8500_regulator_set_mode(). This change also makes the code better in readability by moving similar functions to one place. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-05regulator: ab8500: Remove ab8500_regulator_set_voltage_time_selAxel Lin
All users of ab8500_regulator_volt_mode_ops and ab8500_regulator_volt_ops do not set info->desc.enable_time, thus set_voltage_time_sel() always returns 0. Remove it. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Add missing volt_table setting for AB8540_LDO_TVOUTAxel Lin
This is required for regulator_list_voltage_table() to properly work. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Fix list_voltage for fixed voltage regulatorsAxel Lin
commit b080c78a4e447e9c212c207f725999d4e32c5f19 "regulator: ab8500: Update voltage handling for fixed voltage regulators" removes min_uV settings and sets volt_table for all fixed voltages, thus we can not use regulator_list_voltage_linear now. Use regulator_list_voltage_table instead. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Shuffle init functions into a more logical orderLee Jones
The ab*_match[] arrays should be moved out of the way, instead of bunched in the middle of the initialisation functions. This patch moves all initialisation code which currently resides above these arrays down to be grouped with the others. This makes the whole thing slightly easier to read. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Use regulator_list_voltage_table() to look-up voltagesLee Jones
The regulator framework offers a generic regulator_list_voltage_table() function which can directly look-up a regulator's voltage capabilities using a table provided through the desc structure. This patch ensures that information is available. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Remove the need for a 'delay' propertyLee Jones
The regulator framework now has provisions to read a regulator's start-up time via the 'enable_time' attribute. So let's remove all 'enable_time'/'delay' duplication and just stick with 'enable_time' from now on. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Set enable enable_time in regulator_descLee Jones
Allow the regulator framework to directly access the time it takes any given regulator to settle. This saves time and code because without it we would have to implement a dedication function to read the value from elsewhere. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Introduce aux5, aux6 regulators for AB8540Zhenhua HUANG
Introduce aux5, aux6 into ab8540 regulator framework. Signed-off-by: Zhenhua HUANG <zhenhua.huang@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Maxime COQUELIN <maxime.coquelin@stericsson.com> Reviewed-by: David PARIS <david.paris@stericsson.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-03regulator: ab8500: Use a struct to select the good regulator configurationLee Jones
At the probe use a structure to select the good regulator array from from ab9540, ab8505, ab8540 or ab8500 configuration. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Update vdmic, vamic[1|2] parameters for AB8540Lee Jones
Add voltage setting for vdmic; add LP mode setting for vamic1,2. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Add mode operation for v-amicLee Jones
v-amic1 and v-amic2 regulators have dedicated mode registers and share the same mode bit. This patch adds special handling for those regulators. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Add new operations for Vaux3Lee Jones
In former functions, only can set Vaux3 to 2.91V, because the highest bit of Vaux3 register is put into another register. So add new expanded functions for Vaux3's operation. Signed-off-by: zhang xiaomei <xiaomei.zhang@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Also check for AB8505 based platformsLee Jones
Ensure we initialise AB8505 external supply regulators. Signed-off-by: Alexandre Torgue <alexandre.torgue@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com> Tested-by: Xiao Mei ZHANG <xiaomei.zhang@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Add voltage selection for AUDIO and ANA on AB8505Lee Jones
Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Don't register external regulators on AB8505Rabin Vincent
ExtSupply regulators are not included on AB8505 based platforms. Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Tested-by: Marcus COOPER <marcus.xm.cooper@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-02regulator: ab8500: Supply platform specific regulator id valuesLee Jones
The regulator ID in the regulator info array should be the same values as the position of the element within the array. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Use regulator_list_voltage_table()Lee Jones
Following a recent move to regulator_list_voltage_table() for all previous abx500 related platforms this converts all recent platform updates over too. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Update voltage handling for fixed voltage regulatorsLee Jones
There are a few over-lapping methods for voltage selection operating in the AB8500 regulator driver currently. This patch removes unused, unnecessary variables from the regulator_info structures and provides voltage tables for those regulators which have fixed voltages. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Add support for the ab8540Lee Jones
To obtain full AB8540 regulator support, the AB8500 regulator driver first needs to know its register layout and their initialisation values for each. That information is provided via a couple of large data structures which we provide here. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: add support for ab8505Lee Jones
To obtain full AB8505 regulator support, the AB8500 regulator driver first needs to know its register layout and their initialisation values for each. That information is provided via a couple of large data structures which we provide here. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Correct TVOUT regulator enable timeLee Jones
Update TVOUT regulator to match specification. Was 10ms - changed to 500us. Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Bengt JONSSON <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Add support for the ab9540Lee Jones
To obtain full AB9540 regulator support, the AB8500 regulator driver first needs to know its register layout and their initialisation values for each. That information is provided via a couple of large data structures which we provide here. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-01regulator: ab8500: Prepare the driver for additional platformsLee Jones
More platforms are to be supported by the AB8500 regulator driver, so in this patch we prepare for their arrival. Instead of using the AB8500 settings blindly, we provide an infrastructure where adding a new platform is as easy as providing a couple of platform specific data structures. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-29regulator: ab8500: Update info->update_val only when successfully update ↵Axel Lin
register Don't update info->update_val if write to the register fails. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-29regulator: ab8500: Init debug from regulator driverLee Jones
The purpose of this patch is to guarantee that ab8500-debug will record the regulator registers before they are modified by the ab8500 regulator driver. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-29regulator: ab8500: Remove USB regulatorLee Jones
The USB regulator is controlled by hardware. The software support was only needed for early hardware (ED) which is no longer supported. Signed-off-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-29regulator: ab8500-ext: New driver to control external regulatorsLee Jones
The ABx500 is capable of controlling three external regulator supplies. Most commonly on and off are supported, but if an external regulator chipset or power supply supports high-power and low-power mode settings, we can control those too. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-28regulator: ab8500: Amend the update value for AB8500_LDO_INTCORE regulatorLee Jones
The issues probably originated from a typo in the initial submission. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-28regulator: ab8500: Clean out SoC registersLee Jones
Clean out initialisation that is handled by SoC. Regulator settings for Vpll (partly), Vsmps1, Vsmps2, Vsmps3 (partly), Vrf1, Varm, Vape, Vbb, Vmod are cleaned out. They should not be touched by the kernel. We also update many of the initialisation values to be more in-line with the current development efforts of ST-Ericsson internal engineers. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-27regulator: ab8500: Remove set_voltage_time_sel and delay settingAxel Lin
The data sheet does not specify time delay for voltage selection, thus remove set_voltage_time_sel and delay setting. Note, currently set_voltage_time_sel callback returns 0 due to missing delay settings. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-27regulator: ab8500: Add missing enable_time settingsAxel Lin
Base on the data provide by Bengt Jönsson, add below enable_time settings: Worst case enable time from data sheet: Vana: enable time = 140 us Vaux1/2: enable time = 200 us Vaux3: enable time = 450 us Vintcore: enable time = 750 us Vamic1/2: enable time = 500 us Vdmic: enable time = 420 us VTVout: enable time = 500 us Vaudio: enable time = 140 us Vusb: enable time = 150 us This discussion thread is available at: https://lkml.org/lkml/2013/3/26/795 Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-26regulator: ab8500: Don't update is_enabled flag in error pathsAxel Lin
This avoid setting is_enabled flag to wrong status if enable/disable fails. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-25regulator: ab8500: Use regulator_list_voltage_linear for fixed voltageAxel Lin
Both ab8500_regulator_mode_ops and ab8500_regulator_ops do not have volt_table setting, thus we can not use regulator_list_voltage_table for them. However, they have min_uV setting with n_voltages = 1, so use regulator_list_voltage_linear instead. Also remove setting set_voltage_time_sel for ab8500_regulator_mode_ops. It is used only for fixed voltage, so it does not need to implement set_voltage_time_sel. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-25regulator: ab8500: Fix build errorAxel Lin
Fix below build error: CC drivers/regulator/ab8500.o drivers/regulator/ab8500.c:500:23: error: 'ab8500_regulator_fixed_ops' undeclared here (not in a function) drivers/regulator/ab8500.c: In function 'ab8500_regulator_probe': drivers/regulator/ab8500.c:972:8: warning: assignment from incompatible pointer type [enabled by default] make[2]: *** [drivers/regulator/ab8500.o] Error 1 make[1]: *** [drivers/regulator] Error 2 make: *** [drivers] Error 2 Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-22regulator: ab8500: Separate regulator and MFD platform dataBengt Jonsson
The ab8500 MFD should not have knowledge about regulator- specific platform data like number of regulators and regulator registers. As the regulator platform data is about to grow with external regulators, this information is moved to a new structure provided by the regulator driver. Signed-off-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Yvan FILLION <yvan.fillion@stericsson.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>