191 lines
3.3 KiB
C
191 lines
3.3 KiB
C
/*
|
|
* Copyright (C) 2013 Apple 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.
|
|
*/
|
|
|
|
#include <debug.h>
|
|
#include <sys.h>
|
|
#include <drivers/power.h>
|
|
#include <target/powerconfig.h>
|
|
|
|
#include "power.h"
|
|
|
|
static uint32_t boot_flags;
|
|
|
|
static void write_pmu(uint32_t offset, uint32_t data)
|
|
{
|
|
volatile uint32_t *addr = (uint32_t *)(SWIFTER_PMU_BASE + offset);
|
|
*addr = data;
|
|
}
|
|
|
|
static uint32_t read_pmu(uint32_t offset)
|
|
{
|
|
volatile uint32_t *addr = (uint32_t *)(SWIFTER_PMU_BASE + offset);
|
|
return *addr;
|
|
}
|
|
|
|
bool charger_has_usb(int dock)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool charger_has_firewire(int dock)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool charger_has_external(int dock)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool charger_has_batterypack(int dock)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void charger_clear_usb_state(void)
|
|
{
|
|
}
|
|
|
|
uint32_t charger_get_max_charge_current(int dock)
|
|
{
|
|
return 1500;
|
|
}
|
|
|
|
void charger_set_charging(int dock, uint32_t input_current_limit, uint32_t *charge_current_ma)
|
|
{
|
|
}
|
|
|
|
void charger_clear_alternate_usb_current_limit(void)
|
|
{
|
|
}
|
|
|
|
int charger_read_battery_level(uint32_t *milliVolts)
|
|
{
|
|
return 5000;
|
|
}
|
|
|
|
bool charger_charge_done(int dock)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void power_clr_events(int wake)
|
|
{
|
|
}
|
|
|
|
u_int32_t pmu_read_brick_id_level(void)
|
|
{
|
|
return 5000;
|
|
}
|
|
|
|
int power_get_rail_value(int rail, unsigned mv, u_int32_t *buffer)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int power_get_buck_value(int buck, uint32_t mv, uint32_t *val)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int power_convert_dwi_to_mv(int buck, u_int32_t dwival)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
void pmu_early_init(void)
|
|
{
|
|
// Latch the power-on event(s)
|
|
boot_flags = read_pmu(SWIFTER_PMU_EVENT_REG);
|
|
// [or could we just let the OS driver recover them?]
|
|
dprintf(DEBUG_SPEW, "swifterpmu: boot_flags = %x\n", boot_flags);
|
|
}
|
|
|
|
void pmu_setup(void)
|
|
{
|
|
// Probably nothing to do for simulation
|
|
}
|
|
|
|
void pmu_late_init(void)
|
|
{
|
|
// Probably nothing to do for simulation
|
|
}
|
|
|
|
void pmu_check_events(bool *powersupply_change_event, bool *button_event, bool *other_wake_event)
|
|
{
|
|
*powersupply_change_event = false;
|
|
*button_event = false;
|
|
*other_wake_event = false;
|
|
}
|
|
|
|
int power_get_boot_flag(void)
|
|
{
|
|
return (boot_flags & SWIFTER_PMU_EVENT_HIB) ? kPowerBootFlagWarm : kPowerBootFlagCold;
|
|
}
|
|
|
|
void pmu_will_resume(void)
|
|
{
|
|
// store boot flag for OS use (re-use same NVRAM byte used for voltage between LLB and iBoot)
|
|
power_set_nvram(kPowerNVRAMiBootBootFlags0Key, boot_flags);
|
|
}
|
|
|
|
int power_read_dock_id(unsigned *id)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int power_set_soc_voltage(unsigned mv, int override)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
void pmu_set_backlight_enable(uint32_t backlight_level)
|
|
{
|
|
}
|
|
|
|
int power_get_nvram(u_int8_t key, u_int8_t *data)
|
|
{
|
|
if (key >= kPowerNVRAMPropertyCount) return -1;
|
|
|
|
*data = read_pmu(SWIFTER_PMU_NVRAM_START + (key*4)) & 0xff;
|
|
return 0;
|
|
}
|
|
|
|
int power_set_nvram(u_int8_t key, u_int8_t data)
|
|
{
|
|
if (key >= kPowerNVRAMPropertyCount) return -1;
|
|
|
|
write_pmu(SWIFTER_PMU_NVRAM_START + (key*4), data);
|
|
return 0;
|
|
}
|
|
|
|
void pmu_shutdown(void)
|
|
{
|
|
// Write the "shutdown" register
|
|
write_pmu(SWIFTER_PMU_SHUTDOWN_REG, 1);
|
|
}
|
|
|
|
void pmu_suspend(void)
|
|
{
|
|
// Write the "suspend" register
|
|
write_pmu(SWIFTER_PMU_SUSPEND_REG, 1);
|
|
}
|
|
|
|
utime_t power_get_calendar_time(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void charger_print_status(void)
|
|
{
|
|
|
|
}
|