diff options
| author | Peter Ujfalusi <peter.ujfalusi@ti.com> | 2011-06-07 10:26:46 +0300 | 
|---|---|---|
| committer | Peter Ujfalusi <peter.ujfalusi@ti.com> | 2011-07-04 18:43:33 +0300 | 
| commit | b22f954bae35be115a10c6426dc070f7d652b32e (patch) | |
| tree | 2144bd55d658b284eb8d56d315d4177adf2f9186 /arch/arm/mach-omap2/twl-common.c | |
| parent | a53b8e3b995f8b7c8a8c4ef5aa367958e46139b3 (diff) | |
| download | olio-linux-3.10-b22f954bae35be115a10c6426dc070f7d652b32e.tar.xz olio-linux-3.10-b22f954bae35be115a10c6426dc070f7d652b32e.zip  | |
OMAP4: Move common twl6030 configuration to twl-common
Reduce the amount of duplicated code by moving the common
configuration for TWL6030 (on OMAP4 platform) to the
twl-common file.
Use the omap4_pmic_get_config function from board files to
properly configure the PMIC with the common fields.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/twl-common.c')
| -rw-r--r-- | arch/arm/mach-omap2/twl-common.c | 163 | 
1 files changed, 163 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 4f7b24c1a26..cf80f4cad72 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c @@ -23,8 +23,11 @@  #include <linux/i2c.h>  #include <linux/i2c/twl.h>  #include <linux/gpio.h> +#include <linux/regulator/machine.h> +#include <linux/regulator/fixed.h>  #include <plat/i2c.h> +#include <plat/usb.h>  #include "twl-common.h" @@ -44,3 +47,163 @@ void __init omap_pmic_init(int bus, u32 clkrate,  	omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1);  } + +static struct twl4030_usb_data omap4_usb_pdata = { +	.phy_init	= omap4430_phy_init, +	.phy_exit	= omap4430_phy_exit, +	.phy_power	= omap4430_phy_power, +	.phy_set_clock	= omap4430_phy_set_clk, +	.phy_suspend	= omap4430_phy_suspend, +}; + +static struct regulator_init_data omap4_vdac_idata = { +	.constraints = { +		.min_uV			= 1800000, +		.max_uV			= 1800000, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_vaux2_idata = { +	.constraints = { +		.min_uV			= 1200000, +		.max_uV			= 2800000, +		.apply_uV		= true, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE +					| REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_vaux3_idata = { +	.constraints = { +		.min_uV			= 1000000, +		.max_uV			= 3000000, +		.apply_uV		= true, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE +					| REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_consumer_supply omap4_vmmc_supply[] = { +	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), +}; + +/* VMMC1 for MMC1 card */ +static struct regulator_init_data omap4_vmmc_idata = { +	.constraints = { +		.min_uV			= 1200000, +		.max_uV			= 3000000, +		.apply_uV		= true, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE +					| REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +	.num_consumer_supplies  = ARRAY_SIZE(omap4_vmmc_supply), +	.consumer_supplies      = omap4_vmmc_supply, +}; + +static struct regulator_init_data omap4_vpp_idata = { +	.constraints = { +		.min_uV			= 1800000, +		.max_uV			= 2500000, +		.apply_uV		= true, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE +					| REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_vana_idata = { +	.constraints = { +		.min_uV			= 2100000, +		.max_uV			= 2100000, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_vcxio_idata = { +	.constraints = { +		.min_uV			= 1800000, +		.max_uV			= 1800000, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_vusb_idata = { +	.constraints = { +		.min_uV			= 3300000, +		.max_uV			= 3300000, +		.apply_uV		= true, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +}; + +static struct regulator_init_data omap4_clk32kg_idata = { +	.constraints = { +		.valid_ops_mask		= REGULATOR_CHANGE_STATUS, +	}, +}; + +void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, +				  u32 pdata_flags, u32 regulators_flags) +{ +	if (!pmic_data->irq_base) +		pmic_data->irq_base = TWL6030_IRQ_BASE; +	if (!pmic_data->irq_end) +		pmic_data->irq_end = TWL6030_IRQ_END; + +	/* Common platform data configurations */ +	if (pdata_flags & TWL_COMMON_PDATA_USB && !pmic_data->usb) +		pmic_data->usb = &omap4_usb_pdata; + +	/* Common regulator configurations */ +	if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac) +		pmic_data->vdac = &omap4_vdac_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VAUX2 && !pmic_data->vaux2) +		pmic_data->vaux2 = &omap4_vaux2_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VAUX3 && !pmic_data->vaux3) +		pmic_data->vaux3 = &omap4_vaux3_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VMMC && !pmic_data->vmmc) +		pmic_data->vmmc = &omap4_vmmc_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VPP && !pmic_data->vpp) +		pmic_data->vpp = &omap4_vpp_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VANA && !pmic_data->vana) +		pmic_data->vana = &omap4_vana_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VCXIO && !pmic_data->vcxio) +		pmic_data->vcxio = &omap4_vcxio_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_VUSB && !pmic_data->vusb) +		pmic_data->vusb = &omap4_vusb_idata; + +	if (regulators_flags & TWL_COMMON_REGULATOR_CLK32KG && +	    !pmic_data->clk32kg) +		pmic_data->clk32kg = &omap4_clk32kg_idata; +}  |