[alsa-devel] Issues and/or possible bugs in alsa
Raymond Yau
superquad.vortex2 at gmail.com
Fri Apr 3 17:10:58 CEST 2015
>
> I'm going to take a guess and conclude that there must be bugs in the
interface patch written for the realtek codecs. I happened to test two
other laptops and they worked just fine. (Intel...)
>
> ...I guess in should report a bug related to that realtek patch...
>
> •
>>>> >
>>>> > Is there anything else I need to do?
>>>>
>>>> Codec: Realtek ALC269VB
>>>> Address: 0
>>>> AFG Function Id: 0x1 (unsol 1)
>>>> Vendor Id: 0x10ec0269
>>>> Subsystem Id: 0x1179fa22
>>>> Revision Id: 0x100100
>>>> No Modem Function Group found
>>>> Default PCM:
>>>> N/A
>>>> Default Amp-In caps: N/A
>>>> Default Amp-Out caps: N/A
>>>> State of AFG node 0x01:
>>>> Power: setting=UNKNOWN, actual=UNKNOWN, Error, Clock-stop-OK,
Setting-reset
>>>> Invalid AFG subtree
You need to find out what value return snd_hda_param_read() in
snd_hda_get_sub_nodes ()
and value of pwr return by snd_hda_codec_read(codec, nid, 0,
AC_VERB_GET_POWER_STATE, 0);
int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
hda_nid_t *start_id)
{
unsigned int parm;
parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
if (parm == -1) {
*start_id = 0
return 0;
}
*start_id = (parm >> 16) & 0x7fff;
return (int)(parm & 0x7fff);
}
nodes = snd_hda_get_sub_nodes(codec, fg, &nid);
if (! nid || nodes < 0) {
snd_iprintf(buffer, "Invalid AFG subtree\n");
snd_hda_power_down(codec);
return;
}
Power: setting=UNKNOWN, actual=UNKNOWN, Error, Clock-stop-OK, Setting-reset
static const char *get_pwr_state(u32 state)
{
static const char * const buf[] = {
"D0", "D1", "D2", "D3", "D3cold"
};
if (state < ARRAY_SIZE(buf))
return buf[state];
return "UNKNOWN";
}
int sup = snd_hda_param_read(codec, nid, AC_PAR_POWER_STATE);
int pwr = snd_hda_codec_read(codec, nid, 0,
AC_VERB_GET_POWER_STATE, 0);
if (sup != -1)
snd_iprintf(buffer, " Power states: %s\n",
bits_names(sup, names, ARRAY_SIZE(names)));
snd_iprintf(buffer, " Power: setting=%s, actual=%s",
get_pwr_state(pwr & AC_PWRST_SETTING),
get_pwr_state((pwr & AC_PWRST_ACTUAL) >>
AC_PWRST_ACTUAL_SHIFT));
if (pwr & AC_PWRST_ERROR)
snd_iprintf(buffer, ", Error");
if (pwr & AC_PWRST_CLK_STOP_OK)
snd_iprintf(buffer, ", Clock-stop-OK");
if (pwr & AC_PWRST_SETTING_RESET)
snd_iprintf(buffer, ", Setting-reset");
snd_iprintf(buffer, "\n");
More information about the Alsa-devel
mailing list