static int patch_alc888(struct hda_codec *codec)
 {
-       if ((alc_read_coef_idx(codec, 0) & 0x00f0)==0x0030){
+       int coef;
+
+       coef = alc_read_coef_idx(codec, 0);
+       /* For ALC887-VD ALC888S-VD */
+       if ((coef & 0x00f0) == 0x0030) {
                kfree(codec->chip_name);
                if (codec->vendor_id == 0x10ec0887)
                        codec->chip_name = kstrdup("ALC887-VD", GFP_KERNEL);
                }
                return patch_alc662(codec);
        }
+
+       /* For ALC888S-VC */
+       if (codec->vendor_id == 0x10ec0888) {
+               if ((coef & 0xf0f0) == 0x3020) {
+                       kfree(codec->chip_name);
+                       codec->chip_name = kstrdup("ALC886", GFP_KERNEL);
+                       if (!codec->chip_name) {
+                               alc_free(codec);
+                               return -ENOMEM;
+                       }
+               }
+       }
        return patch_alc882(codec);
 }