summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorPhilippe Langlais <philippe.langlais@linaro.org>2011-04-21 08:32:08 +0200
committerUlf Hansson <ulf.hansson@stericsson.com>2011-09-19 15:14:51 +0200
commit67eb1c3a643927bf7570856edab470de991142a9 (patch)
tree00282e8b1472e075a9d29e5c92cea1c17611f5b9 /arch/arm
parent6b69e35de331fdee04db0eec587d01164f8b2f72 (diff)
ux500: Add Virtual regulator debug from 2.6.35
Signed-off-by: Philippe Langlais <philippe.langlais@linaro.org>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-ux500/Kconfig7
-rw-r--r--arch/arm/mach-ux500/Makefile1
-rw-r--r--arch/arm/mach-ux500/board-mop500-regulators.c43
-rw-r--r--arch/arm/mach-ux500/virt-regulator-u8500.c315
4 files changed, 351 insertions, 15 deletions
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig
index 0e97207e825..3c4720eaf47 100644
--- a/arch/arm/mach-ux500/Kconfig
+++ b/arch/arm/mach-ux500/Kconfig
@@ -94,6 +94,12 @@ config UX500_DEBUG_UART
Choose the UART on which kernel low-level debug messages should be
output.
+config U8500_REGULATOR_DEBUG
+ bool "Regulator debug support"
+ depends on REGULATOR_VIRTUAL_CONSUMER
+ help
+ Add support for U8500 regulator debug
+
config U5500_MODEM_IRQ
bool "Modem IRQ support"
depends on UX500_SOC_DB5500
@@ -126,7 +132,6 @@ config DB8500_MLOADER
bool "Modem firmware upload/download support"
depends on UX500_SOC_DB8500
select DBX500_MLOADER
- default n
help
Adds Modem firmware upload/download support to DB8500.
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile
index 92a28da2936..2efda7ff984 100644
--- a/arch/arm/mach-ux500/Makefile
+++ b/arch/arm/mach-ux500/Makefile
@@ -33,3 +33,4 @@ obj-$(CONFIG_TEE_SVP) += tee_service_svp.o
obj-$(CONFIG_TEE_SVP) += tee_ta_start_modem_svp.o
obj-$(CONFIG_DB8500_MLOADER) += mloader-db8500.o
obj-$(CONFIG_UX500_PRCMU_TIMER) += timer-prcmu.o
+obj-$(CONFIG_U8500_REGULATOR_DEBUG) += virt-regulator-u8500.o
diff --git a/arch/arm/mach-ux500/board-mop500-regulators.c b/arch/arm/mach-ux500/board-mop500-regulators.c
index 60ab102f201..57da377022e 100644
--- a/arch/arm/mach-ux500/board-mop500-regulators.c
+++ b/arch/arm/mach-ux500/board-mop500-regulators.c
@@ -13,6 +13,11 @@
#include <linux/regulator/ab8500.h>
#include "board-mop500-regulators.h"
+#ifdef CONFIG_U8500_REGULATOR_DEBUG
+#define REGULATOR_SUPPLY_DEBUG REGULATOR_SUPPLY
+#else
+#define REGULATOR_SUPPLY_DEBUG(_name, _dev_name)
+#endif
/*
* TPS61052 regulator
*/
@@ -55,6 +60,7 @@ static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
REGULATOR_SUPPLY("vdd", "3-004b"),
/* L3G4200D Gyroscope device */
REGULATOR_SUPPLY("vdd", "l3g4200d"),
+ REGULATOR_SUPPLY_DEBUG("aux1", "reg-virt-consumer.0")
};
static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
@@ -62,18 +68,13 @@ static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
REGULATOR_SUPPLY("vmmc", "sdi4"),
/* AB8500 audio codec */
REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
+ REGULATOR_SUPPLY_DEBUG("aux2", "reg-virt-consumer.1")
};
static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
/* External MMC slot power */
REGULATOR_SUPPLY("vmmc", "sdi0"),
-};
-
-static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
- /* TV-out DENC supply */
- REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
- /* Internal general-purpose ADC */
- REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
+ REGULATOR_SUPPLY_DEBUG("aux3", "reg-virt-consumer.2")
};
static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
@@ -81,35 +82,49 @@ static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
REGULATOR_SUPPLY("v-intcore", NULL),
/* USB Transciever */
REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
+ REGULATOR_SUPPLY_DEBUG("intcore", "reg-virt-consumer.3")
};
-static struct regulator_consumer_supply ab8500_vana_consumers[] = {
- /* External displays, connector on board, 1v8 power supply */
- REGULATOR_SUPPLY("vsmps2", "mcde.0"),
- /* for analogue part of displays */
- REGULATOR_SUPPLY("v-ana", "mcde"),
- /* camera supply */
- REGULATOR_SUPPLY("v-ana", "mmio_camera"),
+static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
+ /* TV-out DENC supply */
+ REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
+ /* Internal general-purpose ADC */
+ REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
+ REGULATOR_SUPPLY_DEBUG("tvout", "reg-virt-consumer.4")
};
static struct regulator_consumer_supply ab8500_vaudio_consumers[] = {
/* vaudio regulator, supply for ab8500-vaudio */
REGULATOR_SUPPLY("v-audio", NULL),
+ REGULATOR_SUPPLY_DEBUG("audio", "reg-virt-consumer.6")
};
static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
/* vamic1 regulator */
REGULATOR_SUPPLY("v-amic1", NULL),
+ REGULATOR_SUPPLY_DEBUG("anamic1", "reg-virt-consumer.7")
};
static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
/* vamic2 regulator */
REGULATOR_SUPPLY("v-amic2", NULL),
+ REGULATOR_SUPPLY_DEBUG("anamic2", "reg-virt-consumer.8")
};
static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
/* supply for v-dmic, VDMIC LDO */
REGULATOR_SUPPLY("v-dmic", NULL),
+ REGULATOR_SUPPLY_DEBUG("dmic", "reg-virt-consumer.9")
+};
+
+static struct regulator_consumer_supply ab8500_vana_consumers[] = {
+ /* External displays, connector on board, 1v8 power supply */
+ REGULATOR_SUPPLY("vsmps2", "mcde.0"),
+ /* for analogue part of displays */
+ REGULATOR_SUPPLY("v-ana", "mcde"),
+ /* camera supply */
+ REGULATOR_SUPPLY("v-ana", "mmio_camera"),
+ REGULATOR_SUPPLY_DEBUG("ana", "reg-virt-consumer.10")
};
/* ab8500 regulator register initialization */
diff --git a/arch/arm/mach-ux500/virt-regulator-u8500.c b/arch/arm/mach-ux500/virt-regulator-u8500.c
new file mode 100644
index 00000000000..3de4a645fef
--- /dev/null
+++ b/arch/arm/mach-ux500/virt-regulator-u8500.c
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2010
+ *
+ * License Terms: GNU General Public License v2
+ * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
+ *
+ * Board specific file for configuration of virtual regulators. These virtual
+ * regulators are used for debug purposes. They connect to the regulator device
+ * just like any other consumer and expose controls in sysfs, so that
+ * regulators can be controlled from user space.
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+
+/*
+ * Configuration for AB8500 virtual regulators
+ */
+static struct platform_device u8500_aux1_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 0,
+ .dev = {
+ .platform_data = "aux1",
+ },
+};
+
+static struct platform_device u8500_aux2_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 1,
+ .dev = {
+ .platform_data = "aux2",
+ },
+};
+
+static struct platform_device u8500_aux3_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 2,
+ .dev = {
+ .platform_data = "aux3",
+ },
+};
+
+static struct platform_device u8500_intcore_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 3,
+ .dev = {
+ .platform_data = "intcore",
+ },
+};
+
+static struct platform_device u8500_tvout_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 4,
+ .dev = {
+ .platform_data = "tvout",
+ },
+};
+
+static struct platform_device u8500_audio_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 6,
+ .dev = {
+ .platform_data = "audio",
+ },
+};
+
+static struct platform_device u8500_anamic1_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 7,
+ .dev = {
+ .platform_data = "anamic1",
+ },
+};
+
+static struct platform_device u8500_anamic2_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 8,
+ .dev = {
+ .platform_data = "anamic2",
+ },
+};
+
+static struct platform_device u8500_dmic_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 9,
+ .dev = {
+ .platform_data = "dmic",
+ },
+};
+
+static struct platform_device u8500_ana_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 10,
+ .dev = {
+ .platform_data = "ana",
+ },
+};
+
+/*
+ * Configuration for other U8500 virtual regulators
+ */
+static struct platform_device u8500_ape_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 11,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_arm_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 12,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_modem_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 13,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_pll_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 14,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_smps1_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 15,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_smps2_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 16,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_smps3_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 17,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_rf1_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 18,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+/*
+ * Configuration for U8500 power domain virtual regulators
+ */
+static struct platform_device u8500_sva_mmdsp_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 19,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sva_mmdsp_ret_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 20,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sva_pipe_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 21,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sia_mmdsp_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 22,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sia_mmdsp_ret_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 23,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sia_pipe_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 24,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_sga_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 25,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_b2r2_mcde_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 26,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_esram12_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 27,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_esram12_ret_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 28,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_esram34_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 29,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device u8500_esram34_ret_virtual_regulator_device = {
+ .name = "reg-virt-consumer",
+ .id = 30,
+ .dev = {
+ .platform_data = "test",
+ },
+};
+
+static struct platform_device *u8500_virtual_regulator_devices[] = {
+ &u8500_aux1_virtual_regulator_device,
+ &u8500_aux2_virtual_regulator_device,
+ &u8500_aux3_virtual_regulator_device,
+ &u8500_intcore_virtual_regulator_device,
+ &u8500_tvout_virtual_regulator_device,
+ &u8500_audio_virtual_regulator_device,
+ &u8500_anamic1_virtual_regulator_device,
+ &u8500_anamic2_virtual_regulator_device,
+ &u8500_dmic_virtual_regulator_device,
+ &u8500_ana_virtual_regulator_device,
+ &u8500_ape_virtual_regulator_device,
+ &u8500_arm_virtual_regulator_device,
+ &u8500_modem_virtual_regulator_device,
+ &u8500_pll_virtual_regulator_device,
+ &u8500_smps1_virtual_regulator_device,
+ &u8500_smps2_virtual_regulator_device,
+ &u8500_smps3_virtual_regulator_device,
+ &u8500_rf1_virtual_regulator_device,
+ &u8500_sva_mmdsp_virtual_regulator_device,
+ &u8500_sva_mmdsp_ret_virtual_regulator_device,
+ &u8500_sva_pipe_virtual_regulator_device,
+ &u8500_sia_mmdsp_virtual_regulator_device,
+ &u8500_sia_mmdsp_ret_virtual_regulator_device,
+ &u8500_sia_pipe_virtual_regulator_device,
+ &u8500_sga_virtual_regulator_device,
+ &u8500_b2r2_mcde_virtual_regulator_device,
+ &u8500_esram12_virtual_regulator_device,
+ &u8500_esram12_ret_virtual_regulator_device,
+ &u8500_esram34_virtual_regulator_device,
+ &u8500_esram34_ret_virtual_regulator_device,
+};
+
+static int __init u8500_virtual_regulator_init(void)
+{
+ int ret;
+
+ ret = platform_add_devices(u8500_virtual_regulator_devices,
+ ARRAY_SIZE(u8500_virtual_regulator_devices));
+ if (ret != 0)
+ pr_err("Failed to register U8500 virtual regulator devices:"
+ " %d\n", ret);
+
+ return ret;
+}
+module_init(u8500_virtual_regulator_init);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Bengt Jonsson <bengt.g.jonsson@stericsson.com");
+MODULE_DESCRIPTION("Configuration of u8500 virtual regulators");
+MODULE_ALIAS("platform:u8500-virtual-regulator");