diff --git a/stratosphere/boot/source/boot_check_battery.cpp b/stratosphere/boot/source/boot_check_battery.cpp index 33f2396f5..07fea7065 100644 --- a/stratosphere/boot/source/boot_check_battery.cpp +++ b/stratosphere/boot/source/boot_check_battery.cpp @@ -466,12 +466,21 @@ namespace ams::boot { boot::ShutdownSystem(); } } + + /* On 18.0.0+ i2c shutdown is unconditionally disabled here. */ + if (hos::GetVersion() >= hos::Version_18_0_0) { + if (R_FAILED(battery_driver.SetI2cShutdownEnabled(false))) { + boot::ShutdownSystem(); + } + } /* Get the boot reason. */ const auto boot_reason = boot::GetBootReason(); /* Initialize the charger driver. */ - if (R_FAILED(charger_driver.Initialize(boot_reason != spl::BootReason_RtcAlarm2))) + if (R_FAILED(charger_driver.Initialize(boot_reason != spl::BootReason_RtcAlarm2))) { + boot::ShutdownSystem(); + } /* Check that the charger input limit is greater than 150 milli-amps. */ { diff --git a/stratosphere/boot/source/boot_pmic_driver.cpp b/stratosphere/boot/source/boot_pmic_driver.cpp index 893726de7..2c3d80daf 100644 --- a/stratosphere/boot/source/boot_pmic_driver.cpp +++ b/stratosphere/boot/source/boot_pmic_driver.cpp @@ -74,11 +74,14 @@ namespace ams::boot { u8 on_off_1_val = 0; R_ABORT_UNLESS(ReadI2cRegister(m_i2c_session, std::addressof(on_off_1_val), sizeof(on_off_1_val), std::addressof(on_off_1_addr), sizeof(on_off_1_addr))); on_off_1_val |= 0x80; - - /* Finalize the battery on non-Calcio. */ - if (spl::GetHardwareType() != spl::HardwareType::Calcio) { - BatteryDriver battery_driver; - this->FinalizeBattery(battery_driver); + + /* 23.0.0+ no longer finalizes the battery on any hardware type. */ + if (hos::GetVersion() < hos::Version_23_0_0) { + /* Finalize the battery on non-Calcio. */ + if (spl::GetHardwareType() != spl::HardwareType::Calcio) { + BatteryDriver battery_driver; + this->FinalizeBattery(battery_driver); + } } /* Actually write the value to trigger shutdown/reset. */