Tutorial  Updated

Fix for Linux Battery issue

Here's a quick and easy fix for the turning off at 40% battery issue that people are seeing after running Linux. This is effectively the same fix as unplugging the battery, but does so without having to take apart the Switch.

Step 1: Download attached fusee-linux-battery-fix.rar
Step 2: Extract and load the binary with your favorite RCM Smash tool (I'm using TegraRcmSmash).
Step 3: You should see the typical fusee screen, at this point unplug the USB cable. The screen should go off.
Step 4 (optional?): Hold the power button for 10 seconds. Your switch won't turn on at this point, that's desired.
Step 5: Plug in a USB cable. Switch will turn on, and you're done.

This worked to fix my Switch, let me know if it works for you.

Edit:

Source is here:

github/crystalseedgba/BatteryFix/blob/master/fusee/src/main.c (Sorry it's not letting me post hyperlinks)

This doesn't fix the Linux bug, this is really just a crude workaround. At first I suspected that Linux is somehow mangling the battery gauge but this doesn't seem to be the case. The battery gauge reports around 40% and decent battery voltage when my Switch would turn off. I think Linux is misconfiguring some undervoltage lockout somewhere, but I don't know where.

Thanks to jjbredesen for his "How to make a custom Fusee payloads" tutorial.
 

Attachments

Last edited by Crystalseed,
Source code posting along with the binaries is actually REQUIRED since this is based on the fusee payload code base (GPLv2 licence)... don't run this until someone else has compiled it and verified the binaries are similar.

Code:
  init_i2c_controller(0);
  i2c_read_register((int)v2, 1u, 0, 0x6B, 0xA);
  if ( v2[0] != 0x2F )
  {
    printk("ERROR: charger part number mismatch got: 0x%02x want: 0x%02x\n\n   ", v2[0], 0x2F);
    while ( 1 )
      ;
  }
  i2c_read_register((int)&v2[1], 1u, 0, 0x6B, 5);
  v2[1] &= 0xCFu;
  i2c_write_register(0, 0x6B, 5, &v2[1], 1);
  i2c_read_register((int)&v2[2], 1u, 0, 0x6B, 7);
  v2[2] |= 0x20u;
  i2c_write_register(0, 107, 7, &v2[2], 1);
  printk("\n\nBATFET is now disabled, disconnect the USB cable.\n\n");

reverse engineered code, so doesnt seem too malicious.

Wooooow Is the caused by two \n missing on battery level?

But if you use linux again the bug return?
yes, so probably you'll have to relaunch the fix after each use.

Can it be integrated with lakka?

I think, the fix has to be released as open source before thinking about a compatibility with any other open source proj like SHOElf / Lakka.
 
Here's a quick and easy fix for the turning off at 40% battery issue that people are seeing after running Linux. This is effectively the same fix as unplugging the battery, but does so without having to take apart the Switch.

Step 1: Download attached fusee-linux-battery-fix.rar
Step 2: Extract and load the binary with your favorite RCM Smash tool (I'm using TegraRcmSmash).
Step 3: You should see the typical fusee screen, at this point unplug the USB cable. The screen should go off.
Step 4 (optional?): Hold the power button for 10 seconds. Your switch won't turn on at this point, that's desired.
Step 5: Plug in a USB cable. Switch will turn on, and you're done.

This worked to fix my Switch, let me know if it works for you.

Can you please open-source this so other developers can possibly use this as a patch to the Linux kernel?
 
Down to 36%. Still running MC (started a world just to drain the battery)

--------------------- MERGED ---------------------------

Seems like this is legit. Tysm OP!
 
This checks if it can find the bq24193 battery charger IC.
Then it disables the watchdog timer in reg 05
And lastly enables bit5 - BATFET_Disable in reg 07 that triggers a battery disconnect.

EDIT:
The watchdog timer, btw, is needed to be disabled so it can keep the BATFET off.
Until you connect a charging source.
 
Last edited by CTCaer,
Had an issue where I never used Linux but still had my battery die at 40-50%, I'm trying this now.

If this really does work i hope it's used to fix the issue with lakkatv
It works. You just have to follow the instructions correctly.

--------------------- MERGED ---------------------------

I'm at 3% handheld mode, still running MC.

Update: Now it says "Charge the console. It will go to sleep mode soon." And it went to sleep mode.
 
It’s surprising that a newcomer with one post made a fix that no one could do it before :o
It's some Ninty guy and the payload is injecting a self destruction mod into your Switch so explodes on 31th dec to punish you for using hackz!
 

Site & Scene News

Popular threads in this forum