regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/*
2009-12-13 23:36:49 +03:00
* twl - regulator . c - - support regulators in twl4030 / twl6030 family chips
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
*
* Copyright ( C ) 2008 David Brownell
*
* 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 .
*/
# include <linux/module.h>
2012-08-16 09:16:05 +04:00
# include <linux/string.h>
# include <linux/slab.h>
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
# include <linux/init.h>
# include <linux/err.h>
# include <linux/platform_device.h>
2012-02-28 13:39:11 +04:00
# include <linux/of.h>
# include <linux/of_device.h>
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
# include <linux/regulator/driver.h>
# include <linux/regulator/machine.h>
2012-02-28 13:39:11 +04:00
# include <linux/regulator/of_regulator.h>
2009-12-13 22:05:51 +03:00
# include <linux/i2c/twl.h>
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/*
2009-12-13 23:36:49 +03:00
* The TWL4030 / TW5030 / TPS659x0 / TWL6030 family chips include power management , a
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
* USB OTG transceiver , an RTC , ADC , PWM , and lots more . Some versions
* include an audio codec , battery charger , and more voltage regulators .
* These chips are often used in OMAP - based systems .
*
* This driver implements software - based resource control for various
* voltage regulators . This is usually augmented with state machine
* based control .
*/
struct twlreg_info {
/* start of regulator's PM_RECEIVER control register bank */
u8 base ;
2009-12-13 23:36:49 +03:00
/* twl resource ID, for resource control state machine */
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
u8 id ;
/* voltage in mV = table[VSEL]; table_len must be a power-of-two */
u8 table_len ;
const u16 * table ;
2009-12-16 15:49:52 +03:00
/* State REMAP default configuration */
u8 remap ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/* chip constraints on regulator behavior */
u16 min_mV ;
2010-04-22 12:48:32 +04:00
u16 max_mV ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-05-23 00:21:23 +04:00
u8 flags ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/* used by regulator core */
struct regulator_desc desc ;
2011-05-23 00:21:23 +04:00
/* chip specific features */
unsigned long features ;
2012-02-16 14:27:52 +04:00
/*
* optional override functions for voltage set / get
* these are currently only used for SMPS regulators
*/
int ( * get_voltage ) ( void * data ) ;
int ( * set_voltage ) ( void * data , int target_uV ) ;
/* data passed from board for external get/set voltage */
void * data ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
/* LDO control registers ... offset is from the base of its register bank.
* The first three registers of all power resource banks help hardware to
* manage the various resource groups .
*/
2009-12-14 00:19:23 +03:00
/* Common offset in TWL4030/6030 */
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
# define VREG_GRP 0
2009-12-14 00:19:23 +03:00
/* TWL4030 register offsets */
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
# define VREG_TYPE 1
# define VREG_REMAP 2
# define VREG_DEDICATED 3 /* LDO control */
2011-11-28 18:53:19 +04:00
# define VREG_VOLTAGE_SMPS_4030 9
2009-12-14 00:19:23 +03:00
/* TWL6030 register offsets */
# define VREG_TRANS 1
# define VREG_STATE 2
# define VREG_VOLTAGE 3
2011-05-23 00:21:23 +04:00
# define VREG_VOLTAGE_SMPS 4
2009-12-14 00:19:23 +03:00
/* TWL6030 Misc register offsets */
# define VREG_BC_ALL 1
# define VREG_BC_REF 2
# define VREG_BC_PROC 3
# define VREG_BC_CLK_RST 4
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:42 +04:00
/* TWL6030 LDO register values for CFG_STATE */
# define TWL6030_CFG_STATE_OFF 0x00
# define TWL6030_CFG_STATE_ON 0x01
2011-04-01 08:52:45 +04:00
# define TWL6030_CFG_STATE_OFF2 0x02
# define TWL6030_CFG_STATE_SLEEP 0x03
2011-04-01 08:52:42 +04:00
# define TWL6030_CFG_STATE_GRP_SHIFT 5
2011-04-01 08:52:44 +04:00
# define TWL6030_CFG_STATE_APP_SHIFT 2
# define TWL6030_CFG_STATE_APP_MASK (0x03 << TWL6030_CFG_STATE_APP_SHIFT)
# define TWL6030_CFG_STATE_APP(v) (((v) & TWL6030_CFG_STATE_APP_MASK) >>\
TWL6030_CFG_STATE_APP_SHIFT )
2011-04-01 08:52:42 +04:00
2011-05-23 00:21:23 +04:00
/* Flags for SMPS Voltage reading */
# define SMPS_OFFSET_EN BIT(0)
# define SMPS_EXTENDED_EN BIT(1)
2013-06-19 16:24:02 +04:00
/* twl6032 SMPS EPROM values */
2011-05-23 00:21:23 +04:00
# define TWL6030_SMPS_OFFSET 0xB0
# define TWL6030_SMPS_MULT 0xB3
# define SMPS_MULTOFFSET_SMPS4 BIT(0)
# define SMPS_MULTOFFSET_VIO BIT(1)
# define SMPS_MULTOFFSET_SMPS3 BIT(6)
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
static inline int
2009-12-14 00:19:23 +03:00
twlreg_read ( struct twlreg_info * info , unsigned slave_subgp , unsigned offset )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
u8 value ;
int status ;
2009-12-14 00:19:23 +03:00
status = twl_i2c_read_u8 ( slave_subgp ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
& value , info - > base + offset ) ;
return ( status < 0 ) ? status : value ;
}
static inline int
2009-12-14 00:19:23 +03:00
twlreg_write ( struct twlreg_info * info , unsigned slave_subgp , unsigned offset ,
u8 value )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-14 00:19:23 +03:00
return twl_i2c_write_u8 ( slave_subgp ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
value , info - > base + offset ) ;
}
/*----------------------------------------------------------------------*/
/* generic power resource operations, which work on all regulators */
2009-12-13 23:36:49 +03:00
static int twlreg_grp ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-14 00:19:23 +03:00
return twlreg_read ( rdev_get_drvdata ( rdev ) , TWL_MODULE_PM_RECEIVER ,
VREG_GRP ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
/*
* Enable / disable regulators by joining / leaving the P1 ( processor ) group .
* We assume nobody else is updating the DEV_GRP registers .
*/
2009-12-14 00:19:23 +03:00
/* definition for 4030 family */
# define P3_GRP_4030 BIT(7) /* "peripherals" */
# define P2_GRP_4030 BIT(6) /* secondary processor, modem, etc */
# define P1_GRP_4030 BIT(5) /* CPU/Linux */
/* definition for 6030 family */
# define P3_GRP_6030 BIT(2) /* secondary processor, modem, etc */
# define P2_GRP_6030 BIT(1) /* "peripherals" */
# define P1_GRP_6030 BIT(0) /* CPU/Linux */
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:44 +04:00
static int twl4030reg_is_enabled ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-13 23:36:49 +03:00
int state = twlreg_grp ( rdev ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( state < 0 )
return state ;
2011-04-01 08:52:44 +04:00
return state & P1_GRP_4030 ;
}
static int twl6030reg_is_enabled ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2011-05-23 00:21:23 +04:00
int grp = 0 , val ;
2011-04-01 08:52:44 +04:00
2013-06-19 16:24:02 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6032_SUBCLASS ) ) ) {
2012-04-11 07:07:17 +04:00
grp = twlreg_grp ( rdev ) ;
if ( grp < 0 )
return grp ;
2011-05-23 00:21:23 +04:00
grp & = P1_GRP_6030 ;
2012-04-11 07:07:17 +04:00
} else {
2011-05-23 00:21:23 +04:00
grp = 1 ;
2012-04-11 07:07:17 +04:00
}
2011-04-01 08:52:44 +04:00
val = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_STATE ) ;
val = TWL6030_CFG_STATE_APP ( val ) ;
return grp & & ( val = = TWL6030_CFG_STATE_ON ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2011-05-20 17:33:51 +04:00
static int twl4030reg_enable ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int grp ;
2009-12-16 15:55:26 +03:00
int ret ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2012-04-11 07:07:17 +04:00
grp = twlreg_grp ( rdev ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( grp < 0 )
return grp ;
2011-05-20 17:33:51 +04:00
grp | = P1_GRP_4030 ;
2009-12-14 00:19:23 +03:00
2009-12-16 15:55:26 +03:00
ret = twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_GRP , grp ) ;
2011-05-20 17:33:51 +04:00
return ret ;
}
static int twl6030reg_enable ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2011-05-23 00:21:23 +04:00
int grp = 0 ;
2011-05-20 17:33:51 +04:00
int ret ;
2013-06-19 16:24:02 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6032_SUBCLASS ) ) )
2012-04-11 07:07:17 +04:00
grp = twlreg_grp ( rdev ) ;
2011-05-20 17:33:51 +04:00
if ( grp < 0 )
return grp ;
ret = twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_STATE ,
grp < < TWL6030_CFG_STATE_GRP_SHIFT |
TWL6030_CFG_STATE_ON ) ;
2012-04-11 07:05:57 +04:00
return ret ;
}
2011-04-01 08:52:42 +04:00
2011-05-20 17:33:52 +04:00
static int twl4030reg_disable ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int grp ;
2011-04-01 08:52:42 +04:00
int ret ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2012-04-11 07:07:17 +04:00
grp = twlreg_grp ( rdev ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( grp < 0 )
return grp ;
2011-05-20 17:33:52 +04:00
grp & = ~ ( P1_GRP_4030 | P2_GRP_4030 | P3_GRP_4030 ) ;
2009-12-14 00:19:23 +03:00
2011-04-01 08:52:42 +04:00
ret = twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_GRP , grp ) ;
2011-05-20 17:33:52 +04:00
return ret ;
}
static int twl6030reg_disable ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int grp = 0 ;
int ret ;
2013-06-19 16:24:02 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6032_SUBCLASS ) ) )
2011-05-23 00:21:23 +04:00
grp = P1_GRP_6030 | P2_GRP_6030 | P3_GRP_6030 ;
2011-05-20 17:33:52 +04:00
/* For 6030, set the off state for all grps enabled */
ret = twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_STATE ,
( grp ) < < TWL6030_CFG_STATE_GRP_SHIFT |
TWL6030_CFG_STATE_OFF ) ;
2011-04-01 08:52:42 +04:00
return ret ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2011-04-01 08:52:45 +04:00
static int twl4030reg_get_status ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-13 23:36:49 +03:00
int state = twlreg_grp ( rdev ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( state < 0 )
return state ;
state & = 0x0f ;
/* assume state != WARM_RESET; we'd not be running... */
if ( ! state )
return REGULATOR_STATUS_OFF ;
return ( state & BIT ( 3 ) )
? REGULATOR_STATUS_NORMAL
: REGULATOR_STATUS_STANDBY ;
}
2011-04-01 08:52:45 +04:00
static int twl6030reg_get_status ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int val ;
val = twlreg_grp ( rdev ) ;
if ( val < 0 )
return val ;
val = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_STATE ) ;
switch ( TWL6030_CFG_STATE_APP ( val ) ) {
case TWL6030_CFG_STATE_ON :
return REGULATOR_STATUS_NORMAL ;
case TWL6030_CFG_STATE_SLEEP :
return REGULATOR_STATUS_STANDBY ;
case TWL6030_CFG_STATE_OFF :
case TWL6030_CFG_STATE_OFF2 :
default :
break ;
}
return REGULATOR_STATUS_OFF ;
}
2011-04-01 08:52:46 +04:00
static int twl4030reg_set_mode ( struct regulator_dev * rdev , unsigned mode )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
unsigned message ;
int status ;
/* We can only set the mode through state machine commands... */
switch ( mode ) {
case REGULATOR_MODE_NORMAL :
message = MSG_SINGULAR ( DEV_GRP_P1 , info - > id , RES_STATE_ACTIVE ) ;
break ;
case REGULATOR_MODE_STANDBY :
message = MSG_SINGULAR ( DEV_GRP_P1 , info - > id , RES_STATE_SLEEP ) ;
break ;
default :
return - EINVAL ;
}
/* Ensure the resource is associated with some group */
2009-12-13 23:36:49 +03:00
status = twlreg_grp ( rdev ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( status < 0 )
return status ;
2009-12-14 00:19:23 +03:00
if ( ! ( status & ( P3_GRP_4030 | P2_GRP_4030 | P1_GRP_4030 ) ) )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
return - EACCES ;
2009-12-13 23:36:49 +03:00
status = twl_i2c_write_u8 ( TWL_MODULE_PM_MASTER ,
2010-10-22 12:38:22 +04:00
message > > 8 , TWL4030_PM_MASTER_PB_WORD_MSB ) ;
if ( status < 0 )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
return status ;
2009-12-13 23:36:49 +03:00
return twl_i2c_write_u8 ( TWL_MODULE_PM_MASTER ,
2010-10-22 12:38:22 +04:00
message & 0xff , TWL4030_PM_MASTER_PB_WORD_LSB ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2011-04-01 08:52:46 +04:00
static int twl6030reg_set_mode ( struct regulator_dev * rdev , unsigned mode )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2011-05-23 00:21:23 +04:00
int grp = 0 ;
2011-04-01 08:52:46 +04:00
int val ;
2013-06-19 16:24:02 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6032_SUBCLASS ) ) )
2012-04-11 07:07:17 +04:00
grp = twlreg_grp ( rdev ) ;
2011-04-01 08:52:46 +04:00
if ( grp < 0 )
return grp ;
/* Compose the state register settings */
val = grp < < TWL6030_CFG_STATE_GRP_SHIFT ;
/* We can only set the mode through state machine commands... */
switch ( mode ) {
case REGULATOR_MODE_NORMAL :
val | = TWL6030_CFG_STATE_ON ;
break ;
case REGULATOR_MODE_STANDBY :
val | = TWL6030_CFG_STATE_SLEEP ;
break ;
default :
return - EINVAL ;
}
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_STATE , val ) ;
}
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/*----------------------------------------------------------------------*/
/*
* Support for adjustable - voltage LDOs uses a four bit ( or less ) voltage
* select field in its control register . We use tables indexed by VSEL
* to record voltages in milliVolts . ( Accuracy is about three percent . )
*
* Note that VSEL values for VAUX2 changed in twl5030 and newer silicon ;
* currently handled by listing two slightly different VAUX2 regulators ,
* only one of which will be configured .
*
* VSEL values documented as " TI cannot support these values " are flagged
* in these tables as UNSUP ( ) values ; we normally won ' t assign them .
2009-03-06 15:51:30 +03:00
*
* VAUX3 at 3 V is incorrectly listed in some TI manuals as unsupported .
* TI are revising the twl5030 / tps659x0 specs to support that 3.0 V setting .
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
*/
# define UNSUP_MASK 0x8000
# define UNSUP(x) (UNSUP_MASK | (x))
2012-05-08 23:44:00 +04:00
# define IS_UNSUP(info, x) \
( ( UNSUP_MASK & ( x ) ) & & \
! ( ( info ) - > features & TWL4030_ALLOW_UNSUPPORTED ) )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
# define LDO_MV(x) (~UNSUP_MASK & (x))
static const u16 VAUX1_VSEL_table [ ] = {
UNSUP ( 1500 ) , UNSUP ( 1800 ) , 2500 , 2800 ,
3000 , 3000 , 3000 , 3000 ,
} ;
static const u16 VAUX2_4030_VSEL_table [ ] = {
UNSUP ( 1000 ) , UNSUP ( 1000 ) , UNSUP ( 1200 ) , 1300 ,
1500 , 1800 , UNSUP ( 1850 ) , 2500 ,
UNSUP ( 2600 ) , 2800 , UNSUP ( 2850 ) , UNSUP ( 3000 ) ,
UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) ,
} ;
static const u16 VAUX2_VSEL_table [ ] = {
1700 , 1700 , 1900 , 1300 ,
1500 , 1800 , 2000 , 2500 ,
2100 , 2800 , 2200 , 2300 ,
2400 , 2400 , 2400 , 2400 ,
} ;
static const u16 VAUX3_VSEL_table [ ] = {
1500 , 1800 , 2500 , 2800 ,
2009-03-06 15:51:30 +03:00
3000 , 3000 , 3000 , 3000 ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
static const u16 VAUX4_VSEL_table [ ] = {
700 , 1000 , 1200 , UNSUP ( 1300 ) ,
1500 , 1800 , UNSUP ( 1850 ) , 2500 ,
2009-03-10 22:51:15 +03:00
UNSUP ( 2600 ) , 2800 , UNSUP ( 2850 ) , UNSUP ( 3000 ) ,
UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
static const u16 VMMC1_VSEL_table [ ] = {
1850 , 2850 , 3000 , 3150 ,
} ;
static const u16 VMMC2_VSEL_table [ ] = {
UNSUP ( 1000 ) , UNSUP ( 1000 ) , UNSUP ( 1200 ) , UNSUP ( 1300 ) ,
UNSUP ( 1500 ) , UNSUP ( 1800 ) , 1850 , UNSUP ( 2500 ) ,
2600 , 2800 , 2850 , 3000 ,
3150 , 3150 , 3150 , 3150 ,
} ;
static const u16 VPLL1_VSEL_table [ ] = {
1000 , 1200 , 1300 , 1800 ,
UNSUP ( 2800 ) , UNSUP ( 3000 ) , UNSUP ( 3000 ) , UNSUP ( 3000 ) ,
} ;
static const u16 VPLL2_VSEL_table [ ] = {
700 , 1000 , 1200 , 1300 ,
UNSUP ( 1500 ) , 1800 , UNSUP ( 1850 ) , UNSUP ( 2500 ) ,
UNSUP ( 2600 ) , UNSUP ( 2800 ) , UNSUP ( 2850 ) , UNSUP ( 3000 ) ,
UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) , UNSUP ( 3150 ) ,
} ;
static const u16 VSIM_VSEL_table [ ] = {
UNSUP ( 1000 ) , UNSUP ( 1200 ) , UNSUP ( 1300 ) , 1800 ,
2800 , 3000 , 3000 , 3000 ,
} ;
static const u16 VDAC_VSEL_table [ ] = {
1200 , 1300 , 1800 , 1800 ,
} ;
2009-12-16 16:27:55 +03:00
static const u16 VIO_VSEL_table [ ] = {
1800 , 1850 ,
} ;
static const u16 VINTANA2_VSEL_table [ ] = {
2500 , 2750 ,
} ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2010-04-22 12:48:32 +04:00
static int twl4030ldo_list_voltage ( struct regulator_dev * rdev , unsigned index )
2009-02-26 22:50:14 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int mV = info - > table [ index ] ;
2012-05-08 23:44:00 +04:00
return IS_UNSUP ( info , mV ) ? 0 : ( LDO_MV ( mV ) * 1000 ) ;
2009-02-26 22:50:14 +03:00
}
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
static int
2012-03-26 05:30:06 +04:00
twl4030ldo_set_voltage_sel ( struct regulator_dev * rdev , unsigned selector )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2012-03-26 05:30:06 +04:00
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE ,
selector ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2013-02-16 06:09:54 +04:00
static int twl4030ldo_get_voltage_sel ( struct regulator_dev * rdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2013-02-16 06:09:54 +04:00
int vsel = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( vsel < 0 )
return vsel ;
vsel & = info - > table_len - 1 ;
2013-02-16 06:09:54 +04:00
return vsel ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2010-04-22 12:48:32 +04:00
static struct regulator_ops twl4030ldo_ops = {
. list_voltage = twl4030ldo_list_voltage ,
2009-02-26 22:50:14 +03:00
2012-03-26 05:30:06 +04:00
. set_voltage_sel = twl4030ldo_set_voltage_sel ,
2013-02-16 06:09:54 +04:00
. get_voltage_sel = twl4030ldo_get_voltage_sel ,
2010-04-22 12:48:32 +04:00
2011-05-20 17:33:51 +04:00
. enable = twl4030reg_enable ,
2011-05-20 17:33:52 +04:00
. disable = twl4030reg_disable ,
2011-04-01 08:52:44 +04:00
. is_enabled = twl4030reg_is_enabled ,
2010-04-22 12:48:32 +04:00
2011-04-01 08:52:46 +04:00
. set_mode = twl4030reg_set_mode ,
2010-04-22 12:48:32 +04:00
2011-04-01 08:52:45 +04:00
. get_status = twl4030reg_get_status ,
2010-04-22 12:48:32 +04:00
} ;
2011-11-28 18:53:19 +04:00
static int
twl4030smps_set_voltage ( struct regulator_dev * rdev , int min_uV , int max_uV ,
unsigned * selector )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel = DIV_ROUND_UP ( min_uV - 600000 , 12500 ) ;
2012-02-16 14:27:52 +04:00
if ( info - > set_voltage ) {
return info - > set_voltage ( info - > data , min_uV ) ;
} else {
twlreg_write ( info , TWL_MODULE_PM_RECEIVER ,
VREG_VOLTAGE_SMPS_4030 , vsel ) ;
}
2011-11-28 18:53:19 +04:00
return 0 ;
}
static int twl4030smps_get_voltage ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2012-02-16 14:27:52 +04:00
int vsel ;
if ( info - > get_voltage )
return info - > get_voltage ( info - > data ) ;
vsel = twlreg_read ( info , TWL_MODULE_PM_RECEIVER ,
2011-11-28 18:53:19 +04:00
VREG_VOLTAGE_SMPS_4030 ) ;
return vsel * 12500 + 600000 ;
}
static struct regulator_ops twl4030smps_ops = {
. set_voltage = twl4030smps_set_voltage ,
. get_voltage = twl4030smps_get_voltage ,
} ;
2012-02-28 13:39:10 +04:00
static int twl6030coresmps_set_voltage ( struct regulator_dev * rdev , int min_uV ,
int max_uV , unsigned * selector )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
if ( info - > set_voltage )
return info - > set_voltage ( info - > data , min_uV ) ;
return - ENODEV ;
}
static int twl6030coresmps_get_voltage ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
if ( info - > get_voltage )
return info - > get_voltage ( info - > data ) ;
return - ENODEV ;
}
static struct regulator_ops twl6030coresmps_ops = {
. set_voltage = twl6030coresmps_set_voltage ,
. get_voltage = twl6030coresmps_get_voltage ,
} ;
2012-07-16 14:31:10 +04:00
static int twl6030ldo_list_voltage ( struct regulator_dev * rdev , unsigned sel )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
switch ( sel ) {
case 0 :
return 0 ;
case 1 . . . 24 :
/* Linear mapping from 00000001 to 00011000:
* Absolute voltage value = 1.0 V + 0.1 V × ( sel – 00000001 )
*/
return ( info - > min_mV + 100 * ( sel - 1 ) ) * 1000 ;
case 25 . . . 30 :
return - EINVAL ;
case 31 :
return 2750000 ;
default :
return - EINVAL ;
}
}
2010-04-22 12:48:32 +04:00
static int
2012-07-09 07:26:28 +04:00
twl6030ldo_set_voltage_sel ( struct regulator_dev * rdev , unsigned selector )
2010-04-22 12:48:32 +04:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2012-07-09 07:26:28 +04:00
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE ,
selector ) ;
2010-04-22 12:48:32 +04:00
}
2012-07-09 07:26:28 +04:00
static int twl6030ldo_get_voltage_sel ( struct regulator_dev * rdev )
2010-04-22 12:48:32 +04:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2012-07-09 07:22:31 +04:00
int vsel = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE ) ;
2010-04-22 12:48:32 +04:00
2012-07-09 07:26:28 +04:00
return vsel ;
2010-04-22 12:48:32 +04:00
}
static struct regulator_ops twl6030ldo_ops = {
2012-07-16 14:31:10 +04:00
. list_voltage = twl6030ldo_list_voltage ,
2010-04-22 12:48:32 +04:00
2012-07-09 07:26:28 +04:00
. set_voltage_sel = twl6030ldo_set_voltage_sel ,
. get_voltage_sel = twl6030ldo_get_voltage_sel ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-05-20 17:33:51 +04:00
. enable = twl6030reg_enable ,
2011-05-20 17:33:52 +04:00
. disable = twl6030reg_disable ,
2011-04-01 08:52:44 +04:00
. is_enabled = twl6030reg_is_enabled ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:46 +04:00
. set_mode = twl6030reg_set_mode ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:45 +04:00
. get_status = twl6030reg_get_status ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
/*----------------------------------------------------------------------*/
2011-04-01 08:52:44 +04:00
static struct regulator_ops twl4030fixed_ops = {
2012-12-22 09:31:19 +04:00
. list_voltage = regulator_list_voltage_linear ,
2011-04-01 08:52:44 +04:00
2011-05-20 17:33:51 +04:00
. enable = twl4030reg_enable ,
2011-05-20 17:33:52 +04:00
. disable = twl4030reg_disable ,
2011-04-01 08:52:44 +04:00
. is_enabled = twl4030reg_is_enabled ,
2011-04-01 08:52:46 +04:00
. set_mode = twl4030reg_set_mode ,
2011-04-01 08:52:44 +04:00
2011-04-01 08:52:45 +04:00
. get_status = twl4030reg_get_status ,
2011-04-01 08:52:44 +04:00
} ;
static struct regulator_ops twl6030fixed_ops = {
2012-12-22 09:31:19 +04:00
. list_voltage = regulator_list_voltage_linear ,
2009-02-26 22:50:14 +03:00
2011-05-20 17:33:51 +04:00
. enable = twl6030reg_enable ,
2011-05-20 17:33:52 +04:00
. disable = twl6030reg_disable ,
2011-04-01 08:52:44 +04:00
. is_enabled = twl6030reg_is_enabled ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:46 +04:00
. set_mode = twl6030reg_set_mode ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-04-01 08:52:45 +04:00
. get_status = twl6030reg_get_status ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
2011-05-23 00:21:23 +04:00
/*
* SMPS status and control
*/
static int twl6030smps_list_voltage ( struct regulator_dev * rdev , unsigned index )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int voltage = 0 ;
switch ( info - > flags ) {
case SMPS_OFFSET_EN :
voltage = 100000 ;
/* fall through */
case 0 :
switch ( index ) {
case 0 :
voltage = 0 ;
break ;
case 58 :
voltage = 1350 * 1000 ;
break ;
case 59 :
voltage = 1500 * 1000 ;
break ;
case 60 :
voltage = 1800 * 1000 ;
break ;
case 61 :
voltage = 1900 * 1000 ;
break ;
case 62 :
voltage = 2100 * 1000 ;
break ;
default :
voltage + = ( 600000 + ( 12500 * ( index - 1 ) ) ) ;
}
break ;
case SMPS_EXTENDED_EN :
switch ( index ) {
case 0 :
voltage = 0 ;
break ;
case 58 :
voltage = 2084 * 1000 ;
break ;
case 59 :
voltage = 2315 * 1000 ;
break ;
case 60 :
voltage = 2778 * 1000 ;
break ;
case 61 :
voltage = 2932 * 1000 ;
break ;
case 62 :
voltage = 3241 * 1000 ;
break ;
default :
voltage = ( 1852000 + ( 38600 * ( index - 1 ) ) ) ;
}
break ;
case SMPS_OFFSET_EN | SMPS_EXTENDED_EN :
switch ( index ) {
case 0 :
voltage = 0 ;
break ;
case 58 :
voltage = 4167 * 1000 ;
break ;
case 59 :
voltage = 2315 * 1000 ;
break ;
case 60 :
voltage = 2778 * 1000 ;
break ;
case 61 :
voltage = 2932 * 1000 ;
break ;
case 62 :
voltage = 3241 * 1000 ;
break ;
default :
voltage = ( 2161000 + ( 38600 * ( index - 1 ) ) ) ;
}
break ;
}
return voltage ;
}
2012-07-14 09:41:23 +04:00
static int twl6030smps_map_voltage ( struct regulator_dev * rdev , int min_uV ,
int max_uV )
2011-05-23 00:21:23 +04:00
{
2012-07-14 09:41:23 +04:00
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel = 0 ;
2011-05-23 00:21:23 +04:00
switch ( info - > flags ) {
case 0 :
if ( min_uV = = 0 )
vsel = 0 ;
2012-02-03 11:24:38 +04:00
else if ( ( min_uV > = 600000 ) & & ( min_uV < = 1300000 ) ) {
2012-04-09 19:35:10 +04:00
vsel = DIV_ROUND_UP ( min_uV - 600000 , 12500 ) ;
2012-04-10 19:07:52 +04:00
vsel + + ;
2011-05-23 00:21:23 +04:00
}
/* Values 1..57 for vsel are linear and can be calculated
* values 58. .62 are non linear .
*/
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1900000 ) & & ( min_uV < = 2100000 ) )
2011-05-23 00:21:23 +04:00
vsel = 62 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1800000 ) & & ( min_uV < = 1900000 ) )
2011-05-23 00:21:23 +04:00
vsel = 61 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1500000 ) & & ( min_uV < = 1800000 ) )
2011-05-23 00:21:23 +04:00
vsel = 60 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1350000 ) & & ( min_uV < = 1500000 ) )
2011-05-23 00:21:23 +04:00
vsel = 59 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1300000 ) & & ( min_uV < = 1350000 ) )
2011-05-23 00:21:23 +04:00
vsel = 58 ;
else
return - EINVAL ;
break ;
case SMPS_OFFSET_EN :
if ( min_uV = = 0 )
vsel = 0 ;
2012-02-03 11:24:38 +04:00
else if ( ( min_uV > = 700000 ) & & ( min_uV < = 1420000 ) ) {
2012-04-09 19:35:10 +04:00
vsel = DIV_ROUND_UP ( min_uV - 700000 , 12500 ) ;
2012-04-10 19:07:52 +04:00
vsel + + ;
2011-05-23 00:21:23 +04:00
}
/* Values 1..57 for vsel are linear and can be calculated
* values 58. .62 are non linear .
*/
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1900000 ) & & ( min_uV < = 2100000 ) )
2011-05-23 00:21:23 +04:00
vsel = 62 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1800000 ) & & ( min_uV < = 1900000 ) )
2011-05-23 00:21:23 +04:00
vsel = 61 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1350000 ) & & ( min_uV < = 1800000 ) )
2011-05-23 00:21:23 +04:00
vsel = 60 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1350000 ) & & ( min_uV < = 1500000 ) )
2011-05-23 00:21:23 +04:00
vsel = 59 ;
2012-07-14 09:37:13 +04:00
else if ( ( min_uV > 1300000 ) & & ( min_uV < = 1350000 ) )
2011-05-23 00:21:23 +04:00
vsel = 58 ;
else
return - EINVAL ;
break ;
case SMPS_EXTENDED_EN :
2012-04-10 19:07:52 +04:00
if ( min_uV = = 0 ) {
2011-05-23 00:21:23 +04:00
vsel = 0 ;
2012-04-10 19:07:52 +04:00
} else if ( ( min_uV > = 1852000 ) & & ( max_uV < = 4013600 ) ) {
2012-04-09 19:35:10 +04:00
vsel = DIV_ROUND_UP ( min_uV - 1852000 , 38600 ) ;
2012-04-10 19:07:52 +04:00
vsel + + ;
}
2011-05-23 00:21:23 +04:00
break ;
case SMPS_OFFSET_EN | SMPS_EXTENDED_EN :
2012-04-10 19:07:52 +04:00
if ( min_uV = = 0 ) {
2011-05-23 00:21:23 +04:00
vsel = 0 ;
2012-07-14 09:37:13 +04:00
} else if ( ( min_uV > = 2161000 ) & & ( min_uV < = 4321000 ) ) {
2012-04-09 19:35:10 +04:00
vsel = DIV_ROUND_UP ( min_uV - 2161000 , 38600 ) ;
2012-04-10 19:07:52 +04:00
vsel + + ;
}
2011-05-23 00:21:23 +04:00
break ;
}
2012-07-14 09:41:23 +04:00
return vsel ;
}
2012-07-14 09:37:13 +04:00
2012-07-14 09:41:23 +04:00
static int twl6030smps_set_voltage_sel ( struct regulator_dev * rdev ,
unsigned int selector )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
2011-05-23 00:21:23 +04:00
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE_SMPS ,
2012-07-14 09:41:23 +04:00
selector ) ;
2011-05-23 00:21:23 +04:00
}
static int twl6030smps_get_voltage_sel ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
return twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE_SMPS ) ;
}
static struct regulator_ops twlsmps_ops = {
. list_voltage = twl6030smps_list_voltage ,
2012-07-14 09:41:23 +04:00
. map_voltage = twl6030smps_map_voltage ,
2011-05-23 00:21:23 +04:00
2012-07-14 09:41:23 +04:00
. set_voltage_sel = twl6030smps_set_voltage_sel ,
2011-05-23 00:21:23 +04:00
. get_voltage_sel = twl6030smps_get_voltage_sel ,
. enable = twl6030reg_enable ,
. disable = twl6030reg_disable ,
. is_enabled = twl6030reg_is_enabled ,
. set_mode = twl6030reg_set_mode ,
. get_status = twl6030reg_get_status ,
} ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/*----------------------------------------------------------------------*/
2009-12-16 15:49:52 +03:00
# define TWL4030_FIXED_LDO(label, offset, mVolts, num, turnon_delay, \
remap_conf ) \
TWL_FIXED_LDO ( label , offset , mVolts , num , turnon_delay , \
2011-04-01 08:52:44 +04:00
remap_conf , TWL4030 , twl4030fixed_ops )
2011-07-10 06:02:21 +04:00
# define TWL6030_FIXED_LDO(label, offset, mVolts, turnon_delay) \
TWL_FIXED_LDO ( label , offset , mVolts , 0x0 , turnon_delay , \
2011-04-01 08:52:44 +04:00
0x0 , TWL6030 , twl6030fixed_ops )
2009-12-16 15:49:52 +03:00
2012-02-28 13:39:11 +04:00
# define TWL4030_ADJUSTABLE_LDO(label, offset, num, turnon_delay, remap_conf) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWL4030_INFO_ # # label = { \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. base = offset , \
. id = num , \
. table_len = ARRAY_SIZE ( label # # _VSEL_table ) , \
. table = label # # _VSEL_table , \
2009-12-16 15:49:52 +03:00
. remap = remap_conf , \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. desc = { \
. name = # label , \
2010-04-22 12:48:32 +04:00
. id = TWL4030_REG_ # # label , \
2009-02-26 22:50:14 +03:00
. n_voltages = ARRAY_SIZE ( label # # _VSEL_table ) , \
2010-04-22 12:48:32 +04:00
. ops = & twl4030ldo_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
2012-07-04 06:46:34 +04:00
. enable_time = turnon_delay , \
2010-04-22 12:48:32 +04:00
} , \
}
2011-11-28 18:53:19 +04:00
# define TWL4030_ADJUSTABLE_SMPS(label, offset, num, turnon_delay, remap_conf) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWL4030_INFO_ # # label = { \
2011-11-28 18:53:19 +04:00
. base = offset , \
. id = num , \
. remap = remap_conf , \
. desc = { \
. name = # label , \
. id = TWL4030_REG_ # # label , \
. ops = & twl4030smps_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
2012-07-04 06:46:34 +04:00
. enable_time = turnon_delay , \
2011-11-28 18:53:19 +04:00
} , \
}
2012-02-28 13:39:11 +04:00
# define TWL6030_ADJUSTABLE_SMPS(label) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWL6030_INFO_ # # label = { \
2012-02-28 13:39:10 +04:00
. desc = { \
. name = # label , \
. id = TWL6030_REG_ # # label , \
. ops = & twl6030coresmps_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
2012-02-28 13:39:11 +04:00
# define TWL6030_ADJUSTABLE_LDO(label, offset, min_mVolts, max_mVolts) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWL6030_INFO_ # # label = { \
2010-04-22 12:48:32 +04:00
. base = offset , \
. min_mV = min_mVolts , \
. max_mV = max_mVolts , \
. desc = { \
. name = # label , \
. id = TWL6030_REG_ # # label , \
2012-07-16 14:31:10 +04:00
. n_voltages = 32 , \
2010-04-22 12:48:32 +04:00
. ops = & twl6030ldo_ops , \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
2013-06-19 16:24:02 +04:00
# define TWL6032_ADJUSTABLE_LDO(label, offset, min_mVolts, max_mVolts) \
static const struct twlreg_info TWL6032_INFO_ # # label = { \
2011-05-23 00:21:23 +04:00
. base = offset , \
. min_mV = min_mVolts , \
. max_mV = max_mVolts , \
. desc = { \
. name = # label , \
2013-06-19 16:24:02 +04:00
. id = TWL6032_REG_ # # label , \
2012-07-16 14:31:10 +04:00
. n_voltages = 32 , \
2011-05-23 00:21:23 +04:00
. ops = & twl6030ldo_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
2010-04-22 12:48:32 +04:00
2009-12-16 15:49:52 +03:00
# define TWL_FIXED_LDO(label, offset, mVolts, num, turnon_delay, remap_conf, \
2012-02-28 13:39:11 +04:00
family , operations ) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWLFIXED_INFO_ # # label = { \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. base = offset , \
. id = num , \
. min_mV = mVolts , \
2009-12-16 15:49:52 +03:00
. remap = remap_conf , \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. desc = { \
. name = # label , \
2009-12-13 23:36:49 +03:00
. id = family # # _REG_ # # label , \
2009-02-26 22:50:14 +03:00
. n_voltages = 1 , \
2011-04-01 08:52:44 +04:00
. ops = & operations , \
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
2012-12-22 09:31:19 +04:00
. min_uV = mVolts * 1000 , \
2012-07-04 06:46:34 +04:00
. enable_time = turnon_delay , \
2011-02-10 16:14:50 +03:00
} , \
}
2013-06-19 16:24:02 +04:00
# define TWL6032_ADJUSTABLE_SMPS(label, offset) \
2012-08-14 16:41:50 +04:00
static const struct twlreg_info TWLSMPS_INFO_ # # label = { \
2011-05-23 00:21:23 +04:00
. base = offset , \
. min_mV = 600 , \
. max_mV = 2100 , \
. desc = { \
. name = # label , \
2013-06-19 16:24:02 +04:00
. id = TWL6032_REG_ # # label , \
2011-05-23 00:21:23 +04:00
. n_voltages = 63 , \
. ops = & twlsmps_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/*
* We list regulators here if systems need some level of
* software control over them after boot .
*/
2012-02-28 13:39:11 +04:00
TWL4030_ADJUSTABLE_LDO ( VAUX1 , 0x17 , 1 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VAUX2_4030 , 0x1b , 2 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VAUX2 , 0x1b , 2 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VAUX3 , 0x1f , 3 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VAUX4 , 0x23 , 4 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VMMC1 , 0x27 , 5 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VMMC2 , 0x2b , 6 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VPLL1 , 0x2f , 7 , 100 , 0x00 ) ;
TWL4030_ADJUSTABLE_LDO ( VPLL2 , 0x33 , 8 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VSIM , 0x37 , 9 , 100 , 0x00 ) ;
TWL4030_ADJUSTABLE_LDO ( VDAC , 0x3b , 10 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VINTANA2 , 0x43 , 12 , 100 , 0x08 ) ;
TWL4030_ADJUSTABLE_LDO ( VIO , 0x4b , 14 , 1000 , 0x08 ) ;
TWL4030_ADJUSTABLE_SMPS ( VDD1 , 0x55 , 15 , 1000 , 0x08 ) ;
TWL4030_ADJUSTABLE_SMPS ( VDD2 , 0x63 , 16 , 1000 , 0x08 ) ;
/* VUSBCP is managed *only* by the USB subchip */
/* 6030 REG with base as PMC Slave Misc : 0x0030 */
/* Turnon-delay and remap configuration values for 6030 are not
verified since the specification is not public */
TWL6030_ADJUSTABLE_SMPS ( VDD1 ) ;
TWL6030_ADJUSTABLE_SMPS ( VDD2 ) ;
TWL6030_ADJUSTABLE_SMPS ( VDD3 ) ;
TWL6030_ADJUSTABLE_LDO ( VAUX1_6030 , 0x54 , 1000 , 3300 ) ;
TWL6030_ADJUSTABLE_LDO ( VAUX2_6030 , 0x58 , 1000 , 3300 ) ;
TWL6030_ADJUSTABLE_LDO ( VAUX3_6030 , 0x5c , 1000 , 3300 ) ;
TWL6030_ADJUSTABLE_LDO ( VMMC , 0x68 , 1000 , 3300 ) ;
TWL6030_ADJUSTABLE_LDO ( VPP , 0x6c , 1000 , 3300 ) ;
TWL6030_ADJUSTABLE_LDO ( VUSIM , 0x74 , 1000 , 3300 ) ;
/* 6025 are renamed compared to 6030 versions */
2013-06-19 16:24:02 +04:00
TWL6032_ADJUSTABLE_LDO ( LDO2 , 0x54 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO4 , 0x58 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO3 , 0x5c , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO5 , 0x68 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO1 , 0x6c , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO7 , 0x74 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDO6 , 0x60 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDOLN , 0x64 , 1000 , 3300 ) ;
TWL6032_ADJUSTABLE_LDO ( LDOUSB , 0x70 , 1000 , 3300 ) ;
2012-08-15 02:10:04 +04:00
TWL4030_FIXED_LDO ( VINTANA1 , 0x3f , 1500 , 11 , 100 , 0x08 ) ;
2012-02-28 13:39:11 +04:00
TWL4030_FIXED_LDO ( VINTDIG , 0x47 , 1500 , 13 , 100 , 0x08 ) ;
TWL4030_FIXED_LDO ( VUSB1V5 , 0x71 , 1500 , 17 , 100 , 0x08 ) ;
TWL4030_FIXED_LDO ( VUSB1V8 , 0x74 , 1800 , 18 , 100 , 0x08 ) ;
TWL4030_FIXED_LDO ( VUSB3V1 , 0x77 , 3100 , 19 , 150 , 0x08 ) ;
TWL6030_FIXED_LDO ( VANA , 0x50 , 2100 , 0 ) ;
TWL6030_FIXED_LDO ( VCXIO , 0x60 , 1800 , 0 ) ;
TWL6030_FIXED_LDO ( VDAC , 0x64 , 1800 , 0 ) ;
TWL6030_FIXED_LDO ( VUSB , 0x70 , 3300 , 0 ) ;
2012-02-28 13:39:12 +04:00
TWL6030_FIXED_LDO ( V1V8 , 0x16 , 1800 , 0 ) ;
TWL6030_FIXED_LDO ( V2V1 , 0x1c , 2100 , 0 ) ;
2013-06-19 16:24:02 +04:00
TWL6032_ADJUSTABLE_SMPS ( SMPS3 , 0x34 ) ;
TWL6032_ADJUSTABLE_SMPS ( SMPS4 , 0x10 ) ;
TWL6032_ADJUSTABLE_SMPS ( VIO , 0x16 ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2011-05-23 00:21:23 +04:00
static u8 twl_get_smps_offset ( void )
{
u8 value ;
twl_i2c_read_u8 ( TWL_MODULE_PM_RECEIVER , & value ,
TWL6030_SMPS_OFFSET ) ;
return value ;
}
static u8 twl_get_smps_mult ( void )
{
u8 value ;
twl_i2c_read_u8 ( TWL_MODULE_PM_RECEIVER , & value ,
TWL6030_SMPS_MULT ) ;
return value ;
}
2012-02-28 13:39:11 +04:00
# define TWL_OF_MATCH(comp, family, label) \
{ \
. compatible = comp , \
. data = & family # # _INFO_ # # label , \
}
# define TWL4030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL4030, label)
# define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label)
2013-06-19 16:24:02 +04:00
# define TWL6032_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6032, label)
2012-02-28 13:39:11 +04:00
# define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label)
# define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label)
2012-12-22 01:26:06 +04:00
static const struct of_device_id twl_of_match [ ] = {
2012-02-28 13:39:11 +04:00
TWL4030_OF_MATCH ( " ti,twl4030-vaux1 " , VAUX1 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vaux2 " , VAUX2_4030 ) ,
TWL4030_OF_MATCH ( " ti,twl5030-vaux2 " , VAUX2 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vaux3 " , VAUX3 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vaux4 " , VAUX4 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vmmc1 " , VMMC1 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vmmc2 " , VMMC2 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vpll1 " , VPLL1 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vpll2 " , VPLL2 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vsim " , VSIM ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vdac " , VDAC ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vintana2 " , VINTANA2 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vio " , VIO ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vdd1 " , VDD1 ) ,
TWL4030_OF_MATCH ( " ti,twl4030-vdd2 " , VDD2 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vdd1 " , VDD1 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vdd2 " , VDD2 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vdd3 " , VDD3 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vaux1 " , VAUX1_6030 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vaux2 " , VAUX2_6030 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vaux3 " , VAUX3_6030 ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vmmc " , VMMC ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vpp " , VPP ) ,
TWL6030_OF_MATCH ( " ti,twl6030-vusim " , VUSIM ) ,
2013-06-19 16:24:02 +04:00
TWL6032_OF_MATCH ( " ti,twl6032-ldo2 " , LDO2 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo4 " , LDO4 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo3 " , LDO3 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo5 " , LDO5 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo1 " , LDO1 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo7 " , LDO7 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldo6 " , LDO6 ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldoln " , LDOLN ) ,
TWL6032_OF_MATCH ( " ti,twl6032-ldousb " , LDOUSB ) ,
2012-08-15 02:10:04 +04:00
TWLFIXED_OF_MATCH ( " ti,twl4030-vintana1 " , VINTANA1 ) ,
2012-02-28 13:39:11 +04:00
TWLFIXED_OF_MATCH ( " ti,twl4030-vintdig " , VINTDIG ) ,
TWLFIXED_OF_MATCH ( " ti,twl4030-vusb1v5 " , VUSB1V5 ) ,
TWLFIXED_OF_MATCH ( " ti,twl4030-vusb1v8 " , VUSB1V8 ) ,
TWLFIXED_OF_MATCH ( " ti,twl4030-vusb3v1 " , VUSB3V1 ) ,
TWLFIXED_OF_MATCH ( " ti,twl6030-vana " , VANA ) ,
TWLFIXED_OF_MATCH ( " ti,twl6030-vcxio " , VCXIO ) ,
TWLFIXED_OF_MATCH ( " ti,twl6030-vdac " , VDAC ) ,
TWLFIXED_OF_MATCH ( " ti,twl6030-vusb " , VUSB ) ,
2012-02-28 13:39:12 +04:00
TWLFIXED_OF_MATCH ( " ti,twl6030-v1v8 " , V1V8 ) ,
TWLFIXED_OF_MATCH ( " ti,twl6030-v2v1 " , V2V1 ) ,
2013-06-19 16:24:02 +04:00
TWLSMPS_OF_MATCH ( " ti,twl6032-smps3 " , SMPS3 ) ,
TWLSMPS_OF_MATCH ( " ti,twl6032-smps4 " , SMPS4 ) ,
TWLSMPS_OF_MATCH ( " ti,twl6032-vio " , VIO ) ,
2012-02-28 13:39:11 +04:00
{ } ,
} ;
MODULE_DEVICE_TABLE ( of , twl_of_match ) ;
2012-11-19 22:22:22 +04:00
static int twlreg_probe ( struct platform_device * pdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2012-02-28 13:39:11 +04:00
int i , id ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
struct twlreg_info * info ;
2012-08-14 16:41:50 +04:00
const struct twlreg_info * template ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
struct regulator_init_data * initdata ;
struct regulation_constraints * c ;
struct regulator_dev * rdev ;
2012-02-16 14:27:52 +04:00
struct twl_regulator_driver_data * drvdata ;
2012-02-28 13:39:11 +04:00
const struct of_device_id * match ;
2012-04-04 03:50:22 +04:00
struct regulator_config config = { } ;
2012-02-28 13:39:11 +04:00
match = of_match_device ( twl_of_match , & pdev - > dev ) ;
if ( match ) {
2012-08-14 16:41:50 +04:00
template = match - > data ;
id = template - > desc . id ;
2012-02-28 13:39:11 +04:00
initdata = of_get_regulator_init_data ( & pdev - > dev ,
pdev - > dev . of_node ) ;
drvdata = NULL ;
} else {
id = pdev - > id ;
2013-07-30 12:20:47 +04:00
initdata = dev_get_platdata ( & pdev - > dev ) ;
2012-08-14 16:41:50 +04:00
for ( i = 0 , template = NULL ; i < ARRAY_SIZE ( twl_of_match ) ; i + + ) {
template = twl_of_match [ i ] . data ;
if ( template & & template - > desc . id = = id )
2012-04-09 18:32:49 +04:00
break ;
2012-02-28 13:39:11 +04:00
}
2012-04-09 18:32:49 +04:00
if ( i = = ARRAY_SIZE ( twl_of_match ) )
return - ENODEV ;
2012-02-28 13:39:11 +04:00
drvdata = initdata - > driver_data ;
if ( ! drvdata )
return - EINVAL ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2012-02-28 13:39:11 +04:00
2012-08-14 16:41:50 +04:00
if ( ! template )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
return - ENODEV ;
if ( ! initdata )
return - EINVAL ;
2012-08-14 16:41:50 +04:00
info = kmemdup ( template , sizeof ( * info ) , GFP_KERNEL ) ;
if ( ! info )
return - ENOMEM ;
2012-02-28 13:39:11 +04:00
if ( drvdata ) {
/* copy the driver data into regulator data */
info - > features = drvdata - > features ;
info - > data = drvdata - > data ;
info - > set_voltage = drvdata - > set_voltage ;
info - > get_voltage = drvdata - > get_voltage ;
}
2011-05-23 00:21:23 +04:00
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/* Constrain board-specific capabilities according to what
* this driver and the chip itself can actually do .
*/
c = & initdata - > constraints ;
c - > valid_modes_mask & = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY ;
c - > valid_ops_mask & = REGULATOR_CHANGE_VOLTAGE
| REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS ;
2012-02-28 13:39:11 +04:00
switch ( id ) {
2009-12-16 16:27:56 +03:00
case TWL4030_REG_VIO :
case TWL4030_REG_VDD1 :
case TWL4030_REG_VDD2 :
case TWL4030_REG_VPLL1 :
case TWL4030_REG_VINTANA1 :
case TWL4030_REG_VINTANA2 :
case TWL4030_REG_VINTDIG :
c - > always_on = true ;
break ;
default :
break ;
}
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2012-02-28 13:39:11 +04:00
switch ( id ) {
2013-06-19 16:24:02 +04:00
case TWL6032_REG_SMPS3 :
2011-05-23 00:21:23 +04:00
if ( twl_get_smps_mult ( ) & SMPS_MULTOFFSET_SMPS3 )
info - > flags | = SMPS_EXTENDED_EN ;
if ( twl_get_smps_offset ( ) & SMPS_MULTOFFSET_SMPS3 )
info - > flags | = SMPS_OFFSET_EN ;
break ;
2013-06-19 16:24:02 +04:00
case TWL6032_REG_SMPS4 :
2011-05-23 00:21:23 +04:00
if ( twl_get_smps_mult ( ) & SMPS_MULTOFFSET_SMPS4 )
info - > flags | = SMPS_EXTENDED_EN ;
if ( twl_get_smps_offset ( ) & SMPS_MULTOFFSET_SMPS4 )
info - > flags | = SMPS_OFFSET_EN ;
break ;
2013-06-19 16:24:02 +04:00
case TWL6032_REG_VIO :
2011-05-23 00:21:23 +04:00
if ( twl_get_smps_mult ( ) & SMPS_MULTOFFSET_VIO )
info - > flags | = SMPS_EXTENDED_EN ;
if ( twl_get_smps_offset ( ) & SMPS_MULTOFFSET_VIO )
info - > flags | = SMPS_OFFSET_EN ;
break ;
}
2012-04-04 03:50:22 +04:00
config . dev = & pdev - > dev ;
config . init_data = initdata ;
config . driver_data = info ;
config . of_node = pdev - > dev . of_node ;
rdev = regulator_register ( & info - > desc , & config ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
if ( IS_ERR ( rdev ) ) {
dev_err ( & pdev - > dev , " can't register %s, %ld \n " ,
info - > desc . name , PTR_ERR ( rdev ) ) ;
2012-08-14 16:41:50 +04:00
kfree ( info ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
return PTR_ERR ( rdev ) ;
}
platform_set_drvdata ( pdev , rdev ) ;
2011-04-01 08:52:43 +04:00
if ( twl_class_is_4030 ( ) )
twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_REMAP ,
2009-12-16 16:27:58 +03:00
info - > remap ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/* NOTE: many regulators support short-circuit IRQs (presentable
* as REGULATOR_OVER_CURRENT notifications ? ) configured via :
* - SC_CONFIG
* - SC_DETECT1 ( vintana2 , vmmc1 / 2 , vaux1 / 2 / 3 / 4 )
* - SC_DETECT2 ( vusb , vdac , vio , vdd1 / 2 , vpll2 )
* - IT_CONFIG
*/
return 0 ;
}
2012-11-19 22:26:10 +04:00
static int twlreg_remove ( struct platform_device * pdev )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2012-08-14 16:41:50 +04:00
struct regulator_dev * rdev = platform_get_drvdata ( pdev ) ;
struct twlreg_info * info = rdev - > reg_data ;
regulator_unregister ( rdev ) ;
kfree ( info ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
return 0 ;
}
2009-12-13 23:36:49 +03:00
MODULE_ALIAS ( " platform:twl_reg " ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2009-12-13 23:36:49 +03:00
static struct platform_driver twlreg_driver = {
. probe = twlreg_probe ,
2012-11-19 22:20:42 +04:00
. remove = twlreg_remove ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
/* NOTE: short name, to work around driver model truncation of
2009-12-13 23:36:49 +03:00
* " twl_regulator.12 " ( and friends ) to " twl_regulator.1 " .
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
*/
2012-02-28 13:39:11 +04:00
. driver = {
. name = " twl_reg " ,
. owner = THIS_MODULE ,
. of_match_table = of_match_ptr ( twl_of_match ) ,
} ,
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
} ;
2009-12-13 23:36:49 +03:00
static int __init twlreg_init ( void )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-13 23:36:49 +03:00
return platform_driver_register ( & twlreg_driver ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2009-12-13 23:36:49 +03:00
subsys_initcall ( twlreg_init ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2009-12-13 23:36:49 +03:00
static void __exit twlreg_exit ( void )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
{
2009-12-13 23:36:49 +03:00
platform_driver_unregister ( & twlreg_driver ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
}
2009-12-13 23:36:49 +03:00
module_exit ( twlreg_exit )
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
2009-12-13 23:36:49 +03:00
MODULE_DESCRIPTION ( " TWL regulator driver " ) ;
regulator: twl4030 regulators
Support most of the LDO regulators in the twl4030 family chips.
In the case of LDOs supporting MMC/SD, the voltage controls are
used; but in most other cases, the regulator framework is only
used to enable/disable a supplies, conserving power when a given
voltage rail is not needed.
The drivers/mfd/twl4030-core.c code already sets up the various
regulators according to board-specific configuration, and knows
that some chips don't provide the full set of voltage rails.
The omitted regulators are intended to be under hardware control,
such as during the hardware-mediated system powerup, powerdown,
and suspend states. Unless/until software hooks are known to
be safe, they won't be exported here.
These regulators implement the new get_status() operation, but
can't realistically implement get_mode(); the status output is
effectively the result of a vote, with the relevant hardware
inputs not exposed.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2009-02-08 21:37:06 +03:00
MODULE_LICENSE ( " GPL " ) ;