Lines Matching +full:adc1 +full:-

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rt5668.c -- RT5668B ALSA SoC audio component driver
26 #include <sound/soc-dapm.h>
746 static const DECLARE_TLV_DB_SCALE(hp_vol_tlv, -2250, 150, 0);
747 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
748 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
844 * rt5668_headset_detect - Detect headset.
878 rt5668->jack_type = SND_JACK_HEADSET;
882 rt5668->jack_type = SND_JACK_HEADPHONE;
892 rt5668->jack_type = 0;
895 dev_dbg(component->dev, "jack_type = %d\n", rt5668->jack_type);
896 return rt5668->jack_type;
904 &rt5668->jack_detect_work, msecs_to_jiffies(250));
914 if (snd_soc_component_read(rt5668->component, RT5668_AJD1_CTRL)
917 rt5668->jack_type = rt5668_headset_detect(rt5668->component, 0);
919 snd_soc_jack_report(rt5668->hs_jack, rt5668->jack_type,
924 schedule_delayed_work(&rt5668->jd_check_work, 500);
933 switch (rt5668->pdata.jd_src) {
942 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
944 regmap_update_bits(rt5668->regmap, RT5668_RC_CLK_CTRL,
948 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_2,
951 regmap_update_bits(rt5668->regmap, RT5668_IRQ_CTRL_2,
955 &rt5668->jack_detect_work, msecs_to_jiffies(250));
959 regmap_update_bits(rt5668->regmap, RT5668_IRQ_CTRL_2,
961 regmap_update_bits(rt5668->regmap, RT5668_RC_CLK_CTRL,
966 dev_warn(component->dev, "Wrong JD source\n");
970 rt5668->hs_jack = hs_jack;
981 if (!rt5668->component ||
982 !snd_soc_card_is_instantiated(rt5668->component->card)) {
985 &rt5668->jack_detect_work, msecs_to_jiffies(15));
989 mutex_lock(&rt5668->calibrate_mutex);
991 val = snd_soc_component_read(rt5668->component, RT5668_AJD1_CTRL)
995 if (rt5668->jack_type == 0) {
997 rt5668->jack_type =
998 rt5668_headset_detect(rt5668->component, 1);
1001 rt5668->jack_type = SND_JACK_HEADSET;
1002 btn_type = rt5668_button_detect(rt5668->component);
1014 rt5668->jack_type |= SND_JACK_BTN_0;
1019 rt5668->jack_type |= SND_JACK_BTN_1;
1024 rt5668->jack_type |= SND_JACK_BTN_2;
1029 rt5668->jack_type |= SND_JACK_BTN_3;
1035 dev_err(rt5668->component->dev,
1043 rt5668->jack_type = rt5668_headset_detect(rt5668->component, 0);
1046 snd_soc_jack_report(rt5668->hs_jack, rt5668->jack_type,
1051 if (rt5668->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
1053 schedule_delayed_work(&rt5668->jd_check_work, 0);
1055 cancel_delayed_work_sync(&rt5668->jd_check_work);
1057 mutex_unlock(&rt5668->calibrate_mutex);
1091 if (rt5668->sysclk < target) {
1093 rt5668->sysclk);
1097 for (i = 0; i < size - 1; i++) {
1099 if (target * div[i] == rt5668->sysclk)
1101 if (target * div[i + 1] > rt5668->sysclk) {
1103 rt5668->sysclk);
1108 if (target * div[i] < rt5668->sysclk)
1110 rt5668->sysclk);
1112 return size - 1;
1117 * set_dmic_clk - Set parameter of dmic.
1130 snd_soc_dapm_to_component(w->dapm);
1147 snd_soc_dapm_to_component(w->dapm);
1154 if (w->shift == RT5668_PWR_ADC_S1F_BIT &&
1156 ref = 256 * rt5668->lrck[RT5668_AIF2];
1158 ref = 256 * rt5668->lrck[RT5668_AIF1];
1162 if (w->shift == RT5668_PWR_ADC_S1F_BIT)
1178 snd_soc_dapm_to_component(w->dapm);
1193 snd_soc_dapm_to_component(w->dapm);
1195 switch (w->shift) {
1221 SOC_DAPM_SINGLE("ADC1 Switch", RT5668_STO1_ADC_MIXER,
1228 SOC_DAPM_SINGLE("ADC1 Switch", RT5668_STO1_ADC_MIXER,
1268 /* STO1 ADC1 Source */
1269 /* MX-26 [13] [5] */
1289 /* MX-26 [11:10] [3:2] */
1291 "ADC1 L", "ADC1 R"
1309 /* MX-26 [12] [4] */
1328 /* MX-79 [6:4] I2S1 ADC data location */
1348 /* MX-2B [4], MX-2B [0]*/
1379 snd_soc_dapm_to_component(w->dapm);
1428 snd_soc_dapm_to_component(w->dapm);
1432 switch (w->shift) {
1450 switch (w->shift) {
1549 SND_SOC_DAPM_ADC("ADC1 L", NULL, SND_SOC_NOPM, 0, 0),
1550 SND_SOC_DAPM_ADC("ADC1 R", NULL, SND_SOC_NOPM, 0, 0),
1552 SND_SOC_DAPM_SUPPLY("ADC1 L Power", RT5668_PWR_DIG_1,
1554 SND_SOC_DAPM_SUPPLY("ADC1 R Power", RT5668_PWR_DIG_1,
1556 SND_SOC_DAPM_SUPPLY("ADC1 clock", RT5668_CHOP_ADC,
1712 {"ADC1 L", NULL, "RECMIX1L"},
1713 {"ADC1 L", NULL, "ADC1 L Power"},
1714 {"ADC1 L", NULL, "ADC1 clock"},
1722 {"Stereo1 ADC L Mux", "ADC1 L", "ADC1 L"},
1723 {"Stereo1 ADC L Mux", "ADC1 R", "ADC1 R"},
1724 {"Stereo1 ADC R Mux", "ADC1 L", "ADC1 L"},
1725 {"Stereo1 ADC R Mux", "ADC1 R", "ADC1 R"},
1737 {"Stereo1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC L1 Mux"},
1741 {"Stereo1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC R1 Mux"},
1826 struct snd_soc_component *component = dai->component;
1845 return -EINVAL;
1865 return -EINVAL;
1878 struct snd_soc_component *component = dai->component;
1883 rt5668->lrck[dai->id] = params_rate(params);
1884 pre_div = rl6231_get_clk_info(rt5668->sysclk, rt5668->lrck[dai->id]);
1888 dev_err(component->dev, "Unsupported frame size: %d\n",
1890 return -EINVAL;
1893 dev_dbg(dai->dev, "lrck is %dHz and pre_div is %d for iis %d\n",
1894 rt5668->lrck[dai->id], pre_div, dai->id);
1916 return -EINVAL;
1919 switch (dai->id) {
1923 if (rt5668->master[RT5668_AIF1]) {
1940 if (rt5668->master[RT5668_AIF2]) {
1955 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id);
1956 return -EINVAL;
1964 struct snd_soc_component *component = dai->component;
1970 rt5668->master[dai->id] = 1;
1973 rt5668->master[dai->id] = 0;
1976 return -EINVAL;
1987 if (dai->id == RT5668_AIF1)
1990 return -EINVAL;
1993 if (dai->id == RT5668_AIF1)
1997 return -EINVAL;
2000 return -EINVAL;
2019 return -EINVAL;
2022 switch (dai->id) {
2030 tdm_ctrl | rt5668->master[dai->id]);
2033 if (rt5668->master[dai->id] == 0)
2040 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id);
2041 return -EINVAL;
2052 if (freq == rt5668->sysclk && clk_id == rt5668->sysclk_src)
2073 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id);
2074 return -EINVAL;
2079 if (rt5668->master[RT5668_AIF2]) {
2085 rt5668->sysclk = freq;
2086 rt5668->sysclk_src = clk_id;
2088 dev_dbg(component->dev, "Sysclk is %dHz and clock id is %d\n",
2102 if (source == rt5668->pll_src && freq_in == rt5668->pll_in &&
2103 freq_out == rt5668->pll_out)
2107 dev_dbg(component->dev, "PLL disabled\n");
2109 rt5668->pll_in = 0;
2110 rt5668->pll_out = 0;
2126 dev_err(component->dev, "Unknown PLL Source %d\n", source);
2127 return -EINVAL;
2132 dev_err(component->dev, "Unsupported input clock %d\n", freq_in);
2136 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n",
2146 rt5668->pll_in = freq_in;
2147 rt5668->pll_out = freq_out;
2148 rt5668->pll_src = source;
2155 struct snd_soc_component *component = dai->component;
2158 rt5668->bclk[dai->id] = ratio;
2172 dev_err(dai->dev, "Invalid bclk ratio %d\n", ratio);
2173 return -EINVAL;
2186 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1,
2189 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1,
2195 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1,
2197 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1,
2201 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1,
2203 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1,
2218 rt5668->component = component;
2227 rt5668_reset(rt5668->regmap);
2235 regcache_cache_only(rt5668->regmap, true);
2236 regcache_mark_dirty(rt5668->regmap);
2244 regcache_cache_only(rt5668->regmap, false);
2245 regcache_sync(rt5668->regmap);
2272 .name = "rt5668-aif1",
2291 .name = "rt5668-aif2",
2345 of_property_read_u32(dev->of_node, "realtek,dmic1-data-pin",
2346 &rt5668->pdata.dmic1_data_pin);
2347 of_property_read_u32(dev->of_node, "realtek,dmic1-clk-pin",
2348 &rt5668->pdata.dmic1_clk_pin);
2349 of_property_read_u32(dev->of_node, "realtek,jd-src",
2350 &rt5668->pdata.jd_src);
2359 mutex_lock(&rt5668->calibrate_mutex);
2361 rt5668_reset(rt5668->regmap);
2362 regmap_write(rt5668->regmap, RT5668_PWR_ANLG_1, 0xa2bf);
2364 regmap_write(rt5668->regmap, RT5668_PWR_ANLG_1, 0xf2bf);
2365 regmap_write(rt5668->regmap, RT5668_MICBIAS_2, 0x0380);
2366 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x8001);
2367 regmap_write(rt5668->regmap, RT5668_TEST_MODE_CTRL_1, 0x0000);
2368 regmap_write(rt5668->regmap, RT5668_STO1_DAC_MIXER, 0x2080);
2369 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0x4040);
2370 regmap_write(rt5668->regmap, RT5668_DEPOP_1, 0x0069);
2371 regmap_write(rt5668->regmap, RT5668_CHOP_DAC, 0x3000);
2372 regmap_write(rt5668->regmap, RT5668_HP_CTRL_2, 0x6000);
2373 regmap_write(rt5668->regmap, RT5668_HP_CHARGE_PUMP_1, 0x0f26);
2374 regmap_write(rt5668->regmap, RT5668_CALIB_ADC_CTRL, 0x7f05);
2375 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0x686c);
2376 regmap_write(rt5668->regmap, RT5668_CAL_REC, 0x0d0d);
2377 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_9, 0x000f);
2378 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x8d01);
2379 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_2, 0x0321);
2380 regmap_write(rt5668->regmap, RT5668_HP_LOGIC_CTRL_2, 0x0004);
2381 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_1, 0x7c00);
2382 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_3, 0x06a1);
2383 regmap_write(rt5668->regmap, RT5668_A_DAC1_MUX, 0x0311);
2384 regmap_write(rt5668->regmap, RT5668_RESET_HPF_CTRL, 0x0000);
2385 regmap_write(rt5668->regmap, RT5668_ADC_STO1_HP_CTRL_1, 0x3320);
2387 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_1, 0xfc00);
2390 regmap_read(rt5668->regmap, RT5668_HP_CALIB_STA_1, &value);
2401 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0xc0c4);
2402 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x0000);
2404 mutex_unlock(&rt5668->calibrate_mutex);
2410 struct rt5668_platform_data *pdata = dev_get_platdata(&i2c->dev);
2415 rt5668 = devm_kzalloc(&i2c->dev, sizeof(struct rt5668_priv),
2419 return -ENOMEM;
2424 rt5668->pdata = *pdata;
2426 rt5668_parse_dt(rt5668, &i2c->dev);
2428 rt5668->regmap = devm_regmap_init_i2c(i2c, &rt5668_regmap);
2429 if (IS_ERR(rt5668->regmap)) {
2430 ret = PTR_ERR(rt5668->regmap);
2431 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
2436 for (i = 0; i < ARRAY_SIZE(rt5668->supplies); i++)
2437 rt5668->supplies[i].supply = rt5668_supply_names[i];
2439 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(rt5668->supplies),
2440 rt5668->supplies);
2442 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
2446 ret = regulator_bulk_enable(ARRAY_SIZE(rt5668->supplies),
2447 rt5668->supplies);
2449 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
2453 rt5668->ldo1_en = devm_gpiod_get_optional(&i2c->dev,
2454 "realtek,ldo1-en",
2456 if (IS_ERR(rt5668->ldo1_en)) {
2457 dev_err(&i2c->dev, "Fail gpio request ldo1_en\n");
2458 return PTR_ERR(rt5668->ldo1_en);
2464 regmap_write(rt5668->regmap, RT5668_I2C_MODE, 0x1);
2467 regmap_read(rt5668->regmap, RT5668_DEVICE_ID, &val);
2470 return -ENODEV;
2473 rt5668_reset(rt5668->regmap);
2477 regmap_write(rt5668->regmap, RT5668_DEPOP_1, 0x0000);
2480 if (rt5668->pdata.dmic1_data_pin != RT5668_DMIC1_NULL) {
2481 switch (rt5668->pdata.dmic1_data_pin) {
2483 regmap_update_bits(rt5668->regmap, RT5668_DMIC_CTRL_1,
2485 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
2490 regmap_update_bits(rt5668->regmap, RT5668_DMIC_CTRL_1,
2492 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
2497 dev_dbg(&i2c->dev, "invalid DMIC_DAT pin\n");
2501 switch (rt5668->pdata.dmic1_clk_pin) {
2503 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
2508 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
2513 dev_dbg(&i2c->dev, "invalid DMIC_CLK pin\n");
2518 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1,
2521 regmap_write(rt5668->regmap, RT5668_MICBIAS_2, 0x0380);
2522 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1,
2525 regmap_write(rt5668->regmap, RT5668_TEST_MODE_CTRL_1, 0x0000);
2527 INIT_DELAYED_WORK(&rt5668->jack_detect_work,
2529 INIT_DELAYED_WORK(&rt5668->jd_check_work,
2532 mutex_init(&rt5668->calibrate_mutex);
2534 if (i2c->irq) {
2535 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL,
2539 dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret);
2543 return devm_snd_soc_register_component(&i2c->dev, &soc_component_dev_rt5668,
2551 rt5668_reset(rt5668->regmap);