#!/system/bin/sh

#Warp OEM CPU Throttle script
#2013 by Mercury0x000d

#set variables - this is the only section which needs modified to change CPU properties
logFile=/data/set_CPU_values.log
CPUMaxSpeed=1401600
CPUMinSpeed=122880
CPUGovernor=smartassV2
IOScheduler=sio

# CPU speed table
# speed desired		speed to use in script
#    122 MHz				 122880
#    245 MHz				 245760
#    368 MHz				 368640
#    768 MHz				 768000
#    806 MHz				 806400
#    921 MHz				 921600
#  1.000 GHz				1024000
#  1.210 GHz				1209600
#  1.306 GHz				1305600
#  1.402 GHz				1401600
#  1.517 GHz				1516800
#  1.613 GHz				1612800
#  1.709 GHz				1708800
#  1.805 GHz				1804800

# available governors
# lazy
# smoothass
# smartass
# smartassV2
# SavagedZen
# interactive
# InteractiveX
# lagfree
# minmax
# Scary
# conservative
$ ondemand
# userspace
# powersave
# Lionheart
# performance

# available I/O schedulers
# noop
# deadline
# cfq
# vr
# sio



#core script begins here

#remount /data as read/write and remove existing logfile
mount -o rw,remount -t ext4 /dev/block/mmcblk0p18 /data
toolbox rm $logFile

echo "Warp OEM CPU Throttle script log" | tee -a $logFile;
echo " " | tee -a $logFile;

#one at a time CPU parameters are set, one second is allowed for transition latency,
#then the state is read to confirm success or failure of the operation

#set CPU minimum speed
echo "attempting to set CPU minimum speed to" $CPUMinSpeed "..." | tee -a $logFile;
echo $CPUMinSpeed > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
sleep 1
echo -n "CPU minimum speed set to " | tee -a $logFile;
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq | tee -a $logFile;
echo " " | tee -a $logFile;

echo "attempting to set CPU maximum speed to" $CPUMaxSpeed "..." | tee -a $logFile;
echo $CPUMaxSpeed > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
sleep 1
echo -n "CPU maximum speed set to " | tee -a $logFile;
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq | tee -a $logFile;
echo " " | tee -a $logFile;

echo "attempting to set CPU governor to" $CPUGovernor "..." | tee -a $logFile;
echo $CPUGovernor > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
sleep 1
echo -n "CPU governor set to " | tee -a $logFile;
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor | tee -a $logFile;
echo " " | tee -a $logFile;

echo "attempting to set I/O scheduler to" $IOScheduler "..." | tee -a $logFile;
for i in `ls /sys/block/stl*` /sys/block/bml* /sys/block/mmcblk* /sys/block/mtdblock* ; do
 echo $IOScheduler > $i/queue/scheduler;
done;
echo -n "I/O scheduler set to " | tee -a $logFile;
IOSchedulerCheck=$(cat /sys/block/mmcblk1/queue/scheduler)
IOSchedulerCheck=${IOSchedulerCheck#*[}
IOSchedulerCheck=${IOSchedulerCheck%%]*}
echo $IOSchedulerCheck | tee -a $logFile;
echo " " | tee -a $logFile;

echo "log end" | tee -a $logFile;

