Добавил пока для себя в скрипте инициализации автоматическое включение цифрового выхода при перезагрузке

/etc/install-recovery.sh
Код:
#!/system/bin/sh
insmod /system/vendor/modules/snd-hwdep.ko
insmod /system/vendor/modules/snd-rawmidi.ko
insmod /system/vendor/modules/snd-usbmidi-lib.ko
insmod /system/vendor/modules/snd-usb-audio.ko

if [ -c /dev/snd/pcmC2D0p ]; then
# valid values for media.audio.out.mode: codec, usb
setprop media.audio.out.mode usb
/system/bin/log -t usb-audio "### Route all audio to USB."
/system/xbin/alsa_amixer -c 2 sset 'Digital',0 on
else
/system/bin/log -t usb-audio "### /dev/snd/pcmC2D0p does not exist. Use default"
fi


---------- Сообщение добавлено 22.10.2013 в 11:15 ----------

Существенный недостаток этого метода:
при отключенном питании планшет засыпает через несколько минут отсутствия активности в целях экономии батареи. Соответственно, "засыпают" и устройства, подключенные по USB, т.к. они потребляют 5V питания.

При возвращении из сна система восстанавливает свое состояние, последовательно переподключая устройства. Но так как моя сборка не знает команды
Код:
alsa_ctl restore
, чтобы прочитать конфигурацию микшера из файла /etc/asound.state,
а в Андроиде, ко всему прочему, отсутствует механизм запуска сервисов по выходу из сна из /etc/pm/sleep.d/ (как в полных Linux), то необходимо найти альтернативный способ повторить команду
Код:
/system/xbin/alsa_amixer -c 2 sset 'Digital',0 on
после пробуждения,

После прочтения съесть!

как вариант, при помощи https://play.google.com/store/apps/d...It.mainPackage

либо сделать средствами конфигурации,
/system/usr/share/alsa/alsa.conf или ~/.asoundrc,

После прочтения съесть!

размышления на эту тему
http://e2e.ti.com/support/embedded/a.../t/137014.aspx

включенным Digital при инициализации карты.

В противном случае, придется полностью (через пункт в меню настроек для разработчиков), либо частично (посредством приложений серии WakeLock) предотвратить переход в спящий режим, что не особо понравится батарее.

---------- Сообщение добавлено 22.10.2013 в 11:30 ----------

Также еще важный момент, при одновременном подключении по оптике и HDMI по умолчанию приоритет за последним, а на оптике звука нет.
root@android:/ # alsa_aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sun4icodec [sun4i-CODEC], device 0: M1 PCM [sun4i PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sun4isndhdmi [sun4i-sndhdmi], device 0: SUN4I-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Device [USB Advanced Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
root@android:/ # alsa_aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=sun4icodec
sun4i-CODEC, sun4i PCM
Default Audio Device
default:CARD=sun4isndhdmi
sun4i-sndhdmi,
Default Audio Device
default:CARD=Device
USB Advanced Audio Device, USB Audio
Default Audio Device
)
Adjust the below file to use your card/device number.
File{$HOME}/.asoundrc
Код:
pcm.!spdif {
     type hw
     card 2
     device 0
}

pcm.!default {
     type plug
     slave {
           pcm "spdif"
     }
}

# Share a single card with multiple applications 
#pcm.!default {
#    type plug
#    slave.pcm "dmix:CARD=0,DEVICE=1,RATE=48000"
#}


---------- Сообщение добавлено 22.10.2013 в 14:46 ----------

Скрипт для активации цифрового выхода можно было бы брутально дописать в конец скрипта-активатора 3G-модемов,
и хотя это успешно работает - некрасиво и не решает проблемы включения S/PDIF по выходу из спящего режима

root@android:/system/lib # cat /etc/usb_modeswitch.sh
Код:
#!/system/bin/busybox ash
sleep 2
#/system/bin/setprop "mode_switch_running" "1"

if [ -f $1 ]; then
	/system/bin/usb_modeswitch -W -I -c $1
else
	echo "$1 does not exist."
fi

#/system/bin/setprop "mode_switch_running" "0"

if [ -c /dev/snd/pcmC2D0p ]; then
# valid values for media.audio.out.mode: codec, usb
setprop media.audio.out.mode usb
/system/bin/log -t usb-audio "### Route all audio to USB."
/system/xbin/alsa_amixer -c 2 sset 'Digital',0 on
fi
При этом попытка добавить
root@android:/ # cat /etc/asound.conf
Код:
ctl.Android_DigitalOut {
	type hw
	card 2
}

pcm.Android_DigitalOut {
	type hooks
	slave.pcm {
		type hw
		card 2
		device 0	
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{name 'Digital Playback Switch'	value on}
		]
	}
}
пока не возымела успеха, хотя в /system/lib/libasound.so есть ссылка на основной конфигурационный файл /system/usr/share/alsa/alsa.conf, в котором прописана загрузка дополнений к конфигурации из /etc/asound.conf