#define QUIRK_INV_JD1_1(q)     ((q) & 1)
 #define QUIRK_LEVEL_IRQ(q)     (((q) >> 1) & 1)
 #define QUIRK_IN2_DIFF(q)      (((q) >> 2) & 1)
+#define QUIRK_INV_HP_POL(q)    (((q) >> 3) & 1)
 #define QUIRK_JD_MODE(q)       (((q) >> 4) & 7)
 #define QUIRK_DMIC1_DATA_PIN(q)        (((q) >> 8) & 3)
 #define QUIRK_DMIC2_DATA_PIN(q)        (((q) >> 12) & 3)
        case 0: /* Not using rt5645 JD */
                if (rt5645->gpiod_hp_det) {
                        gpio_state = gpiod_get_value(rt5645->gpiod_hp_det);
+                       if (rt5645->pdata.inv_hp_pol)
+                               gpio_state ^= 1;
                        dev_dbg(rt5645->component->dev, "gpio_state = %d\n",
                                gpio_state);
                        report = rt5645_jack_detect(rt5645->component, gpio_state);
                rt5645->pdata.in2_diff = QUIRK_IN2_DIFF(quirk);
                rt5645->pdata.level_trigger_irq = QUIRK_LEVEL_IRQ(quirk);
                rt5645->pdata.inv_jd1_1 = QUIRK_INV_JD1_1(quirk);
+               rt5645->pdata.inv_hp_pol = QUIRK_INV_HP_POL(quirk);
                rt5645->pdata.jd_mode = QUIRK_JD_MODE(quirk);
                rt5645->pdata.dmic1_data_pin = QUIRK_DMIC1_DATA_PIN(quirk);
                rt5645->pdata.dmic2_data_pin = QUIRK_DMIC2_DATA_PIN(quirk);