Armadilloフォーラム

Armadillo-810でCS4270を使用したサウンドデバイスが認識できない

sec2

2017年1月21日 16時31分

はじめまして、エスイーシーの佐藤と申します。
よろしくお願い致します。

現在、Armadillo-810にコーデックCS4270を搭載した拡張ボードを、CON5で接続する事で
Armadillo-840と同様なサウンド処理ができる事を目指しています。
(なお、Armadillo-840では、CS4270を使用して正常に動作できました。)

下記の情報を参考にして作業していましたが、サウンドデバイスが認識されずに行き
詰ってしまいました。。。
お手数ですが、アドバイスを頂けないでしょうか?

<参考情報>
 ・Armadillo-810でオーディオコーデックICの使用
   https://armadillo.atmark-techno.com/forum/armadillo/2070
 ・サウンドコーデック変更に必要な作業
   https://armadillo.atmark-techno.com/forum/armadillo/587

<環境>
 ハードウェア: Armadillo-810 + 自作拡張ボード(CON5接続)
 ATDE5 : atde5-i386-20150518
 Userland: atmark-dist-20140602
 Kernel: linux-3.4-at10

<状況>
 ・起動時ログ(CS4270自体は認識しているが、サウンドデバイスとして認識していない)
         :
   cs4270: 3300 mV
         :
   cs4270 2-004a: found device at i2c address 4A
   cs4270 2-004a: hardware revision 3
         :
   ALSA device list:
    No soundcards found. ←認識していない

 ・起動後のi2cdetectコマンド結果(CS4270のアドレス 0x4aの位置がUUで期待通り)
   # i2cdetect -y -r 2
    0 1 2 3 4 5 6 7 8 9 a b c d e f
   00: -- -- -- -- -- -- -- -- -- -- -- -- --
   10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   30: UU UU UU UU UU UU UU UU -- -- -- -- -- -- -- --
   40: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
   50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   70: -- -- -- -- -- -- -- --

 ・/dev/snd配下にtimerしかない(ファイル不足)
  正常にサウンドデバイスが認識されると、他にもcontrolC0 controlC1 pcmC0D0p pcmC1D0c pcmC1D0p
  などが作成されると推測しています。(Armadillo-840時より)

 ・下記ファイル内のcs4270_probe()がコールされない (コール不足)
  linux-3.4-at10/sound/soc/codecs/cs4270.c

  なお、同ファイル内のcs4270_i2c_probe()はコールされている。

<推測>
 cs4270_probe()がコールされて処理が進めば、以下の様な起動時ログが表示されて
 サウンドカードが認識されると推測しております。
 (下記のログは、Armadillo-840時の起動ログです。)
      :
   asoc: cs4270-hifi <-> fsia-dai mapping ok
      :
   ALSA device list:
    #0: FSI2B-HDMI
    #1: FSI2A-CS4270
      :

他に何か必要な情報がありましたら、教えて頂けると助かります。

以上です。

コメント

エスイーシーの佐藤と申します。

>   なお、同ファイル内のcs4270_i2c_probe()はコールされている。
本関数コール時の戻り値は0でした。

エスイーシーの佐藤です。

自己解決しました。
下記の様に修正することで、正常に認識させる事ができました。
(Armadillo-840→Armadillo-810変更に伴い、I2C-0→I2C-2となっている事がポイントでした。)

static struct asoc_simple_card_info __maybe_unused fsi_cs4270_info = {
.name = "cs4270",
.card = "FSI2A-CS4270",
.cpu_dai = "fsia-dai",
// .codec = "cs4270.0-004a",
.codec = "cs4270.2-004a",
.platform = "sh_fsi2",
.codec_dai = "cs4270-hifi",
.init = &fsi_cs4270_init_info,
};

static struct regulator_consumer_supply cs4270_supply[] = {
// REGULATOR_SUPPLY("va", "0-004a"),
// REGULATOR_SUPPLY("vd", "0-004a"),
// REGULATOR_SUPPLY("vlc", "0-004a"),
REGULATOR_SUPPLY("va", "2-004a"),
REGULATOR_SUPPLY("vd", "2-004a"),
REGULATOR_SUPPLY("vlc", "2-004a"),
};

お世話になります。
大島と申します。

上記の情報を参考にして、Armadillo-810とCS4270のみで
wavファイルの再生を試しています。
CS4270は認識されましたが
I2Sの信号が出力されず、wavファイルを再生することができません。
お手数をお掛けいたしますが、アドバイスをいただきたく
宜しくお願いいたします。

<環境>
ハードウェア: Armadillo-810 + 下記URLを参考にした回路(CON5接続)

ATDE5 : atde5-amd64-20150612
Userland : atmark-dist-20150618
Kernel : linux-3.4-at14

<修正箇所>
linux-3.4-at14/arch/arm/mach-shmobile
・Kconfig.armadillo800
Armadillo-840を参考に、FSIA_SLAVE、FSIA_SLAVE_DEVICE_CS4270、SND_SOC_CS4270を追加。
FSIA_MASTER*は無効?
SCIFA4、SCIFA5を無効。

・board-armadillo810.c
PORT160をSDA、PORT161をSCLとして、i2c3を構成。
Armadillo-840を参考に、FSI(FSIA、FSIB)を追加。
Armadillo-840を参考に、a810_clock_initを追加。

WM8978は不要のため、無効。
make menuconfogで変更箇所を反映。

<状況>
・起動ログ
CS4270は認識され、サウンドデバイスとして認識しています。
     :
cs4270: 3300 mV
     :
cs4270 3-004a: found device at i2c address 4A
cs4270 3-004a: hardware revision 3
fsi-pcm-audio sh_fsi2: Runtime PM disabled, clock forced on.
asoc: cs4270-hifi <-> fsia-dai mapping ok
     :
ALSA device list:
#0: FSI2A-CS4270

・起動後のi2cdetectコマンド結果
CS4270のアドレス 0x4aの位置がUUで期待通り。

・/dev/snd配下のデバイスファイルの配置
[root@armadillo810-0 (ttySC2) ~]# ls /dev/snd/
controlC0 pcmC0D0c pcmC0D0p timer

・下記ファイル内のcs4270_probe()のコールの状況
linux-3.4-at10/sound/soc/codecs/cs4270.c
コールされているか、確認の仕方が分かりません。。
ALSA device listに該当デバイスが表示されているのでコールされている?

・ALSA(aplayコマンド)の実行
[root@armadillo810-0 (ttySC2) /home/ftp/pub]# amixer -c 0 set Master on 70%
Simple mixer control 'Master',0
Capabilities: pvolume pswitch cswitch
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: Playback 0 - 255
Front Left: Playback 179 [70%] [on] Capture [on]
Front Right: Playback 179 [70%] [on] Capture [on]
実行はできましたが、反映されたのか分かりません。。

[root@armadillo810-0 (ttySC2) /home/ftp/pub]# aplay -Dplug:hw:0 -M -twav /home/ftp/pub/test.wav
Playing WAVE '/home/ftp/pub/test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
実行はできましたが、I2Sの出力ピンにオシロをあてても、信号が出力されていません。
FSIAIBT、FSIAILR、FSIAOSLD、FSIAISLDの全信号を確認。

・回路に記載されていたAUDIO_CLKとは?
Armadillo-810の場合、AUDIO_CLKがどのピンなのか分かりません。。

・wavファイルを再生する信号について
FSIAO*ではなく、FSIAI*でよいのでしょうか?
FSIAO*の場合、カーネルソースの変更の仕方が分かりません。。

お世話になります。
大島と申します。

下記URLを参考にした回路(CON5接続)
Howto : Armadillo-840 液晶モデル開発セット でオーディオコーデック(CS4270)を使用する

Armadillo-810とCS4270のみと記載しましたが
ほぼ同等の回路で構成しています。