diff options
author | Suresh Mangipudi <smangipudi@nvidia.com> | 2010-07-23 17:10:42 -0700 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-07-26 15:23:34 -0700 |
commit | 86ec9122a2a50dd4652c05f1090c0f01a4110a6c (patch) | |
tree | dd03ed75c10cf06a2b4d91ddaec4880733b568c3 /arch | |
parent | 51b2a84496a6426cec1f8aa56a60ea3a05e7d1f5 (diff) |
[ventana]Battery charging.
The GPIO port R pin 6 needs to be set low for charging of battery on ventana rev C
Change-Id: I2ac17494f65f550d5bf676ae8ec09819983b72ac
Reviewed-on: http://git-master/r/4171
Tested-by: Suresh Mangipudi <smangipudi@nvidia.com>
Reviewed-by: Gary King <gking@nvidia.com>
Diffstat (limited to 'arch')
4 files changed, 249 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/odm_kit/platform/Makefile b/arch/arm/mach-tegra/odm_kit/platform/Makefile index 8cf34fa4b7f6..c5cafc81bfc7 100644 --- a/arch/arm/mach-tegra/odm_kit/platform/Makefile +++ b/arch/arm/mach-tegra/odm_kit/platform/Makefile @@ -5,4 +5,4 @@ obj-$(CONFIG_TOUCHSCREEN_TEGRA_ODM) += touch/ obj-$(CONFIG_TEGRA_ODM_VIBRATE) += vibrate/ obj-$(CONFIG_MOUSE_TEGRA_NVEC) += mouse/ obj-$(CONFIG_TEGRA_BATTERY_NVEC) += battery/ -obj-$(CONFIG_BATTERY_TEGRA_ODM) += battery/ +obj-$(CONFIG_TEGRA_BATTERY_ODM) += battery/ diff --git a/arch/arm/mach-tegra/odm_kit/platform/battery/Makefile b/arch/arm/mach-tegra/odm_kit/platform/battery/Makefile index 9494d32754cc..5e7430cbfad9 100644 --- a/arch/arm/mach-tegra/odm_kit/platform/battery/Makefile +++ b/arch/arm/mach-tegra/odm_kit/platform/battery/Makefile @@ -9,4 +9,4 @@ endif obj-$(CONFIG_TEGRA_ODM_HARMONY) += nvodm_battery.o obj-$(CONFIG_TEGRA_ODM_WHISTLER) += nvodm_battery_stub.o -obj-$(CONFIG_TEGRA_ODM_VENTANA) += nvodm_battery_stub.o +obj-$(CONFIG_TEGRA_ODM_VENTANA) += nvodm_battery_ventana.o diff --git a/arch/arm/mach-tegra/odm_kit/platform/battery/nvodm_battery_ventana.c b/arch/arm/mach-tegra/odm_kit/platform/battery/nvodm_battery_ventana.c new file mode 100644 index 000000000000..33e36285e837 --- /dev/null +++ b/arch/arm/mach-tegra/odm_kit/platform/battery/nvodm_battery_ventana.c @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2009 NVIDIA Corporation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NVIDIA Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "nvcommon.h" +#include "nvodm_battery.h" +#include "nvrm_gpio.h" +#include "nvodm_query_discovery.h" +#include "nvodm_query_gpio.h" +#include "nvos.h" + +typedef struct NvOdmBatteryDeviceRec +{ + NvRmGpioPinHandle hPin; + NvU32 PinCount; + NvRmDeviceHandle hRm; + NvRmGpioHandle hGpio; + NvBool bBattPresent; + NvBool bBattFull; + const NvOdmGpioPinInfo *pGpioPinInfo; + +} NvOdmBatteryDevice; + +/** + * Gets the battery event. + * + * @param hDevice A handle to the EC. + * @param pBatteryEvent Battery events + * + */ +void NvOdmBatteryGetEvent( + NvOdmBatteryDeviceHandle hDevice, + NvU8 *pBatteryEvent) +{ + NvOdmBatteryDevice *pBattContext = NULL; + + pBattContext = (NvOdmBatteryDevice *)hDevice; + + *pBatteryEvent = 0; +} + +NvBool NvOdmBatteryDeviceOpen(NvOdmBatteryDeviceHandle *hDevice, + NvOdmOsSemaphoreHandle *hOdmSemaphore) +{ + NvOdmBatteryDevice *pBattContext = NULL; + NvU32 i; + NvError NvStatus = NvError_Success; + + pBattContext = NvOdmOsAlloc(sizeof(NvOdmBatteryDevice)); + if (!pBattContext) + { + NvOsDebugPrintf(("NvOdmOsAlloc failed to allocate pBattContext.")); + return NV_FALSE; + } + + NvOdmOsMemset(pBattContext, 0, sizeof(NvOdmBatteryDevice)); + NvStatus = NvRmOpen(&pBattContext->hRm, 0); + if (NvStatus != NvError_Success) + goto Cleanup; + + NvStatus = NvRmGpioOpen(pBattContext->hRm, &pBattContext->hGpio); + if (NvStatus != NvError_Success) + goto Cleanup; + + pBattContext->pGpioPinInfo = NvOdmQueryGpioPinMap( + NvOdmGpioPinGroup_Battery, + 0, + &pBattContext->PinCount); + if (pBattContext->pGpioPinInfo == NULL) + { + goto Cleanup; + } + for (i = 0; i < pBattContext->PinCount; i++ ) + { + /*Need the pin 1 to be set to Output for charging of the battery. */ + if (i == 1) + { + NvRmGpioAcquirePinHandle( + pBattContext->hGpio, + pBattContext->pGpioPinInfo[i].Port, + pBattContext->pGpioPinInfo[i].Pin, + &pBattContext->hPin); + if (!pBattContext->hPin) + { + goto Cleanup; + } + NvRmGpioConfigPins(pBattContext->hGpio, &pBattContext->hPin, 1, NvRmGpioPinMode_Output); + } + } + *hDevice = pBattContext; + return NV_TRUE; +Cleanup: + NvOdmBatteryDeviceClose(pBattContext); + return NV_FALSE; +} + +void NvOdmBatteryDeviceClose(NvOdmBatteryDeviceHandle hDevice) +{ + NvOdmBatteryDevice *pBattContext = NULL; + pBattContext = (NvOdmBatteryDevice *)hDevice; + + if (pBattContext->hGpio) + { + NvRmGpioReleasePinHandles(pBattContext->hGpio, &pBattContext->hPin, + pBattContext->PinCount); + NvRmGpioClose(pBattContext->hGpio); + } + + if (pBattContext->hRm) + { + NvRmClose(pBattContext->hRm); + pBattContext->hRm = NULL; + } + if (pBattContext) + NvOdmOsFree(pBattContext); +} +/** + * Gets the AC line status. + * + * @param hDevice A handle to the EC. + * @param pStatus A pointer to the AC line + * status returned by the ODM. + * + * @return NV_TRUE if successful, or NV_FALSE otherwise. + */ +NvBool NvOdmBatteryGetAcLineStatus( + NvOdmBatteryDeviceHandle hDevice, + NvOdmBatteryAcLineStatus *pStatus) +{ + *pStatus = NvOdmBatteryAcLine_Offline; + return NV_FALSE; +} + + +/** + * Gets the battery status. + * + * @param hDevice A handle to the EC. + * @param batteryInst The battery type. + * @param pStatus A pointer to the battery + * status returned by the ODM. + * + * @return NV_TRUE if successful, or NV_FALSE otherwise. + */ +NvBool NvOdmBatteryGetBatteryStatus( + NvOdmBatteryDeviceHandle hDevice, + NvOdmBatteryInstance batteryInst, + NvU8 *pStatus) +{ + *pStatus = NVODM_BATTERY_STATUS_UNKNOWN; + return NV_FALSE; +} + +/** + * Gets the battery data. + * + * @param hDevice A handle to the EC. + * @param batteryInst The battery type. + * @param pData A pointer to the battery + * data returned by the ODM. + * + * @return NV_TRUE if successful, or NV_FALSE otherwise. + */ +NvBool NvOdmBatteryGetBatteryData( + NvOdmBatteryDeviceHandle hDevice, + NvOdmBatteryInstance batteryInst, + NvOdmBatteryData *pData) +{ + NvOdmBatteryData BatteryData; + + BatteryData.BatteryAverageCurrent = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryAverageInterval = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryCurrent = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryLifePercent = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryLifeTime = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryMahConsumed = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryTemperature = NVODM_BATTERY_DATA_UNKNOWN; + BatteryData.BatteryVoltage = NVODM_BATTERY_DATA_UNKNOWN; + + *pData = BatteryData; + return NV_FALSE; +} + +/** + * Gets the battery full life time. + * + * @param hDevice A handle to the EC. + * @param batteryInst The battery type. + * @param pLifeTime A pointer to the battery + * full life time returned by the ODM. + * + */ +void NvOdmBatteryGetBatteryFullLifeTime( + NvOdmBatteryDeviceHandle hDevice, + NvOdmBatteryInstance batteryInst, + NvU32 *pLifeTime) +{ + *pLifeTime = NVODM_BATTERY_DATA_UNKNOWN; +} + + +/** + * Gets the battery chemistry. + * + * @param hDevice A handle to the EC. + * @param batteryInst The battery type. + * @param pChemistry A pointer to the battery + * chemistry returned by the ODM. + * + */ +void NvOdmBatteryGetBatteryChemistry( + NvOdmBatteryDeviceHandle hDevice, + NvOdmBatteryInstance batteryInst, + NvOdmBatteryChemistry *pChemistry) +{ + *pChemistry = NVODM_BATTERY_DATA_UNKNOWN; +} + diff --git a/arch/arm/mach-tegra/odm_kit/query/ventana/nvodm_query_gpio.c b/arch/arm/mach-tegra/odm_kit/query/ventana/nvodm_query_gpio.c index 2e714d2f4b6b..e1938ae40b44 100644 --- a/arch/arm/mach-tegra/odm_kit/query/ventana/nvodm_query_gpio.c +++ b/arch/arm/mach-tegra/odm_kit/query/ventana/nvodm_query_gpio.c @@ -156,6 +156,7 @@ static const NvOdmGpioPinInfo s_GpioKeyBoard[] = { static const NvOdmGpioPinInfo s_Battery[] = { // Low Battery {NVODM_PORT('w'), 3, NvOdmGpioPinActiveState_Low}, + {NVODM_PORT('r'), 6, NvOdmGpioPinActiveState_Low}, }; const NvOdmGpioPinInfo *NvOdmQueryGpioPinMap(NvOdmGpioPinGroup Group, NvU32 Instance, NvU32 *pCount) |