So back when I got my P150EM, one of the deciding factors on getting it was that due to optimus/enduro, the battery life was respectable. I wanted the top hardware while still having some mobility. Over time though, the battery became more and more worn out, to the point where I hardly got over an hour of life out of it. New batteries are stupidly expensive, and Clevo used cheap cells for it in the first place. I wasn't paying $100 for a mediocre replacement battery. I decided to pay $50 for top end cells to boost capacity by 30% and get over 6h of battery life. I figured that this could get messy, and luckily a friend let me have his nearly dead P150HM battery for me to have some spare parts.
So I swapped the cells, while destroying the plastic battery shell in the process, and got a battery that worked just like it still had the old cells. Figuring I needed to reprogram the EEPROM on the battery pack, I started removing the glue all over the EEPROM chip to get it in my programmer. I stupidly forgot that I was working on a BATTERY, which meant that it was ALWAYS ON, and poured MEK over it, blowing a fuse.
After getting pissed off and giving up for a few months, today I gave it another go. I got the EEPROM chip out and started taking guesses at how to reprogram it. If I guessed wrong, good thing the fuse was blown so I don't melt anything. I figured out that battery EEPROM contains the capacity info in terms of mAh for a pair of battery cells. I searched for the default 5200 mAh (1450 in hex) and found it. I then raised this to 6800 mAh (1A90 in hex). It was a success! Nominal battery capacity was now 100640 mAh total.
So now I knew I could probably program things right after enough tries. It was now time to get the battery operational again. I bridged the fuse, and the battery came back to life. Sort of. It would charge when off, but not on. It would run, but windows reported no battery drain (infinite energy!?!?!?!?). In short, the battery EEPROM was not being updated at all as the battery state changed. I was under the impression that if Ilet it charge, it would not stop until overvoltage protection kicked in, and if I let it discharge, it would not turn off until the system BIOS detected an undervoltage scenario, which is far below the safe discharge voltage of the battery. I figured for the time I'd just let it be and try to get the EEPROM right.
Next was looking for the wear capacity. This is the capacity left in the battery as it ages. Using hwinfo64, I got the wear level, converted it to hex, and found it in the EEPROM. I then changed it to only 5% wear instead of 74%. I left some wear because I did let the cells sit for a few months, and I was directly soldering to the cells, which isn't really good for them due to the heat from the iron. This was a success. Current charge % correctly dropped as well.
So now I needed to get the battery charging right. My only option was to rip apart my old, but fully functional P150EM battery. I found that the fuse was actually really weird with 3 prongs, and only 2 prongs were supposed to have 0 resistance. I had soldered all 3 together on the P150HM battery. I switched the EEPROM chips and boards, then hoped it would work and not require me to run and get the fire extinguisher.
It worked! The battery is now charging properly as I type this. It also discharges right too. It looks like the laptop will try to overcharge it a bit since the current charge % was a little low vs reality, but that should just give it a little extra wear, with the charge % being calibrated properly at 100%.
I'm not sure how I'm going to get that back in the shell...