diff --git a/stratosphere/boot/source/boot_charger_driver.hpp b/stratosphere/boot/source/boot_charger_driver.hpp index 01885b7b3..feabc5567 100644 --- a/stratosphere/boot/source/boot_charger_driver.hpp +++ b/stratosphere/boot/source/boot_charger_driver.hpp @@ -30,7 +30,7 @@ class ChargerDriver { public: ChargerDriver() { I2cDriver::Initialize(); - I2cDriver::OpenSession(&this->i2c_session, I2cDevice_Max17050); + I2cDriver::OpenSession(&this->i2c_session, I2cDevice_Bq24193); Boot::GpioSetDirection(GpioPadName_Bq24193Charger, GpioDirection_Output); } diff --git a/stratosphere/boot/source/boot_gpio_utils.cpp b/stratosphere/boot/source/boot_gpio_utils.cpp index d578ad0fc..352ca2428 100644 --- a/stratosphere/boot/source/boot_gpio_utils.cpp +++ b/stratosphere/boot/source/boot_gpio_utils.cpp @@ -87,7 +87,7 @@ u32 Boot::GpioSetDirection(u32 gpio_pad_name, GpioDirection dir) { *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0x90)) = gpio_oe_val; /* Do a dummy read from GPIO_OE_x register (lower offset) */ - gpio_oe_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset)); + gpio_oe_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0x10)); return gpio_oe_val; } @@ -113,7 +113,7 @@ u32 Boot::GpioSetValue(u32 gpio_pad_name, GpioValue val) { *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0xA0)) = gpio_out_val; /* Do a dummy read from GPIO_OUT_x register (lower offset) */ - gpio_out_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset)); + gpio_out_val = *(reinterpret_cast(gpio_base_vaddr + gpio_reg_offset + 0x20)); return gpio_out_val; } diff --git a/stratosphere/boot/source/boot_main.cpp b/stratosphere/boot/source/boot_main.cpp index 2517ac17d..30e503c58 100644 --- a/stratosphere/boot/source/boot_main.cpp +++ b/stratosphere/boot/source/boot_main.cpp @@ -25,6 +25,7 @@ #include "boot_functions.hpp" #include "boot_reboot_manager.hpp" +#include "i2c_driver/i2c_api.hpp" extern "C" { extern u32 __start__; @@ -120,18 +121,25 @@ int main(int argc, char **argv) /* Talk to PMIC/RTC, set boot reason with SPL. */ Boot::DetectBootReason(); - /* Display splash screen for two seconds. */ - Boot::ShowSplashScreen(); + const HardwareType hw_type = Boot::GetHardwareType(); + if (hw_type != HardwareType_Copper) { + /* Display splash screen for two seconds. */ + Boot::ShowSplashScreen(); - /* Check that the battery has enough to boot. */ - Boot::CheckBatteryCharge(); + /* Check that the battery has enough to boot. */ + Boot::CheckBatteryCharge(); + } /* Configure pinmux + drive pads. */ Boot::ConfigurePinmux(); /* TODO: SetInitialWakePinConfiguration(); */ - Boot::SetInitialClockConfiguration(); + if (hw_type != HardwareType_Copper) { + Boot::SetInitialClockConfiguration(); + } + + Boot::SetFanEnabled(); /* TODO: CheckAndRepairBootImages(); */ diff --git a/stratosphere/boot/source/i2c_driver/boot_pcv.cpp b/stratosphere/boot/source/i2c_driver/boot_pcv.cpp index b54c315f1..6ef431a42 100644 --- a/stratosphere/boot/source/i2c_driver/boot_pcv.cpp +++ b/stratosphere/boot/source/i2c_driver/boot_pcv.cpp @@ -83,7 +83,7 @@ Result Pcv::SetReset(PcvModule module, bool reset) { if (reset) { SetRegisterBits(regs.rst_reg, regs.mask); } else { - ClearRegisterBits(regs.rst_reg, regs.mask); + ClearRegisterBits(regs.rst_reg, ~regs.mask); } return ResultSuccess;