Lines Matching +full:ch3 +full:- +full:0
1 // SPDX-License-Identifier: GPL-2.0
3 // Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/
41 "ti,gpo-config-1",
42 "ti,gpo-config-2",
43 "ti,gpo-config-3",
44 "ti,gpo-config-4",
48 { ADCX140_PAGE_SELECT, 0x00 },
49 { ADCX140_SW_RESET, 0x00 },
50 { ADCX140_SLEEP_CFG, 0x00 },
51 { ADCX140_SHDN_CFG, 0x05 },
52 { ADCX140_ASI_CFG0, 0x30 },
53 { ADCX140_ASI_CFG1, 0x00 },
54 { ADCX140_ASI_CFG2, 0x00 },
55 { ADCX140_ASI_CH1, 0x00 },
56 { ADCX140_ASI_CH2, 0x01 },
57 { ADCX140_ASI_CH3, 0x02 },
58 { ADCX140_ASI_CH4, 0x03 },
59 { ADCX140_ASI_CH5, 0x04 },
60 { ADCX140_ASI_CH6, 0x05 },
61 { ADCX140_ASI_CH7, 0x06 },
62 { ADCX140_ASI_CH8, 0x07 },
63 { ADCX140_MST_CFG0, 0x02 },
64 { ADCX140_MST_CFG1, 0x48 },
65 { ADCX140_ASI_STS, 0xff },
66 { ADCX140_CLK_SRC, 0x10 },
67 { ADCX140_PDMCLK_CFG, 0x40 },
68 { ADCX140_PDM_CFG, 0x00 },
69 { ADCX140_GPIO_CFG0, 0x22 },
70 { ADCX140_GPO_CFG0, 0x00 },
71 { ADCX140_GPO_CFG1, 0x00 },
72 { ADCX140_GPO_CFG2, 0x00 },
73 { ADCX140_GPO_CFG3, 0x00 },
74 { ADCX140_GPO_VAL, 0x00 },
75 { ADCX140_GPIO_MON, 0x00 },
76 { ADCX140_GPI_CFG0, 0x00 },
77 { ADCX140_GPI_CFG1, 0x00 },
78 { ADCX140_GPI_MON, 0x00 },
79 { ADCX140_INT_CFG, 0x00 },
80 { ADCX140_INT_MASK0, 0xff },
81 { ADCX140_INT_LTCH0, 0x00 },
82 { ADCX140_BIAS_CFG, 0x00 },
83 { ADCX140_CH1_CFG0, 0x00 },
84 { ADCX140_CH1_CFG1, 0x00 },
85 { ADCX140_CH1_CFG2, 0xc9 },
86 { ADCX140_CH1_CFG3, 0x80 },
87 { ADCX140_CH1_CFG4, 0x00 },
88 { ADCX140_CH2_CFG0, 0x00 },
89 { ADCX140_CH2_CFG1, 0x00 },
90 { ADCX140_CH2_CFG2, 0xc9 },
91 { ADCX140_CH2_CFG3, 0x80 },
92 { ADCX140_CH2_CFG4, 0x00 },
93 { ADCX140_CH3_CFG0, 0x00 },
94 { ADCX140_CH3_CFG1, 0x00 },
95 { ADCX140_CH3_CFG2, 0xc9 },
96 { ADCX140_CH3_CFG3, 0x80 },
97 { ADCX140_CH3_CFG4, 0x00 },
98 { ADCX140_CH4_CFG0, 0x00 },
99 { ADCX140_CH4_CFG1, 0x00 },
100 { ADCX140_CH4_CFG2, 0xc9 },
101 { ADCX140_CH4_CFG3, 0x80 },
102 { ADCX140_CH4_CFG4, 0x00 },
103 { ADCX140_CH5_CFG2, 0xc9 },
104 { ADCX140_CH5_CFG3, 0x80 },
105 { ADCX140_CH5_CFG4, 0x00 },
106 { ADCX140_CH6_CFG2, 0xc9 },
107 { ADCX140_CH6_CFG3, 0x80 },
108 { ADCX140_CH6_CFG4, 0x00 },
109 { ADCX140_CH7_CFG2, 0xc9 },
110 { ADCX140_CH7_CFG3, 0x80 },
111 { ADCX140_CH7_CFG4, 0x00 },
112 { ADCX140_CH8_CFG2, 0xc9 },
113 { ADCX140_CH8_CFG3, 0x80 },
114 { ADCX140_CH8_CFG4, 0x00 },
115 { ADCX140_DSP_CFG0, 0x01 },
116 { ADCX140_DSP_CFG1, 0x40 },
117 { ADCX140_DRE_CFG0, 0x7b },
118 { ADCX140_AGC_CFG0, 0xe7 },
119 { ADCX140_IN_CH_EN, 0xf0 },
120 { ADCX140_ASI_OUT_CH_EN, 0x00 },
121 { ADCX140_PWR_CFG, 0x00 },
122 { ADCX140_DEV_STS0, 0x00 },
123 { ADCX140_DEV_STS1, 0x80 },
128 .range_min = 0,
131 .selector_mask = 0xff,
132 .selector_shift = 0,
133 .window_start = 0,
163 /* Digital Volume control. From -100 to 27 dB in 0.5 dB steps */
164 static DECLARE_TLV_DB_SCALE(dig_vol_tlv, -10050, 50, 0);
166 /* ADC gain. From 0 to 42 dB in 1 dB steps */
167 static DECLARE_TLV_DB_SCALE(adc_tlv, 0, 100, 0);
169 /* DRE Level. From -12 dB to -66 dB in 1 dB steps */
170 static DECLARE_TLV_DB_SCALE(dre_thresh_tlv, -6600, 100, 0);
172 static DECLARE_TLV_DB_SCALE(dre_gain_tlv, 200, 200, 0);
174 /* AGC Level. From -6 dB to -36 dB in 2 dB steps */
175 static DECLARE_TLV_DB_SCALE(agc_thresh_tlv, -3600, 200, 0);
177 static DECLARE_TLV_DB_SCALE(agc_gain_tlv, 300, 300, 0);
180 "Linear Phase", "Low Latency", "Ultra-low Latency"
194 static SOC_ENUM_SINGLE_DECL(pdmclk_select_enum, ADCX140_PDMCLK_CFG, 0,
221 SOC_DAPM_ENUM("CH3 Resistor Select", in3_resistor_enum),
316 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 7, 1, 0);
318 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 6, 1, 0);
320 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 5, 1, 0);
322 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 4, 1, 0);
324 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 3, 1, 0);
326 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 2, 1, 0);
328 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 1, 1, 0);
330 SOC_DAPM_SINGLE("Switch", ADCX140_ASI_OUT_CH_EN, 0, 1, 0);
333 SOC_DAPM_SINGLE("Switch", ADCX140_CH1_CFG0, 0, 1, 0);
335 SOC_DAPM_SINGLE("Switch", ADCX140_CH2_CFG0, 0, 1, 0);
337 SOC_DAPM_SINGLE("Switch", ADCX140_CH3_CFG0, 0, 1, 0);
339 SOC_DAPM_SINGLE("Switch", ADCX140_CH4_CFG0, 0, 1, 0);
342 SOC_DAPM_SINGLE("Switch", ADCX140_DSP_CFG1, 3, 1, 0);
346 SOC_DAPM_SINGLE("Digital CH1 Switch", 0, 0, 0, 0),
347 SOC_DAPM_SINGLE("Digital CH2 Switch", 0, 0, 0, 0),
348 SOC_DAPM_SINGLE("Digital CH3 Switch", 0, 0, 0, 0),
349 SOC_DAPM_SINGLE("Digital CH4 Switch", 0, 0, 0, 0),
372 SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0,
373 &adcx140_output_mixer_controls[0],
377 SND_SOC_DAPM_MUX("MIC1P Input Mux", SND_SOC_NOPM, 0, 0,
379 SND_SOC_DAPM_MUX("MIC2P Input Mux", SND_SOC_NOPM, 0, 0,
381 SND_SOC_DAPM_MUX("MIC3P Input Mux", SND_SOC_NOPM, 0, 0,
383 SND_SOC_DAPM_MUX("MIC4P Input Mux", SND_SOC_NOPM, 0, 0,
387 SND_SOC_DAPM_MUX("MIC1 Analog Mux", SND_SOC_NOPM, 0, 0,
389 SND_SOC_DAPM_MUX("MIC2 Analog Mux", SND_SOC_NOPM, 0, 0,
391 SND_SOC_DAPM_MUX("MIC3 Analog Mux", SND_SOC_NOPM, 0, 0,
393 SND_SOC_DAPM_MUX("MIC4 Analog Mux", SND_SOC_NOPM, 0, 0,
396 SND_SOC_DAPM_MUX("MIC1M Input Mux", SND_SOC_NOPM, 0, 0,
398 SND_SOC_DAPM_MUX("MIC2M Input Mux", SND_SOC_NOPM, 0, 0,
400 SND_SOC_DAPM_MUX("MIC3M Input Mux", SND_SOC_NOPM, 0, 0,
402 SND_SOC_DAPM_MUX("MIC4M Input Mux", SND_SOC_NOPM, 0, 0,
405 SND_SOC_DAPM_PGA("MIC_GAIN_CTL_CH1", SND_SOC_NOPM, 0, 0, NULL, 0),
406 SND_SOC_DAPM_PGA("MIC_GAIN_CTL_CH2", SND_SOC_NOPM, 0, 0, NULL, 0),
407 SND_SOC_DAPM_PGA("MIC_GAIN_CTL_CH3", SND_SOC_NOPM, 0, 0, NULL, 0),
408 SND_SOC_DAPM_PGA("MIC_GAIN_CTL_CH4", SND_SOC_NOPM, 0, 0, NULL, 0),
410 SND_SOC_DAPM_ADC("CH1_ADC", "CH1 Capture", ADCX140_IN_CH_EN, 7, 0),
411 SND_SOC_DAPM_ADC("CH2_ADC", "CH2 Capture", ADCX140_IN_CH_EN, 6, 0),
412 SND_SOC_DAPM_ADC("CH3_ADC", "CH3 Capture", ADCX140_IN_CH_EN, 5, 0),
413 SND_SOC_DAPM_ADC("CH4_ADC", "CH4 Capture", ADCX140_IN_CH_EN, 4, 0),
415 SND_SOC_DAPM_ADC("CH1_DIG", "CH1 Capture", ADCX140_IN_CH_EN, 7, 0),
416 SND_SOC_DAPM_ADC("CH2_DIG", "CH2 Capture", ADCX140_IN_CH_EN, 6, 0),
417 SND_SOC_DAPM_ADC("CH3_DIG", "CH3 Capture", ADCX140_IN_CH_EN, 5, 0),
418 SND_SOC_DAPM_ADC("CH4_DIG", "CH4 Capture", ADCX140_IN_CH_EN, 4, 0),
419 SND_SOC_DAPM_ADC("CH5_DIG", "CH5 Capture", ADCX140_IN_CH_EN, 3, 0),
420 SND_SOC_DAPM_ADC("CH6_DIG", "CH6 Capture", ADCX140_IN_CH_EN, 2, 0),
421 SND_SOC_DAPM_ADC("CH7_DIG", "CH7 Capture", ADCX140_IN_CH_EN, 1, 0),
422 SND_SOC_DAPM_ADC("CH8_DIG", "CH8 Capture", ADCX140_IN_CH_EN, 0, 0),
425 SND_SOC_DAPM_SWITCH("CH1_ASI_EN", SND_SOC_NOPM, 0, 0,
427 SND_SOC_DAPM_SWITCH("CH2_ASI_EN", SND_SOC_NOPM, 0, 0,
429 SND_SOC_DAPM_SWITCH("CH3_ASI_EN", SND_SOC_NOPM, 0, 0,
431 SND_SOC_DAPM_SWITCH("CH4_ASI_EN", SND_SOC_NOPM, 0, 0,
434 SND_SOC_DAPM_SWITCH("CH5_ASI_EN", SND_SOC_NOPM, 0, 0,
436 SND_SOC_DAPM_SWITCH("CH6_ASI_EN", SND_SOC_NOPM, 0, 0,
438 SND_SOC_DAPM_SWITCH("CH7_ASI_EN", SND_SOC_NOPM, 0, 0,
440 SND_SOC_DAPM_SWITCH("CH8_ASI_EN", SND_SOC_NOPM, 0, 0,
443 SND_SOC_DAPM_SWITCH("DRE_ENABLE", SND_SOC_NOPM, 0, 0,
446 SND_SOC_DAPM_SWITCH("CH1_DRE_EN", SND_SOC_NOPM, 0, 0,
448 SND_SOC_DAPM_SWITCH("CH2_DRE_EN", SND_SOC_NOPM, 0, 0,
450 SND_SOC_DAPM_SWITCH("CH3_DRE_EN", SND_SOC_NOPM, 0, 0,
452 SND_SOC_DAPM_SWITCH("CH4_DRE_EN", SND_SOC_NOPM, 0, 0,
455 SND_SOC_DAPM_MUX("IN1 Analog Mic Resistor", SND_SOC_NOPM, 0, 0,
457 SND_SOC_DAPM_MUX("IN2 Analog Mic Resistor", SND_SOC_NOPM, 0, 0,
459 SND_SOC_DAPM_MUX("IN3 Analog Mic Resistor", SND_SOC_NOPM, 0, 0,
461 SND_SOC_DAPM_MUX("IN4 Analog Mic Resistor", SND_SOC_NOPM, 0, 0,
464 SND_SOC_DAPM_MUX("PDM Clk Div Select", SND_SOC_NOPM, 0, 0,
467 SND_SOC_DAPM_MUX("Decimation Filter", SND_SOC_NOPM, 0, 0,
499 {"Decimation Filter", "Ultra-low Latency", "DRE_ENABLE"},
597 SOC_SINGLE_TLV("Analog CH1 Mic Gain Volume", ADCX140_CH1_CFG1, 2, 42, 0,
599 SOC_SINGLE_TLV("Analog CH2 Mic Gain Volume", ADCX140_CH2_CFG1, 2, 42, 0,
601 SOC_SINGLE_TLV("Analog CH3 Mic Gain Volume", ADCX140_CH3_CFG1, 2, 42, 0,
603 SOC_SINGLE_TLV("Analog CH4 Mic Gain Volume", ADCX140_CH4_CFG1, 2, 42, 0,
606 SOC_SINGLE_TLV("DRE Threshold", ADCX140_DRE_CFG0, 4, 9, 0,
608 SOC_SINGLE_TLV("DRE Max Gain", ADCX140_DRE_CFG0, 0, 12, 0,
611 SOC_SINGLE_TLV("AGC Threshold", ADCX140_AGC_CFG0, 4, 15, 0,
613 SOC_SINGLE_TLV("AGC Max Gain", ADCX140_AGC_CFG0, 0, 13, 0,
617 0, 0xff, 0, dig_vol_tlv),
619 0, 0xff, 0, dig_vol_tlv),
620 SOC_SINGLE_TLV("Digital CH3 Out Volume", ADCX140_CH3_CFG2,
621 0, 0xff, 0, dig_vol_tlv),
623 0, 0xff, 0, dig_vol_tlv),
625 0, 0xff, 0, dig_vol_tlv),
627 0, 0xff, 0, dig_vol_tlv),
629 0, 0xff, 0, dig_vol_tlv),
631 0, 0xff, 0, dig_vol_tlv),
636 int ret = 0; in adcx140_reset()
638 if (adcx140->gpio_reset) { in adcx140_reset()
639 gpiod_direction_output(adcx140->gpio_reset, 0); in adcx140_reset()
642 gpiod_direction_output(adcx140->gpio_reset, 1); in adcx140_reset()
644 ret = regmap_write(adcx140->regmap, ADCX140_SW_RESET, in adcx140_reset()
656 int pwr_ctrl = 0; in adcx140_pwr_ctrl()
661 if (adcx140->micbias_vg && power_state) in adcx140_pwr_ctrl()
664 regmap_update_bits(adcx140->regmap, ADCX140_PWR_CFG, in adcx140_pwr_ctrl()
672 struct snd_soc_component *component = dai->component; in adcx140_hw_params()
674 u8 data = 0; in adcx140_hw_params()
690 dev_err(component->dev, "%s: Unsupported width %d\n", in adcx140_hw_params()
692 return -EINVAL; in adcx140_hw_params()
702 return 0; in adcx140_hw_params()
708 struct snd_soc_component *component = codec_dai->component; in adcx140_set_dai_fmt()
710 u8 iface_reg1 = 0; in adcx140_set_dai_fmt()
711 u8 iface_reg2 = 0; in adcx140_set_dai_fmt()
712 int offset = 0; in adcx140_set_dai_fmt()
725 dev_err(component->dev, "Invalid DAI master/slave interface\n"); in adcx140_set_dai_fmt()
726 return -EINVAL; in adcx140_set_dai_fmt()
745 dev_err(component->dev, "Invalid DAI interface format\n"); in adcx140_set_dai_fmt()
746 return -EINVAL; in adcx140_set_dai_fmt()
761 dev_err(component->dev, "Invalid DAI clock signal polarity\n"); in adcx140_set_dai_fmt()
762 return -EINVAL; in adcx140_set_dai_fmt()
768 adcx140->dai_fmt = fmt & SND_SOC_DAIFMT_FORMAT_MASK; in adcx140_set_dai_fmt()
786 return 0; in adcx140_set_dai_fmt()
793 struct snd_soc_component *component = codec_dai->component; in adcx140_set_dai_tdm_slot()
800 dev_err(component->dev, "Invalid mask, slots must be adjacent\n"); in adcx140_set_dai_tdm_slot()
801 return -EINVAL; in adcx140_set_dai_tdm_slot()
811 dev_err(component->dev, "Unsupported slot width %d\n", slot_width); in adcx140_set_dai_tdm_slot()
812 return -EINVAL; in adcx140_set_dai_tdm_slot()
815 adcx140->tdm_delay = lsb; in adcx140_set_dai_tdm_slot()
816 adcx140->slot_width = slot_width; in adcx140_set_dai_tdm_slot()
818 return 0; in adcx140_set_dai_tdm_slot()
830 u32 gpo_output_val = 0; in adcx140_configure_gpo()
834 for (i = 0; i < ADCX140_NUM_GPOS; i++) { in adcx140_configure_gpo()
835 ret = device_property_read_u32_array(adcx140->dev, in adcx140_configure_gpo()
842 if (gpo_outputs[0] > ADCX140_GPO_CFG_MAX) { in adcx140_configure_gpo()
843 dev_err(adcx140->dev, "GPO%d config out of range\n", i + 1); in adcx140_configure_gpo()
844 return -EINVAL; in adcx140_configure_gpo()
848 dev_err(adcx140->dev, "GPO%d drive out of range\n", i + 1); in adcx140_configure_gpo()
849 return -EINVAL; in adcx140_configure_gpo()
852 gpo_output_val = gpo_outputs[0] << ADCX140_GPO_SHIFT | in adcx140_configure_gpo()
854 ret = regmap_write(adcx140->regmap, ADCX140_GPO_CFG0 + i, in adcx140_configure_gpo()
860 return 0; in adcx140_configure_gpo()
866 int gpio_count = 0; in adcx140_configure_gpio()
868 u32 gpio_output_val = 0; in adcx140_configure_gpio()
871 gpio_count = device_property_count_u32(adcx140->dev, in adcx140_configure_gpio()
872 "ti,gpio-config"); in adcx140_configure_gpio()
873 if (gpio_count == 0) in adcx140_configure_gpio()
874 return 0; in adcx140_configure_gpio()
877 return -EINVAL; in adcx140_configure_gpio()
879 ret = device_property_read_u32_array(adcx140->dev, "ti,gpio-config", in adcx140_configure_gpio()
884 if (gpio_outputs[0] > ADCX140_GPIO_CFG_MAX) { in adcx140_configure_gpio()
885 dev_err(adcx140->dev, "GPIO config out of range\n"); in adcx140_configure_gpio()
886 return -EINVAL; in adcx140_configure_gpio()
890 dev_err(adcx140->dev, "GPIO drive out of range\n"); in adcx140_configure_gpio()
891 return -EINVAL; in adcx140_configure_gpio()
894 gpio_output_val = gpio_outputs[0] << ADCX140_GPIO_SHIFT in adcx140_configure_gpio()
897 return regmap_write(adcx140->regmap, ADCX140_GPIO_CFG0, gpio_output_val); in adcx140_configure_gpio()
909 u32 pdm_edge_val = 0; in adcx140_codec_probe()
912 u32 gpi_input_val = 0; in adcx140_codec_probe()
917 ret = device_property_read_u32(adcx140->dev, "ti,mic-bias-source", in adcx140_codec_probe()
921 adcx140->micbias_vg = false; in adcx140_codec_probe()
923 adcx140->micbias_vg = true; in adcx140_codec_probe()
926 ret = device_property_read_u32(adcx140->dev, "ti,vref-source", in adcx140_codec_probe()
932 dev_err(adcx140->dev, "Mic Bias source value is invalid\n"); in adcx140_codec_probe()
933 return -EINVAL; in adcx140_codec_probe()
942 if (adcx140->supply_areg == NULL) in adcx140_codec_probe()
945 ret = regmap_write(adcx140->regmap, ADCX140_SLEEP_CFG, sleep_cfg_val); in adcx140_codec_probe()
947 dev_err(adcx140->dev, "setting sleep config failed %d\n", ret); in adcx140_codec_probe()
954 pdm_count = device_property_count_u32(adcx140->dev, in adcx140_codec_probe()
955 "ti,pdm-edge-select"); in adcx140_codec_probe()
956 if (pdm_count <= ADCX140_NUM_PDM_EDGES && pdm_count > 0) { in adcx140_codec_probe()
957 ret = device_property_read_u32_array(adcx140->dev, in adcx140_codec_probe()
958 "ti,pdm-edge-select", in adcx140_codec_probe()
963 for (i = 0; i < pdm_count; i++) in adcx140_codec_probe()
964 pdm_edge_val |= pdm_edges[i] << (ADCX140_PDM_EDGE_SHIFT - i); in adcx140_codec_probe()
966 ret = regmap_write(adcx140->regmap, ADCX140_PDM_CFG, in adcx140_codec_probe()
972 gpi_count = device_property_count_u32(adcx140->dev, "ti,gpi-config"); in adcx140_codec_probe()
973 if (gpi_count <= ADCX140_NUM_GPI_PINS && gpi_count > 0) { in adcx140_codec_probe()
974 ret = device_property_read_u32_array(adcx140->dev, in adcx140_codec_probe()
975 "ti,gpi-config", in adcx140_codec_probe()
983 ret = regmap_write(adcx140->regmap, ADCX140_GPI_CFG0, in adcx140_codec_probe()
991 ret = regmap_write(adcx140->regmap, ADCX140_GPI_CFG1, in adcx140_codec_probe()
1005 ret = regmap_update_bits(adcx140->regmap, ADCX140_BIAS_CFG, in adcx140_codec_probe()
1009 dev_err(adcx140->dev, "setting MIC bias failed %d\n", ret); in adcx140_codec_probe()
1011 tx_high_z = device_property_read_bool(adcx140->dev, "ti,asi-tx-drive"); in adcx140_codec_probe()
1013 ret = regmap_update_bits(adcx140->regmap, ADCX140_ASI_CFG0, in adcx140_codec_probe()
1016 dev_err(adcx140->dev, "Setting Tx drive failed %d\n", ret); in adcx140_codec_probe()
1042 return 0; in adcx140_set_bias_level()
1055 .idle_bias_on = 0,
1063 .name = "tlv320adcx140-codec",
1092 adcx140 = devm_kzalloc(&i2c->dev, sizeof(*adcx140), GFP_KERNEL); in adcx140_i2c_probe()
1094 return -ENOMEM; in adcx140_i2c_probe()
1096 adcx140->dev = &i2c->dev; in adcx140_i2c_probe()
1098 adcx140->gpio_reset = devm_gpiod_get_optional(adcx140->dev, in adcx140_i2c_probe()
1100 if (IS_ERR(adcx140->gpio_reset)) in adcx140_i2c_probe()
1101 dev_info(&i2c->dev, "Reset GPIO not defined\n"); in adcx140_i2c_probe()
1103 adcx140->supply_areg = devm_regulator_get_optional(adcx140->dev, in adcx140_i2c_probe()
1105 if (IS_ERR(adcx140->supply_areg)) { in adcx140_i2c_probe()
1106 if (PTR_ERR(adcx140->supply_areg) == -EPROBE_DEFER) in adcx140_i2c_probe()
1107 return -EPROBE_DEFER; in adcx140_i2c_probe()
1109 adcx140->supply_areg = NULL; in adcx140_i2c_probe()
1111 ret = regulator_enable(adcx140->supply_areg); in adcx140_i2c_probe()
1113 dev_err(adcx140->dev, "Failed to enable areg\n"); in adcx140_i2c_probe()
1118 adcx140->regmap = devm_regmap_init_i2c(i2c, &adcx140_i2c_regmap); in adcx140_i2c_probe()
1119 if (IS_ERR(adcx140->regmap)) { in adcx140_i2c_probe()
1120 ret = PTR_ERR(adcx140->regmap); in adcx140_i2c_probe()
1121 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in adcx140_i2c_probe()
1128 return devm_snd_soc_register_component(&i2c->dev, in adcx140_i2c_probe()
1134 { "tlv320adc3140", 0 },
1143 .name = "tlv320adcx140-codec",