diff options
author | Anshul Jain <anshulj@nvidia.com> | 2011-12-08 17:33:32 -0800 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-21 12:06:21 +0530 |
commit | 80ed192a6c518d8812a9482be751b99d1e451193 (patch) | |
tree | e643a9d45e499f45ef45ce5df25f93a8d60d15c1 | |
parent | ea8fd1600b0590293b917f0b3322a0b8be1220fe (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.c | 32 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise.h | 7 |
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 */ |