|
@@ -389,3 +389,164 @@ static struct regulator_init_data omap4_vdd1 = {
|
|
|
|
|
|
static struct regulator_init_data omap4_vdd2 = {
|
|
|
.constraints = {
|
|
|
+ .name = "vdd_iva",
|
|
|
+ .min_uV = 500000,
|
|
|
+ .max_uV = 1500000,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap4_vdd2_supply),
|
|
|
+ .consumer_supplies = omap4_vdd2_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data omap4_vdd3 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "vdd_core",
|
|
|
+ .min_uV = 500000,
|
|
|
+ .max_uV = 1500000,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap4_vdd3_supply),
|
|
|
+ .consumer_supplies = omap4_vdd3_supply,
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+static struct twl_regulator_driver_data omap4_vdd1_drvdata = {
|
|
|
+ .get_voltage = twl_get_voltage,
|
|
|
+ .set_voltage = twl_set_voltage,
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl_regulator_driver_data omap4_vdd2_drvdata = {
|
|
|
+ .get_voltage = twl_get_voltage,
|
|
|
+ .set_voltage = twl_set_voltage,
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl_regulator_driver_data omap4_vdd3_drvdata = {
|
|
|
+ .get_voltage = twl_get_voltage,
|
|
|
+ .set_voltage = twl_set_voltage,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply omap4_v1v8_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vio", "1-004b"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data omap4_v1v8_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,
|
|
|
+ .always_on = true,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap4_v1v8_supply),
|
|
|
+ .consumer_supplies = omap4_v1v8_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply omap4_v2v1_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("v2v1", "1-004b"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data omap4_v2v1_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,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap4_v2v1_supply),
|
|
|
+ .consumer_supplies = omap4_v2v1_supply,
|
|
|
+};
|
|
|
+
|
|
|
+void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
|
|
+ u32 pdata_flags, u32 regulators_flags)
|
|
|
+{
|
|
|
+ if (!pmic_data->vdd1) {
|
|
|
+ omap4_vdd1.driver_data = &omap4_vdd1_drvdata;
|
|
|
+ omap4_vdd1_drvdata.data = voltdm_lookup("mpu");
|
|
|
+ pmic_data->vdd1 = &omap4_vdd1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!pmic_data->vdd2) {
|
|
|
+ omap4_vdd2.driver_data = &omap4_vdd2_drvdata;
|
|
|
+ omap4_vdd2_drvdata.data = voltdm_lookup("iva");
|
|
|
+ pmic_data->vdd2 = &omap4_vdd2;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!pmic_data->vdd3) {
|
|
|
+ omap4_vdd3.driver_data = &omap4_vdd3_drvdata;
|
|
|
+ omap4_vdd3_drvdata.data = voltdm_lookup("core");
|
|
|
+ pmic_data->vdd3 = &omap4_vdd3;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 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;
|
|
|
+
|
|
|
+ if (regulators_flags & TWL_COMMON_REGULATOR_V1V8 && !pmic_data->v1v8)
|
|
|
+ pmic_data->v1v8 = &omap4_v1v8_idata;
|
|
|
+
|
|
|
+ if (regulators_flags & TWL_COMMON_REGULATOR_V2V1 && !pmic_data->v2v1)
|
|
|
+ pmic_data->v2v1 = &omap4_v2v1_idata;
|
|
|
+}
|
|
|
+#endif /* CONFIG_ARCH_OMAP4 */
|
|
|
+
|
|
|
+#if defined(CONFIG_SND_OMAP_SOC_OMAP_TWL4030) || \
|
|
|
+ defined(CONFIG_SND_OMAP_SOC_OMAP_TWL4030_MODULE)
|
|
|
+#include <linux/platform_data/omap-twl4030.h>
|
|
|
+
|
|
|
+static struct omap_tw4030_pdata omap_twl4030_audio_data;
|
|
|
+
|
|
|
+static struct platform_device audio_device = {
|
|
|
+ .name = "omap-twl4030",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &omap_twl4030_audio_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+void __init omap_twl4030_audio_init(char *card_name)
|
|
|
+{
|
|
|
+ omap_twl4030_audio_data.card_name = card_name;
|
|
|
+ platform_device_register(&audio_device);
|
|
|
+}
|
|
|
+
|
|
|
+#else /* SOC_OMAP_TWL4030 */
|
|
|
+void __init omap_twl4030_audio_init(char *card_name)
|
|
|
+{
|
|
|
+ return;
|
|
|
+}
|
|
|
+#endif /* SOC_OMAP_TWL4030 */
|