[Galaxy S II Original Android Development] fenomeno83:
scripts that increase battery without lost performance (so, no underclock on maximum frequency) are:

1-cpu frequencies management in sleep and wake with frequencies table and minumum and maximum settable

2-script that undervolt gpu

3-script that undervolt cpu

So, you can try to use these 3 scripts in init.d

S96CPUV = sets for cpus the followings voltage 1425 1275 1175 1075 975 875 850 850 mv for 1200 1000 800 500 100(or 25) mhz (stock are 1400 1300 1250 1175 1050 950 950 950 mv for 1600 1400 1200 1000 800 500 200 100(or 25) mhz)..in zip there is also a less undervolted/stable version, if you have crash or freeze, with voltages 1425 1275 1200 1125 1000 925 875 875 mv

S97GPUV = sets for gpus the followings voltages 850 900 mv for 160 267 mhz (stock are 950 1000 mv for 160 267 mhz)..in zip there is also a less undervolted/stable version if you have crash or freeze in games or quadrant for example, with voltages 900 950 mv

S95CpuManage = it set followings available frequency 1600 1400 1200 1000 800 500 200 25 mhz and sets in wake mode luzactive governor with max freq = 1200mhz and minumum freq = 25mhz, and in sleep mode conservative governor with max freq = 500mhz and minu freq = 25mhz and disable 2° core

I don't know if you have problems setting minumum frequency to 25mhz, but in linked zip you can use also version with minumum frequency at 100mhz

S96CPUV

#!/system/bin/sh

#customize voltages to you values
#All Steps in MHz
#Steps are: 1400 1200 1000 800 500 200
NORMAL_STEPS="1275 1175 1075 975 875 850"
#Added Step is for 1600mhz
HIGHER_STEP="1425"
#Added Step is for: 100mhz or 25mhz
LOWER_STEP="850"

#Checking stuff
checkfreq1600=$(grep '1600mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)
checkfreq100=$(grep '100mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)
checkfreq25=$(grep '25mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)

if [[ -z "$checkfreq1600" ]]; then
echo "No 1600mhz stepping found -> using 6 steps voltages"
echo $NORMAL_STEPS > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
if [[ -n "$checkfreq1600" ]]; then
echo "1600mhz max stepping found"
if [[ -n "$checkfreq100" ]]; then
echo "100mhz min stepping found -> using 8 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS" "$LOWER_STEP > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
if [[ -n "$checkfreq25" ]]; then
echo "25mhz min stepping found -> using 8 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS" "$LOWER_STEP > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
echo "No 100mhz or 25mhz min stepping found -> using 7 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
fi
fi
fi
fi

S96CPUV less undervolted(stable)

#!/system/bin/sh

#customize voltages to you values
#All Steps in MHz
#Steps are: 1400 1200 1000 800 500 200
NORMAL_STEPS="1275 1200 1125 1000 925 875"
#Added Step is for 1600mhz
HIGHER_STEP="1425"
#Added Step is for: 100mhz or 25mhz
LOWER_STEP="875"

#Checking stuff
checkfreq1600=$(grep '1600mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)
checkfreq100=$(grep '100mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)
checkfreq25=$(grep '25mhz' /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table)

if [[ -z "$checkfreq1600" ]]; then
echo "No 1600mhz stepping found -> using 6 steps voltages"
echo $NORMAL_STEPS > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
if [[ -n "$checkfreq1600" ]]; then
echo "1600mhz max stepping found"
if [[ -n "$checkfreq100" ]]; then
echo "100mhz min stepping found -> using 8 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS" "$LOWER_STEP > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
if [[ -n "$checkfreq25" ]]; then
echo "25mhz min stepping found -> using 8 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS" "$LOWER_STEP > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
else
echo "No 100mhz or 25mhz min stepping found -> using 7 steps voltages"
echo $HIGHER_STEP" "$NORMAL_STEPS > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
fi
fi
fi
fi

S97GPUV

#!/system/bin/sh

# Customize the following four lines

GPU_STEP_LOW=160
GPU_STEP_HIGH=267

GPU_VOLTAGE_STEP_LOW=850
GPU_VOLTAGE_STEP_HIGH=900

# CLOCK INFO:
# 100 114 133 160 200 267 400 are valid frequencies
# 160 267 are stock/default

# VOLTAGE INFO:
# 800 min / 1200 max
# 950 1000 are stock default
# Voltage control is capable of 50mV steps only
# Kernel must support modification to buck3_init for values under 900mV to work

#
# ##############################################################################
#

if [ `expr $GPU_VOLTAGE_STEP_LOW % 50` -gt 0 ];
then
GPU_VOLTAGE_STEP_LOW=$(( $GPU_VOLTAGE_STEP_LOW + 50 - $GPU_VOLTAGE_STEP_LOW % 50))
fi;

if [ `expr $GPU_VOLTAGE_STEP_HIGH % 50` -gt 0 ];
then
GPU_VOLTAGE_STEP_HIGH=$(( $GPU_VOLTAGE_STEP_HIGH + 50 - $GPU_VOLTAGE_STEP_HIGH % 50))
fi;

GPU_VOLTAGE_STEP_HIGH=`expr $GPU_VOLTAGE_STEP_HIGH \* 1000`
GPU_VOLTAGE_STEP_LOW=`expr $GPU_VOLTAGE_STEP_LOW \* 1000`

if [ -e /sys/class/misc/gpu_clock_control/gpu_control ];
then
echo "Previous clock settings:"
cat /sys/class/misc/gpu_clock_control/gpu_control
echo "$GPU_STEP_LOW $GPU_STEP_HIGH" > /sys/class/misc/gpu_clock_control/gpu_control
echo "New clock settings:"
cat /sys/class/misc/gpu_clock_control/gpu_control
fi;

if [ -e /sys/class/misc/gpu_voltage_control/gpu_control ];
then
echo "Previous voltage settings:"
cat /sys/class/misc/gpu_voltage_control/gpu_control
echo "$GPU_VOLTAGE_STEP_LOW $GPU_VOLTAGE_STEP_HIGH" > /sys/class/misc/gpu_voltage_control/gpu_control
echo "New voltage settings:"
cat /sys/class/misc/gpu_voltage_control/gpu_control
fi;

S97GPUV less undervolted(stable)

#!/system/bin/sh

# Customize the following four lines

GPU_STEP_LOW=160
GPU_STEP_HIGH=267

GPU_VOLTAGE_STEP_LOW=900
GPU_VOLTAGE_STEP_HIGH=950

# CLOCK INFO:
# 100 114 133 160 200 267 400 are valid frequencies
# 160 267 are stock/default

# VOLTAGE INFO:
# 800 min / 1200 max
# 950 1000 are stock default
# Voltage control is capable of 50mV steps only
# Kernel must support modification to buck3_init for values under 900mV to work

#
# ##############################################################################
#

if [ `expr $GPU_VOLTAGE_STEP_LOW % 50` -gt 0 ];
then
GPU_VOLTAGE_STEP_LOW=$(( $GPU_VOLTAGE_STEP_LOW + 50 - $GPU_VOLTAGE_STEP_LOW % 50))
fi;

if [ `expr $GPU_VOLTAGE_STEP_HIGH % 50` -gt 0 ];
then
GPU_VOLTAGE_STEP_HIGH=$(( $GPU_VOLTAGE_STEP_HIGH + 50 - $GPU_VOLTAGE_STEP_HIGH % 50))
fi;

GPU_VOLTAGE_STEP_HIGH=`expr $GPU_VOLTAGE_STEP_HIGH \* 1000`
GPU_VOLTAGE_STEP_LOW=`expr $GPU_VOLTAGE_STEP_LOW \* 1000`

if [ -e /sys/class/misc/gpu_clock_control/gpu_control ];
then
echo "Previous clock settings:"
cat /sys/class/misc/gpu_clock_control/gpu_control
echo "$GPU_STEP_LOW $GPU_STEP_HIGH" > /sys/class/misc/gpu_clock_control/gpu_control
echo "New clock settings:"
cat /sys/class/misc/gpu_clock_control/gpu_control
fi;

if [ -e /sys/class/misc/gpu_voltage_control/gpu_control ];
then
echo "Previous voltage settings:"
cat /sys/class/misc/gpu_voltage_control/gpu_control
echo "$GPU_VOLTAGE_STEP_LOW $GPU_VOLTAGE_STEP_HIGH" > /sys/class/misc/gpu_voltage_control/gpu_control
echo "New voltage settings:"
cat /sys/class/misc/gpu_voltage_control/gpu_control
fi;

S95CpuManage with minumum freq at 25mhz

#!/system/bin/sh

#CPU Frequencies
AWAKE_MIN="25000"
AWAKE_MAX="1200000"
AWAKE_GOV="lulzactive"

SLEEP_MIN="25000"
SLEEP_MAX="500000"
SLEEP_GOV="conservative"

#CPU Frequency
FREQ_MANUAL="true"
FREQ_STEP_1="1600"
FREQ_STEP_2="1400"
FREQ_STEP_3="1200"
FREQ_STEP_4="1000"
FREQ_STEP_5="800"
FREQ_STEP_6="500"
FREQ_STEP_7="200"
FREQ_STEP_8="25"

#Misc
PROFILE="true"
LOGFILE="/sdcard/external_sd/sysvalues.log"
LOGMODE="1" # Logmode 0=Console only | 1=Startup | 2=Every Change #

#================================================= ===============================================#

if [ -f $LOGFILE ] ; then
rm -f $LOGFILE
fi
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
touch $LOGFILE
fi
###########################
# Setting CPU Frequencies #
###########################
if [ "$FREQ_MANUAL" = "true" ] ; then
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
echo "Set Frequency Table" | tee -a $LOG_FILE;
fi
echo "Set Frequency Table"
echo $FREQ_STEP_1" "$FREQ_STEP_2" "$FREQ_STEP_3" "$FREQ_STEP_4" "$FREQ_STEP_5" "$FREQ_STEP_6" "$FREQ_STEP_7" "$FREQ_STEP_8 > /sys/devices/system/cpu/cpu0/cpufreq/freq_table
fi
echo "Setting CPU to "$AWAKE_MIN"-"$AWAKE_MAX
echo $AWAKE_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $AWAKE_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
####################
# Setting Governor #
####################
echo $AWAKE_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
####################
# Starting Profile #
####################
if [ "$PROFILE" = "true" ]; then
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
echo `date +%X`" - Profile activated" | tee -a $LOGFILE
fi
echo "Profile activated"
(while [ 1 ] ; do
AWAKE=`cat /sys/power/wait_for_fb_wake`
if [ "$AWAKE" = "awake" ]; then
chmod 644 /sys/devices/system/cpu/cpu1/online
echo "1" > /sys/devices/system/cpu/cpu1/online
chmod 444 /sys/devices/system/cpu/cpu1/online
echo $AWAKE_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $AWAKE_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo $AWAKE_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
fi
SLEEPING=`cat /sys/power/wait_for_fb_sleep`
if [ "$SLEEPING" = "sleeping" ]; then
chmod 644 /sys/devices/system/cpu/cpu1/online
echo "0" > /sys/devices/system/cpu/cpu1/online
chmod 444 /sys/devices/system/cpu/cpu1/online
echo $SLEEP_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $SLEEP_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo $SLEEP_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

fi
done &)
fi

S95CpuManage with minumum freq at 100mhz(stable)

#!/system/bin/sh

#CPU Frequencies
AWAKE_MIN="100000"
AWAKE_MAX="1200000"
AWAKE_GOV="lulzactive"

SLEEP_MIN="100000"
SLEEP_MAX="500000"
SLEEP_GOV="conservative"

#CPU Frequency
FREQ_MANUAL="true"
FREQ_STEP_1="1600"
FREQ_STEP_2="1400"
FREQ_STEP_3="1200"
FREQ_STEP_4="1000"
FREQ_STEP_5="800"
FREQ_STEP_6="500"
FREQ_STEP_7="200"
FREQ_STEP_8="100"

#Misc
PROFILE="true"
LOGFILE="/sdcard/external_sd/sysvalues.log"
LOGMODE="1" # Logmode 0=Console only | 1=Startup | 2=Every Change #

#================================================= ===============================================#

if [ -f $LOGFILE ] ; then
rm -f $LOGFILE
fi
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
touch $LOGFILE
fi
###########################
# Setting CPU Frequencies #
###########################
if [ "$FREQ_MANUAL" = "true" ] ; then
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
echo "Set Frequency Table" | tee -a $LOG_FILE;
fi
echo "Set Frequency Table"
echo $FREQ_STEP_1" "$FREQ_STEP_2" "$FREQ_STEP_3" "$FREQ_STEP_4" "$FREQ_STEP_5" "$FREQ_STEP_6" "$FREQ_STEP_7" "$FREQ_STEP_8 > /sys/devices/system/cpu/cpu0/cpufreq/freq_table
fi
echo "Setting CPU to "$AWAKE_MIN"-"$AWAKE_MAX
echo $AWAKE_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $AWAKE_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
####################
# Setting Governor #
####################
echo $AWAKE_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
####################
# Starting Profile #
####################
if [ "$PROFILE" = "true" ]; then
if [ "$LOGMODE" = "1" ] || [ "$LOGMODE" = "2" ] ; then
echo `date +%X`" - Profile activated" | tee -a $LOGFILE
fi
echo "Profile activated"
(while [ 1 ] ; do
AWAKE=`cat /sys/power/wait_for_fb_wake`
if [ "$AWAKE" = "awake" ]; then
chmod 644 /sys/devices/system/cpu/cpu1/online
echo "1" > /sys/devices/system/cpu/cpu1/online
chmod 444 /sys/devices/system/cpu/cpu1/online
echo $AWAKE_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $AWAKE_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo $AWAKE_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
fi
SLEEPING=`cat /sys/power/wait_for_fb_sleep`
if [ "$SLEEPING" = "sleeping" ]; then
chmod 644 /sys/devices/system/cpu/cpu1/online
echo "0" > /sys/devices/system/cpu/cpu1/online
chmod 444 /sys/devices/system/cpu/cpu1/online
echo $SLEEP_MIN > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo $SLEEP_MAX > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo $SLEEP_GOV > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

fi
done &)
fi

If you want, you can customize as you want