I just replaced the original batteries with two new 1500 mAh.
The new capacity is slightly more than the original batteries, and the original battery gauge program can provide me with roughly 7 hours reading. Not perfect, but acceptable.
To completely harness the new battery capacity, I am researching the battery kernel module program. With jharker's detailed instruction, I learned a lot. It's really clever to calculate capacity by monitoring voltage variation.
Now, I have one question. The original battery kernel module monitors battery capacity by a variable charge_status. Ideally, I expect the calculation is done in battery.o, and I can modify battery.o to accomodate my new batteries. In the source code, I can't see any line specific to the original capacity (2200 mAh). That means, the data sent to battery.o is calculated based on 2200mAh. How can it be so? I guess that's why Jharker had to monitor battery capacity through voltage variable.