diff options
author | Rabin Vincent <rabin.vincent@stericsson.com> | 2011-05-09 10:51:51 +0530 |
---|---|---|
committer | Henrik Aberg <henrik.aberg@stericsson.com> | 2011-05-18 09:40:16 +0200 |
commit | f40c10ee5311bfea47272bea68d26c79ed773d71 (patch) | |
tree | 07d8688ee73b6ae62d1e65cda1f4916306863e1a | |
parent | c9581376500c8f40b3cf4db4a653bef72129b8bb (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/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-u5500-regulators.c | 48 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-u5500.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-u5500.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/regulator-u5500.c | 67 | ||||
-rw-r--r-- | arch/arm/mach-ux500/regulator-u5500.h | 15 | ||||
-rw-r--r-- | arch/arm/mach-ux500/regulator-ux500.c | 2 |
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; } |