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>
# include <linux/init.h>
# include <linux/err.h>
2009-12-16 15:55:26 +03:00
# include <linux/delay.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/platform_device.h>
# include <linux/regulator/driver.h>
# include <linux/regulator/machine.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
/* regulator specific turn-on delay */
u16 delay ;
/* 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 ;
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)
/* twl6025 SMPS EPROM values */
# 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
2011-05-23 00:21:23 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6025_SUBCLASS ) ) )
grp = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_GRP ) ;
2011-04-01 08:52:44 +04:00
if ( grp < 0 )
return grp ;
2011-05-23 00:21:23 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6025_SUBCLASS ) ) )
grp & = P1_GRP_6030 ;
else
grp = 1 ;
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
2009-12-14 00:19:23 +03:00
grp = twlreg_read ( info , 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
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
udelay ( info - > delay ) ;
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 ;
2011-05-23 00:21:23 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6025_SUBCLASS ) ) )
grp = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_GRP ) ;
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 ) ;
2011-04-01 08:52:42 +04:00
2009-12-16 15:55:26 +03:00
udelay ( info - > delay ) ;
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-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
2009-12-14 00:19:23 +03:00
grp = twlreg_read ( info , 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
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 ;
2011-05-23 00:21:23 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6025_SUBCLASS ) ) )
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 ;
2011-05-23 00:21:23 +04:00
if ( ! ( twl_class_is_6030 ( ) & & ( info - > features & TWL6025_SUBCLASS ) ) )
grp = twlreg_read ( info , TWL_MODULE_PM_RECEIVER , VREG_GRP ) ;
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
*/
# ifdef CONFIG_TWL4030_ALLOW_UNSUPPORTED
# define UNSUP_MASK 0x0000
# else
# define UNSUP_MASK 0x8000
# endif
# define UNSUP(x) (UNSUP_MASK | (x))
# define IS_UNSUP(x) (UNSUP_MASK & (x))
# 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 VDD1_VSEL_table [ ] = {
800 , 1450 ,
} ;
static const u16 VDD2_VSEL_table [ ] = {
800 , 1450 , 1500 ,
} ;
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 ] ;
return IS_UNSUP ( mV ) ? 0 : ( LDO_MV ( mV ) * 1000 ) ;
}
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
2010-11-10 17:38:29 +03:00
twl4030ldo_set_voltage ( struct regulator_dev * rdev , int min_uV , int max_uV ,
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 ) ;
int vsel ;
for ( vsel = 0 ; vsel < info - > table_len ; vsel + + ) {
int mV = info - > table [ vsel ] ;
int uV ;
if ( IS_UNSUP ( mV ) )
continue ;
uV = LDO_MV ( mV ) * 1000 ;
2009-02-26 22:50:14 +03:00
/* REVISIT for VAUX2, first match may not be best/lowest */
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
/* use the first in-range value */
2010-11-10 17:38:29 +03:00
if ( min_uV < = uV & & uV < = max_uV ) {
* selector = vsel ;
2009-12-14 00:19:23 +03:00
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER ,
VREG_VOLTAGE , vsel ) ;
2010-11-10 17:38:29 +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
}
return - EDOM ;
}
2010-04-22 12:48:32 +04:00
static int twl4030ldo_get_voltage ( 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 ) ;
2009-12-14 00:19:23 +03: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 ;
return LDO_MV ( info - > table [ vsel ] ) * 1000 ;
}
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
2010-04-22 12:48:32 +04:00
. set_voltage = twl4030ldo_set_voltage ,
. get_voltage = twl4030ldo_get_voltage ,
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 ) ;
twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE_SMPS_4030 ,
vsel ) ;
return 0 ;
}
static int twl4030smps_get_voltage ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel = twlreg_read ( info , TWL_MODULE_PM_RECEIVER ,
VREG_VOLTAGE_SMPS_4030 ) ;
return vsel * 12500 + 600000 ;
}
static struct regulator_ops twl4030smps_ops = {
. set_voltage = twl4030smps_set_voltage ,
. get_voltage = twl4030smps_get_voltage ,
} ;
2010-04-22 12:48:32 +04:00
static int twl6030ldo_list_voltage ( struct regulator_dev * rdev , unsigned index )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
return ( ( info - > min_mV + ( index * 100 ) ) * 1000 ) ;
}
static int
2010-11-10 17:38:29 +03:00
twl6030ldo_set_voltage ( struct regulator_dev * rdev , int min_uV , int max_uV ,
unsigned * selector )
2010-04-22 12:48:32 +04:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel ;
if ( ( min_uV / 1000 < info - > min_mV ) | | ( max_uV / 1000 > info - > max_mV ) )
return - EDOM ;
/*
* Use the below formula to calculate vsel
* mV = 1000 mv + 100 mv * ( vsel - 1 )
*/
vsel = ( min_uV / 1000 - 1000 ) / 100 + 1 ;
2010-11-10 17:38:29 +03:00
* selector = vsel ;
2010-04-22 12:48:32 +04:00
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE , vsel ) ;
}
static int twl6030ldo_get_voltage ( struct regulator_dev * rdev )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel = twlreg_read ( info , TWL_MODULE_PM_RECEIVER ,
VREG_VOLTAGE ) ;
if ( vsel < 0 )
return vsel ;
/*
* Use the below formula to calculate vsel
* mV = 1000 mv + 100 mv * ( vsel - 1 )
*/
return ( 1000 + ( 100 * ( vsel - 1 ) ) ) * 1000 ;
}
static struct regulator_ops twl6030ldo_ops = {
. list_voltage = twl6030ldo_list_voltage ,
. set_voltage = twl6030ldo_set_voltage ,
. get_voltage = twl6030ldo_get_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
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
} ;
/*----------------------------------------------------------------------*/
/*
* Fixed voltage LDOs don ' t have a VSEL field to update .
*/
2009-12-13 23:36:49 +03:00
static int twlfixed_list_voltage ( struct regulator_dev * rdev , unsigned index )
2009-02-26 22:50:14 +03:00
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
return info - > min_mV * 1000 ;
}
2009-12-13 23:36:49 +03:00
static int twlfixed_get_voltage ( 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 ) ;
return info - > min_mV * 1000 ;
}
2011-04-01 08:52:44 +04:00
static struct regulator_ops twl4030fixed_ops = {
. list_voltage = twlfixed_list_voltage ,
. get_voltage = twlfixed_get_voltage ,
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 = {
2009-12-13 23:36:49 +03:00
. list_voltage = twlfixed_list_voltage ,
2009-02-26 22:50:14 +03:00
2009-12-13 23:36:49 +03:00
. get_voltage = twlfixed_get_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
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-02-10 16:14:50 +03:00
static struct regulator_ops twl6030_fixed_resource = {
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 ,
2011-04-01 08:52:45 +04:00
. get_status = twl6030reg_get_status ,
2011-02-10 16:14:50 +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 ;
}
static int
twl6030smps_set_voltage ( struct regulator_dev * rdev , int min_uV , int max_uV ,
unsigned int * selector )
{
struct twlreg_info * info = rdev_get_drvdata ( rdev ) ;
int vsel = 0 ;
switch ( info - > flags ) {
case 0 :
if ( min_uV = = 0 )
vsel = 0 ;
else if ( ( min_uV > = 600000 ) & & ( max_uV < = 1300000 ) ) {
vsel = ( min_uV - 600000 ) / 125 ;
if ( vsel % 100 )
vsel + = 100 ;
vsel / = 100 ;
vsel + + ;
}
/* Values 1..57 for vsel are linear and can be calculated
* values 58. .62 are non linear .
*/
else if ( ( min_uV > 1900000 ) & & ( max_uV > = 2100000 ) )
vsel = 62 ;
else if ( ( min_uV > 1800000 ) & & ( max_uV > = 1900000 ) )
vsel = 61 ;
else if ( ( min_uV > 1500000 ) & & ( max_uV > = 1800000 ) )
vsel = 60 ;
else if ( ( min_uV > 1350000 ) & & ( max_uV > = 1500000 ) )
vsel = 59 ;
else if ( ( min_uV > 1300000 ) & & ( max_uV > = 1350000 ) )
vsel = 58 ;
else
return - EINVAL ;
break ;
case SMPS_OFFSET_EN :
if ( min_uV = = 0 )
vsel = 0 ;
else if ( ( min_uV > = 700000 ) & & ( max_uV < = 1420000 ) ) {
vsel = ( min_uV - 700000 ) / 125 ;
if ( vsel % 100 )
vsel + = 100 ;
vsel / = 100 ;
vsel + + ;
}
/* Values 1..57 for vsel are linear and can be calculated
* values 58. .62 are non linear .
*/
else if ( ( min_uV > 1900000 ) & & ( max_uV > = 2100000 ) )
vsel = 62 ;
else if ( ( min_uV > 1800000 ) & & ( max_uV > = 1900000 ) )
vsel = 61 ;
else if ( ( min_uV > 1350000 ) & & ( max_uV > = 1800000 ) )
vsel = 60 ;
else if ( ( min_uV > 1350000 ) & & ( max_uV > = 1500000 ) )
vsel = 59 ;
else if ( ( min_uV > 1300000 ) & & ( max_uV > = 1350000 ) )
vsel = 58 ;
else
return - EINVAL ;
break ;
case SMPS_EXTENDED_EN :
if ( min_uV = = 0 )
vsel = 0 ;
else if ( ( min_uV > = 1852000 ) & & ( max_uV < = 4013600 ) ) {
vsel = ( min_uV - 1852000 ) / 386 ;
if ( vsel % 100 )
vsel + = 100 ;
vsel / = 100 ;
vsel + + ;
}
break ;
case SMPS_OFFSET_EN | SMPS_EXTENDED_EN :
if ( min_uV = = 0 )
vsel = 0 ;
else if ( ( min_uV > = 2161000 ) & & ( max_uV < = 4321000 ) ) {
vsel = ( min_uV - 1852000 ) / 386 ;
if ( vsel % 100 )
vsel + = 100 ;
vsel / = 100 ;
vsel + + ;
}
break ;
}
* selector = vsel ;
return twlreg_write ( info , TWL_MODULE_PM_RECEIVER , VREG_VOLTAGE_SMPS ,
vsel ) ;
}
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 ,
. set_voltage = twl6030smps_set_voltage ,
. 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
2010-04-22 12:48:32 +04:00
# define TWL4030_ADJUSTABLE_LDO(label, offset, num, turnon_delay, 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
. base = offset , \
. id = num , \
. table_len = ARRAY_SIZE ( label # # _VSEL_table ) , \
. table = label # # _VSEL_table , \
2009-12-16 15:49:52 +03:00
. delay = turnon_delay , \
. 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 , \
} , \
}
2011-11-28 18:53:19 +04:00
# define TWL4030_ADJUSTABLE_SMPS(label, offset, num, turnon_delay, remap_conf) \
{ \
. base = offset , \
. id = num , \
. delay = turnon_delay , \
. remap = remap_conf , \
. desc = { \
. name = # label , \
. id = TWL4030_REG_ # # label , \
. ops = & twl4030smps_ops , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
2011-07-10 06:02:21 +04:00
# define TWL6030_ADJUSTABLE_LDO(label, offset, min_mVolts, max_mVolts) { \
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 , \
2011-05-27 23:25:27 +04:00
. n_voltages = ( max_mVolts - min_mVolts ) / 100 + 1 , \
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 , \
} , \
}
2011-07-10 06:02:21 +04:00
# define TWL6025_ADJUSTABLE_LDO(label, offset, min_mVolts, max_mVolts) { \
2011-05-23 00:21:23 +04:00
. base = offset , \
. min_mV = min_mVolts , \
. max_mV = max_mVolts , \
. desc = { \
. name = # label , \
. id = TWL6025_REG_ # # label , \
. n_voltages = ( ( max_mVolts - min_mVolts ) / 100 ) + 1 , \
. 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, \
2011-04-01 08:52:44 +04:00
family , 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
. base = offset , \
. id = num , \
. min_mV = mVolts , \
2009-12-16 15:49:52 +03:00
. delay = turnon_delay , \
. 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 , \
} , \
}
2011-07-10 06:02:21 +04:00
# define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) { \
2011-02-10 16:14:50 +03:00
. base = offset , \
. delay = turnon_delay , \
. desc = { \
. name = # label , \
. id = TWL6030_REG_ # # label , \
. ops = & twl6030_fixed_resource , \
. type = REGULATOR_VOLTAGE , \
. owner = THIS_MODULE , \
} , \
}
2011-07-10 06:02:21 +04:00
# define TWL6025_ADJUSTABLE_SMPS(label, offset) { \
2011-05-23 00:21:23 +04:00
. base = offset , \
. min_mV = 600 , \
. max_mV = 2100 , \
. desc = { \
. name = # label , \
. id = TWL6025_REG_ # # label , \
. 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 .
*/
2009-12-13 23:36:49 +03:00
static struct twlreg_info twl_regs [ ] = {
2009-12-16 15:49:52 +03: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_FIXED_LDO ( VINTANA1 , 0x3f , 1500 , 11 , 100 , 0x08 ) ,
TWL4030_ADJUSTABLE_LDO ( VINTANA2 , 0x43 , 12 , 100 , 0x08 ) ,
TWL4030_FIXED_LDO ( VINTDIG , 0x47 , 1500 , 13 , 100 , 0x08 ) ,
TWL4030_ADJUSTABLE_LDO ( VIO , 0x4b , 14 , 1000 , 0x08 ) ,
2011-11-28 18:53:19 +04:00
TWL4030_ADJUSTABLE_SMPS ( VDD1 , 0x55 , 15 , 1000 , 0x08 ) ,
TWL4030_ADJUSTABLE_SMPS ( VDD2 , 0x63 , 16 , 1000 , 0x08 ) ,
2009-12-16 15:49:52 +03:00
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 ) ,
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
/* VUSBCP is managed *only* by the USB subchip */
2009-12-14 00:19:23 +03:00
/* 6030 REG with base as PMC Slave Misc : 0x0030 */
2009-12-16 15:49:52 +03:00
/* Turnon-delay and remap configuration values for 6030 are not
verified since the specification is not public */
2011-07-10 06:02:21 +04:00
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 ) ,
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 ) ,
TWL6030_FIXED_RESOURCE ( CLK32KG , 0x8C , 0 ) ,
2011-05-23 00:21:23 +04:00
/* 6025 are renamed compared to 6030 versions */
2011-07-10 06:02:21 +04:00
TWL6025_ADJUSTABLE_LDO ( LDO2 , 0x54 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO4 , 0x58 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO3 , 0x5c , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO5 , 0x68 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO1 , 0x6c , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO7 , 0x74 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDO6 , 0x60 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDOLN , 0x64 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_LDO ( LDOUSB , 0x70 , 1000 , 3300 ) ,
TWL6025_ADJUSTABLE_SMPS ( SMPS3 , 0x34 ) ,
TWL6025_ADJUSTABLE_SMPS ( SMPS4 , 0x10 ) ,
TWL6025_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 ;
}
2010-02-24 10:38:01 +03:00
static int __devinit 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
{
int i ;
struct twlreg_info * info ;
struct regulator_init_data * initdata ;
struct regulation_constraints * c ;
struct regulator_dev * rdev ;
2009-12-13 23:36:49 +03:00
for ( i = 0 , info = NULL ; i < ARRAY_SIZE ( twl_regs ) ; i + + ) {
if ( twl_regs [ i ] . desc . id ! = pdev - > 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
continue ;
2009-12-13 23:36:49 +03:00
info = twl_regs + i ;
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
break ;
}
if ( ! info )
return - ENODEV ;
initdata = pdev - > dev . platform_data ;
if ( ! initdata )
return - EINVAL ;
2011-05-23 00:21:23 +04:00
/* copy the features into regulator data */
info - > features = ( unsigned long ) initdata - > driver_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
/* 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 ;
2009-12-16 16:27:56 +03:00
switch ( pdev - > id ) {
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
2011-05-23 00:21:23 +04:00
switch ( pdev - > id ) {
case TWL6025_REG_SMPS3 :
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 ;
case TWL6025_REG_SMPS4 :
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 ;
case TWL6025_REG_VIO :
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 ;
}
2011-11-18 15:17:19 +04:00
rdev = regulator_register ( & info - > desc , & pdev - > dev , initdata , info , NULL ) ;
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 ) ) ;
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 ;
}
2009-12-13 23:36:49 +03:00
static int __devexit 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
{
regulator_unregister ( platform_get_drvdata ( pdev ) ) ;
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 ,
. remove = __devexit_p ( 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
*/
2009-12-13 23:36:49 +03:00
. driver . name = " 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
. driver . owner = THIS_MODULE ,
} ;
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 " ) ;