#!/bin/bash
# Initialize TI speakers firware by poking in the
# i2c bus interface. This was found, and later
# adapted, from what I found in the ti.com forums.
# Unfortunately, I didn't understand everything,
# as TI is quite opaque in what's below, but it
# did work for my own laptop (Lenovo Legion 7 Pro 82WS).
#
# Author: Thomas Goirand <zigo@debian.org>
# License: GPL-2

#set -x

# The default i2c bus number is 1, which matches
# my own laptop. This may need something else
# if your have a a different laptop. Some laptops
# have 2 or 3. Try at your own risk if 1 doesn't
# work for you. On TI's forum, they wrote 2 as
# default, but my laptop needs 1, appartently.
if [ $# -ne 1 ] ; then
	i2c_bus=1
else
	i2c_bus=$1
fi

count=0
for i2c_addr in 0x3f 0x38 ; do
	val=$((${count} % 2))
	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x7f 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x01 0x01
	i2cset -f -y $i2c_bus $i2c_addr 0x0e 0xc4
	i2cset -f -y $i2c_bus $i2c_addr 0x0f 0x40
	i2cset -f -y $i2c_bus $i2c_addr 0x5c 0xd9
	i2cset -f -y $i2c_bus $i2c_addr 0x60 0x10
	if [ $val -eq 0 ] ; then
		i2cset -f -y $i2c_bus $i2c_addr 0x0a 0x1e
	else
		i2cset -f -y $i2c_bus $i2c_addr 0x0a 0x2e
	fi
	i2cset -f -y $i2c_bus $i2c_addr 0x0d 0x01
	i2cset -f -y $i2c_bus $i2c_addr 0x16 0x40
	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x01
	i2cset -f -y $i2c_bus $i2c_addr 0x17 0xc8
	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x04
	i2cset -f -y $i2c_bus $i2c_addr 0x30 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x31 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x32 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x33 0x01

	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x08
	i2cset -f -y $i2c_bus $i2c_addr 0x18 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x19 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x1a 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x1b 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x28 0x40
	i2cset -f -y $i2c_bus $i2c_addr 0x29 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x2a 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x2b 0x00

	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x0a
	i2cset -f -y $i2c_bus $i2c_addr 0x48 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x49 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x4a 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x4b 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x58 0x40
	i2cset -f -y $i2c_bus $i2c_addr 0x59 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x5a 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x5b 0x00

	i2cset -f -y $i2c_bus $i2c_addr 0x00 0x00
	i2cset -f -y $i2c_bus $i2c_addr 0x02 0x00
	count=$((${count} + 1))
done
