Loading drivers/switch/switch-arizona.c +22 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ #define ARIZONA_MICD_CLAMP_MODE_JDL_GP5H 0x9 #define ARIZONA_MICD_CLAMP_MODE_JDH_GP5H 0xb #define ARIZONA_HPDET_LINEOUT 500000 /* 5,000 ohms */ #define ARIZONA_HPDET_MAX 1000000 /* 10,000 ohms */ #define HPDET_DEBOUNCE 600 Loading Loading @@ -242,7 +243,7 @@ enum headset_state { BIT_NO_HEADSET = 0, BIT_HEADSET = (1 << 0), BIT_HEADSET_NO_MIC = (1 << 1), BIT_HEADSET_UNSUPPORTED = (1 << 2), BIT_LINEOUT = (1 << 5), }; static ssize_t arizona_extcon_show(struct device *dev, Loading @@ -255,6 +256,11 @@ static ssize_t arizona_extcon_mic_show(struct device *dev, char *buf); static DEVICE_ATTR(mic_impedance, S_IRUGO, arizona_extcon_mic_show, NULL); inline bool arizona_is_lineout(struct arizona_extcon_info *info) { return info->arizona->hp_impedance_x100 >= ARIZONA_HPDET_LINEOUT; } inline void arizona_extcon_report(struct arizona_extcon_info *info, int state) { dev_dbg(info->arizona->dev, "Switch Report: %d\n", state); Loading Loading @@ -1691,11 +1697,9 @@ int arizona_hpdet_reading(struct arizona_extcon_info *info, int val) arizona_extcon_report(info, BIT_HEADSET); arizona_jds_set_state(info, &arizona_micd_button); } else { if (triple_pole_headphone || (large_mic_imp && val<=ARIZONA_HPDET_MAX)) arizona_extcon_report(info, BIT_HEADSET_NO_MIC); else{ arizona_extcon_report(info, BIT_HEADSET_UNSUPPORTED); } arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); arizona_jds_set_state(info, NULL); } Loading Loading @@ -2073,7 +2077,9 @@ done: if (info->mic) arizona_extcon_report(info, BIT_HEADSET); else arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); } if (arizona->pdata.micd_cb) Loading Loading @@ -2104,7 +2110,9 @@ void arizona_micd_mic_timeout(struct arizona_extcon_info *info) else ret = arizona_jds_set_state(info, &arizona_hpdet_left); if (ret < 0) arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); } EXPORT_SYMBOL_GPL(arizona_micd_mic_timeout); Loading Loading @@ -2171,7 +2179,9 @@ static int arizona_hpdet_acc_id_reading(struct arizona_extcon_info *info, } else { dev_dbg(arizona->dev, "Detected headphone\n"); arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); arizona_jds_set_state(info, NULL); } Loading Loading @@ -2230,7 +2240,9 @@ err: pm_runtime_put_autosuspend(info->dev); /* Just report headphone */ arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); return ret; } Loading Loading
drivers/switch/switch-arizona.c +22 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ #define ARIZONA_MICD_CLAMP_MODE_JDL_GP5H 0x9 #define ARIZONA_MICD_CLAMP_MODE_JDH_GP5H 0xb #define ARIZONA_HPDET_LINEOUT 500000 /* 5,000 ohms */ #define ARIZONA_HPDET_MAX 1000000 /* 10,000 ohms */ #define HPDET_DEBOUNCE 600 Loading Loading @@ -242,7 +243,7 @@ enum headset_state { BIT_NO_HEADSET = 0, BIT_HEADSET = (1 << 0), BIT_HEADSET_NO_MIC = (1 << 1), BIT_HEADSET_UNSUPPORTED = (1 << 2), BIT_LINEOUT = (1 << 5), }; static ssize_t arizona_extcon_show(struct device *dev, Loading @@ -255,6 +256,11 @@ static ssize_t arizona_extcon_mic_show(struct device *dev, char *buf); static DEVICE_ATTR(mic_impedance, S_IRUGO, arizona_extcon_mic_show, NULL); inline bool arizona_is_lineout(struct arizona_extcon_info *info) { return info->arizona->hp_impedance_x100 >= ARIZONA_HPDET_LINEOUT; } inline void arizona_extcon_report(struct arizona_extcon_info *info, int state) { dev_dbg(info->arizona->dev, "Switch Report: %d\n", state); Loading Loading @@ -1691,11 +1697,9 @@ int arizona_hpdet_reading(struct arizona_extcon_info *info, int val) arizona_extcon_report(info, BIT_HEADSET); arizona_jds_set_state(info, &arizona_micd_button); } else { if (triple_pole_headphone || (large_mic_imp && val<=ARIZONA_HPDET_MAX)) arizona_extcon_report(info, BIT_HEADSET_NO_MIC); else{ arizona_extcon_report(info, BIT_HEADSET_UNSUPPORTED); } arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); arizona_jds_set_state(info, NULL); } Loading Loading @@ -2073,7 +2077,9 @@ done: if (info->mic) arizona_extcon_report(info, BIT_HEADSET); else arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); } if (arizona->pdata.micd_cb) Loading Loading @@ -2104,7 +2110,9 @@ void arizona_micd_mic_timeout(struct arizona_extcon_info *info) else ret = arizona_jds_set_state(info, &arizona_hpdet_left); if (ret < 0) arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); } EXPORT_SYMBOL_GPL(arizona_micd_mic_timeout); Loading Loading @@ -2171,7 +2179,9 @@ static int arizona_hpdet_acc_id_reading(struct arizona_extcon_info *info, } else { dev_dbg(arizona->dev, "Detected headphone\n"); arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); arizona_jds_set_state(info, NULL); } Loading Loading @@ -2230,7 +2240,9 @@ err: pm_runtime_put_autosuspend(info->dev); /* Just report headphone */ arizona_extcon_report(info, BIT_HEADSET_NO_MIC); arizona_extcon_report(info, arizona_is_lineout(info) ? BIT_LINEOUT : BIT_HEADSET_NO_MIC); return ret; } Loading