From 6e75d9ba4cb6a34d4a45d1db38d48d563e86ee75 Mon Sep 17 00:00:00 2001 From: "Venkata(Muni) Anda" Date: Fri, 22 Jan 2010 15:20:19 -0800 Subject: tegra: Hooked pm_power_off callback to the Board adaptation. When the systemn is powered off, pm_power_off callback is called which sets the voltage rail corresponding to the GUID NV_VDD_SoC_ODM_ID to Off. So, to use the power off feature, implement the NV_VDD_SoC_ODM_ID GUID to power rail mapping and PMU odm adaptation to turn off that rail. Change-Id: I4c439325cd14bb848f100b3e7ddc029a20cd0c9d --- arch/arm/mach-tegra/board_nvodm.c | 17 ++++++++++++----- arch/arm/mach-tegra/include/mach/board.h | 6 ++++++ arch/arm/mach-tegra/include/mach/pci.h | 2 -- arch/arm/mach-tegra/pci.c | 3 ++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-tegra/board_nvodm.c b/arch/arm/mach-tegra/board_nvodm.c index 237844085c84..b1404b6ff00f 100644 --- a/arch/arm/mach-tegra/board_nvodm.c +++ b/arch/arm/mach-tegra/board_nvodm.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -56,7 +57,6 @@ #include "mach/nvrm_linux.h" #include "nvassert.h" #include "nvodm_query_discovery.h" -#include "mach/pci.h" #include <../../../drivers/staging/android/timed_output.h> @@ -277,13 +277,13 @@ static void __init NvConfigDebugConsole( return; } -void __init pci_tegra_power(int on) +void tegra_set_voltage(NvU64 guid, int on) { u32 settling_time; const NvOdmPeripheralConnectivity *con = NULL; int i; - con = NvOdmPeripheralGetGuid(NV_VDD_PEX_CLK_ODM_ID); + con = NvOdmPeripheralGetGuid(guid); if (con == NULL) return; @@ -311,6 +311,12 @@ extern void __init tegra_clk_init(void); extern void __init tegra_init_snor_controller(void); #endif + +static void tegra_system_power_off(void) +{ + tegra_set_voltage(NV_VDD_SoC_ODM_ID, 0); +} + #if !(defined(CONFIG_ENC28J60) && defined(CONFIG_SPI_TEGRA)) #define register_enc28j60() do {} while (0) #else @@ -476,11 +482,12 @@ static void __init tegra_machine_init(void) #endif #ifdef CONFIG_TEGRA_PCI - pci_tegra_power(1); + tegra_set_voltage( NV_VDD_PEX_CLK_ODM_ID, 1); #else - pci_tegra_power(0); + tegra_set_voltage( NV_VDD_PEX_CLK_ODM_ID, 0); #endif + pm_power_off = tegra_system_power_off; } MACHINE_START(TEGRA_GENERIC, "Tegra generic") diff --git a/arch/arm/mach-tegra/include/mach/board.h b/arch/arm/mach-tegra/include/mach/board.h index 10f0f0232b90..51e85fdb7bb5 100644 --- a/arch/arm/mach-tegra/include/mach/board.h +++ b/arch/arm/mach-tegra/include/mach/board.h @@ -22,5 +22,11 @@ #define __MACH_TEGRA_BOARD_H #include +#include "nvodm_pmu.h" +#include "mach/nvrm_linux.h" +#include "nvodm_query_discovery.h" + +/* ON/off power rail given the GUID */ +void tegra_set_voltage(NvU64 guid, int on); #endif diff --git a/arch/arm/mach-tegra/include/mach/pci.h b/arch/arm/mach-tegra/include/mach/pci.h index 81f149717d05..e5eac3ad5640 100644 --- a/arch/arm/mach-tegra/include/mach/pci.h +++ b/arch/arm/mach-tegra/include/mach/pci.h @@ -320,6 +320,4 @@ static inline void __iomem *pci_tegra_config_addr(u8 bus_number, void pci_tegra_enumerate(void); -void __init pci_tegra_power(int on); - #endif diff --git a/arch/arm/mach-tegra/pci.c b/arch/arm/mach-tegra/pci.c index 11cafe2d85ae..5118692b1b79 100644 --- a/arch/arm/mach-tegra/pci.c +++ b/arch/arm/mach-tegra/pci.c @@ -33,6 +33,7 @@ #include #include +#include #include "nvrm_pmu.h" #include "nvodm_query_discovery.h" @@ -362,7 +363,7 @@ static int __init pci_tegra_setup(int nr, struct pci_sys_data *data) 0, NULL); NvRmPowerModuleClockControl(s_hRmGlobal, NvRmPrivModuleID_Pcie, pci_tegra_powerid, NV_FALSE); - pci_tegra_power(0); + tegra_set_voltage(NV_VDD_PEX_CLK_ODM_ID, 0); return 0; } pci_tegra_device_attached = true; -- cgit v1.2.3