| /* |
| * twl-common.c |
| * |
| * Copyright (C) 2011 Texas Instruments, Inc.. |
| * Author: Peter Ujfalusi <peter.ujfalusi@ti.com> |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
| * 02110-1301 USA |
| * |
| */ |
| |
| #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" |
| |
| static struct i2c_board_info __initdata pmic_i2c_board_info = { |
| .addr = 0x48, |
| .flags = I2C_CLIENT_WAKE, |
| }; |
| |
| void __init omap_pmic_init(int bus, u32 clkrate, |
| const char *pmic_type, int pmic_irq, |
| struct twl4030_platform_data *pmic_data) |
| { |
| strncpy(pmic_i2c_board_info.type, pmic_type, |
| sizeof(pmic_i2c_board_info.type)); |
| pmic_i2c_board_info.irq = pmic_irq; |
| pmic_i2c_board_info.platform_data = pmic_data; |
| |
| 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; |
| } |