summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRabin Vincent <rabin.vincent@stericsson.com>2011-05-09 10:51:51 +0530
committerHenrik Aberg <henrik.aberg@stericsson.com>2011-05-18 09:40:16 +0200
commitf40c10ee5311bfea47272bea68d26c79ed773d71 (patch)
tree07d8688ee73b6ae62d1e65cda1f4916306863e1a
parentc9581376500c8f40b3cf4db4a653bef72129b8bb (diff)
u5500: add the Vape power state regulator
ST-Ericsson Linux next: - ST-Ericsson ID: WP257121 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: I7a43e311c6bd7774911ab7efff1ccca7c1e4f23c Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/22692 Tested-by: Rabin VINCENT <rabin.vincent@stericsson.com> Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r--arch/arm/mach-ux500/Makefile4
-rw-r--r--arch/arm/mach-ux500/board-u5500-regulators.c48
-rw-r--r--arch/arm/mach-ux500/board-u5500.c1
-rw-r--r--arch/arm/mach-ux500/board-u5500.h1
-rw-r--r--arch/arm/mach-ux500/regulator-u5500.c67
-rw-r--r--arch/arm/mach-ux500/regulator-u5500.h15
-rw-r--r--arch/arm/mach-ux500/regulator-ux500.c2
7 files changed, 136 insertions, 2 deletions
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile
index 109a6fd8b28..14620b44fef 100644
--- a/arch/arm/mach-ux500/Makefile
+++ b/arch/arm/mach-ux500/Makefile
@@ -37,6 +37,10 @@ ifeq ($(CONFIG_UX500_SOC_DB8500), y)
obj-$(CONFIG_REGULATOR) += regulator-db8500.o
endif
+ifeq ($(CONFIG_UX500_SOC_DB5500), y)
+obj-$(CONFIG_REGULATOR) += regulator-u5500.o
+endif
+
obj-$(CONFIG_U8500_REGULATOR_DEBUG) += virt-regulator-u8500.o
obj-$(CONFIG_UX500_PRCMU_DEBUG) += prcmu-debug.o
obj-$(CONFIG_UX500_PRCMU_QOS_POWER) += prcmu-qos-power.o
diff --git a/arch/arm/mach-ux500/board-u5500-regulators.c b/arch/arm/mach-ux500/board-u5500-regulators.c
index 38edc3c01cb..f2b17974227 100644
--- a/arch/arm/mach-ux500/board-u5500-regulators.c
+++ b/arch/arm/mach-ux500/board-u5500-regulators.c
@@ -5,11 +5,18 @@
*/
#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/ab5500.h>
+#include "regulator-u5500.h"
#include "board-u5500.h"
+/*
+ * AB5500
+ */
+
static struct regulator_consumer_supply ab5500_ldo_d_consumers[] = {
};
@@ -132,3 +139,44 @@ struct ab5500_regulator_platform_data u5500_ab5500_regulator_data = {
.regulator = ab5500_regulator_init_data,
.num_regulator = ARRAY_SIZE(ab5500_regulator_init_data),
};
+
+/*
+ * Power state, ePOD, etc.
+ */
+
+static struct regulator_consumer_supply u5500_vape_consumers[] = {
+ REGULATOR_SUPPLY("v-ape", NULL),
+ REGULATOR_SUPPLY("v-i2c", "nmk-i2c.0"),
+ REGULATOR_SUPPLY("v-i2c", "nmk-i2c.1"),
+ REGULATOR_SUPPLY("v-i2c", "nmk-i2c.2"),
+ REGULATOR_SUPPLY("v-i2c", "nmk-i2c.3"),
+ REGULATOR_SUPPLY("v-mmc", "sdi0"),
+ REGULATOR_SUPPLY("v-mmc", "sdi1"),
+ REGULATOR_SUPPLY("v-mmc", "sdi2"),
+ REGULATOR_SUPPLY("v-mmc", "sdi3"),
+ REGULATOR_SUPPLY("v-mmc", "sdi4"),
+ REGULATOR_SUPPLY("v-uart", "uart0"),
+ REGULATOR_SUPPLY("v-uart", "uart1"),
+ REGULATOR_SUPPLY("v-uart", "uart2"),
+ REGULATOR_SUPPLY("v-uart", "uart3"),
+};
+
+static struct regulator_init_data *
+u5500_regulator_init_data[U5500_NUM_REGULATORS] __initdata = {
+ [U5500_REGULATOR_VAPE] = (struct regulator_init_data []) {
+ {
+ .constraints = {
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ },
+ .consumer_supplies = u5500_vape_consumers,
+ .num_consumer_supplies = ARRAY_SIZE(u5500_vape_consumers),
+ }
+ },
+};
+
+void __init u5500_regulators_init(void)
+{
+ platform_device_register_data(NULL, "u5500-regulators", -1,
+ u5500_regulator_init_data,
+ sizeof(u5500_regulator_init_data));
+}
diff --git a/arch/arm/mach-ux500/board-u5500.c b/arch/arm/mach-ux500/board-u5500.c
index 406892c6a97..556488e311b 100644
--- a/arch/arm/mach-ux500/board-u5500.c
+++ b/arch/arm/mach-ux500/board-u5500.c
@@ -357,6 +357,7 @@ static void __init u5500_uart_init(void)
static void __init u5500_init_machine(void)
{
+ u5500_regulators_init();
u5500_init_devices();
u5500_pins_init();
diff --git a/arch/arm/mach-ux500/board-u5500.h b/arch/arm/mach-ux500/board-u5500.h
index 16868025f63..8ff1c7834db 100644
--- a/arch/arm/mach-ux500/board-u5500.h
+++ b/arch/arm/mach-ux500/board-u5500.h
@@ -15,5 +15,6 @@ struct ab5500_regulator_platform_data;
extern struct ab5500_regulator_platform_data u5500_ab5500_regulator_data;
extern void u5500_pins_init(void);
+extern void __init u5500_regulators_init(void);
#endif
diff --git a/arch/arm/mach-ux500/regulator-u5500.c b/arch/arm/mach-ux500/regulator-u5500.c
new file mode 100644
index 00000000000..bd988c7c109
--- /dev/null
+++ b/arch/arm/mach-ux500/regulator-u5500.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+
+#include <mach/prcmu-fw-api.h>
+
+#include "regulator-ux500.h"
+#include "regulator-u5500.h"
+
+static struct u8500_regulator_info
+u5500_regulator_info[U5500_NUM_REGULATORS] = {
+ [U5500_REGULATOR_VAPE] = {
+ .desc = {
+ .name = "u5500-vape",
+ .id = U5500_REGULATOR_VAPE,
+ .ops = &ux500_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .owner = THIS_MODULE,
+ },
+ },
+};
+
+static int __devinit u5500_regulator_probe(struct platform_device *pdev)
+{
+ return ux500_regulator_probe(pdev, u5500_regulator_info,
+ ARRAY_SIZE(u5500_regulator_info));
+}
+
+static int __devexit u5500_regulator_remove(struct platform_device *pdev)
+{
+ return ux500_regulator_remove(pdev, u5500_regulator_info,
+ ARRAY_SIZE(u5500_regulator_info));
+}
+
+static struct platform_driver u5500_regulator_driver = {
+ .driver = {
+ .name = "u5500-regulators",
+ .owner = THIS_MODULE,
+ },
+ .probe = u5500_regulator_probe,
+ .remove = __devexit_p(u5500_regulator_remove),
+};
+
+static int __init u5500_regulator_init(void)
+{
+ return platform_driver_register(&u5500_regulator_driver);
+}
+
+static void __exit u5500_regulator_exit(void)
+{
+ platform_driver_unregister(&u5500_regulator_driver);
+}
+
+arch_initcall(u5500_regulator_init);
+module_exit(u5500_regulator_exit);
+
+MODULE_DESCRIPTION("U5500 regulator driver");
+MODULE_LICENSE("GPL v2");
diff --git a/arch/arm/mach-ux500/regulator-u5500.h b/arch/arm/mach-ux500/regulator-u5500.h
new file mode 100644
index 00000000000..2c363096d12
--- /dev/null
+++ b/arch/arm/mach-ux500/regulator-u5500.h
@@ -0,0 +1,15 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ */
+
+#ifndef __REGULATOR_U5500_H
+#define __REGULATOR_U5500_H
+
+enum u5500_regulator_id {
+ U5500_REGULATOR_VAPE,
+ U5500_NUM_REGULATORS
+};
+
+#endif
diff --git a/arch/arm/mach-ux500/regulator-ux500.c b/arch/arm/mach-ux500/regulator-ux500.c
index b9ded85fd96..12bcfe7e4b3 100644
--- a/arch/arm/mach-ux500/regulator-ux500.c
+++ b/arch/arm/mach-ux500/regulator-ux500.c
@@ -364,8 +364,6 @@ ux500_regulator_probe(struct platform_device *pdev,
"regulator-%s-probed\n", info->desc.name);
}
- regulator_has_full_constraints();
-
return 0;
}