お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#26 2006-11-09 14:27:42

oryaaaaa
メンバ
From: Aichi, Japan
登録日: 2006-10-31

Re: Audiotrak Prodigy HD2 (120dB DAC, 2ch Sound)

~$ cat /proc/asound/cards
0 [HD2            ]: ICE1724 - Audiotrak Prodigy HD2
                      Audiotrak Prodigy HD2 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

$ dmesg
ice1724: Invalid EEPROM version 1

ミキサーコントロールが表示されるようになったけれど、まったく反映されない
コントロールにはPCMという表示が新たに加わった。音は鳴ってる。どこが
おかしいのかなー? カーネル再構築しても、32ビット指定にしたところは
そのままになっていた。

ドライバーの書き方ドキュメントをまじめに読むか・・・

Writing an ALSA Driver
http://www.alsa-project.org/~iwai/writing-an-alsa-driver/index.html

Sound Blaster AWE 32/64 HOWTO: 付録
http://www.linux.or.jp/JF/JFdocs/Soundblaster-AWE-6.html

著者に聞くのが早いかもしれないが、完全に行き詰まっていない。
できるだけ手を尽くして、なにかヒントを得ただけで理解できる段階まで
把握しなければ、こうした技術は身につかない。がんばろう。

追記1 問題のエラー箇所のソース

static int __devinit snd_vt1724_read_eeprom(struct snd_ice1712 *ice,
                        const char *modelname)
{
    const int dev = 0xa0;        /* EEPROM device address */
    unsigned int i, size;
    struct snd_ice1712_card_info **tbl, *c;

    if (! modelname || ! *modelname) {
        ice->eeprom.subvendor = 0;
        if ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_EEPROM) != 0)
            ice->eeprom.subvendor =
                (snd_vt1724_read_i2c(ice, dev, 0x00) << 0) |
                (snd_vt1724_read_i2c(ice, dev, 0x01) << 8) |
                (snd_vt1724_read_i2c(ice, dev, 0x02) << 16) |
                (snd_vt1724_read_i2c(ice, dev, 0x03) << 24);
        if (ice->eeprom.subvendor == 0 ||
            ice->eeprom.subvendor == (unsigned int)-1) {
            /* invalid subvendor from EEPROM, try the PCI
             * subststem ID instead
             */
            u16 vendor, device;
            pci_read_config_word(ice->pci, PCI_SUBSYSTEM_VENDOR_ID,
                         &vendor);
            pci_read_config_word(ice->pci, PCI_SUBSYSTEM_ID, &device);
            ice->eeprom.subvendor =
                ((unsigned int)swab16(vendor) << 16) | swab16(device);
            if (ice->eeprom.subvendor == 0 ||
                ice->eeprom.subvendor == (unsigned int)-1) {
                printk(KERN_ERR "ice1724: No valid ID is found\n");
                return -ENXIO;
            }
        }
    }
    for (tbl = card_tables; *tbl; tbl++) {
        for (c = *tbl; c->subvendor; c++) {
            if (modelname && c->model &&
                ! strcmp(modelname, c->model)) {
                printk(KERN_INFO "ice1724: Using board model %s\n",
                       c->name);
                ice->eeprom.subvendor = c->subvendor;
            } else if (c->subvendor != ice->eeprom.subvendor)
                continue;
            if (! c->eeprom_size || ! c->eeprom_data)
                goto found;
            /* if the EEPROM is given by the driver, use it */
            snd_printdd("using the defined eeprom..\n");
            ice->eeprom.version = 2;
            ice->eeprom.size = c->eeprom_size + 6;
            memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size);
            goto read_skipped;
        }
    }
    printk(KERN_WARNING "ice1724: No matching model found for ID 0x%x\n",
           ice->eeprom.subvendor);

found:
    ice->eeprom.size = snd_vt1724_read_i2c(ice, dev, 0x04);
    if (ice->eeprom.size < 6)
        ice->eeprom.size = 32;
    else if (ice->eeprom.size > 32) {
        printk(KERN_ERR "ice1724: Invalid EEPROM (size = %i)\n",
               ice->eeprom.size);
        return -EIO;
    }
    ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05);
    if (ice->eeprom.version != 2)
        printk(KERN_WARNING "ice1724: Invalid EEPROM version %i\n",
               ice->eeprom.version);
    size = ice->eeprom.size - 6;
    for (i = 0; i < size; i++)
        ice->eeprom.data[i] = snd_vt1724_read_i2c(ice, dev, i + 6);

read_skipped:
    ice->eeprom.gpiomask = eeprom_triple(ice, ICE_EEP2_GPIO_MASK);
    ice->eeprom.gpiostate = eeprom_triple(ice, ICE_EEP2_GPIO_STATE);
    ice->eeprom.gpiodir = eeprom_triple(ice, ICE_EEP2_GPIO_DIR);

    return 0;
}

I2C接続でなく、GPIO接続にならないとおかしいので、ここでのEEPROM値が
おかしいか、その前の設定値がおかしいか?

ルックアップテーブルに、prodigyhd2のエントリが見付かったので、条件式に
分岐する。 for (tbl = card_tables; *tbl; tbl++)
サブベンダのループに移って for (c = *tbl; c->subvendor; c++)
これが
if (modelname && c->model &&
                ! strcmp(modelname, c->model))
成立すれば、認識したとみなす。だが表示されてないので不成立
else if (c->subvendor != ice->eeprom.subvendor)
                continue;
これは確かループを抜ける意味だったはず・・w、なのでID不一致かな
printk(KERN_WARNING "ice1724: No matching model found for ID 0x%x\n",
           ice->eeprom.subvendor);
これが表示されたので、IDは ice->eeprom.subvendor がその値であると

if (! c->eeprom_size || ! c->eeprom_data)
これが成立すると i2c接続と見なされる、不成立ならGPIO接続?

            if (! c->eeprom_size || ! c->eeprom_data)
                goto found;
            /* if the EEPROM is given by the driver, use it */
            snd_printdd("using the defined eeprom..\n");
            ice->eeprom.version = 2;
            ice->eeprom.size = c->eeprom_size + 6;
            memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size);
            goto read_skipped;

ここで、goto found になってしまうのでエラーになる。goto read_skipped でなければ
いけないと思う。この条件式が成り立つ原因を排除すれば良いかもしれない。

追記2

一度、READした値をダンプするようにして確認した方が早いかも・・・

追記3

snd_vt1724_proc_read で、カードベンダー等の情報を取得して内部的に渡してる
これをKERN_WARNIGで出力すれば、現状把握につながるかも?

この結果が、ドライバー起動時生成されるようだ
/var/lib/alsa/asound.state

state.ICE1724 {
    control.1 {
        comment.access read
        comment.type BYTES
        comment.count 52
        iface CARD
        name 'ICE1724 EEPROM'
        value '240114121c01628030c3ff0000ff0000ff0000008100000000080000000000000000000000000000ff000000ff000000ff000000'
    }
    control.2 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 '8000'
        comment.item.1 '9600'
        comment.item.2 '11025'
        comment.item.3 '12000'
        comment.item.4 '16000'
        comment.item.5 '22050'
        comment.item.6 '24000'
        comment.item.7 '32000'
        comment.item.8 '44100'
        comment.item.9 '48000'
        comment.item.10 '64000'
        comment.item.11 '88200'
        comment.item.12 '96000'
        comment.item.13 '176400'
        comment.item.14 '192000'
        comment.item.15 'IEC958 Input'
        iface MIXER
        name 'Multi Track Internal Clock'
        value '44100'
    }
    control.3 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Multi Track Rate Locking'
        value false
    }
    control.4 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Multi Track Rate Reset'
        value true
    }
    control.5 {
        comment.access read
        comment.type INTEGER
        comment.count 22
        comment.range '0 - 255'
        iface MIXER
        name 'Multi Track Peak'
        value.0 255
        value.1 255
        value.2 0
        value.3 0
        value.4 0
        value.5 0
        value.6 0
        value.7 0
        value.8 0
        value.9 0
        value.10 1
        value.11 0
        value.12 0
        value.13 0
        value.14 0
        value.15 0
        value.16 0
        value.17 0
        value.18 1
        value.19 0
        value.20 0
        value.21 0
    }
    control.6 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'IEC958 Playback Route'
        value 'PCM Out'
    }
    control.7 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'IEC958 Playback Route'
        index 1
        value 'PCM Out'
    }
    control.8 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'IEC958 Output Switch'
        value true
    }
    control.9 {
        comment.access 'read write'
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Default'
        value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    }
    control.10 {
        comment.access read
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Con Mask'
        value '3fff000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    }
    control.11 {
        comment.access read
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Pro Mask'
        value df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    }
}
state.U0x46d0x8ad {
    control.1 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Mic Capture Switch'
        value true
    }
    control.2 {
        comment.access 'read write'
        comment.type INTEGER
        comment.count 1
        comment.range '0 - 3'
        iface MIXER
        name 'Mic Capture Volume'
        value 0
    }
    control.3 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Auto Gain Control'
        value false
    }
}
state.HD2 {
    control.1 {
        comment.access read
        comment.type BYTES
        comment.count 52
        iface CARD
        name 'ICE1724 EEPROM'
        value '240114121c01628030c3ff0000ff0000ff0000008100000000080000000000000000000000000000ff000000ff000000ff000000'
    }
    control.2 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 '8000'
        comment.item.1 '9600'
        comment.item.2 '11025'
        comment.item.3 '12000'
        comment.item.4 '16000'
        comment.item.5 '22050'
        comment.item.6 '24000'
        comment.item.7 '32000'
        comment.item.8 '44100'
        comment.item.9 '48000'
        comment.item.10 '64000'
        comment.item.11 '88200'
        comment.item.12 '96000'
        comment.item.13 '176400'
        comment.item.14 '192000'
        comment.item.15 'IEC958 Input'
        iface MIXER
        name 'Multi Track Internal Clock'
        value '48000'
    }
    control.3 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Multi Track Rate Locking'
        value false
    }
    control.4 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'Multi Track Rate Reset'
        value true
    }
    control.5 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'H/W Playback Route'
        value 'PCM Out'
    }
    control.6 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'H/W Playback Route'
        index 1
        value 'PCM Out'
    }
    control.7 {
        comment.access read
        comment.type INTEGER
        comment.count 22
        comment.range '0 - 255'
        iface MIXER
        name 'Multi Track Peak'
        value.0 0
        value.1 0
        value.2 0
        value.3 0
        value.4 0
        value.5 0
        value.6 0
        value.7 0
        value.8 0
        value.9 0
        value.10 0
        value.11 0
        value.12 0
        value.13 0
        value.14 0
        value.15 0
        value.16 0
        value.17 0
        value.18 0
        value.19 0
        value.20 0
        value.21 0
    }
    control.8 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'IEC958 Playback Route'
        value 'PCM Out'
    }
    control.9 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 'PCM Out'
        comment.item.1 'H/W In 0'
        comment.item.2 'H/W In 1'
        comment.item.3 'IEC958 In L'
        comment.item.4 'IEC958 In R'
        iface MIXER
        name 'IEC958 Playback Route'
        index 1
        value 'PCM Out'
    }
    control.10 {
        comment.access 'read write'
        comment.type BOOLEAN
        comment.count 1
        iface MIXER
        name 'IEC958 Output Switch'
        value true
    }
    control.11 {
        comment.access 'read write'
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Default'
        value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    }
    control.12 {
        comment.access read
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Con Mask'
        value '3fff000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    }
    control.13 {
        comment.access read
        comment.type IEC958
        comment.count 1
        iface PCM
        device 1
        name 'IEC958 Playback Pro Mask'
        value df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    }
    control.14 {
        comment.access 'read write'
        comment.type INTEGER
        comment.count 2
        comment.range '0 - 255'
        iface MIXER
        name 'PCM Playback Volume'
        value.0 204
        value.1 204
    }
    control.15 {
        comment.access 'read write'
        comment.type ENUMERATED
        comment.count 1
        comment.item.0 '44.1kHz'
        comment.item.1 Off
        comment.item.2 '48kHz'
        comment.item.3 '32kHz'
        iface MIXER
        name Deemphasis
        value Off
    }
}

最後の編集者: oryaaaaa (2006-11-09 15:48:24)

オフライン

 

#27 2006-11-09 17:28:16

oryaaaaa
メンバ
From: Aichi, Japan
登録日: 2006-10-31

Re: Audiotrak Prodigy HD2 (120dB DAC, 2ch Sound)

追記4 混乱しつつあるので、分かってることまとめ

・asound.stateの最初のValueはEEPROMのダンプである(確定)
・ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05)は6バイト目、
これが2なら1724のEEPROMとしてdmesgに表示される仕組み(確定)
・いわゆるIDは逆順列で12140124、最初から4バイト(確定)
未確定
SystemConfig 0x62
ACLink 0x80
I2S 0x30
SPDIF 0xC3
GPIO STATE 0x00
GPIO DIRECTION 0xFF
GPIO MASK 0x00

EEPROM dump prodigyhd2
00000000   24 01 14 12  1C 01 62 80  30 C3 FF 00  00 FF 00 00  $.....b.0.......
00000010   FF 00 00 00  81 00 00 00  00 08 00 00  00 00 00 00  ................
00000020   00 00 00 00  00 00 00 00  FF 00 00 00  FF 00 00 00  ................
00000030   FF 00 00 00                                         ....

この画面は synaptic manager で hexeditor をインストール、先ほど長い
1行のVALUEをコピーペーストすると、だーぁって入力されます。GNOME端末
で見てるので、みたままをコピーペスーストして貼っています。

Alsa-devいきました。わかったこと
SourceForge.net: alsa-devel
http://sourceforge.net/mailarchive/forum.php?forum=alsa-devel

SourceForge.net: alsa-cvslog
http://sourceforge.net/mailarchive/message.php?msg_id=9338682

その判定文にはあまり意味を持たない。EEPROMの情報から手助けに
なる情報を出力すると書いてあります。つまり・・・・

ALSAのドライバーを信頼して、推測すると・・・・
1724チップとして売られているものだけど、実際には1712チップなんだよ。
という事実かな? Envy24HT-S 搭載とは、どういうことなのか?

追記5

DTMソフトRosegarden 4正式リリース
http://slashdot.jp/comments.pl?sid=240527&cid=695487

ALSAのドライバー開発マニュアルを書いた岩井氏のコメントによると
”転送プロトコルは I2S、制御は GPIO 経由で SPI か I2C というのがほとんどです”
この制御が、各メーカー、各製品ごとにバラバラでドライバー設計されてるため
個別に専用ドライバを用意しなくてはいけないそうです。

追記6

昔のユーザーはEEPROMを書き換えて使っていたんだな。どのソースを適用すれば
いいか分かれば、すぐ修正できると思う。ルールさえ理解できれば、それほど
ソースの修正は難しくない。ソースの質は、もう少し分かりやすく書けるはずなのに
独特の癖を感じます。製品名別にソースを分けるなら、どのように意図して
書いたのか、最小限のマニュアルは書いてほしい。それがあれば、協力者は
増えると思う。

VIAARENAのサイトに行きました。どこにWhitePaperがあるんでしょう?
aheadだから・・・この奥に?

一部のアプリで落ちるのはミキサーコントロールが無効になっていて、それで
コントロール取得しようとしたときの例外処理を記述してないために落ちる
そのソフトウェア開発者の手抜きによるものです。そして、そのミキサー
コントロールのコミュニケーションを司っているのが、 revo.c prodigy192.c など
のソースです。コピーしてきて、IDの変更と、通称名の一通り書き換えれば
ミキサー不具合で落ちると言う現象は回避できるようです。

追記7

今の状態でALSAへアクセスすると、どのような結果になるのかFMOD4を
塚って検証しました。

FMOD - music & soundeffects sytem
http://www.fmod.org/

これはマルチプラットフォームのサウンドドライバーで、フリーウェアなら無料
シェアウェアなら100ドルで使用できるライブラリです。Windows環境では
よく使われています。信頼性が抜群で、リバーブなどのDSP演算をドライバ側で
行うことができます。各種ゲーム機のミドルウェアとして知られてもいます。
これを利用すればLinuxとWindowsのソフトウェアデザインを同じにすることが
できます。CODECはWMAのみ対応していないようで、未確認ですが他のフォ
ーマットは apt-get なしでネイティブにデコードするはずです。

インストール方法など
$ sudo make install
$ sudo make fmod_examples
$ sudo make uninstall

検証
ミキサーを必要としない状態であれば、問題無く動作している
でもSoftmixのプログラム、ミキサーチェックをすると、プレイチャンネルの取り合い
が発生している。プレイヤーは常にチャンネルを指定するように動作するため
他のソフトウェアの介入を許さない。

(やる気が落ちてきた。しばらく離れます)

最後の編集者: oryaaaaa (2006-11-10 04:26:01)

オフライン

 

#28 2006-11-10 05:45:23

oryaaaaa
メンバ
From: Aichi, Japan
登録日: 2006-10-31

Re: Audiotrak Prodigy HD2 (120dB DAC, 2ch Sound)

ALSA-DEVEL MLに参加して、次の質問をしてみました

件名:ICE1724: Prodigyhd2 driver make problems?

Hi, all. I join alsa-devel today.

I am doing develop Audiotark Prodigy HD2 driver now.
Some problems can't goal to complete.

OS: Linux Ubuntu6.10 (Kernel 2.6.18)
Source: Alsa driver souce included Kernel 2.6.18
/usr/src/linux-2.6.18/sound/pci/ice1712/

Audiotrak prodigy hd2
Envy24HT-S (VT1721)
DAC AK4396 (SN 120dB)
ADC AK5353
output 2ch only, RCAx1, Headphonex1,Optx1
input 2ch, Line-in (but Line goto ADC, Digital IN force to output 2ch)
*input : for AD coverter, Headphone amp

Problems 1 Sounds resolustion is loose

Solution 1
/usr/share/alsa/pcm/dmix.conf
default S16_LE to default S32_LE

@args.FORMAT {
type string
default S32_LE
}

Promblems 2 /proc/asound/cards is displayed "ice1724"

~$ cat /proc/asound/cards
0 [ICE1724 ]: ICE1724 - ICEnsemble ICE1724
ICEnsemble ICE1724 at 0xac00, irq 233

Challenge1 <This source is digest version>
Modified Makefile, prodigyhd2.c & prodigyhd2.h (from revo.c), ice1724.c

<prodigyhd2.h>
#define PRODIGYHD2_DEVICE_DESC \
"{{Audiotrak,Prodigy HD2},"
#define VT1724_SUBDEVICE_PRODIGYHD2 0x12140124

<prodigyhd2.c>
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 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 */
};

<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,
};

Result 1

~$ cat /proc/asound/cards
0 [HD2 ]: ICE1724 - Audiotrak Prodigy HD2
Audiotrak Prodigy HD2 at 0xdc00, irq 233

Promblem 3

$ dmesg
ice1724: Invalid EEPROM version 1

Chellenge 2

I read source code with ice1724.c, and understand its message means.

/var/lib/alsa/asound.state

state.ICE1724 {
control.1 {
comment.access read
comment.type BYTES
comment.count 52
iface CARD
name 'ICE1724 EEPROM'
value
'240114121c01628030c3ff0000ff0000ff0000008100000000080000000000000000000000000000ff000000ff000000ff000000'
}

EEPROM dump prodigyhd2 (value is display by hexeditor)
00000000 24 01 14 12 1C 01 62 80 30 C3 FF 00 00 FF 00 00 $.....b.0.......
00000010 FF 00 00 00 81 00 00 00 00 08 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 FF 00 00 00 FF 00 00 00 ................
00000030 FF 00 00 00 ....

Refference ML LOG / SourceForge.net: alsa-cvslog
http://sourceforge.net/mailarchive/mess … id=9338682
<http://sourceforge.net/mailarchive/message.php?msg_id=9338682>

ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05)
This version, vt1724 is judged vt1712 ! , and result is Invalid.

"No Problem?"

Problem 4 ALSA mix contorol cant mix, or enable?

I dont control gnome volume applet, and fmod's mixing cant control.
Music Player can volume cotrol, but multichannel is disabled. only one !

Question: I want Envy24HT-S control Knowhow.
"Transfer protcols is i2c, Conrotl interface GPIO, and Instruction is
SPI or I2c. "
by iwai (in slashdot.jp)

Please teach me.

<Detailed situation>
Ubuntu Japan forum / Audiotrak Prodigy HD2
http://forum.ubuntulinux.jp/viewtopic.php?id=11

Thanks
------------------
oryaaaaa, I use PureBasic Linux  :-D

オフライン

 

#29 2006-11-12 11:59:01

oryaaaaa
メンバ
From: Aichi, Japan
登録日: 2006-10-31

Re: Audiotrak Prodigy HD2 (120dB DAC, 2ch Sound)

返事が来ました。

まず16ビットなのは、UbuntuのALSAソースが古いのでバージョンを確認してください

ICE1724.pcm.default {
        @args [ CARD ]
        @args.CARD {
                type string
        }
        type asym
        playback.pcm {
                type plug
                slave.pcm {
                        @func concat
                        strings [ "dmix:" $CARD ",FORMAT=S32_LE" ]
                }
        }
        capture.pcm {
                type plug
                slave.pcm {
                        @func concat
                        strings [ "dsnoop:" $CARD ",FORMAT=S32_LE" ]
                }
        }
}

次にこれについては
> $ dmesg
> > ice1724: Invalid EEPROM version 1
エラーでは無い。ワーニングメッセージである。

EEPROMが2番でなく1番なのは問題無し。
No problem, indeed, in your case.  If it matters, you can provide a
modifed EEPROM image statically in the config table.
EEPROMを書き換えるのでは無く、読み出したコンフィグテーブルを
書き換えるだけで済むと言う話のようだ。つまり、読み出す処理のところで
書き換えたEEPROMの情報を偽造すれば解決でしょ・・・ということだね。

なんにしてもソースが古いので、最新のソースで動作確認して
レポートをよこしてほしいそうです。

オフライン

 

#30 2006-11-12 13:06:52

oryaaaaa
メンバ
From: Aichi, Japan
登録日: 2006-10-31

Re: Audiotrak Prodigy HD2 (120dB DAC, 2ch Sound)

現在、通常の使用では問題ありません。

えーっと、なにかやって、再起動してしまったときは
$history
で、シェルの内容を振り返れます。

Advanced Linux Sound Architecture - ALSA
http://www.alsa-project.org/
ここの右上から、ダウンロードします

cd alsa-driver-1.0.13rc3/
sudo ./configure
sudo make
sudo make install
sudo ./snddevices

cd alsa-lib-1.0.13rc3/
sudo ./configure
sudo make
sudo make install

再起動してください。ちゃんとミキサーして複数のソフトが使えます。

オフライン

 

Board footer

Powered by FluxBB