summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnshul Jain <anshulj@nvidia.com>2011-12-08 17:33:32 -0800
committerVarun Wadekar <vwadekar@nvidia.com>2011-12-21 12:06:21 +0530
commit80ed192a6c518d8812a9482be751b99d1e451193 (patch)
treee643a9d45e499f45ef45ce5df25f93a8d60d15c1
parentea8fd1600b0590293b917f0b3322a0b8be1220fe (diff)
arm: tegra: enterprise: Initialize battery peak current management device
Register the battery peak current management device, that can trigger cpu frequency/voltage change when GPIO is triggered by battery current monitoring device. Change-Id: I5a79ed2d3e057a51a7dc3953b8c252f4ee5b9a6a Signed-off-by: Anshul Jain <anshulj@nvidia.com> Reviewed-on: http://git-master/r/68816 Reviewed-on: http://git-master/r/69104 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Lokesh Pathak <lpathak@nvidia.com> Tested-by: Lokesh Pathak <lpathak@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/board-enterprise-power.c32
-rw-r--r--arch/arm/mach-tegra/board-enterprise.c1
-rw-r--r--arch/arm/mach-tegra/board-enterprise.h7
3 files changed, 39 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-power.c b/arch/arm/mach-tegra/board-enterprise-power.c
index 470a8b13e05a..ac7864b6d5c9 100644
--- a/arch/arm/mach-tegra/board-enterprise-power.c
+++ b/arch/arm/mach-tegra/board-enterprise-power.c
@@ -28,6 +28,8 @@
#include <linux/tps80031-charger.h>
#include <linux/gpio.h>
#include <linux/io.h>
+#include <linux/cpumask.h>
+#include <linux/platform_data/tegra_bpc_mgmt.h>
#include <mach/edp.h>
#include <mach/iomap.h>
@@ -580,3 +582,33 @@ int __init enterprise_edp_init(void)
return 0;
}
#endif
+
+static struct tegra_bpc_mgmt_platform_data bpc_mgmt_platform_data = {
+ .gpio_trigger = TEGRA_BPC_TRIGGER,
+ .bpc_mgmt_timeout = TEGRA_BPC_TIMEOUT,
+};
+
+static struct platform_device enterprise_bpc_mgmt_device = {
+ .name = "tegra-bpc-mgmt",
+ .id = -1,
+ .dev = {
+ .platform_data = &bpc_mgmt_platform_data,
+ },
+};
+
+void __init enterprise_bpc_mgmt_init(void)
+{
+ int int_gpio = TEGRA_GPIO_TO_IRQ(TEGRA_BPC_TRIGGER);
+
+ tegra_gpio_enable(TEGRA_BPC_TRIGGER);
+
+#ifdef CONFIG_SMP
+ cpumask_setall(&(bpc_mgmt_platform_data.affinity_mask));
+ irq_set_affinity_hint(int_gpio,
+ &(bpc_mgmt_platform_data.affinity_mask));
+ irq_set_affinity(int_gpio, &(bpc_mgmt_platform_data.affinity_mask));
+#endif
+ platform_device_register(&enterprise_bpc_mgmt_device);
+
+ return;
+}
diff --git a/arch/arm/mach-tegra/board-enterprise.c b/arch/arm/mach-tegra/board-enterprise.c
index ecb080dcba1c..099a831a029d 100644
--- a/arch/arm/mach-tegra/board-enterprise.c
+++ b/arch/arm/mach-tegra/board-enterprise.c
@@ -952,6 +952,7 @@ static void __init tegra_enterprise_init(void)
enterprise_emc_init();
enterprise_sensors_init();
enterprise_suspend_init();
+ enterprise_bpc_mgmt_init();
tegra_release_bootloader_fb();
enterprise_nfc_init();
}
diff --git a/arch/arm/mach-tegra/board-enterprise.h b/arch/arm/mach-tegra/board-enterprise.h
index 9141e44c29fc..e56af02e7cad 100644
--- a/arch/arm/mach-tegra/board-enterprise.h
+++ b/arch/arm/mach-tegra/board-enterprise.h
@@ -51,6 +51,7 @@ int enterprise_modem_init(void);
int enterprise_suspend_init(void);
int enterprise_edp_init(void);
void __init enterprise_tsensor_init(void);
+void enterprise_bpc_mgmt_init(void);
/* Invensense MPU Definitions */
#define MPU_GYRO_NAME "mpu3050"
@@ -137,6 +138,10 @@ void __init enterprise_tsensor_init(void);
#define TDIODE_OFFSET (9000) /* in millicelsius */
+/* Battery Peak Current Management */
+#define TEGRA_BPC_TRIGGER TEGRA_GPIO_PR3
+#define TEGRA_BPC_TIMEOUT 100 /* ms */
+
/* Baseband IDs */
enum tegra_bb_type {
@@ -145,4 +150,4 @@ enum tegra_bb_type {
TEGRA_BB_M7400,
};
-#endif
+#endif /*_MACH_TEGRA_BOARD_ENTERPRISE_H */