# Calculate comment=# hr_laptop!=
#!/bin/sh
# /etc/acpi/default.sh
# Default acpi script that takes an entry for all actions

set $*

group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4

BACKLIGHT_DIR=/sys/devices/virtual/backlight/acpi_video0

# increase backlight
inc_backlight() {
	local cur_backlight=$(cat $BACKLIGHT_DIR/actual_brightness)
	local max_backlight=$(cat $BACKLIGHT_DIR/max_brightness)
	[[ $cur_backlight -lt $max_backlight ]] &&
		echo $(($cur_backlight + 1)) >$BACKLIGHT_DIR/brightness
}

# decrease backlight
dec_backlight() {
	local cur_backlight=$(cat $BACKLIGHT_DIR/actual_brightness)
	local max_backlight=$(cat $BACKLIGHT_DIR/max_brightness)
	
	[[ $cur_backlight -gt 0 ]] &&
		echo $(($cur_backlight - 1)) >$BACKLIGHT_DIR/brightness
}

FREQLIST=(2530000 1600000)
# increase cpu freq
inc_freq() {
	cpufreq-set -c0 -f  ${FREQLIST[0]}
	cpufreq-set -c1 -f  ${FREQLIST[0]}
	#cpufreq-set -g performance
}

# decrease cpu freq
dec_freq() {
	cpufreq-set -c0 -f  ${FREQLIST[1]}
	cpufreq-set -c1 -f  ${FREQLIST[1]}
	#cpufreq-set -g powersave
}

log_unhandled() {
	logger "ACPI event unhandled: $*"
}

case "$group" in
	button)
		case "$action" in
			power)
				/sbin/init 0
				;;

			# if your laptop doesnt turn on/off the display via hardware
			# switch and instead just generates an acpi event, you can force
			# X to turn off the display via dpms.  note you will have to run
			# 'xhost +local:0' so root can access the X DISPLAY.
			#lid)
			#	xset dpms force off
			#	;;

			*)	log_unhandled $* ;;
		esac
		;;

	ac_adapter)
		case "$value" in
			# Add code here to handle when the system is unplugged
			# (maybe change cpu scaling to powersave mode).  For
			# multicore systems, make sure you set powersave mode
			# for each core!
			*0)
				dec_freq
				;;

			# Add code here to handle when the system is plugged in
			# (maybe change cpu scaling to performance mode).  For
			# multicore systems, make sure you set performance mode
			# for each core!
			*1)
				inc_freq
				;;

			*)	log_unhandled $* ;;
		esac
		;;
	sony)
		case "$action" in
			hotkey)
				case "$device" in
					SNC)
						case "$id" in
							*01)
								case "$value" in
								*010)
									dec_backlight
									;;
								*011)
									inc_backlight
									;;
								*020)
									dec_freq
									;;
								*021)
									inc_freq
									;;
								*040)
									eject
									;;
								*)	log_unhandled $* ;;
								esac ;;
							*)	log_unhandled $* ;;
						esac
						;;
					*)	log_unhandled $* ;;
				esac
			;;
			*)	log_unhandled $* ;;
		esac
		;;

	*)	log_unhandled $* ;;
esac
