mirror of
https://github.com/Atmosphere-NX/Atmosphere-libs.git
synced 2025-06-29 14:32:58 +02:00
exo/mariko fatal: perform display init, reboot on power button press
This commit is contained in:
parent
33ea9ed3aa
commit
9ae30ca73b
@ -32,6 +32,8 @@ namespace ams::pmic {
|
|||||||
void DisableVddCpu(Regulator regulator);
|
void DisableVddCpu(Regulator regulator);
|
||||||
void EnableSleep();
|
void EnableSleep();
|
||||||
void PowerOff();
|
void PowerOff();
|
||||||
|
void ShutdownSystem(bool reboot);
|
||||||
bool IsAcOk();
|
bool IsAcOk();
|
||||||
|
bool IsPowerButtonPressed();
|
||||||
|
|
||||||
}
|
}
|
@ -149,7 +149,10 @@ namespace ams::secmon {
|
|||||||
HANDLER(ExceptionVectors, I2c1, UINT64_C(0x6000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
HANDLER(ExceptionVectors, I2c1, UINT64_C(0x6000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
||||||
HANDLER(MemoryController0, ExceptionVectors, UINT64_C(0x7001C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
HANDLER(MemoryController0, ExceptionVectors, UINT64_C(0x7001C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
||||||
HANDLER(MemoryController1, MemoryController0, UINT64_C(0x7001D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
HANDLER(MemoryController1, MemoryController0, UINT64_C(0x7001D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
||||||
HANDLER(Sdmmc, MemoryController1, UINT64_C(0x700B0000), UINT64_C(0x1000), true, ## __VA_ARGS__)
|
HANDLER(Sdmmc, MemoryController1, UINT64_C(0x700B0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
||||||
|
HANDLER(Disp1, Sdmmc, UINT64_C(0x54200000), UINT64_C(0x3000), true, ## __VA_ARGS__) \
|
||||||
|
HANDLER(Dsi, Disp1, UINT64_C(0x54300000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
|
||||||
|
HANDLER(MipiCal, Dsi, UINT64_C(0x700E3000), UINT64_C(0x1000), true, ## __VA_ARGS__)
|
||||||
|
|
||||||
#define DEFINE_DEVICE_REGION(_NAME_, _PREV_, _ADDRESS_, _SIZE_, _SECURE_) \
|
#define DEFINE_DEVICE_REGION(_NAME_, _PREV_, _ADDRESS_, _SIZE_, _SECURE_) \
|
||||||
constexpr inline const MemoryRegion MemoryRegionVirtualDevice##_NAME_ = MemoryRegion(MemoryRegionVirtualDevice##_PREV_.GetEndAddress() + 0x1000, _SIZE_); \
|
constexpr inline const MemoryRegion MemoryRegionVirtualDevice##_NAME_ = MemoryRegion(MemoryRegionVirtualDevice##_PREV_.GetEndAddress() + 0x1000, _SIZE_); \
|
||||||
|
@ -176,8 +176,40 @@ namespace ams::pmic {
|
|||||||
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterOnOffCnfg1, MAX77620_ONOFFCNFG1_PWR_OFF);
|
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterOnOffCnfg1, MAX77620_ONOFFCNFG1_PWR_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShutdownSystem(bool reboot) {
|
||||||
|
/* Get value, set or clear software reset mask. */
|
||||||
|
u8 on_off_2_val = i2c::QueryByte(i2c::Port_5, I2cAddressMax77620Pmic, MAX77620_REG_ONOFFCNFG2);
|
||||||
|
if (reboot) {
|
||||||
|
on_off_2_val |= MAX77620_ONOFFCNFG2_SFT_RST_WK;
|
||||||
|
} else {
|
||||||
|
on_off_2_val &= ~(MAX77620_ONOFFCNFG2_SFT_RST_WK);
|
||||||
|
}
|
||||||
|
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, MAX77620_REG_ONOFFCNFG2, on_off_2_val);
|
||||||
|
|
||||||
|
/* Get value, set software reset mask. */
|
||||||
|
u8 on_off_1_val = i2c::QueryByte(i2c::Port_5, I2cAddressMax77620Pmic, MAX77620_REG_ONOFFCNFG1);
|
||||||
|
on_off_1_val |= MAX77620_ONOFFCNFG1_SFT_RST;
|
||||||
|
|
||||||
|
/* NOTE: Here, userland finalizes the battery on non-Calcio. */
|
||||||
|
if (fuse::GetHardwareType() != fuse::HardwareType_Calcio) {
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actually write the value to trigger shutdown/reset. */
|
||||||
|
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, MAX77620_REG_ONOFFCNFG1, on_off_1_val);
|
||||||
|
|
||||||
|
/* Allow up to 5 seconds for shutdown/reboot to take place. */
|
||||||
|
util::WaitMicroSeconds(5'000'000ul);
|
||||||
|
|
||||||
|
AMS_ABORT("Shutdown failed");
|
||||||
|
}
|
||||||
|
|
||||||
bool IsAcOk() {
|
bool IsAcOk() {
|
||||||
return (GetPmicOnOffStat() & (1 << 1)) != 0;
|
return (GetPmicOnOffStat() & (1 << 1)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsPowerButtonPressed() {
|
||||||
|
return (GetPmicOnOffStat() & (1 << 2)) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user