Lines Matching refs:component

165 static int rt5640_reset(struct snd_soc_component *component)
167 return snd_soc_component_write(component, RT5640_RESET, 0);
461 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
462 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
469 dev_err(component->dev, "Failed to set DMIC clock\n");
471 snd_soc_component_update_bits(component, RT5640_DMIC, RT5640_DMIC_CLK_MASK,
479 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
480 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
916 static void hp_amp_power_on(struct snd_soc_component *component)
918 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
942 static void rt5640_pmu_depop(struct snd_soc_component *component)
944 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
970 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
971 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
975 rt5640_pmu_depop(component);
994 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
998 hp_amp_power_on(component);
999 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
1001 snd_soc_component_update_bits(component, RT5640_OUTPUT,
1006 snd_soc_component_update_bits(component, RT5640_OUTPUT,
1009 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
1023 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1027 hp_amp_power_on(component);
1039 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1040 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1646 static int get_sdp_info(struct snd_soc_component *component, int dai_id)
1650 if (component == NULL)
1653 val = snd_soc_component_read(component, RT5640_I2S1_SDP);
1699 struct snd_soc_component *component = dai->component;
1700 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1707 dev_err(component->dev, "Unsupported clock setting %d for DAI %d\n",
1713 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size);
1743 dai_sel = get_sdp_info(component, dai->id);
1745 dev_err(component->dev, "Failed to get sdp info: %d\n", dai_sel);
1752 snd_soc_component_update_bits(component, RT5640_I2S1_SDP,
1754 snd_soc_component_update_bits(component, RT5640_ADDA_CLK1, mask_clk, val_clk);
1760 snd_soc_component_update_bits(component, RT5640_I2S2_SDP,
1762 snd_soc_component_update_bits(component, RT5640_ADDA_CLK1, mask_clk, val_clk);
1770 struct snd_soc_component *component = dai->component;
1771 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1813 dai_sel = get_sdp_info(component, dai->id);
1815 dev_err(component->dev, "Failed to get sdp info: %d\n", dai_sel);
1819 snd_soc_component_update_bits(component, RT5640_I2S1_SDP,
1824 snd_soc_component_update_bits(component, RT5640_I2S2_SDP,
1835 struct snd_soc_component *component = dai->component;
1836 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1857 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id);
1860 snd_soc_component_update_bits(component, RT5640_PWR_ANLG2,
1862 snd_soc_component_update_bits(component, RT5640_GLB_CLK,
1874 struct snd_soc_component *component = dai->component;
1875 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1884 dev_dbg(component->dev, "PLL disabled\n");
1888 snd_soc_component_update_bits(component, RT5640_GLB_CLK,
1895 snd_soc_component_update_bits(component, RT5640_GLB_CLK,
1899 snd_soc_component_update_bits(component, RT5640_GLB_CLK,
1903 snd_soc_component_update_bits(component, RT5640_GLB_CLK,
1907 dev_err(component->dev, "Unknown PLL source %d\n", source);
1913 dev_err(component->dev, "Unsupported input clock %d\n", freq_in);
1917 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n",
1921 snd_soc_component_write(component, RT5640_PLL_CTRL1,
1923 snd_soc_component_write(component, RT5640_PLL_CTRL2,
1934 static int rt5640_set_bias_level(struct snd_soc_component *component,
1937 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1955 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_ON) {
1965 if (SND_SOC_BIAS_OFF == snd_soc_component_get_bias_level(component)) {
1966 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
1972 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
1975 snd_soc_component_update_bits(component, RT5640_DUMMY1,
1977 snd_soc_component_update_bits(component, RT5640_MICBIAS,
1983 snd_soc_component_write(component, RT5640_DEPOP_M1, 0x0004);
1984 snd_soc_component_write(component, RT5640_DEPOP_M2, 0x1100);
1985 snd_soc_component_update_bits(component, RT5640_DUMMY1, 0x1, 0);
1986 snd_soc_component_write(component, RT5640_PWR_DIG1, 0x0000);
1987 snd_soc_component_write(component, RT5640_PWR_DIG2, 0x0000);
1988 snd_soc_component_write(component, RT5640_PWR_VOL, 0x0000);
1989 snd_soc_component_write(component, RT5640_PWR_MIXER, 0x0000);
1991 snd_soc_component_write(component, RT5640_PWR_ANLG1,
1994 snd_soc_component_write(component, RT5640_PWR_ANLG1,
1996 snd_soc_component_write(component, RT5640_PWR_ANLG2, 0x0000);
2006 int rt5640_dmic_enable(struct snd_soc_component *component,
2009 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2032 int rt5640_sel_asrc_clk_src(struct snd_soc_component *component,
2035 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2087 snd_soc_component_update_bits(component, RT5640_ASRC_2,
2090 if (snd_soc_component_read(component, RT5640_ASRC_2)) {
2092 snd_soc_component_update_bits(component, RT5640_JD_CTRL, 0x3, 0x3);
2095 snd_soc_component_update_bits(component, RT5640_JD_CTRL, 0x3, 0x0);
2102 void rt5640_enable_micbias1_for_ovcd(struct snd_soc_component *component)
2104 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2105 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2118 void rt5640_disable_micbias1_for_ovcd(struct snd_soc_component *component)
2120 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2121 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2133 static void rt5640_enable_micbias1_ovcd_irq(struct snd_soc_component *component)
2135 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2137 snd_soc_component_update_bits(component, RT5640_IRQ_CTRL2,
2142 static void rt5640_disable_micbias1_ovcd_irq(struct snd_soc_component *component)
2144 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2146 snd_soc_component_update_bits(component, RT5640_IRQ_CTRL2,
2151 static void rt5640_clear_micbias1_ovcd(struct snd_soc_component *component)
2153 snd_soc_component_update_bits(component, RT5640_IRQ_CTRL2,
2157 static bool rt5640_micbias1_ovcd(struct snd_soc_component *component)
2161 val = snd_soc_component_read(component, RT5640_IRQ_CTRL2);
2162 dev_dbg(component->dev, "irq ctrl2 %#04x\n", val);
2167 static bool rt5640_jack_inserted(struct snd_soc_component *component)
2169 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2175 val = snd_soc_component_read(component, RT5640_INT_IRQ_ST);
2177 dev_dbg(component->dev, "irq status %#04x\n", val);
2194 static void rt5640_start_button_press_work(struct snd_soc_component *component)
2196 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2203 rt5640_clear_micbias1_ovcd(component);
2211 struct snd_soc_component *component = rt5640->component;
2214 if (!rt5640_jack_inserted(component))
2217 if (rt5640_micbias1_ovcd(component)) {
2223 rt5640_clear_micbias1_ovcd(component);
2241 dev_dbg(component->dev, "headset button press\n");
2249 dev_dbg(component->dev, "headset button release\n");
2253 rt5640_enable_micbias1_ovcd_irq(component);
2260 int rt5640_detect_headset(struct snd_soc_component *component, struct gpio_desc *hp_det_gpio)
2273 rt5640_clear_micbias1_ovcd(component);
2282 if (!rt5640_jack_inserted(component))
2286 if (rt5640_micbias1_ovcd(component)) {
2292 dev_dbg(component->dev, "jack mic-gnd shorted\n");
2298 dev_dbg(component->dev, "jack mic-gnd open\n");
2306 dev_err(component->dev, "Error detecting headset vs headphones, bad contact?, assuming headphones\n");
2315 struct snd_soc_component *component = rt5640->component;
2322 val = snd_soc_component_read(component, RT5640_INT_IRQ_ST);
2324 dev_dbg(component->dev, "mic jack status %d\n",
2327 snd_soc_component_update_bits(component, RT5640_IRQ_CTRL1,
2334 val = snd_soc_component_read(component, RT5640_DUMMY2);
2336 dev_dbg(component->dev, "headphone jack status %d\n",
2339 snd_soc_component_update_bits(component, RT5640_DUMMY2,
2350 if (!rt5640_jack_inserted(component)) {
2355 rt5640_disable_micbias1_ovcd_irq(component);
2356 rt5640_disable_micbias1_for_ovcd(component);
2360 dev_dbg(component->dev, "jack unplugged\n");
2365 rt5640_enable_micbias1_for_ovcd(component);
2366 status = rt5640_detect_headset(component, NULL);
2369 rt5640_enable_micbias1_ovcd_irq(component);
2372 rt5640_disable_micbias1_for_ovcd(component);
2374 dev_dbg(component->dev, "detect status %#02x\n", status);
2376 } else if (rt5640->ovcd_irq_enabled && rt5640_micbias1_ovcd(component)) {
2377 dev_dbg(component->dev, "OVCD IRQ\n");
2388 rt5640_disable_micbias1_ovcd_irq(component);
2389 rt5640_start_button_press_work(component);
2433 void rt5640_set_ovcd_params(struct snd_soc_component *component)
2435 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2437 snd_soc_component_write(component, RT5640_PR_BASE + RT5640_BIAS_CUR4,
2440 snd_soc_component_update_bits(component, RT5640_MICBIAS,
2453 snd_soc_component_update_bits(component, RT5640_IRQ_CTRL2,
2458 static void rt5640_disable_jack_detect(struct snd_soc_component *component)
2460 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2478 rt5640_disable_micbias1_ovcd_irq(component);
2479 rt5640_disable_micbias1_for_ovcd(component);
2489 static void rt5640_enable_jack_detect(struct snd_soc_component *component,
2493 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2497 snd_soc_component_update_bits(component, RT5640_JD_CTRL,
2501 snd_soc_component_update_bits(component, RT5640_GPIO_CTRL1,
2505 snd_soc_component_update_bits(component, RT5640_GPIO_CTRL3,
2508 snd_soc_component_write(component, RT5640_DUMMY1, 0x3f41);
2510 rt5640_set_ovcd_params(component);
2520 snd_soc_component_write(component, RT5640_IRQ_CTRL1,
2523 snd_soc_component_update_bits(component, RT5640_DUMMY2,
2528 snd_soc_component_write(component, RT5640_IRQ_CTRL1,
2531 snd_soc_component_update_bits(component, RT5640_DUMMY2,
2540 rt5640_enable_micbias1_for_ovcd(component);
2541 rt5640_enable_micbias1_ovcd_irq(component);
2555 dev_warn(component->dev, "Failed to request jd GPIO IRQ %d: %d\n",
2557 rt5640_disable_jack_detect(component);
2570 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret);
2571 rt5640_disable_jack_detect(component);
2587 struct snd_soc_component *component, struct snd_soc_jack *jack)
2589 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2591 snd_soc_component_get_dapm(component);
2595 snd_soc_component_update_bits(component, RT5640_JD_CTRL,
2597 snd_soc_component_write(component, RT5640_IRQ_CTRL1, RT5640_IRQ_JD_NOR);
2600 snd_soc_component_update_bits(component, RT5640_DUMMY2, 0x1100, 0x1100);
2603 snd_soc_component_update_bits(component, RT5640_GPIO_CTRL1,
2607 snd_soc_component_update_bits(component, RT5640_GPIO_CTRL3,
2610 snd_soc_component_update_bits(component, RT5640_DUMMY1, 0x400, 0x0);
2612 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
2616 snd_soc_component_update_bits(component, RT5640_PWR_ANLG1,
2624 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret);
2637 static int rt5640_set_jack(struct snd_soc_component *component,
2640 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2644 rt5640_enable_hda_jack_detect(component, jack);
2646 rt5640_enable_jack_detect(component, jack, data);
2648 rt5640_disable_jack_detect(component);
2654 static int rt5640_probe(struct snd_soc_component *component)
2656 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2657 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2664 rt5640->mclk = devm_clk_get(component->dev, "mclk");
2668 rt5640->component = component;
2670 snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
2672 snd_soc_component_update_bits(component, RT5640_DUMMY1, 0x0301, 0x0301);
2673 snd_soc_component_update_bits(component, RT5640_MICBIAS, 0x0030, 0x0030);
2674 snd_soc_component_update_bits(component, RT5640_DSP_PATH2, 0xfc00, 0x0c00);
2676 switch (snd_soc_component_read(component, RT5640_RESET) & RT5640_ID_MASK) {
2679 snd_soc_add_component_controls(component,
2698 dev_err(component->dev,
2710 if (device_property_read_bool(component->dev, "realtek,in1-differential"))
2711 snd_soc_component_update_bits(component, RT5640_IN1_IN2,
2714 if (device_property_read_bool(component->dev, "realtek,in2-differential"))
2715 snd_soc_component_update_bits(component, RT5640_IN3_IN4,
2718 if (device_property_read_bool(component->dev, "realtek,in3-differential"))
2719 snd_soc_component_update_bits(component, RT5640_IN1_IN2,
2722 if (device_property_read_bool(component->dev, "realtek,lout-differential"))
2723 snd_soc_component_update_bits(component, RT5640_DUMMY1,
2726 if (device_property_read_u32(component->dev, "realtek,dmic1-data-pin",
2732 if (device_property_read_u32(component->dev, "realtek,dmic2-data-pin",
2739 rt5640_dmic_enable(component, dmic1_data_pin, dmic2_data_pin);
2741 if (device_property_read_u32(component->dev,
2746 dev_warn(component->dev, "Warning: Invalid jack-detect-source value: %d, leaving jack-detect disabled\n",
2750 if (!device_property_read_bool(component->dev, "realtek,jack-detect-not-inverted"))
2761 if (device_property_read_u32(component->dev,
2774 dev_warn(component->dev, "Warning: Invalid over-current-threshold-microamp value: %d, defaulting to 2000uA\n",
2779 if (device_property_read_u32(component->dev,
2784 dev_warn(component->dev, "Warning: Invalid over-current-scale-factor value: %d, defaulting to 0.75\n",
2791 static void rt5640_remove(struct snd_soc_component *component)
2793 rt5640_reset(component);
2797 static int rt5640_suspend(struct snd_soc_component *component)
2799 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2807 snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
2808 rt5640_reset(component);
2817 static int rt5640_resume(struct snd_soc_component *component)
2819 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2831 snd_soc_component_update_bits(component,
2837 component, RT5640_DUMMY2,
2846 component, RT5640_DUMMY2,