
Ubuntu日本語フォーラム
ログインしていません。
日本のDesktopCD、そしてインストール、どちらもHD2の動作を確認しました
HD2がどんなものかは、下記の私のレビューを読んでください
http://kakaku.com/bbs/Main.asp?SortID=5552306
光デジタル出力とデジタル入力(アナログ入力)の切替方法は、分かりませんでした。
外部DACよりも、サウンドカードのアナログ出力が良い仕様なのでデジタル出力は
使わないでしょう。外部DACに10万円以上かければ、変わるかもしれませんがw
ONKYOやProdigyからHD2にすると、とてもよくなった印象を持つと思います。
それなりの出力先で鳴らせば、解像度が格段に上がってます。
Windowsと 違う点は RCA出力がボリュームと連動することです。あとたぶん
解像度が少し落ちてる感じがします。OPA627BPを使ったときの臨場感が
物足りなくなってるので、ドライバーか、なにかを修正しないと直らないでしょう。
分かる人いませんか?
解決しました!!
http://forum.ubuntulinux.jp/viewtopic.php?pid=68#p68
2006.11.12 追記
このあと、複数のアプリ使用時に音がならない問題がありました。
ALSA開発者の岩井氏からのアドバイスで、新しいALSAドライバーを使用した
ところ、解決しました。(上記問題も、これで解決します)
http://forum.ubuntulinux.jp/viewtopic.php?pid=178#p178
ほかにやることがあるので、この件は終了です。
:~$ cat /proc/asound/cards
0 [ICE1724 ]: ICE1724 - ICEnsemble ICE1724
ICEnsemble ICE1724 at 0xdc00, irq 233
1 [U0x46d0x8ad ]: USB-Audio - USB Device 0x46d:0x8ad
USB Device 0x46d:0x8ad at usb-0000:00:0b.0-8, full speed
上がHD2、下がQCAM STXの内蔵マイクです
最後の編集者: oryaaaaa (2006-11-12 13:14:44)
オフライン
pcm_slave.ice1724_S32_LE {
pcm ice1724
format S32_LE
}
pcm.ice1724_convert {
type plug
slave ice1724_S32_LE
}
このような記述をどこかにしないといけないらしい・・・・というところまで分かった
Advanced Linux Sound Architecture - Prodigy 7.1. ice1724
http://www.alsa-project.org/alsa-doc/doc-php/template.php?company=AudioTrak&card=Prodigy+7.1.&chip=Envy24HT&module=ice1724
PCMフォーマットが甘いビット数かなにかの設定になっているのか?
オフライン
現在の状態
$ cat /dev/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.12rc1 emulation code)
Kernel: Linux saviour 2.6.17-10-generic #2 SMP Fri Oct 13 18:45:35 UTC 2006 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
ICEnsemble ICE1724 at 0xdc00, irq 233
Audio devices:
0: ICE1724 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: ICEnsemble ICE1724 MIDI
Timers:
31: system timer
Mixers:
0: ICE1724 - multitrack
オフライン
http://lau.linuxaudio.org/Sound-HOWTO-4.html#ss4.1
$ uname -a
Linux saviour 2.6.17-10-generic #2 SMP Fri Oct 13 18:45:35 UTC 2006 i686 GNU/Linux
$ cat /proc/version
Linux version 2.6.17-10-generic (root@vernadsky) (gcc version 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)) #2 SMP Fri Oct 13 18:45:35 UTC 2006 (Ubuntu 2.6.17-10.33-generic)
$dmesg
[17179650.636000] ice1724: No matching model found for ID 0x12140124
[17179650.640000] ice1724: Invalid EEPROM version 1
オフライン
ice1724 - AlsaOpensrcOrg
http://alsa.opensrc.org/ice1724
オフライン
$ /sbin/lsmod | grep snd
snd_ice1724 75252 230
snd_ice17xx_ak4xxx 5504 1 snd_ice1724
snd_ac97_codec 97696 1 snd_ice1724
snd_ac97_bus 3456 1 snd_ac97_codec
snd_ak4114 11392 1 snd_ice1724
snd_pcm_oss 47360 0
snd_mixer_oss 19584 1 snd_pcm_oss
snd_pcm 84612 5 snd_ice1724,snd_ac97_codec,snd_ak4114,snd_pcm_oss
snd_timer 25348 2 snd_pcm
snd_page_alloc 11400 1 snd_pcm
snd_ak4xxx_adda 8576 2 snd_ice1724,snd_ice17xx_ak4xxx
snd_mpu401_uart 10240 1 snd_ice1724
snd_rawmidi 27264 1 snd_mpu401_uart
snd_seq_device 9868 1 snd_rawmidi
snd 58372 241 snd_ice1724,snd_ac97_codec,snd_ak4114,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,snd_ak4xxx_adda,snd_mpu401_uart,snd_rawmidi,snd_seq_device
soundcore 11232 1 snd
オフライン
Advanced Linux Sound Architecture - asoundrc file
http://www.alsa-project.org/alsa-doc/doc-php/asoundrc.php?module=ice1724
てきーとな翻訳
なぜ asoundrc ですか?
.asoundrcかalsa.confで大部分のアプリケーションは動作します。
でもサンプルレートの設定などはこれで設定します。
asoundrcってなに?
あなたのサウンドカードでの、alsalibのPCMプラグインの性質変化
1アクセスから、マルチチャンネルなどね
asoundrcってどこにある?
通常は
$HOME/.asoundrc
元ファイルは
/usr/share/alsa/alsa.conf
これは大まかな設定で読み込まれる
/etc/asound.conf
alsaのアプリは .asoundrc と /etc/asound.conf の両方を
読んで開始するんだ
最初の初期設定
新規作成で作ります
vi /home/xxx/.asoundrc
下記をコピーペーストしてね。
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
defaultのキーワードで、ALSAはいつも hw:0,0 へアクセスするよ
試してみよう
aplay -D default test.wav
オフライン
PCMデバイスの名付け方
いつもPCM hw typeで始まる。これでALSAに管理権をあたえるんだよ
pluginやSlaveをね。でも無い場合動かないから、名前を hw:0,0 か
default にしなきゃいけない。たとえば
aplay -D hw:0,0 test.wav
そしてecasoundなら
ecasound -i test.wav -o alsa,hw:0,0
このhwに続く数字は soundcard number と device number だよ。
"cards"はデバイスから連想できるものにしよう
/proc/asound/cards
ほとんどの場合1でなく0から始まる。実際PCMデバイスだと
pcm0c(capture), pcm0p(playback) から始まってる
device numberはいわゆるチャンネルね、soundcard numberは
サウンドカードの認識順番号です
例えば最初にアクセスするなら hw:0,0
2番目のサウンドカードにするとき hw:1,0 最初のチャンネル
3番目のカードで2番目のチャンネル hw:2,1
Deviceのコントロール
いろいろあるよ
オフライン
エイリアス
文法例
pcm.NAME {
type hw # Kernel PCM
card INT/STR # Card name or number
[device] INT # Device number (default 0)
[subdevice] INT # Subdevice number, -1 first available (default -1)
mmap_emulation BOOL # enable mmap emulation for ro/wo devices
}
実際の例
pcm. {
type hw
card 0
device 0
}
最初のカード、最初のチャンネルへの定義、使いかたは
aplay -D test.wav
プラグイン
こちらの資料をみてほしい
ALSA project - the C library reference: PCM (digital audio) plugins
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html#pcm_plugins
プラグインってなに?
ALSAで、例えばPCMプラグインなら、過去の多くの遺産から仮想のデバイスを
作りだし、自動かつ魔法のように使えるテクノロジー
シンプルに定義すると
pcm_slave.sltest {
pcm
}
これは単純にpcmに対するあなたの別名を定義しただけです。このように
書くことができます
pcm_slave.sl2 {
pcm
rate 48000
}
pcm.rate_convert {
type rate
slave sl2
}
実際につかってみましょう
aplay -D rate_convert test.wav
これが実行されている間、自動で48kHzに変換されます
オフライン
複雑な構文の文法です
slaveは定義と訳すと意味がわかるよ
type plug # Format adjusted PCM
slave STR # Slave name (see pcm_slave)
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
[format STR] # Slave format (default nearest) or "unchanged"
[channels INT] # Slave channels (default nearest) or "unchanged"
[rate INT] # Slave rate (default nearest) or "unchanged"
}
route_policy STR # route policy for automatic ttable generation
# STR can be 'default', 'average', 'copy', 'duplicate'
# average: result is average of input channels
# copy: only first channels are copied to destination
# duplicate: duplicate first set of channels
# default: copy policy, except for mono capture - sum
ttable { # Transfer table (bidimensional compound of
# cchannels * schannels numbers)
CCHANNEL {
SCHANNEL REAL # route value (0.0 ... 1.0)
}
}
実際に使ってみよう
pcm_slave.sl3 {
pcm
format S16_LE
channels 1
rate 16000
}
pcm.complex_convert {
type plug
slave sl3
}
aplay -vD complex_convert test.wav
これで16Hzで演奏されました。使ってるファイルの情報を知りたい
ときは 冗長オプション -v をつけます
aplay -v test.wav
オフライン
.asoundrc に下記を、コピペした。いったん再起動してみる。(こうして書いてるのは、同様の手順がわかるから)
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,1"
format S32_LE
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.dmixer {
type hw
card 0
device 1
}
オフライン
Ubuntuでは下記が設定ファイルらしい
/etc/modprobe.d/alsa-base
# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7
# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe -Qb snd-ioctl32 ; : ; }
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe -Qb snd-pcm-oss ; : ; }
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --Qb snd-mixer-oss ; : ; }
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe -Qb snd-seq-midi ; /sbin/modprobe --quiet snd-seq-oss ; : ; }
# Cause optional modules to be loaded above sound card driver modules
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe -Qb snd-emu10k1-synth ; }
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe -Qb snd-seq ; }
# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe -Qb saa7134-alsa ; : ; }
# Prevent abnormal drivers from grabbing index 0
options snd-bt87x index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-usx2y index=-2
/usr/share/alsa-base/alsa.default
# Configuration file for alsa-base
# List, separated by spaces, the names of modules that should be
# unloaded, if present, before the machine is suspended. Use the
# special name "all" if you would like all ALSA sound modules to be
# removed. The modules that are removed will be loaded again after
# resume. Currently this only has an effect if you are using apmd.
# Examples:
# Value Action at suspend time
# "" Do nothing
# "snd-cs46xx" Stop sound processes and remove the snd-cs46xx module
# "all" Stop sound processes and remove all ALSA modules
force_unload_modules_before_suspend=""
オフライン
どこに該当のファイルがあるか調べるときは
Synapticパッケージマネージャーで alsa を検索する
上記の内容なら alsa-base のパッケージで、プロパティを開き、インストール済みファイル見ればわかる
オフライン
鳴らなくなった...ということは変更したのは”.asoundrc”だけだったので
説明のとおり、これが重要な役割をしていたということだね。
こういうときは基本に戻って、大前提が動作するかどうか確認してみること
.asoundrc を下記に書き換えた
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
オフライン
今回はログオフして、ログオンするだけ。システム効果音やサウンド設定では鳴った。VLCでも鳴った。
でもRysmboxが鳴らなくて、そもそもファイルの再生をクリックしても、再生シーケンスに入らない。
解像度はよくあるサウンドカードと同じぐらい。HD2だと表現に困るのだが、外部DACを通した音の
それより解像度は良くてビット数が足りないイメージ。
さて、どうしよう。ソースは昨日、ドライバーも含めて眺めた。
こういうことを調べるとき、Gomitaさんが作ってるアドインで、 Scrapbookが使い易い。
特にWiki関係はすべて取り込んで一瞬で表示できるようにしています。取り込むぐらい
なら、別にこだわる必要はないけれど、そこから検索したいときGoogleで検索しきれません
Scarpbookは非常に便利で、一度取り込んだすべてのページから文字列検索ができます。
いま困ってるのは1724での次の一手、それで”1724”で検索してみた。
そうするとAlsa Opensrc Orgから、ICE1724のページが表示されました。
1724の文字はハイライト表示されてます。わかりやすい。
少しいろいろ検証してみますね。
オフライン
$HOME/.asoundrc
pcm.!default {
type plug
slave {
pcm "hw:0,1"
format S32_LE
}
}
これで音が改善した感じがします。BOSE M3の低音が鳴るたび、どっしりした印象を持ちます。
良くなってます。
サンプルレートを設定すると、システム音がエラーになりますね。問題は、リズムボックス
ミュージックプレイヤーが動かないです。クラッシュではなくて、再生してもシーケンスに
入りません。
オフライン
理由がわかりました。 pcm "hw0,1" と指定しているから、最初のプレイヤーが1番目
のチャンネルと使い、2番目のプレイヤーが2番目のチャンネルを使うから、設定通り
聞こえない。
pcm.!default {
type plug
slave {
pcm "hw:0"
format S32_LE
}
}
こうするとどうなるだろう?
オフライン
これは"hd0,0"と指定されるようです。解像度は最高状態なので、format S32_LE の
指定がキモだったのですね。他のアプリでは、1番のチャンネルが使われていると
”Resource busy or not available.”
というエラーを返します。dmixerというプラグインを使えば、チャンネルをまとめる
ことができるようです。
pcm.dmixer {
type dmix
ipc_key INT
slave {
pcm "hw:0,0"
format S32_LE
period_time 0
period_size 1024
buffer_size 8192
}
bindings {
0 0
1 1
}
}
pcm.!default {
type plug
slave.pcm "dmixer"
}
オフライン
鳴らないなぁ・・・・、どこがいけないんだろう。
解像度が悪く感じた原因を見付けました。デフォルトのdmixerでのフォーマット指定が
16ビットになっていたのが原因です。default S16_LE、これでしょうね。ここをルート権限
で書き換えたら済むのかな?
/usr/share/alsa/pcm/dmix.conf
#
# dmix output
#
pcm.!dmix {
@args [ CARD DEV SUBDEV FORMAT RATE ]
@args.CARD {
type string
default 0
}
@args.DEV {
type string
default 0
}
@args.SUBDEV {
type string
default -1
}
@args.FORMAT {
type string
default S16_LE
}
@args.RATE {
type integer
default 48000
}
type dmix
ipc_key {
@func refer
name defaults.pcm.ipc_key
}
ipc_gid {
@func refer
name defaults.pcm.ipc_gid
}
ipc_perm {
@func refer
name defaults.pcm.ipc_perm
}
slave {
pcm {
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
format $FORMAT
rate $RATE
period_size {
@func refer
name {
@func concat
strings [
"cards."
{
@func card_driver
card $CARD
}
".pcm.dmix.period_size"
]
}
default 1024
}
period_time {
@func refer
name {
@func concat
strings [
"cards."
{
@func card_driver
card $CARD
}
".pcm.dmix.period_time"
]
}
default -1
}
periods {
@func refer
name {
@func concat
strings [
"cards."
{
@func card_driver
card $CARD
}
".pcm.dmix.periods"
]
}
default 16
}
}
}
オフライン
よっしゃー! 根本的な解決できました
$ sudo gedit /usr/share/alsa/pcm/dmix.conf
@args.FORMAT {
type string
default S16_LE
}
これを
@args.FORMAT {
type string
default S32_LE
}
と書き換えて、再起動すれば起動音から、解像度の高い音になります
Alsaがバージョンアップしたら、また書き換えなきゃいけないけど
音が変わったとすぐ分かるし、もうバージョンアップ止まってるので
これでいいや。
このスレは無事解決しました。ありがとうございます
オフライン
良スレage。
Prodigyはいつか欲しいなぁと思いつつ。しかし奥深いですね。
しかし、モニタしながらのライン入力からのキャプチャはLinuxでもダメですか。
dmix.conf,asoundrc反映はログアウトしなくても、大抵はアプリケーション再起動で大丈夫だったと思いますがどうですか?
オフライン
ドウダロウネー
このアイオーデータのWチューナーキャプチャボードに対応した、Linuxドライバが存在しないので
検証はまったくできないよ。今日、カーボン板が届いたので、キャプチャーボードにかぶせるように
加工して、電磁波シールドPCIボックスとして使う予定です。
設定ファイルの反映で、アプリケーション再起動は推奨しないほうが良いでしょう。このスレを読んで
学べる人はスキルが低いはずなので、基本はログアウト、システム部分変更はリブートで。ソースを
読んで理解できるレベルに達したら、それでいいと思う。基本操作を知らない人が真似すると、はまるよ。
Linux、UNIXシステムを触るのは10年ぶりぐらい。ここ5年、どんな環境変化があったのか無知の状態です
ムカシ、ムカシ、トテモ、マゾッケタップリノ、ユニックスガアリマシタ
20MBノHDDデ、Xサーバーヲコンパイルシテマシタヨw
シンジラレナイカモネ、イッシュウカンイジョウカカッタカラネw
KNOPPIXをWinのシステム障害起きたとき、ネットで調べるために利用する程度だった
最後の編集者: oryaaaaa (2006-11-07 20:03:01)
オフライン
いや、キャプチャというのは「音声の録音」という意味でして。
価格.comのレビュー記事から、ライン入力からの録音について言及されてたのでちょっと聞いてみたのです:-)
# ちなみに私も20MB/480DX2/HDD20MBくらいのマシンでFreeBSDを動かしていた世代です...
オフライン
ア、そういう意味なら、まだやることが残ってます
ネイティブドライバーの開発
先週メールでALSAドライバーの開発者にアドバイスをもらってました。
構成からRevolution7.1に近いということで、これからHD2向けのドライバー
を作ってみようと思います。一から作るわけではないし、鳴らせること自体
できてるので、なんとかなるんじゃないかと
追記1
ALSAのソースからコンパイルしようとするとエラーが出るので、カーネル
ソースのSOUNDを直接編集してProdigyhd2を登録した。さぁ動くだろうか?
root@saviour:/usr/src/linux-2.6.18/sound/pci/ice1712# ls -l
合計 492
-rw-r--r-- 1 root src 446 2006-11-09 03:25 Makefile
-rw-r--r-- 1 root root 5057 2006-09-20 12:42 ak4xxx.c
-rw-r--r-- 1 root root 2755 2006-09-20 12:42 amp.c
-rw-r--r-- 1 root root 1593 2006-09-20 12:42 amp.h
-rw-r--r-- 1 root root 59880 2006-09-20 12:42 aureon.c
-rw-r--r-- 1 root root 2315 2006-09-20 12:42 aureon.h
-rw-r--r-- 1 root root 23024 2006-09-20 12:42 delta.c
-rw-r--r-- 1 root root 5696 2006-09-20 12:42 delta.h
-rw-r--r-- 1 root root 9235 2006-09-20 12:42 envy24ht.h
-rw-r--r-- 1 root root 31132 2006-09-20 12:42 ews.c
-rw-r--r-- 1 root root 3456 2006-09-20 12:42 ews.h
-rw-r--r-- 1 root root 11012 2006-09-20 12:42 hoontech.c
-rw-r--r-- 1 root root 3457 2006-09-20 12:42 hoontech.h
-rw-r--r-- 1 root root 84221 2006-09-20 12:42 ice1712.c
-rw-r--r-- 1 root root 17915 2006-09-20 12:42 ice1712.h
-rw-r--r-- 1 root src 66295 2006-11-09 03:24 ice1724.c
-rw-r--r-- 1 root root 6418 2006-09-20 12:42 juli.c
-rw-r--r-- 1 root root 235 2006-09-20 12:42 juli.h
-rw-r--r-- 1 root root 24039 2006-09-20 12:42 phase.c
-rw-r--r-- 1 root root 1785 2006-09-20 12:42 phase.h
-rw-r--r-- 1 root root 22651 2006-09-20 12:42 pontis.c
-rw-r--r-- 1 root root 1179 2006-09-20 12:42 pontis.h
-rw-r--r-- 1 root root 13103 2006-09-20 12:42 prodigy192.c
-rw-r--r-- 1 root root 339 2006-09-20 12:42 prodigy192.h
-rw-r--r-- 1 root src 5269 2006-11-09 03:24 prodigyhd2.c
-rw-r--r-- 1 root src 1582 2006-11-09 03:24 prodigyhd2.h
-rw-r--r-- 1 root root 6937 2006-09-20 12:42 revo.c
-rw-r--r-- 1 root root 1678 2006-09-20 12:42 revo.h
-rw-r--r-- 1 root root 796 2006-09-20 12:42 stac946x.h
-rw-r--r-- 1 root root 3570 2006-09-20 12:42 vt1720_mobo.c
-rw-r--r-- 1 root root 1502 2006-09-20 12:42 vt1720_mobo.h
Makefile, ice1724.c, prodigyhd2.c, prodigyhd2.h この4つを作成、書き換えた
だけです。色々調べるとalsaのソースって、modulesで別に存在している
けれど、このソースがカーネルの特定リビジョン依存になってるんです。
それで普通に作ろうとするとエラーになります。Modulesでなく、今のカーネルは
組込みのようなので直接編集したわけです。
追記2
ALSAの古いソースに書き換えたものを、コピーしたらコンパイルエラー
になった。変更してない行でエラーになってるので、や、やりなおしだ。
最後の編集者: oryaaaaa (2006-11-09 05:55:23)
オフライン
/*
* ALSA driver for ICEnsemble ICE1712 (Envy24)
*
* Lowlevel functions for M-Audio Revolution 7.1
*
* Copyright (c) 2003 Takashi Iwai <[email protected]>
* Custmize to AudioTrak Prodigy HD2, 2006 oryaaaaa
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <sound/driver.h>
#include <asm/io.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <sound/core.h>
#include "ice1712.h"
#include "envy24ht.h"
#include "prodigyhd2.h"
static void _i2s_mclk_changed(struct snd_ice1712 *ice)
{
/* assert PRST# to converters; MT05 bit 7 */
outb(inb(ICEMT1724(ice, AC97_CMD)) | 0x80, ICEMT1724(ice, AC97_CMD));
mdelay(5);
/* deassert PRST# */
outb(inb(ICEMT1724(ice, AC97_CMD)) & ~0x80, ICEMT1724(ice, AC97_CMD));
}
/*
* change the rate of envy24HT, AK4355 and AK4381
*/
static void prodigyhd2_set_rate_val(struct snd_akm4xxx *ak, unsigned int rate)
{
unsigned char old, tmp, dfs;
int reg, shift;
if (rate == 0) /* no hint - S/PDIF input is master, simply return */
return;
/* adjust DFS on codecs */
if (rate > 96000)
dfs = 2;
else if (rate > 48000)
dfs = 1;
else
dfs = 0;
if (ak->type == SND_AK4355 || ak->type == SND_AK4358) {
reg = 2;
shift = 4;
} else {
reg = 1;
shift = 3;
}
tmp = snd_akm4xxx_get(ak, 0, reg);
old = (tmp >> shift) & 0x03;
if (old == dfs)
return;
/* reset DFS */
snd_akm4xxx_reset(ak, 1);
tmp = snd_akm4xxx_get(ak, 0, reg);
tmp &= ~(0x03 << shift);
tmp |= dfs << shift;
// snd_akm4xxx_write(ak, 0, reg, tmp);
snd_akm4xxx_set(ak, 0, reg, tmp); /* the value is written in reset(0) */
snd_akm4xxx_reset(ak, 0);
}
/*
* initialize the chips on M-Audio Revolution cards
*/
static unsigned int prodigyhd2_num_stereo[] = {2};
static char *prodigyhd2_channel_names[] = {"PCM Playback Volume"};
static struct snd_akm4xxx akm_prodigyhd2 __devinitdata = {
.type = SND_AK4358,
.num_dacs = 2,
.ops = {
.set_rate_val = prodigyhd2_set_rate_val
},
.num_stereo = prodigyhd2_num_stereo,
.channel_names = prodigyhd2_channel_names
};
static struct snd_ak4xxx_private akm_prodigyhd2_priv __devinitdata = {
.caddr = 2,
.cif = 0,
.data_mask = VT1724_PRODIGYHD2_CDOUT,
.clk_mask = VT1724_PRODIGYHD2_CCLK,
.cs_mask = VT1724_PRODIGYHD2_CS0 | VT1724_PRODIGYHD2_CS1 | VT1724_PRODIGYHD2_CS2,
.cs_addr = 0,
.cs_none = VT1724_PRODIGYHD2_CS0 | VT1724_PRODIGYHD2_CS1 | VT1724_PRODIGYHD2_CS2,
.add_flags = VT1724_PRODIGYHD2_CCLK, /* high at init */
.mask_flags = 0,
};
static int __devinit prodigyhd2_init(struct snd_ice1712 *ice)
{
struct snd_akm4xxx *ak;
int err;
/* determine I2C, DACs and ADCs */
switch (ice->eeprom.subvendor) {
case VT1724_SUBDEVICE_PRODIGYHD2:
ice->num_total_dacs = 2;
ice->num_total_adcs = 2;
break;
default:
snd_BUG();
return -EINVAL;
}
/* second stage of initialization, analog parts and others */
ak = ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
if (! ak)
return -ENOMEM;
ice->akm_codecs = 2;
switch (ice->eeprom.subvendor) {
case VT1724_SUBDEVICE_PRODIGYHD2:
ice->akm_codecs = 1;
if ((err = snd_ice1712_akm4xxx_init(ak, &akm_prodigyhd2, &akm_prodigyhd2_priv, ice)) < 0)
return err;
/* unmute all codecs - needed! */
snd_ice1712_gpio_write_bits(ice, VT1724_PRODIGYHD2_MUTE, VT1724_PRODIGYHD2_MUTE);
break;
}
return 0;
}
static int __devinit prodigyhd2_add_controls(struct snd_ice1712 *ice)
{
int err;
switch (ice->eeprom.subvendor) {
case VT1724_SUBDEVICE_PRODIGYHD2:
err = snd_ice1712_akm4xxx_build_controls(ice);
if (err < 0)
return err;
}
return 0;
}
/* entry point */
struct snd_ice1712_card_info snd_vt1724_prodigyhd2_cards[] __devinitdata = {
{
.subvendor = VT1724_SUBDEVICE_PRODIGYHD2,
.name = "Audiotrak Prodigy HD2",
.model = "prodigyhd2",
.chip_init = prodigyhd2_init,
.build_controls = prodigyhd2_add_controls,
},
{ } /* terminator */
};
2ch出力なので、Streoだけになるように書き換えた。DACの設定は後で
動かなかったらもう少し調査してみます。
結果
カーネルのALSAドライバを直接書き換えて、コンパイルできた。このとき
/usr/src/modulesに動かないALSAのドライバーがあるとカーネル再構築に
失敗するので注意
:~$ cat /proc/asound/cards
0 [ICE1724 ]: ICE1724 - ICEnsemble ICE1724
ICEnsemble ICE1724 at 0xac00, irq 233
1 [U0x46d0x8ad ]: USB-Audio - USB Device 0x46d:0x8ad
USB Device 0x46d:0x8ad at usb-0000:00:0b.0-8, full speed
:~$
どういう訳か、今まで認識しなかったQCAMのマイクを認識するようになった
ちゃんと音をひろうw
dmesg
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:03:07.0[A] -> Link [APC1] -> GSI 16 (level, low) -> IRQ 233
ice1724: No matching model found for ID 0x12140124
ice1724: Invalid EEPROM version 1
prodigyhd2.h
#define PRODIGYHD2_DEVICE_DESC \
"{{Audiotrak,Prodigy HD2},"
#define VT1724_SUBDEVICE_PRODIGYHD2 0x12140124
指定してあるんだけどなぁ・・・・、EEPROMのバージョンが肝なのかな?
発見 ice1724.c
static struct snd_ice1712_card_info *card_tables[] __devinitdata = {
snd_vt1724_revo_cards,
snd_vt1724_amp_cards,
snd_vt1724_aureon_cards,
snd_vt1720_mobo_cards,
snd_vt1720_pontis_cards,
snd_vt1724_prodigy192_cards,
snd_vt1724_prodigyhd2_cards,
snd_vt1724_juli_cards,
snd_vt1724_phase_cards,
NULL,
};
ここが抜けてれば、ルックアップしたときテーブルが無いから
ノーモデルになるね。
最後の編集者: oryaaaaa (2006-11-09 09:20:24)
オフライン