#!/bin/bash

# modprobe acpi-cpufreq
# modprobe cpufreq_ondemand
# modprobe processor

case $1 in
	ondemand)
		# set ondemand governor
		echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
		echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
		echo ondemand > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
		echo ondemand > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
		;;
	userspace)
		# set userspace governor
		echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
		echo userspace > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
		echo userspace > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
		echo userspace > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
		;;
	conservative)
		# set conservative governor
		echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
		echo conservative > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
		echo conservative > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
		echo conservative > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
		;;
	powersave)
		# set powersave governor
		echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
		echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
		echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
		echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
		;;
	performance)
		# set performance governor
		echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
		echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
		echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
		echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
		;;
	*)
		echo "Usage: cups {ondemand|userspace|conservative|powersave|performance} {min|max}"
		exit 1
		;;
esac

case $2 in
	min)
		# set 6x
		cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq > /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq > /sys/devices/system/cpu/cpu2/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq > /sys/devices/system/cpu/cpu3/cpufreq/scaling_setspeed
		;;
	max)
		# set 8x
		cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq > /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq > /sys/devices/system/cpu/cpu2/cpufreq/scaling_setspeed
		cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq > /sys/devices/system/cpu/cpu3/cpufreq/scaling_setspeed
		;;
	*)
		if test "x$1" = xuserspace; then
			echo "Usage: cups {userspace} {min|max}"
			exit 1
		fi
		;;
esac

for m in {0..3}; do
  echo cpu"$m"
  TMP=$(cat /sys/devices/system/cpu/cpu"$m"/cpufreq/scaling_governor)
  echo -e "\tgovernor: $TMP"
  TMP=$(cat /sys/devices/system/cpu/cpu"$m"/cpufreq/scaling_cur_freq)
  echo -e "\tspeed: $TMP"
done

exit 0
