ASoC: rt5645: read jd1_1 status for jd detection
authorBard Liao <bardliao@realtek.com>
Wed, 28 Jun 2017 12:49:36 +0000 (14:49 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 28 Jun 2017 17:33:30 +0000 (18:33 +0100)
Read the jd status after invert control. The benefit is we don't need
to invert the reading jd status when jd invert is needed.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5645.c

index 87844a45886a5f965d04abaeb670e28ab32efdee..8e419ea418e95cb74de56347dc209711c83baaee 100644 (file)
@@ -3238,24 +3238,16 @@ static void rt5645_jack_detect_work(struct work_struct *work)
                snd_soc_jack_report(rt5645->mic_jack,
                                    report, SND_JACK_MICROPHONE);
                return;
-       case 1: /* 2 port */
-               val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0070;
-               break;
-       default: /* 1 port */
-               val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0020;
+       default: /* read rt5645 jd1_1 status */
+               val = snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x1000;
                break;
 
        }
 
-       switch (val) {
-       /* jack in */
-       case 0x30: /* 2 port */
-       case 0x0: /* 1 port or 2 port */
-               if (rt5645->jack_type == 0) {
-                       report = rt5645_jack_detect(rt5645->codec, 1);
-                       /* for push button and jack out */
-                       break;
-               }
+       if (!val && (rt5645->jack_type == 0)) { /* jack in */
+               report = rt5645_jack_detect(rt5645->codec, 1);
+       } else if (!val && rt5645->jack_type != 0) {
+               /* for push button and jack out */
                btn_type = 0;
                if (snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x4) {
                        /* button pressed */
@@ -3302,19 +3294,12 @@ static void rt5645_jack_detect_work(struct work_struct *work)
                        mod_timer(&rt5645->btn_check_timer,
                                msecs_to_jiffies(100));
                }
-
-               break;
-       /* jack out */
-       case 0x70: /* 2 port */
-       case 0x10: /* 2 port */
-       case 0x20: /* 1 port */
+       } else {
+               /* jack out */
                report = 0;
                snd_soc_update_bits(rt5645->codec,
                                    RT5645_INT_IRQ_ST, 0x1, 0x0);
                rt5645_jack_detect(rt5645->codec, 0);
-               break;
-       default:
-               break;
        }
 
        snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE);