Hello Takashi,
There is a minor bug in ak4114.c, patch is below (including the reversed check, diffed against sources from hg a few hours ago). Tests show the code works fine (PCM controls get updated correctly), only sample rate is shown incorrect in "IEC958 External Rate". I will do more tests tomorrow to elaborate on the sample rate.
Thanks,
Pavel.
diff -r 05ecca0fba92 i2c/other/ak4114.c --- a/i2c/other/ak4114.c Tue Apr 03 13:20:49 2007 +0200 +++ b/i2c/other/ak4114.c Tue Apr 03 21:36:18 2007 +0200 @@ -435,7 +435,7 @@ static struct snd_kcontrol_new snd_ak411 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, .info = snd_ak4114_in_bit_info, .get = snd_ak4114_in_bit_get, - .private_value = (6<<8) | AK4114_REG_RCS1, + .private_value = (6<<8) | AK4114_REG_RCS0, }, { .iface = SNDRV_CTL_ELEM_IFACE_PCM, @@ -443,7 +443,7 @@ static struct snd_kcontrol_new snd_ak411 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, .info = snd_ak4114_in_bit_info, .get = snd_ak4114_in_bit_get, - .private_value = (3<<8) | AK4114_REG_RCS1, + .private_value = (3<<8) | AK4114_REG_RCS0, } };
@@ -462,7 +462,7 @@ int snd_ak4114_build(struct ak4114 *ak41 kctl = snd_ctl_new1(&snd_ak4114_iec958_controls[idx], ak4114); if (kctl == NULL) return -ENOMEM; - if (!strstr(kctl->id.name, "Playback")) { + if (strstr(kctl->id.name, "Playback")) { if (ply_substream == NULL) { snd_ctl_free_one(kctl); ak4114->kctls[idx] = NULL;