diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 6d1924c..185bc1d 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -66,6 +66,11 @@ enum {
 };
 
 enum {
+	STAC_9202_REF,
+	STAC_9202_OPENPEAK
+};
+
+enum {
 	STAC_9205_REF,
 	STAC_9205_DELL_M42,
 	STAC_9205_DELL_M43,
@@ -1016,6 +1021,12 @@ static const struct hda_verb stac9200_eapd_init[] = {
 	{}
 };
 
+static const struct hda_verb stac9202_core_init[] = {
+	/* set dac0mux for dac converter */
+	{ 0x06, AC_VERB_SET_CONNECT_SEL, 0x00},
+	{}
+};
+
 static const struct hda_verb dell_eq_core_init[] = {
 	/* set master volume to max value without distortion
 	 * and direct control */
@@ -1124,6 +1135,9 @@ static const struct snd_kcontrol_new stac92hd73xx_10ch_loopback =
 static const struct snd_kcontrol_new stac92hd71bxx_loopback =
 	STAC_ANALOG_LOOPBACK(0xFA0, 0x7A0, 2);
 
+static const struct snd_kcontrol_new stac9202_loopback =
+	STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0, 1);
+
 static const struct snd_kcontrol_new stac9205_loopback =
 	STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0, 1);
 
@@ -1359,7 +1373,6 @@ static const struct hda_pintbl oqo9200_pin_configs[] = {
 	{}
 };
 
-
 static void stac9200_fixup_panasonic(struct hda_codec *codec,
 				     const struct hda_fixup *fix, int action)
 {
@@ -1547,6 +1560,52 @@ static const struct snd_pci_quirk stac9200_fixup_tbl[] = {
 	{} /* terminator */
 };
 
+static const struct hda_pintbl openpeak9202_pin_configs[] = {
+	{ 0x07, 0x01110014 },
+	{ 0x08, 0x01410013 },
+	{ 0x0a, 0x02111011 },
+	{ 0x0d, 0x02214012 },
+	{ 0x0c, 0x01810022 },
+	{ 0x1b, 0x01a10021 },
+	{ 0x10, 0x01010031 },
+	{ 0x10, 0x01310023 },
+	{ 0x15, 0x01d10024 },
+	{}
+};
+
+static const struct hda_model_fixup stac9202_models[] = {
+	{ .id = STAC_9202_REF, .name = "ref" },
+	{ .id = STAC_9202_OPENPEAK, .name = "openpeak" },
+	{}
+};
+
+static const struct snd_pci_quirk stac9202_fixup_tbl[] = {
+	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,
+	"Stac 9202 Ref Config", STAC_9202_REF),
+	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x8119,
+	"OpenPeak ATOM Frame", STAC_9202_OPENPEAK),
+	{}
+};
+
+static const struct hda_fixup stac9202_fixups[] = {
+	[STAC_REF] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = ref9200_pin_configs,
+	},
+	[STAC_9202_OPENPEAK] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = openpeak9202_pin_configs,
+		.type = HDA_FIXUP_VERBS,
+		.v.verbs = (const struct hda_verb[]) {
+			{0x07, AC_VERB_SET_EAPD_BTLENABLE , 0x02},
+			/* Unmute the Input MUX */
+			{0x14, 0x390, 0x00},
+			{0x14, 0x3a0, 0x00},
+			{}
+		},
+	}
+};
+
 static const struct hda_pintbl ref925x_pin_configs[] = {
 	{ 0x07, 0x40c003f0 },
 	{ 0x08, 0x424503f2 },
@@ -3801,6 +3860,48 @@ static int patch_stac9200(struct hda_codec *codec)
 	return 0;
 }
 
+// jools
+static int patch_stac9202(struct hda_codec *codec)
+{
+	struct sigmatel_spec *spec;
+	int err;
+
+	err = alloc_stac_spec(codec);
+	if (err < 0)
+		return err;
+
+	spec = codec->spec;
+	spec->linear_tone_beep = 1;
+
+	spec->aloopback_mask = 0x40;
+	spec->aloopback_shift = 0;
+	spec->aloopback_ctl = &stac9202_loopback;
+
+	spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1;
+	spec->gpio_data = 0x00;
+
+	spec->eapd_switch = 1;
+
+	codec->patch_ops = stac_patch_ops;
+	codec->power_filter = snd_hda_codec_eapd_power_filter;
+
+	snd_hda_add_verbs(codec, stac9202_core_init);
+
+	snd_hda_pick_fixup(codec, stac9202_models, stac9202_fixup_tbl,
+			   stac9202_fixups);
+	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
+
+	err = stac_parse_auto_config(codec);
+	if (err < 0) {
+		stac_free(codec);
+		return err;
+	}
+
+	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
+
+	return 0;
+}
+
 static int patch_stac925x(struct hda_codec *codec)
 {
 	struct sigmatel_spec *spec;
@@ -4354,8 +4455,8 @@ static const struct hda_codec_preset snd_hda_preset_sigmatel[] = {
  	{ .id = 0x83847627, .name = "STAC9271D", .patch = patch_stac927x },
  	{ .id = 0x83847628, .name = "STAC9274X5NH", .patch = patch_stac927x },
  	{ .id = 0x83847629, .name = "STAC9274D5NH", .patch = patch_stac927x },
-	{ .id = 0x83847632, .name = "STAC9202",  .patch = patch_stac925x },
-	{ .id = 0x83847633, .name = "STAC9202D", .patch = patch_stac925x },
+	{ .id = 0x83847632, .name = "STAC9202",  .patch = patch_stac9202 },
+	{ .id = 0x83847633, .name = "STAC9202D", .patch = patch_stac9202 },
 	{ .id = 0x83847634, .name = "STAC9250", .patch = patch_stac925x },
 	{ .id = 0x83847635, .name = "STAC9250D", .patch = patch_stac925x },
 	{ .id = 0x83847636, .name = "STAC9251", .patch = patch_stac925x },
