Lines Matching +full:headset +full:- +full:detect +full:- +full:gpios

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rt5645.c -- RT5645 ALSA SoC audio codec driver
26 #include <sound/soc-dapm.h>
41 static unsigned int quirk = -1;
430 /* Invert HP detect status polarity */
439 /* Some (package) variants have the headset-mic pin not-connected */
671 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
672 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -6525, 75, 0);
673 static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
674 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
688 /* {-6, -4.5, -3, -1.5, 0, 0.82, 1.58, 2.28} dB */
690 0, 4, TLV_DB_SCALE_ITEM(-600, 150, 0),
699 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
700 uinfo->count = RT5645_HWEQ_NUM * sizeof(struct rt5645_eq_param_s);
711 (struct rt5645_eq_param_s_be16 *)ucontrol->value.bytes.data;
715 eq_param[i].reg = cpu_to_be16(rt5645->eq_param[i].reg);
716 eq_param[i].val = cpu_to_be16(rt5645->eq_param[i].val);
737 (struct rt5645_eq_param_s_be16 *)ucontrol->value.bytes.data;
741 rt5645->eq_param[i].reg = be16_to_cpu(eq_param[i].reg);
742 rt5645->eq_param[i].val = be16_to_cpu(eq_param[i].val);
746 for (i = RT5645_HWEQ_NUM - 1; i >= 0; i--) {
747 if (rt5645->eq_param[i].reg == 0)
749 else if (rt5645->eq_param[i].reg != RT5645_EQ_CTRL2)
756 if (!rt5645_validate_hweq(rt5645->eq_param[i].reg) &&
757 rt5645->eq_param[i].reg != 0)
759 else if (rt5645->eq_param[i].reg == 0)
780 regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
785 mod_delayed_work(system_power_efficient_wq, &rt5645->rcclock_work,
871 * set_dmic_clk - Set parameter of dmic.
881 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
885 rate = rt5645->sysclk / rl6231_get_pre_div(rt5645->regmap,
889 dev_err(component->dev, "Failed to set DMIC clock\n");
899 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
913 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
916 switch (source->shift) {
964 if (rt5645_validate_hweq(rt5645->eq_param[i].reg))
965 regmap_write(rt5645->regmap, rt5645->eq_param[i].reg,
966 rt5645->eq_param[i].val);
975 * rt5645_sel_asrc_clk_src - select ASRC clock source for a set of filters
1004 return -EINVAL;
1281 /*DAC1 L/R source*/ /* MX-29 [9:8] [11:10] */
1300 /*DAC2 L/R source*/ /* MX-1B [6:4] [2:0] */
1324 /* MX-27 [12] */
1336 /* MX-27 [11] */
1348 /* MX-27 [8] */
1361 /* MX-28 [12] */
1372 /* MX-28 [11] */
1384 /* MX-28 [8] */
1395 /* MX-28 [1:0] */
1402 /* MX-28 [4] */
1413 /* MX-28 [3] */
1425 /* MX-77 [9:8] */
1438 /* MX-78 [4:0] */
1476 /* MX-78 [15:14][13:12][11:10] */
1499 /* MX-77 [7:6][5:4][3:2] */
1518 /* MX-79 [14:12][10:8][6:4][2:0] */
1547 /* MX-7a [14:12][10:8][6:4][2:0] */
1572 /* MX-2d [3] [2] */
1591 /* MX-2d [1] [0] */
1610 /* MX-2F [13:12] */
1622 /* MX-31 [15] [13] [11] [9] */
1641 /* MX-9D [9:8] */
1685 if (rt5645->codec_type == CODEC_TYPE_RT5650) {
1690 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1694 regmap_read(rt5645->regmap, RT5645_PR_BASE +
1701 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1704 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1716 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1738 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1740 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1746 hp_amp_power_count--;
1748 if (rt5645->codec_type == CODEC_TYPE_RT5650) {
1749 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1752 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1782 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1789 if (rt5645->codec_type == CODEC_TYPE_RT5645) {
1796 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1816 if (rt5645->codec_type == CODEC_TYPE_RT5645) {
1823 regmap_write(rt5645->regmap, RT5645_PR_BASE +
1848 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1881 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1911 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1934 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1959 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
2755 struct snd_soc_component *component = dai->component;
2760 rt5645->lrck[dai->id] = params_rate(params);
2761 pre_div = rl6231_get_clk_info(rt5645->sysclk, rt5645->lrck[dai->id]);
2763 dev_err(component->dev, "Unsupported clock setting\n");
2764 return -EINVAL;
2768 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size);
2769 return -EINVAL;
2772 switch (rt5645->codec_type) {
2782 rt5645->bclk[dai->id] = rt5645->lrck[dai->id] * (32 << bclk_ms);
2784 dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n",
2785 rt5645->bclk[dai->id], rt5645->lrck[dai->id]);
2786 dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n",
2787 bclk_ms, pre_div, dai->id);
2802 return -EINVAL;
2805 switch (dai->id) {
2822 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id);
2823 return -EINVAL;
2831 struct snd_soc_component *component = dai->component;
2835 switch (rt5645->codec_type) {
2846 rt5645->master[dai->id] = 1;
2850 rt5645->master[dai->id] = 0;
2853 return -EINVAL;
2863 return -EINVAL;
2879 return -EINVAL;
2881 switch (dai->id) {
2893 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id);
2894 return -EINVAL;
2902 struct snd_soc_component *component = dai->component;
2906 if (freq == rt5645->sysclk && clk_id == rt5645->sysclk_src)
2920 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id);
2921 return -EINVAL;
2925 rt5645->sysclk = freq;
2926 rt5645->sysclk_src = clk_id;
2928 dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id);
2936 struct snd_soc_component *component = dai->component;
2941 if (source == rt5645->pll_src && freq_in == rt5645->pll_in &&
2942 freq_out == rt5645->pll_out)
2946 dev_dbg(component->dev, "PLL disabled\n");
2948 rt5645->pll_in = 0;
2949 rt5645->pll_out = 0;
2962 switch (dai->id) {
2972 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id);
2973 return -EINVAL;
2977 dev_err(component->dev, "Unknown PLL source %d\n", source);
2978 return -EINVAL;
2983 dev_err(component->dev, "Unsupported input clock %d\n", freq_in);
2987 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n",
2997 rt5645->pll_in = freq_in;
2998 rt5645->pll_out = freq_out;
2999 rt5645->pll_src = source;
3007 struct snd_soc_component *component = dai->component;
3012 switch (rt5645->codec_type) {
3030 if (rt5645->codec_type == CODEC_TYPE_RT5645)
3106 if (rt5645->en_button_func)
3108 &rt5645->jack_detect_work,
3115 if (!rt5645->en_button_func)
3178 regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0206);
3180 /* for jack type detect */
3184 if (!snd_soc_card_is_instantiated(component->card)) {
3187 regmap_update_bits(rt5645->regmap, RT5645_PWR_ANLG1,
3190 regmap_update_bits(rt5645->regmap, RT5645_PWR_MIXER,
3192 regmap_update_bits(rt5645->regmap, RT5645_PWR_VOL,
3196 regmap_write(rt5645->regmap, RT5645_JD_CTRL3, 0x00f0);
3197 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
3199 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
3202 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
3205 if (rt5645->gpiod_cbj_sleeve)
3206 gpiod_set_value(rt5645->gpiod_cbj_sleeve, 1);
3209 regmap_read(rt5645->regmap, RT5645_IN1_CTRL3, &val);
3211 dev_dbg(component->dev, "val = %d\n", val);
3213 if ((val == 1 || val == 2) && !rt5645->pdata.no_headset_mic) {
3214 rt5645->jack_type = SND_JACK_HEADSET;
3215 if (rt5645->en_button_func) {
3219 if (rt5645->en_button_func)
3223 rt5645->jack_type = SND_JACK_HEADPHONE;
3224 if (rt5645->gpiod_cbj_sleeve)
3225 gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
3227 if (rt5645->pdata.level_trigger_irq)
3228 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3231 regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0e06);
3233 rt5645->jack_type = 0;
3235 regmap_update_bits(rt5645->regmap, RT5645_HP_VOL,
3238 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
3240 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
3243 if (rt5645->en_button_func)
3246 if (rt5645->pdata.jd_mode == 0)
3250 if (rt5645->pdata.level_trigger_irq)
3251 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
3254 if (rt5645->gpiod_cbj_sleeve)
3255 gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
3258 return rt5645->jack_type;
3281 rt5645->hp_jack = hp_jack;
3282 rt5645->mic_jack = mic_jack;
3283 rt5645->btn_jack = btn_jack;
3284 if (rt5645->btn_jack && rt5645->codec_type == CODEC_TYPE_RT5650) {
3285 rt5645->en_button_func = true;
3286 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
3288 regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL1,
3290 regmap_update_bits(rt5645->regmap, RT5645_DEPOP_M1,
3325 if (!rt5645->component)
3328 mutex_lock(&rt5645->jd_mutex);
3330 switch (rt5645->pdata.jd_mode) {
3332 if (rt5645->gpiod_hp_det) {
3333 gpio_state = gpiod_get_value(rt5645->gpiod_hp_det);
3334 if (rt5645->pdata.inv_hp_pol)
3336 dev_dbg(rt5645->component->dev, "gpio_state = %d\n",
3338 report = rt5645_jack_detect(rt5645->component, gpio_state);
3340 snd_soc_jack_report(rt5645->hp_jack,
3342 snd_soc_jack_report(rt5645->mic_jack,
3344 mutex_unlock(&rt5645->jd_mutex);
3347 val = snd_soc_component_read(rt5645->component, RT5645_A_JD_CTRL1) & 0x0020;
3350 val = snd_soc_component_read(rt5645->component, RT5645_INT_IRQ_ST) & 0x1000;
3355 if (!val && (rt5645->jack_type == 0)) { /* jack in */
3356 report = rt5645_jack_detect(rt5645->component, 1);
3357 } else if (!val && rt5645->jack_type == SND_JACK_HEADSET) {
3360 if (snd_soc_component_read(rt5645->component, RT5645_INT_IRQ_ST) & 0x4) {
3363 btn_type = rt5645_button_detect(rt5645->component);
3393 dev_err(rt5645->component->dev,
3400 report = rt5645->jack_type;
3402 mod_timer(&rt5645->btn_check_timer,
3408 snd_soc_component_update_bits(rt5645->component,
3410 rt5645_jack_detect(rt5645->component, 0);
3413 mutex_unlock(&rt5645->jd_mutex);
3415 snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE);
3416 snd_soc_jack_report(rt5645->mic_jack, report, SND_JACK_MICROPHONE);
3417 if (rt5645->en_button_func)
3418 snd_soc_jack_report(rt5645->btn_jack,
3428 regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
3437 &rt5645->jack_detect_work, msecs_to_jiffies(250));
3448 &rt5645->jack_detect_work, msecs_to_jiffies(5));
3456 rt5645->component = component;
3458 switch (rt5645->codec_type) {
3466 if (rt5645->v_id < 3) {
3485 if (rt5645->pdata.jd_mode) {
3491 if (rt5645->pdata.long_name)
3492 component->card->long_name = rt5645->pdata.long_name;
3494 rt5645->eq_param = devm_kcalloc(component->dev,
3498 if (!rt5645->eq_param)
3499 return -ENOMEM;
3514 regcache_cache_only(rt5645->regmap, true);
3515 regcache_mark_dirty(rt5645->regmap);
3524 regcache_cache_only(rt5645->regmap, false);
3525 regcache_sync(rt5645->regmap);
3548 .name = "rt5645-aif1",
3567 .name = "rt5645-aif2",
3693 .long_name = "gpd-win-pocket-rt5645",
3750 { "hp-detect-gpios", &ef20_hp_detect, 1 },
3832 .ident = "MINIX Z83-4",
3835 DMI_MATCH(DMI_PRODUCT_NAME, "Z83-4"),
3852 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "MIIX 310-10ICR"),
3861 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"),
3874 * DF-BI-7-S70CR100-*
3875 * DF-BI-7-S70CR110-*
3876 * DF-BI-7-S70CR200-*
3877 * LP-BS-7-S70CR700-*
3908 .ident = "Acer Switch V 10 (SW5-017)",
3911 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
3930 if (device_property_present(dev, "realtek,in2-differential") ||
3931 device_property_present(dev, "realtek,dmic1-data-pin") ||
3932 device_property_present(dev, "realtek,dmic2-data-pin") ||
3933 device_property_present(dev, "realtek,jd-mode"))
3941 pdata->in2_diff = device_property_read_bool(dev, "realtek,in2-differential");
3942 device_property_read_u32(dev, "realtek,dmic1-data-pin", &pdata->dmic1_data_pin);
3943 device_property_read_u32(dev, "realtek,dmic2-data-pin", &pdata->dmic2_data_pin);
3944 device_property_read_u32(dev, "realtek,jd-mode", &pdata->jd_mode);
3953 dev_info(codec_dev, "Detected %s platform\n", dmi_data->ident);
3954 *pdata = *((struct rt5645_platform_data *)dmi_data->driver_data);
3961 if (quirk != -1) {
3962 pdata->in2_diff = QUIRK_IN2_DIFF(quirk);
3963 pdata->level_trigger_irq = QUIRK_LEVEL_IRQ(quirk);
3964 pdata->inv_jd1_1 = QUIRK_INV_JD1_1(quirk);
3965 pdata->inv_hp_pol = QUIRK_INV_HP_POL(quirk);
3966 pdata->jd_mode = QUIRK_JD_MODE(quirk);
3967 pdata->dmic1_data_pin = QUIRK_DMIC1_DATA_PIN(quirk);
3968 pdata->dmic2_data_pin = QUIRK_DMIC2_DATA_PIN(quirk);
3993 snprintf(buf, sizeof(buf), "cfg-spk:%d cfg-mic:%s", spk, mic);
4006 rt5645 = devm_kzalloc(&i2c->dev, sizeof(struct rt5645_priv),
4009 return -ENOMEM;
4011 rt5645->i2c = i2c;
4013 rt5645_get_pdata(&i2c->dev, &rt5645->pdata);
4015 if (has_acpi_companion(&i2c->dev)) {
4017 if (devm_acpi_dev_add_driver_gpios(&i2c->dev, cht_rt5645_gpios))
4018 dev_dbg(&i2c->dev, "Failed to add driver gpios\n");
4021 /* The ALC3270 package has the headset-mic pin not-connected */
4022 if (acpi_dev_hid_uid_match(ACPI_COMPANION(&i2c->dev), "10EC3270", NULL))
4023 rt5645->pdata.no_headset_mic = true;
4026 rt5645->gpiod_hp_det = devm_gpiod_get_optional(&i2c->dev, "hp-detect",
4029 if (IS_ERR(rt5645->gpiod_hp_det)) {
4030 dev_info(&i2c->dev, "failed to initialize gpiod\n");
4031 ret = PTR_ERR(rt5645->gpiod_hp_det);
4034 * errors, including -EPROBE_DEFER
4036 if (ret != -ENOENT)
4040 rt5645->gpiod_cbj_sleeve = devm_gpiod_get_optional(&i2c->dev, "cbj-sleeve",
4043 if (IS_ERR(rt5645->gpiod_cbj_sleeve)) {
4044 ret = PTR_ERR(rt5645->gpiod_cbj_sleeve);
4045 dev_info(&i2c->dev, "failed to initialize gpiod, ret=%d\n", ret);
4046 if (ret != -ENOENT)
4050 for (i = 0; i < ARRAY_SIZE(rt5645->supplies); i++)
4051 rt5645->supplies[i].supply = rt5645_supply_names[i];
4053 ret = devm_regulator_bulk_get(&i2c->dev,
4054 ARRAY_SIZE(rt5645->supplies),
4055 rt5645->supplies);
4057 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
4061 ret = regulator_bulk_enable(ARRAY_SIZE(rt5645->supplies),
4062 rt5645->supplies);
4064 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
4071 dev_err(&i2c->dev, "Failed to allocate temp register map: %d\n",
4083 dev_err(&i2c->dev, "Failed to read: 0x%02X\n, ret = %d", RT5645_VENDOR_ID2, ret);
4089 rt5645->regmap = devm_regmap_init_i2c(i2c, &rt5645_regmap);
4090 rt5645->codec_type = CODEC_TYPE_RT5645;
4093 rt5645->regmap = devm_regmap_init_i2c(i2c, &rt5650_regmap);
4094 rt5645->codec_type = CODEC_TYPE_RT5650;
4097 dev_err(&i2c->dev,
4100 ret = -ENODEV;
4104 if (IS_ERR(rt5645->regmap)) {
4105 ret = PTR_ERR(rt5645->regmap);
4106 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
4111 regmap_write(rt5645->regmap, RT5645_RESET, 0);
4114 rt5645->v_id = val & 0xff;
4116 regmap_write(rt5645->regmap, RT5645_AD_DA_MIXER, 0x8080);
4118 ret = regmap_multi_reg_write(rt5645->regmap, init_list,
4121 dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret);
4123 if (rt5645->codec_type == CODEC_TYPE_RT5650) {
4124 ret = regmap_multi_reg_write(rt5645->regmap, rt5650_init_list,
4127 dev_warn(&i2c->dev, "Apply rt5650 patch failed: %d\n",
4131 regmap_update_bits(rt5645->regmap, RT5645_CLSD_OUT_CTRL, 0xc0, 0xc0);
4133 if (rt5645->pdata.in2_diff)
4134 regmap_update_bits(rt5645->regmap, RT5645_IN2_CTRL,
4137 if (rt5645->pdata.dmic1_data_pin || rt5645->pdata.dmic2_data_pin) {
4138 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4141 switch (rt5645->pdata.dmic1_data_pin) {
4143 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4148 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4150 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4152 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4157 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4159 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4168 switch (rt5645->pdata.dmic2_data_pin) {
4170 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4175 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4177 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4182 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4184 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4190 regmap_update_bits(rt5645->regmap, RT5645_DMIC_CTRL1,
4192 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4201 if (rt5645->pdata.jd_mode) {
4202 regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL3,
4205 regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
4207 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
4209 regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL3,
4211 regmap_update_bits(rt5645->regmap, RT5645_HPO_MIXER,
4213 regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
4215 regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
4217 switch (rt5645->pdata.jd_mode) {
4219 regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
4224 regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
4230 regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
4237 if (rt5645->pdata.inv_jd1_1) {
4238 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
4243 regmap_update_bits(rt5645->regmap, RT5645_ADDA_CLK1,
4246 if (rt5645->pdata.level_trigger_irq) {
4247 regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
4250 timer_setup(&rt5645->btn_check_timer, rt5645_btn_check_callback, 0);
4252 mutex_init(&rt5645->jd_mutex);
4253 INIT_DELAYED_WORK(&rt5645->jack_detect_work, rt5645_jack_detect_work);
4254 INIT_DELAYED_WORK(&rt5645->rcclock_work, rt5645_rcclock_work);
4256 if (rt5645->i2c->irq) {
4257 ret = request_threaded_irq(rt5645->i2c->irq, NULL, rt5645_irq,
4261 dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret);
4266 ret = devm_snd_soc_register_component(&i2c->dev, &soc_component_dev_rt5645,
4274 if (rt5645->i2c->irq)
4275 free_irq(rt5645->i2c->irq, rt5645);
4277 regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
4285 if (i2c->irq)
4286 free_irq(i2c->irq, rt5645);
4292 timer_delete_sync(&rt5645->btn_check_timer);
4294 cancel_delayed_work_sync(&rt5645->jack_detect_work);
4295 cancel_delayed_work_sync(&rt5645->rcclock_work);
4297 if (rt5645->gpiod_cbj_sleeve)
4298 gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
4300 regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
4307 regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL3,
4309 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2, RT5645_CBJ_MN_JD,
4311 regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1, RT5645_CBJ_BST1_EN,
4314 regmap_write(rt5645->regmap, RT5645_RESET, 0);
4316 if (rt5645->gpiod_cbj_sleeve)
4317 gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
4324 timer_delete_sync(&rt5645->btn_check_timer);
4325 cancel_delayed_work_sync(&rt5645->jack_detect_work);
4326 cancel_delayed_work_sync(&rt5645->rcclock_work);
4328 regcache_cache_only(rt5645->regmap, true);
4329 regcache_mark_dirty(rt5645->regmap);
4337 regcache_cache_only(rt5645->regmap, false);
4338 regcache_sync(rt5645->regmap);
4340 if (rt5645->hp_jack) {
4341 rt5645->jack_type = 0;
4342 rt5645_jack_detect_work(&rt5645->jack_detect_work.work);