iBoot/include/drivers/power.h

214 lines
7.8 KiB
C

/*
* Copyright (C) 2007-2010 Apple Inc. All rights reserved.
* Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
*
* This document is the property of Apple Inc.
* It is considered confidential and proprietary.
*
* This document may not be reproduced or transmitted in any form,
* in whole or in part, without the express written permission of
* Apple Inc.
*/
#ifndef __DRIVERS_POWER_H
#define __DRIVERS_POWER_H
#include <sys/types.h>
__BEGIN_DECLS
#define kPowerBootFlagCold (0)
#define kPowerBootFlagColdButton (1)
#define kPowerBootFlagWarm (2)
#define kPowerBootFlagResumeLost (3)
int power_init(void);
int power_late_init(void);
int power_backlight_enable(u_int32_t backlight_level);
int power_get_boot_flag(void);
void power_suspend(void);
void power_shutdown(void); // tell the pmu to pull the plug
int power_set_soc_voltage(unsigned mv, int override);
int power_set_cpu_voltage(unsigned mv, int override);
int power_set_ram_voltage(unsigned mv, int override);
#define POWER_RAIL_CPU 0
#define POWER_RAIL_VDD_FIXED 1
#define POWER_RAIL_SOC 2
#define POWER_RAIL_CPU_RAM 3
#define POWER_RAIL_GPU 4
#define POWER_RAIL_GPU_RAM 5
// not a rail, might move this to target
#define POWER_RAIL_COUNT 6
// @rail one of POWER_RAIL_* (replace power_get_buck_value(), backward compatible)
int power_get_rail_value(int rail, unsigned mv, u_int32_t *buffer);
// @rail one of POWER_RAIL_* (backward compatible with power_convert_dwi_to_mv())
int power_convert_dwi_to_mv(int rail, u_int32_t dwival);
// deprecated, use power_get_rail_value() ( buck is not the buck# )
int power_get_buck_value(int buck, unsigned mv, u_int32_t *buffer);
int power_set_display_voltage_offset(u_int32_t voltage_offset, bool fixed_boost);
void power_set_usb_state(bool configured, bool suspended);
void power_set_usb_enabled(bool enabed);
int power_set_gpio(u_int32_t gpio, u_int32_t direction, u_int32_t value);
int power_set_ldo(u_int32_t ldo, u_int32_t voltage);
int power_enable_ldo(u_int32_t ldo, bool enable);
bool power_get_gpio(u_int32_t gpio);
void power_gpio_configure(u_int32_t gpio, u_int32_t config);
bool power_needs_precharge(void);
bool power_needs_thermal_trap(void);
bool power_do_chargetrap(void);
void power_cancel_buttonwait(void);
bool power_is_suspended(void);
void power_will_resume(void);
bool power_has_usb(void);
int power_read_dock_id(unsigned *id);
bool power_get_diags_dock(void);
u_int32_t power_get_boot_battery_level(void);
u_int32_t power_get_battery_level(void);
void power_get_usb_brick_id(uint32_t *id, size_t count);
bool power_has_batterypack(void);
bool power_enable_charging(bool inflow, bool charging);
uint32_t power_get_available_charge_current(void);
int power_get_nvram(u_int8_t key, u_int8_t *data);
int power_set_nvram(u_int8_t key, u_int8_t data);
void power_clr_events(int wake);
#define kPowerNVRAMiBootStateName "iBootState"
#define kPowerNVRAMiBootStateKey (0)
#define kPowerNVRAMiBootStatePrecharge (1 << 5) // can be or'd with modes below
#define kPowerNVRAMiBootStateThermalTrap (1 << 0)
#define kPowerNVRAMiBootStateModeMask (0xd0) // bits 4, 6 and 7 (keep backwards compatible)
#define kPowerNVRAMiBootStateModeNormalBoot (0x00)
#define kPowerNVRAMiBootStateModeResumed (0x40)
#define kPowerNVRAMiBootStateModeSuspended (0x80)
#define kPowerNVRAMiBootStateModeButtonwaitWithGraphics (0x10)
#define kPowerNVRAMiBootStateModeButtonwaitNoGraphics (0x90)
#define kPowerNVRAMiBootDebugName "iBootDebug"
#define kPowerNVRAMiBootDebugKey (1)
#define kPowerNVRAMiBootDebugIAPSerial (1 << 0)
#define kPowerNVRAMiBootDebugAltSerial (1 << 1)
#define kPowerNVRAMiBootDebugJtag (1 << 2)
#define kPowerNVRAMiBootDebugEarlyTracing (1 << 3)
#define kPowerNVRAMiBootDebugBatteryTrap (1 << 4)
#define kPowerNVRAMiBootDebugWDTWake (1 << 7)
#define kPowerNVRAMiBootStageName "iBootStage"
#define kPowerNVRAMiBootStageKey (2)
#define kPowerNVRAMiBootStageOff (0x00)
#define kPowerNVRAMiBootStageLLBStart (0x10)
#define kPowerNVRAMiBootStageLLBEnd (0x1F)
#define kPowerNVRAMiBootStageiBootStart (0x20)
#define kPowerNVRAMiBootStageiBootEnd (0x2F)
#define kPowerNVRAMDiagsStageDiagsBootComplete (0xD0)
#define kPowerNVRAMiBootStagePanicSave (0xE0)
#define kPowerNVRAMiBootStagePanicReboot (0xE1)
#define kPowerNVRAMiBootStagePrechargeReboot (0xE2)
#define kPowerNVRAMiBootStageBooted (0xFF)
#if PRODUCT_LLB
#define kPowerNVRAMiBootStageProductStart kPowerNVRAMiBootStageLLBStart
#define kPowerNVRAMiBootStageProductEnd kPowerNVRAMiBootStageLLBEnd
#endif
#if PRODUCT_IBOOT || PRODUCT_IBEC
#define kPowerNVRAMiBootStageProductStart kPowerNVRAMiBootStageiBootStart
#define kPowerNVRAMiBootStageProductEnd kPowerNVRAMiBootStageiBootEnd
#endif
#if PRODUCT_IBSS
#define kPowerNVRAMiBootStageProductStart kPowerNVRAMiBootStageLLBStart
#define kPowerNVRAMiBootStageProductEnd kPowerNVRAMiBootStageiBootEnd
#endif
#define kPowerNVRAMiBootErrorCountName "iBootErrorCount"
#define kPowerNVRAMiBootErrorCountKey (3)
#define kPowerNVRAMiBootErrorCountMask (0x0F)
#define kPowerNVRAMiBootErrorPanicShift (4)
#define kPowerNVRAMiBootErrorBootShift (0)
#define kPowerNVRAMiBootErrorStageName "iBootErrorStage"
#define kPowerNVRAMiBootErrorStageKey (4)
#define kPowerNVRAMiBootMemCalCAOffset0Key (5) // CA offset need 2 bytes
#define kPowerNVRAMiBootMemCalCAOffset1Key (6)
#define kPowerNVRAMiBootMemCalCAOffset2Key (7)
#define kPowerNVRAMiBootMemCalCAOffset3Key (8)
#define kPowerNVRAMiBootMemCalCAOffset0Name "iBootMemCalCAOffset0"
#define kPowerNVRAMiBootMemCalCAOffset1Name "iBootMemCalCAOffset1"
#define kPowerNVRAMiBootMemCalCAOffset2Name "iBootMemCalCAOffset2"
#define kPowerNVRAMiBootMemCalCAOffset3Name "iBootMemCalCAOffset3"
#define kPowerNVRAMiBootBootFlags0Key (9)
#define kPowerNVRAMiBootBootFlags1Key (10)
#define kPowerNVRAMiBootBootFlags0Name "iBootBootFlags0"
#define kPowerNVRAMiBootBootFlags1Name "iBootBootFlags1"
#define kPowerNVRAMiBootEnterDFUName "iBootEnterDFU"
#define kPowerNVRAMiBootEnterDFUKey (11)
#define kPowerNVRAMiBootEnterDFURequest (0xA0)
#define kPowerNVRAMiBootEnterDFUOff (0x00)
#define kPowerNVRAMPropertyCount (12)
struct power_charge_limits
{
uint16_t upperVoltageLimit; /* mV */
int16_t lowerTempLimit; /* cC */
int16_t upperTempLimit; /* cC */
uint16_t currentSetting; /* charger-dependent */
};
bool power_load_memory_calibration(void *settings, uint32_t settingsSize);
bool power_store_memory_calibration(void *settings, uint32_t settingsSize);
void pmu_early_init(void);
void pmu_setup(void);
void pmu_late_init(void);
void pmu_will_resume(void);
void pmu_shutdown(void);
void pmu_suspend(void);
void pmu_set_backlight_enable(uint32_t backlight_level);
u_int32_t pmu_read_brick_id_level(void);
int pmu_read_system_temperature(int idx, int *centiCelsiusTemperature);
void pmu_check_events(bool *powersupply_change_event,
bool *button_event,
bool *other_wake_event);
int pmu_uvwarn_config(int dev, uint32_t thresholdMV);
bool power_load_voltage_knobs(void *settings, uint32_t settingsSize);
bool power_store_voltage_knobs(void *settings, uint32_t settingsSize);
utime_t power_get_calendar_time(void);
// Dark boot API's
void power_clear_dark_boot_flag (void); // Clears the dark boot flag from NVRAM. Call on every startup AFTER nvram is writable
void power_disable_dark_boot (void); // Disables dark boot by lighting up display to previous backlight command
void power_dark_boot_checkpoint (void); // Checks for button presses and disables dark boot if needed.
bool power_is_dark_boot (void); // Returns true if we are doing a dark boot.
// smartport API
//
#define SMARTPORT_EXT_PWR_IN_SEL 1
#define SMARTPORT_ACC_PWR_IN_SEL 0
int smartport_get_data(int dev, uint16_t reg, uint8_t *byte); // low level, you don't need this
int smartport_get_pwr_in_sel(int dev, uint8_t *sel); // power switch state
__END_DECLS
#endif /* __DRIVERS_POWER_H */