понадобилось подключить звук к плате.
никодга до этого со звуком в линуксе не работал. 0 полный.
сделал следующее:
в ядре
Включил Device Drivers -> Misc devices -> Device driver for Atmel SSC periferal
Включил Device Drivers -> Sound card support -> Advanced Linux Sound Architecture
Включил Device Drivers -> Sound card support -> Advanced Linux Sound Architecture -> OSS PCM (digital audio) API чтобы при сборке модуля звуковой карты были доступны функции из заголовка pcm.h
подключил к SSC простейший DAC cs4334. на MCK дал ему 12.288 MHz (отдельный генератор)
правкой драйвера at73с213 сделал свой модуль.
сделал узлы устройств:
/dev/snd # ls -l
crw-r--r-- 1 root root 116, 0 Aug 19 16:01 controlC0
crw-r--r-- 1 root root 116, 8 Aug 19 16:01 midiC0D0
crw-r--r-- 1 root root 116, 24 Aug 19 16:02 pcmC0D0c
crw-r--r-- 1 root root 116, 16 Aug 19 16:02 pcmC0D0p
crw-r--r-- 1 root root 116, 17 Aug 19 16:02 pcmC0D1p
crw-r--r-- 1 root root 116, 1 Aug 19 16:01 seq
crw-r--r-- 1 root root 116, 33 Aug 19 16:01 timer
загружаю свой модуль:
# insmod cs4334_mod.ko
cs4334: supported bitrate is 47348 (66 divider)
попробовал что-то выдать на DAC:
# cat pcm_48000-16-stereo.wav > /dev/snd/pcmC0D0p
cat: write error: File descriptor in bad state
Когда-то давно подключал неуправляемый кодек wm8725 по такому же пути - из драйвера a73с213 убирал все лишнее, но частоту clk брал с платы - так же как у a73с213. Отлично пел пока я его не спалил при перепайке :)
Скорей всего дело в том что частоты несинхронизированы, делайте по подобию a73с213, для некоторых кодеков требуется чтобы даже фронты клоков были синхронизированы неговоря о том что у вас частоты вообще не совпадают - кодек скорей всего битрейт не может сдетектировать.
cs4334 это не кодек. это просто DAC. вообще без управления.
я бы понял, если бы он хрюкал, а не играл.
но в данном случае похоже, что что-то не так с устройством, как его видит система.
меня смущает, что aplay пишет, что не может параметры установить.
можно как-то звук по простому попробовать проиграть?
а можно пропросить посмотреть код вашего драйвера?
Я это и имел ввиду, терминология страдает :) wm8725 - то же самое.
На старом форуме я прямо все шаги расписывал - что и как сделать, нужно тему откопать, но если что я поищу на компе сами драйверы и что правил - просто на форуме все подробно было описано, я ко всему прочему менял частоту plla чтобы под 48 кГц ровно подходило.
все глаза проглядел.
ну не вижу разницы в драйвере.
разница только в том, что у вас он драйвер платформы, а у меня модуль.
почему aplay и madplay ругаются?
вы чем звук играете?
можно как-то другими способами проверить правильно ли откликается драйвер на обращения к нему?
может, у меня в dev/snd не хватает какого-то устройства? или с их номерами какая-то проблема?
кто-нибудь разбирался как звук работает на линуксе вообще?
для /dev/snd/pcmC0D0p имею:
# cat /app/pcm_48000-16-stereo.wav > /dev/snd/pcmC0D0p
cat: write error: File descriptor in bad state
при этом выполняются вызовы
open, hw_free, close
почему не выполняются другие - непонятно.
сделал /dev/dsp.
если теперь отправляю файл туда, выполняется полная последовательность:
open, hw_params, prepare, trigger, pointer..., interrupt, pointer..., trigger, interrupt, hw_free, close
aplay и madplay ничего сыграть не могут, хотя карту видят.
давайте интеграл брать по частям :)
для предметного разговора нужны будут некоторые сведения о вашей конфигурации
(забегая вперед) я бы попробовал то, что Саша (sasamy) предложил - тактировать кодек от АРМа. вероятность 90-95%
(пардон, отвлекся) у меня кит на 9260 с самоподпаянным кодеком tlv320 - все вполне работает.
ядро
рутфс на Debian 5.0
вот вывод устройств относящихся к звуку:
ничего руками не прописывал - все "выдумывала" система
при попытке аналогичной вашей забросить файл на устройство pcmC0D0p (или с) следует такая же ругань
при засылке *.wav на /dev/dsp мерзко хрипит
madplay, mplayer отлично играют музыку, громкость ими регулируется. так же она регулируется утилитой alsa-mixer
т.о. можно сделать вывод, что у вас два три варианта проблемы
- аппаратная - частота не та, частота не вовремя, частоты нет
- проблема драйвера - (вроде самописный) выложите хотя бы функцию регистрации типа _probe и кусок лога для нее
- проблема настройки ядра - выложите или я могу выложить часть конфига для звука и сопутствующие места.
как-то так..
зы и фрагменты из board-sam9260ek.c где прописан кодек в конфиге платы и функции его инита..