Lines Matching +full:use +full:- +full:jd2

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * extcon-arizona.c - Extcon driver Wolfson Arizona devices
5 * Copyright (C) 2012-2014 Wolfson Microelectronics plc
26 #include <dt-bindings/mfd/arizona.h>
33 * The hardware supports 8 ranges / buttons, but the snd-jack interface
34 * only supports 6 buttons (button 0-5).
100 struct arizona *arizona = info->arizona;
105 switch (arizona->type) {
122 ret = regmap_update_bits(arizona->regmap,
127 dev_warn(arizona->dev, "Failed to set TST_CAP_SEL: %d\n", ret);
136 snd_soc_dapm_mutex_lock(arizona->dapm);
138 arizona->hpdet_clamp = clamp;
142 ret = regmap_update_bits(arizona->regmap,
147 dev_warn(arizona->dev, "Failed to disable headphone outputs: %d\n", ret);
151 ret = regmap_update_bits(arizona->regmap, ARIZONA_HP_CTRL_1L,
154 dev_warn(arizona->dev, "Failed to do clamp: %d\n", ret);
156 ret = regmap_update_bits(arizona->regmap, ARIZONA_HP_CTRL_1R,
159 dev_warn(arizona->dev, "Failed to do clamp: %d\n", ret);
164 ret = regmap_update_bits(arizona->regmap,
167 ARIZONA_OUT1R_ENA, arizona->hp_ena);
169 dev_warn(arizona->dev, "Failed to restore headphone outputs: %d\n", ret);
172 snd_soc_dapm_mutex_unlock(arizona->dapm);
177 struct arizona *arizona = info->arizona;
179 mode %= info->micd_num_modes;
181 gpiod_set_value_cansleep(info->micd_pol_gpio,
182 info->micd_modes[mode].gpio);
184 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
186 info->micd_modes[mode].bias <<
188 regmap_update_bits(arizona->regmap, ARIZONA_ACCESSORY_DETECT_MODE_1,
189 ARIZONA_ACCDET_SRC, info->micd_modes[mode].src);
191 info->micd_mode = mode;
193 dev_dbg(arizona->dev, "Set jack polarity to %d\n", mode);
198 switch (info->micd_modes[0].bias) {
212 struct arizona *arizona = info->arizona;
214 struct snd_soc_dapm_context *dapm = arizona->dapm;
220 dev_warn(arizona->dev, "Failed to enable %s: %d\n", widget, ret);
224 if (!arizona->pdata.micd_force_micbias) {
227 dev_warn(arizona->dev, "Failed to disable %s: %d\n", widget, ret);
235 struct arizona *arizona = info->arizona;
240 /* Microphone detection can't use idle mode */
241 pm_runtime_get_sync(arizona->dev);
243 if (info->detecting) {
244 ret = regulator_allow_bypass(info->micvdd, false);
246 dev_err(arizona->dev, "Failed to regulate MICVDD: %d\n", ret);
249 ret = regulator_enable(info->micvdd);
251 dev_err(arizona->dev, "Failed to enable MICVDD: %d\n", ret);
253 if (info->micd_reva) {
260 regmap_multi_reg_write(arizona->regmap, reva, ARRAY_SIZE(reva));
263 if (info->detecting && arizona->pdata.micd_software_compare)
268 regmap_update_bits(arizona->regmap,
274 ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1,
278 dev_err(arizona->dev, "Failed to enable micd: %d\n", ret);
280 regulator_disable(info->micvdd);
281 pm_runtime_put_autosuspend(arizona->dev);
287 struct arizona *arizona = info->arizona;
289 struct snd_soc_dapm_context *dapm = arizona->dapm;
294 ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1,
298 dev_err(arizona->dev, "Failed to disable micd: %d\n", ret);
302 dev_warn(arizona->dev, "Failed to disable %s: %d\n", widget, ret);
306 if (info->micd_reva) {
313 regmap_multi_reg_write(arizona->regmap, reva, ARRAY_SIZE(reva));
316 ret = regulator_allow_bypass(info->micvdd, true);
318 dev_err(arizona->dev, "Failed to bypass MICVDD: %d\n", ret);
321 regulator_disable(info->micvdd);
322 pm_runtime_put_autosuspend(arizona->dev);
350 struct arizona *arizona = info->arizona;
354 ret = regmap_read(arizona->regmap, ARIZONA_HEADPHONE_DETECT_2, &val);
356 dev_err(arizona->dev, "Failed to read HPDET status: %d\n", ret);
360 switch (info->hpdet_ip_version) {
363 dev_err(arizona->dev, "HPDET did not complete: %x\n", val);
364 return -EAGAIN;
372 dev_err(arizona->dev, "HPDET did not complete: %x\n", val);
373 return -EAGAIN;
376 ret = regmap_read(arizona->regmap, ARIZONA_HP_DACVAL, &val);
378 dev_err(arizona->dev, "Failed to read HP value: %d\n", ret);
379 return -EAGAIN;
382 regmap_read(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
387 if (range < ARRAY_SIZE(arizona_hpdet_b_ranges) - 1 &&
391 dev_dbg(arizona->dev, "Moving to HPDET range %d\n", range);
392 regmap_update_bits(arizona->regmap,
397 return -EAGAIN;
403 dev_dbg(arizona->dev, "Measurement out of range\n");
407 dev_dbg(arizona->dev, "HPDET read %d in range %d\n", val, range);
410 / ((val * 100) -
416 dev_err(arizona->dev, "HPDET did not complete: %x\n", val);
417 return -EAGAIN;
424 regmap_read(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
430 if (range < ARRAY_SIZE(arizona_hpdet_c_ranges) - 1 &&
433 dev_dbg(arizona->dev, "Moving to HPDET range %d-%d\n",
436 regmap_update_bits(arizona->regmap,
441 return -EAGAIN;
445 dev_dbg(arizona->dev, "Reporting range boundary %d\n",
452 dev_warn(arizona->dev, "Unknown HPDET IP revision %d\n", info->hpdet_ip_version);
453 return -EINVAL;
456 dev_dbg(arizona->dev, "HP impedance %d ohms\n", val);
463 struct arizona *arizona = info->arizona;
465 int id_gpio = arizona->pdata.hpdet_id_gpio;
470 if (!arizona->pdata.hpdet_acc_id)
477 info->hpdet_res[info->num_hpdet_res++] = *reading;
481 if (id_gpio && info->num_hpdet_res == 1) {
482 dev_dbg(arizona->dev, "Measuring mic\n");
484 regmap_update_bits(arizona->regmap,
489 info->micd_modes[0].src);
493 regmap_update_bits(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
495 return -EAGAIN;
500 dev_dbg(arizona->dev, "HPDET measured %d %d\n",
501 info->hpdet_res[0], info->hpdet_res[1]);
504 *reading = info->hpdet_res[0];
507 if (*reading >= ARIZONA_HPDET_MAX && !info->hpdet_retried) {
508 dev_dbg(arizona->dev, "Retrying high impedance\n");
509 info->num_hpdet_res = 0;
510 info->hpdet_retried = true;
512 pm_runtime_put(arizona->dev);
513 return -EAGAIN;
519 if (!id_gpio || info->hpdet_res[1] > 50) {
520 dev_dbg(arizona->dev, "Detected mic\n");
522 info->detecting = true;
524 dev_dbg(arizona->dev, "Detected headphone\n");
528 regmap_update_bits(arizona->regmap, ARIZONA_ACCESSORY_DETECT_MODE_1,
529 ARIZONA_ACCDET_SRC, info->micd_modes[0].src);
537 struct arizona *arizona = info->arizona;
539 int id_gpio = arizona->pdata.hpdet_id_gpio;
544 mutex_lock(&info->lock);
547 if (!info->hpdet_active) {
548 dev_warn(arizona->dev, "Spurious HPDET IRQ\n");
549 mutex_unlock(&info->lock);
554 state = info->jack->status & SND_JACK_MECHANICAL;
556 dev_dbg(arizona->dev, "Ignoring HPDET for removed cable\n");
561 if (ret == -EAGAIN)
568 regmap_update_bits(arizona->regmap,
574 if (ret == -EAGAIN)
585 snd_soc_jack_report(info->jack, report, SND_JACK_LINEOUT | SND_JACK_HEADPHONE);
589 regmap_update_bits(arizona->regmap,
602 if (state && (mic || info->mic))
605 if (info->hpdet_active) {
606 pm_runtime_put_autosuspend(arizona->dev);
607 info->hpdet_active = false;
612 info->hpdet_done = true;
615 mutex_unlock(&info->lock);
622 struct arizona *arizona = info->arizona;
625 if (info->hpdet_done)
628 dev_dbg(arizona->dev, "Starting HPDET\n");
631 pm_runtime_get_sync(arizona->dev);
633 info->hpdet_active = true;
639 ret = regmap_update_bits(arizona->regmap,
642 arizona->pdata.hpdet_channel);
644 dev_err(arizona->dev, "Failed to set HPDET mode: %d\n", ret);
648 ret = regmap_update_bits(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
651 dev_err(arizona->dev, "Can't start HPDETL measurement: %d\n", ret);
659 pm_runtime_put_autosuspend(arizona->dev);
662 snd_soc_jack_report(info->jack, SND_JACK_HEADPHONE,
665 if (info->mic)
668 info->hpdet_active = false;
673 struct arizona *arizona = info->arizona;
678 dev_dbg(arizona->dev, "Starting identification via HPDET\n");
681 pm_runtime_get_sync(arizona->dev);
683 info->hpdet_active = true;
687 ret = regmap_update_bits(arizona->regmap,
690 info->micd_modes[0].src |
691 arizona->pdata.hpdet_channel);
693 dev_err(arizona->dev, "Failed to set HPDET mode: %d\n", ret);
697 if (arizona->pdata.hpdet_acc_id_line) {
698 ret = regmap_update_bits(arizona->regmap,
702 dev_err(arizona->dev, "Can't start HPDETL measurement: %d\n", ret);
713 snd_soc_jack_report(info->jack, SND_JACK_HEADPHONE,
716 info->hpdet_active = false;
725 mutex_lock(&info->lock);
727 dev_dbg(info->arizona->dev, "MICD timed out, reporting HP\n");
729 info->detecting = false;
733 mutex_unlock(&info->lock);
738 struct arizona *arizona = info->arizona;
743 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
746 ret = regmap_read(arizona->regmap, ARIZONA_MIC_DETECT_4, &val);
748 dev_err(arizona->dev, "Failed to read MICDET_ADCVAL: %d\n", ret);
752 dev_dbg(arizona->dev, "MICDET_ADCVAL: %x\n", val);
774 struct arizona *arizona = info->arizona;
779 ret = regmap_read(arizona->regmap, ARIZONA_MIC_DETECT_3, &val);
781 dev_err(arizona->dev, "Failed to read MICDET: %d\n", ret);
785 dev_dbg(arizona->dev, "MICDET: %x\n", val);
788 dev_warn(arizona->dev, "Microphone detection state invalid\n");
789 return -EINVAL;
794 dev_err(arizona->dev, "Failed to get valid MICDET value\n");
795 return -EINVAL;
804 struct arizona *arizona = info->arizona;
807 if (info->detecting && arizona->pdata.micd_software_compare)
818 dev_warn(arizona->dev, "Detected open circuit\n");
819 info->mic = false;
820 info->detecting = false;
827 info->mic = true;
828 info->detecting = false;
832 snd_soc_jack_report(info->jack, SND_JACK_MICROPHONE, SND_JACK_MICROPHONE);
835 ret = regulator_allow_bypass(info->micvdd, true);
837 dev_err(arizona->dev, "Failed to bypass MICVDD: %d\n", ret);
849 if (info->jack_flips >= info->micd_num_modes * 10) {
850 dev_dbg(arizona->dev, "Detected HP/line\n");
852 info->detecting = false;
856 info->micd_mode++;
857 if (info->micd_mode == info->micd_num_modes)
858 info->micd_mode = 0;
859 arizona_extcon_set_mode(info, info->micd_mode);
861 info->jack_flips++;
863 if (arizona->pdata.micd_software_compare)
864 regmap_update_bits(arizona->regmap,
870 &info->micd_timeout_work,
871 msecs_to_jiffies(arizona->pdata.micd_timeout));
881 dev_dbg(arizona->dev, "Headphone detected\n");
882 info->detecting = false;
892 struct arizona *arizona = info->arizona;
904 if (info->mic) {
905 dev_dbg(arizona->dev, "Mic button detected\n");
910 if (lvl && ffs(lvl) - 1 < info->num_micd_ranges) {
911 key = ffs(lvl) - 1;
912 snd_soc_jack_report(info->jack,
914 info->micd_button_mask);
916 dev_err(arizona->dev, "Button out of range\n");
919 dev_warn(arizona->dev, "Button with no mic: %x\n", val);
922 dev_dbg(arizona->dev, "Mic button released\n");
923 snd_soc_jack_report(info->jack, 0, info->micd_button_mask);
935 struct arizona *arizona = info->arizona;
937 cancel_delayed_work_sync(&info->micd_timeout_work);
939 mutex_lock(&info->lock);
942 if (!(info->jack->status & SND_JACK_MECHANICAL)) {
943 dev_dbg(arizona->dev, "Ignoring MICDET for removed cable\n");
944 mutex_unlock(&info->lock);
948 if (info->detecting)
953 pm_runtime_mark_last_busy(arizona->dev);
954 mutex_unlock(&info->lock);
960 struct arizona *arizona = info->arizona;
961 int debounce = arizona->pdata.micd_detect_debounce;
963 cancel_delayed_work_sync(&info->micd_detect_work);
964 cancel_delayed_work_sync(&info->micd_timeout_work);
966 mutex_lock(&info->lock);
967 if (!info->detecting)
969 mutex_unlock(&info->lock);
973 &info->micd_detect_work,
976 arizona_micd_detect(&info->micd_detect_work.work);
987 mutex_lock(&info->lock);
989 mutex_unlock(&info->lock);
994 struct arizona *arizona = info->arizona;
999 ret = regmap_read(arizona->regmap, ARIZONA_HEADPHONE_DETECT_2,
1002 dev_err(arizona->dev, "Failed to read HPDET state: %d\n", ret);
1006 switch (info->hpdet_ip_version) {
1020 dev_warn(arizona->dev, "HPDET did not appear to complete\n");
1022 return -ETIMEDOUT;
1028 struct arizona *arizona = info->arizona;
1033 cancelled_hp = cancel_delayed_work_sync(&info->hpdet_work);
1034 cancelled_mic = cancel_delayed_work_sync(&info->micd_timeout_work);
1036 pm_runtime_get_sync(arizona->dev);
1038 mutex_lock(&info->lock);
1040 if (info->micd_clamp) {
1045 if (arizona->pdata.jd_invert)
1051 ret = regmap_read(arizona->regmap, ARIZONA_AOD_IRQ_RAW_STATUS, &val);
1053 dev_err(arizona->dev, "Failed to read jackdet status: %d\n", ret);
1054 mutex_unlock(&info->lock);
1055 pm_runtime_put_autosuspend(arizona->dev);
1060 if (val == info->last_jackdet) {
1061 dev_dbg(arizona->dev, "Suppressing duplicate JACKDET\n");
1064 &info->hpdet_work,
1068 int micd_timeout = arizona->pdata.micd_timeout;
1071 &info->micd_timeout_work,
1077 info->last_jackdet = val;
1079 if (info->last_jackdet == present) {
1080 dev_dbg(arizona->dev, "Detected jack\n");
1081 snd_soc_jack_report(info->jack, SND_JACK_MECHANICAL, SND_JACK_MECHANICAL);
1083 info->detecting = true;
1084 info->mic = false;
1085 info->jack_flips = 0;
1087 if (!arizona->pdata.hpdet_acc_id) {
1091 &info->hpdet_work,
1095 if (info->micd_clamp || !arizona->pdata.jd_invert)
1096 regmap_update_bits(arizona->regmap,
1101 dev_dbg(arizona->dev, "Detected jack removal\n");
1105 info->num_hpdet_res = 0;
1106 for (i = 0; i < ARRAY_SIZE(info->hpdet_res); i++)
1107 info->hpdet_res[i] = 0;
1108 info->mic = false;
1109 info->hpdet_done = false;
1110 info->hpdet_retried = false;
1112 snd_soc_jack_report(info->jack, 0, ARIZONA_JACK_MASK | info->micd_button_mask);
1123 regmap_update_bits(arizona->regmap,
1131 regmap_write(arizona->regmap, ARIZONA_AOD_WKUP_AND_TRIG,
1137 mutex_unlock(&info->lock);
1139 pm_runtime_put_autosuspend(arizona->dev);
1151 reg = ARIZONA_MIC_DETECT_LEVEL_4 - (index / 2);
1161 regmap_update_bits(arizona->regmap, reg, mask, level);
1167 const char * const prop = "wlf,micd-configs";
1174 nconfs = device_property_count_u32(arizona->dev, prop);
1180 return -ENOMEM;
1182 ret = device_property_read_u32_array(arizona->dev, prop, vals, nconfs);
1190 ret = -ENOMEM;
1200 arizona->pdata.micd_configs = micd_configs;
1201 arizona->pdata.num_micd_configs = nconfs;
1211 struct arizona_pdata *pdata = &arizona->pdata;
1215 device_property_read_u32(arizona->dev, "wlf,hpdet-channel", &val);
1219 pdata->hpdet_channel = val;
1222 dev_err(arizona->dev, "Wrong wlf,hpdet-channel DT value %d\n", val);
1223 pdata->hpdet_channel = ARIZONA_ACCDET_MODE_HPL;
1226 device_property_read_u32(arizona->dev, "wlf,micd-detect-debounce",
1227 &pdata->micd_detect_debounce);
1229 device_property_read_u32(arizona->dev, "wlf,micd-bias-start-time",
1230 &pdata->micd_bias_start_time);
1232 device_property_read_u32(arizona->dev, "wlf,micd-rate",
1233 &pdata->micd_rate);
1235 device_property_read_u32(arizona->dev, "wlf,micd-dbtime",
1236 &pdata->micd_dbtime);
1238 device_property_read_u32(arizona->dev, "wlf,micd-timeout-ms",
1239 &pdata->micd_timeout);
1241 pdata->micd_force_micbias = device_property_read_bool(arizona->dev,
1242 "wlf,micd-force-micbias");
1244 pdata->micd_software_compare = device_property_read_bool(arizona->dev,
1245 "wlf,micd-software-compare");
1247 pdata->jd_invert = device_property_read_bool(arizona->dev,
1248 "wlf,jd-invert");
1250 device_property_read_u32(arizona->dev, "wlf,gpsw", &pdata->gpsw);
1252 pdata->jd_gpio5 = device_property_read_bool(arizona->dev,
1253 "wlf,use-jd2");
1254 pdata->jd_gpio5_nopull = device_property_read_bool(arizona->dev,
1255 "wlf,use-jd2-nopull");
1259 dev_err(arizona->dev, "Failed to read micd configs: %d\n", ret);
1266 struct arizona *arizona = info->arizona;
1267 struct arizona_pdata *pdata = &arizona->pdata;
1270 if (!dev_get_platdata(arizona->dev))
1273 info->micvdd = devm_regulator_get(dev, "MICVDD");
1274 if (IS_ERR(info->micvdd))
1275 return dev_err_probe(arizona->dev, PTR_ERR(info->micvdd), "getting MICVDD\n");
1277 mutex_init(&info->lock);
1278 info->last_jackdet = ~(ARIZONA_MICD_CLAMP_STS | ARIZONA_JD1_STS);
1279 INIT_DELAYED_WORK(&info->hpdet_work, arizona_hpdet_work);
1280 INIT_DELAYED_WORK(&info->micd_detect_work, arizona_micd_detect);
1281 INIT_DELAYED_WORK(&info->micd_timeout_work, arizona_micd_timeout_work);
1283 switch (arizona->type) {
1285 switch (arizona->rev) {
1287 info->micd_reva = true;
1290 info->micd_clamp = true;
1291 info->hpdet_ip_version = 1;
1297 switch (arizona->rev) {
1301 info->micd_clamp = true;
1302 info->hpdet_ip_version = 2;
1308 info->micd_clamp = true;
1309 info->hpdet_ip_version = 2;
1315 if (!pdata->micd_timeout)
1316 pdata->micd_timeout = DEFAULT_MICD_TIMEOUT;
1318 if (pdata->num_micd_configs) {
1319 info->micd_modes = pdata->micd_configs;
1320 info->micd_num_modes = pdata->num_micd_configs;
1322 info->micd_modes = micd_default_modes;
1323 info->micd_num_modes = ARRAY_SIZE(micd_default_modes);
1326 if (arizona->pdata.gpsw > 0)
1327 regmap_update_bits(arizona->regmap, ARIZONA_GP_SWITCH_1,
1328 ARIZONA_SW1_MODE_MASK, arizona->pdata.gpsw);
1331 if (pdata->micd_pol_gpio > 0) {
1332 if (info->micd_modes[0].gpio)
1337 ret = devm_gpio_request_one(dev, pdata->micd_pol_gpio,
1340 dev_err(arizona->dev, "Failed to request GPIO%d: %d\n",
1341 pdata->micd_pol_gpio, ret);
1345 info->micd_pol_gpio = gpio_to_desc(pdata->micd_pol_gpio);
1349 if (info->micd_modes[0].gpio)
1354 /* We can't use devm here because we need to do the get
1359 info->micd_pol_gpio = gpiod_get_optional(arizona->dev,
1360 "wlf,micd-pol",
1362 if (IS_ERR(info->micd_pol_gpio)) {
1363 ret = PTR_ERR(info->micd_pol_gpio);
1364 dev_err_probe(arizona->dev, ret, "getting microphone polarity GPIO\n");
1370 if (arizona->pdata.hpdet_id_gpio > 0) {
1371 ret = devm_gpio_request_one(dev, arizona->pdata.hpdet_id_gpio,
1375 dev_err(arizona->dev, "Failed to request GPIO%d: %d\n",
1376 arizona->pdata.hpdet_id_gpio, ret);
1377 gpiod_put(info->micd_pol_gpio);
1389 gpiod_put(info->micd_pol_gpio);
1397 struct arizona *arizona = info->arizona;
1398 struct arizona_pdata *pdata = &arizona->pdata;
1404 if (arizona->pdata.micd_bias_start_time)
1405 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
1407 arizona->pdata.micd_bias_start_time
1410 if (arizona->pdata.micd_rate)
1411 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
1413 arizona->pdata.micd_rate
1416 switch (arizona->pdata.micd_dbtime) {
1418 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
1423 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
1433 if (arizona->pdata.num_micd_ranges) {
1434 info->micd_ranges = pdata->micd_ranges;
1435 info->num_micd_ranges = pdata->num_micd_ranges;
1437 info->micd_ranges = micd_default_ranges;
1438 info->num_micd_ranges = ARRAY_SIZE(micd_default_ranges);
1441 if (arizona->pdata.num_micd_ranges > ARIZONA_MAX_MICD_BUTTONS) {
1442 dev_err(arizona->dev, "Too many MICD ranges: %d > %d\n",
1443 arizona->pdata.num_micd_ranges, ARIZONA_MAX_MICD_BUTTONS);
1444 return -EINVAL;
1447 if (info->num_micd_ranges > 1) {
1448 for (i = 1; i < info->num_micd_ranges; i++) {
1449 if (info->micd_ranges[i - 1].max >
1450 info->micd_ranges[i].max) {
1451 dev_err(arizona->dev, "MICD ranges must be sorted\n");
1452 return -EINVAL;
1458 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_2,
1462 for (i = 0; i < info->num_micd_ranges; i++) {
1464 if (arizona_micd_levels[j] >= info->micd_ranges[i].max)
1468 dev_err(arizona->dev, "Unsupported MICD level %d\n",
1469 info->micd_ranges[i].max);
1470 return -EINVAL;
1473 dev_dbg(arizona->dev, "%d ohms for MICD threshold %d\n",
1479 info->micd_button_mask |= SND_JACK_BTN_0 >> i;
1480 snd_jack_set_key(jack->jack, SND_JACK_BTN_0 >> i,
1481 info->micd_ranges[i].key);
1484 regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_2,
1493 * If we have a clamp use it, activating in conjunction with
1496 if (info->micd_clamp) {
1497 if (arizona->pdata.jd_gpio5) {
1500 if (arizona->pdata.jd_gpio5_nopull)
1503 regmap_write(arizona->regmap, ARIZONA_GPIO5_CTRL,
1506 if (arizona->pdata.jd_invert)
1511 if (arizona->pdata.jd_invert)
1517 regmap_update_bits(arizona->regmap,
1521 regmap_update_bits(arizona->regmap,
1529 info->jack = jack;
1531 pm_runtime_get_sync(arizona->dev);
1533 if (info->micd_clamp) {
1544 dev_err(arizona->dev, "Failed to get JACKDET rise IRQ: %d\n", ret);
1550 dev_err(arizona->dev, "Failed to set JD rise IRQ wake: %d\n", ret);
1557 dev_err(arizona->dev, "Failed to get JD fall IRQ: %d\n", ret);
1563 dev_err(arizona->dev, "Failed to set JD fall IRQ wake: %d\n", ret);
1570 dev_err(arizona->dev, "Failed to get MICDET IRQ: %d\n", ret);
1577 dev_err(arizona->dev, "Failed to get HPDET IRQ: %d\n", ret);
1582 regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_DEBOUNCE,
1584 regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE,
1587 ret = regulator_allow_bypass(info->micvdd, true);
1589 dev_warn(arizona->dev, "Failed to set MICVDD to bypass: %d\n", ret);
1591 pm_runtime_put(arizona->dev);
1606 pm_runtime_put(arizona->dev);
1607 info->jack = NULL;
1613 struct arizona *arizona = info->arizona;
1618 if (!info->jack)
1621 if (info->micd_clamp) {
1635 cancel_delayed_work_sync(&info->hpdet_work);
1636 cancel_delayed_work_sync(&info->micd_detect_work);
1637 cancel_delayed_work_sync(&info->micd_timeout_work);
1639 ret = regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1,
1643 dev_err(arizona->dev, "Failed to disable micd on remove: %d\n", ret);
1645 regulator_disable(info->micvdd);
1646 pm_runtime_put(arizona->dev);
1649 regmap_update_bits(arizona->regmap,
1652 regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE,
1655 info->jack = NULL;