ALSA: hda - check proper return value
[firefly-linux-kernel-4.4.55.git] / sound / pci / hda / hda_proc.c
index e59e2f059b6ede9a21bc4d92ecf4f92a668f5ae3..7e46258fc7002e24eeb1159e49b05d157a534995 100644 (file)
@@ -426,10 +426,10 @@ static void print_digital_conv(struct snd_info_buffer *buffer,
 
 static const char *get_pwr_state(u32 state)
 {
-       static const char * const buf[4] = {
-               "D0", "D1", "D2", "D3"
+       static const char * const buf[] = {
+               "D0", "D1", "D2", "D3", "D3cold"
        };
-       if (state < 4)
+       if (state < ARRAY_SIZE(buf))
                return buf[state];
        return "UNKNOWN";
 }
@@ -451,14 +451,21 @@ static void print_power_state(struct snd_info_buffer *buffer,
        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)
+       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\n",
+       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");
 }
 
 static void print_unsol_cap(struct snd_info_buffer *buffer,