Lines Matching +full:sm8250 +full:- +full:lpass +full:- +full:tx +full:- +full:macro
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
12 #include <sound/soc-dapm.h>
15 #include <linux/clk-provider.h>
17 #include "lpass-macro-common.h"
201 #define TX_ADC_TO_DMIC(n) ((n - TX_ADC_MAX)/2)
245 struct tx_macro *tx; member
251 struct tx_macro *tx; member
278 struct clk *macro; member
291 static const DECLARE_TLV_DB_SCALE(digital_gain, -8400, 100, -8400);
294 /* TX Macro */
438 /* Update volatile list for tx/tx macros */ in tx_is_volatile_register()
613 static int tx_macro_mclk_enable(struct tx_macro *tx, in tx_macro_mclk_enable() argument
616 struct regmap *regmap = tx->regmap; in tx_macro_mclk_enable()
619 if (tx->tx_mclk_users == 0) { in tx_macro_mclk_enable()
631 tx->tx_mclk_users++; in tx_macro_mclk_enable()
633 if (tx->tx_mclk_users <= 0) { in tx_macro_mclk_enable()
634 dev_err(tx->dev, "clock already disabled\n"); in tx_macro_mclk_enable()
635 tx->tx_mclk_users = 0; in tx_macro_mclk_enable()
638 tx->tx_mclk_users--; in tx_macro_mclk_enable()
639 if (tx->tx_mclk_users == 0) { in tx_macro_mclk_enable()
651 struct tx_macro *tx, u8 decimator) in is_amic_enabled() argument
658 if (tx->data->ver > LPASS_VER_9_0_0) in is_amic_enabled()
661 /* else: LPASS <= v9.0.0 */ in is_amic_enabled()
676 struct tx_macro *tx; in tx_macro_tx_hpf_corner_freq_callback() local
683 tx = hpf_work->tx; in tx_macro_tx_hpf_corner_freq_callback()
684 component = tx->component; in tx_macro_tx_hpf_corner_freq_callback()
685 hpf_cut_off_freq = hpf_work->hpf_cut_off_freq; in tx_macro_tx_hpf_corner_freq_callback()
687 dec_cfg_reg = CDC_TXn_TX_PATH_CFG0(hpf_work->decimator); in tx_macro_tx_hpf_corner_freq_callback()
688 hpf_gate_reg = CDC_TXn_TX_PATH_SEC2(hpf_work->decimator); in tx_macro_tx_hpf_corner_freq_callback()
690 if (is_amic_enabled(component, tx, hpf_work->decimator)) { in tx_macro_tx_hpf_corner_freq_callback()
720 struct tx_macro *tx; in tx_macro_mute_update_callback() local
726 tx = tx_mute_dwork->tx; in tx_macro_mute_update_callback()
727 component = tx->component; in tx_macro_mute_update_callback()
728 decimator = tx_mute_dwork->decimator; in tx_macro_mute_update_callback()
737 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in tx_macro_mclk_event()
738 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_mclk_event() local
742 tx_macro_mclk_enable(tx, true); in tx_macro_mclk_event()
745 tx_macro_mclk_enable(tx, false); in tx_macro_mclk_event()
756 struct tx_macro *tx, u16 mic_sel_reg, in tx_macro_update_smic_sel_v9() argument
778 struct tx_macro *tx, u16 mic_sel_reg, in tx_macro_update_smic_sel_v9_2() argument
784 if (widget->shift) { in tx_macro_update_smic_sel_v9_2()
804 struct snd_soc_component *component = snd_soc_dapm_to_component(widget->dapm); in tx_macro_put_dec_enum()
805 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in tx_macro_put_dec_enum()
806 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_put_dec_enum() local
810 val = ucontrol->value.enumerated.item[0]; in tx_macro_put_dec_enum()
811 if (val >= e->items) in tx_macro_put_dec_enum()
812 return -EINVAL; in tx_macro_put_dec_enum()
814 switch (e->reg) { in tx_macro_put_dec_enum()
840 dev_err(component->dev, "Error in configuration!!\n"); in tx_macro_put_dec_enum()
841 return -EINVAL; in tx_macro_put_dec_enum()
845 if (widget->shift) /* MSM DMIC */ in tx_macro_put_dec_enum()
848 else if (tx->data->ver <= LPASS_VER_9_0_0) in tx_macro_put_dec_enum()
849 tx_macro_update_smic_sel_v9(component, widget, tx, in tx_macro_put_dec_enum()
852 tx_macro_update_smic_sel_v9_2(component, widget, tx, in tx_macro_put_dec_enum()
863 struct snd_soc_component *component = snd_soc_dapm_to_component(widget->dapm); in tx_macro_tx_mixer_get()
864 struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value; in tx_macro_tx_mixer_get()
865 u32 dai_id = widget->shift; in tx_macro_tx_mixer_get()
866 u32 dec_id = mc->shift; in tx_macro_tx_mixer_get()
867 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_tx_mixer_get() local
869 if (test_bit(dec_id, &tx->active_ch_mask[dai_id])) in tx_macro_tx_mixer_get()
870 ucontrol->value.integer.value[0] = 1; in tx_macro_tx_mixer_get()
872 ucontrol->value.integer.value[0] = 0; in tx_macro_tx_mixer_get()
881 struct snd_soc_component *component = snd_soc_dapm_to_component(widget->dapm); in tx_macro_tx_mixer_put()
883 struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value; in tx_macro_tx_mixer_put()
884 u32 dai_id = widget->shift; in tx_macro_tx_mixer_put()
885 u32 dec_id = mc->shift; in tx_macro_tx_mixer_put()
886 u32 enable = ucontrol->value.integer.value[0]; in tx_macro_tx_mixer_put()
887 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_tx_mixer_put() local
890 if (tx->active_decimator[dai_id] == dec_id) in tx_macro_tx_mixer_put()
893 set_bit(dec_id, &tx->active_ch_mask[dai_id]); in tx_macro_tx_mixer_put()
894 tx->active_ch_cnt[dai_id]++; in tx_macro_tx_mixer_put()
895 tx->active_decimator[dai_id] = dec_id; in tx_macro_tx_mixer_put()
897 if (tx->active_decimator[dai_id] == -1) in tx_macro_tx_mixer_put()
900 tx->active_ch_cnt[dai_id]--; in tx_macro_tx_mixer_put()
901 clear_bit(dec_id, &tx->active_ch_mask[dai_id]); in tx_macro_tx_mixer_put()
902 tx->active_decimator[dai_id] = -1; in tx_macro_tx_mixer_put()
904 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, enable, update); in tx_macro_tx_mixer_put()
912 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in tx_macro_enable_dec()
920 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_enable_dec() local
922 decimator = w->shift; in tx_macro_enable_dec()
946 tx->dec_mode[decimator]); in tx_macro_enable_dec()
947 /* Enable TX PGA Mute */ in tx_macro_enable_dec()
954 if (!is_amic_enabled(component, tx, decimator)) { in tx_macro_enable_dec()
962 tx->tx_hpf_work[decimator].hpf_cut_off_freq = in tx_macro_enable_dec()
970 if (is_amic_enabled(component, tx, decimator)) { in tx_macro_enable_dec()
976 &tx->tx_mute_dwork[decimator].dwork, in tx_macro_enable_dec()
978 if (tx->tx_hpf_work[decimator].hpf_cut_off_freq != CF_MIN_3DB_150HZ) { in tx_macro_enable_dec()
980 &tx->tx_hpf_work[decimator].dwork, in tx_macro_enable_dec()
986 if (!is_amic_enabled(component, tx, decimator)) in tx_macro_enable_dec()
1005 if (tx->bcs_enable) { in tx_macro_enable_dec()
1008 tx->bcs_clk_en = true; in tx_macro_enable_dec()
1013 tx->tx_hpf_work[decimator].hpf_cut_off_freq; in tx_macro_enable_dec()
1017 &tx->tx_hpf_work[decimator].dwork)) { in tx_macro_enable_dec()
1023 if (is_amic_enabled(component, tx, decimator)) in tx_macro_enable_dec()
1047 cancel_delayed_work_sync(&tx->tx_mute_dwork[decimator].dwork); in tx_macro_enable_dec()
1056 if (tx->bcs_enable) { in tx_macro_enable_dec()
1063 tx->bcs_clk_en = false; in tx_macro_enable_dec()
1074 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_dec_mode_get() local
1075 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in tx_macro_dec_mode_get()
1076 int path = e->shift_l; in tx_macro_dec_mode_get()
1078 ucontrol->value.integer.value[0] = tx->dec_mode[path]; in tx_macro_dec_mode_get()
1087 int value = ucontrol->value.integer.value[0]; in tx_macro_dec_mode_put()
1088 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in tx_macro_dec_mode_put()
1089 int path = e->shift_l; in tx_macro_dec_mode_put()
1090 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_dec_mode_put() local
1092 if (tx->dec_mode[path] == value) in tx_macro_dec_mode_put()
1095 tx->dec_mode[path] = value; in tx_macro_dec_mode_put()
1104 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_get_bcs() local
1106 ucontrol->value.integer.value[0] = tx->bcs_enable; in tx_macro_get_bcs()
1115 int value = ucontrol->value.integer.value[0]; in tx_macro_set_bcs()
1116 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_set_bcs() local
1118 tx->bcs_enable = value; in tx_macro_set_bcs()
1127 struct snd_soc_component *component = dai->component; in tx_macro_hw_params()
1131 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_hw_params() local
1157 dev_err(component->dev, "%s: Invalid TX sample rate: %d\n", in tx_macro_hw_params()
1159 return -EINVAL; in tx_macro_hw_params()
1162 for_each_set_bit(decimator, &tx->active_ch_mask[dai->id], TX_MACRO_DEC_MAX) in tx_macro_hw_params()
1173 struct snd_soc_component *component = dai->component; in tx_macro_get_channel_map()
1174 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_get_channel_map() local
1176 switch (dai->id) { in tx_macro_get_channel_map()
1180 *tx_slot = tx->active_ch_mask[dai->id]; in tx_macro_get_channel_map()
1181 *tx_num = tx->active_ch_cnt[dai->id]; in tx_macro_get_channel_map()
1191 struct snd_soc_component *component = dai->component; in tx_macro_digital_mute()
1192 struct tx_macro *tx = snd_soc_component_get_drvdata(component); in tx_macro_digital_mute() local
1196 if (tx->active_decimator[dai->id] == -1) in tx_macro_digital_mute()
1199 decimator = tx->active_decimator[dai->id]; in tx_macro_digital_mute()
1439 SND_SOC_DAPM_MUX("TX DMIC MUX0", SND_SOC_NOPM, 4, 0, &tx_dmic0_mux),
1440 SND_SOC_DAPM_MUX("TX DMIC MUX1", SND_SOC_NOPM, 4, 0, &tx_dmic1_mux),
1441 SND_SOC_DAPM_MUX("TX DMIC MUX2", SND_SOC_NOPM, 4, 0, &tx_dmic2_mux),
1442 SND_SOC_DAPM_MUX("TX DMIC MUX3", SND_SOC_NOPM, 4, 0, &tx_dmic3_mux),
1443 SND_SOC_DAPM_MUX("TX DMIC MUX4", SND_SOC_NOPM, 4, 0, &tx_dmic4_mux),
1444 SND_SOC_DAPM_MUX("TX DMIC MUX5", SND_SOC_NOPM, 4, 0, &tx_dmic5_mux),
1445 SND_SOC_DAPM_MUX("TX DMIC MUX6", SND_SOC_NOPM, 4, 0, &tx_dmic6_mux),
1446 SND_SOC_DAPM_MUX("TX DMIC MUX7", SND_SOC_NOPM, 4, 0, &tx_dmic7_mux),
1448 SND_SOC_DAPM_INPUT("TX DMIC0"),
1449 SND_SOC_DAPM_INPUT("TX DMIC1"),
1450 SND_SOC_DAPM_INPUT("TX DMIC2"),
1451 SND_SOC_DAPM_INPUT("TX DMIC3"),
1452 SND_SOC_DAPM_INPUT("TX DMIC4"),
1453 SND_SOC_DAPM_INPUT("TX DMIC5"),
1454 SND_SOC_DAPM_INPUT("TX DMIC6"),
1455 SND_SOC_DAPM_INPUT("TX DMIC7"),
1457 SND_SOC_DAPM_MUX_E("TX DEC0 MUX", SND_SOC_NOPM,
1463 SND_SOC_DAPM_MUX_E("TX DEC1 MUX", SND_SOC_NOPM,
1469 SND_SOC_DAPM_MUX_E("TX DEC2 MUX", SND_SOC_NOPM,
1475 SND_SOC_DAPM_MUX_E("TX DEC3 MUX", SND_SOC_NOPM,
1481 SND_SOC_DAPM_MUX_E("TX DEC4 MUX", SND_SOC_NOPM,
1487 SND_SOC_DAPM_MUX_E("TX DEC5 MUX", SND_SOC_NOPM,
1493 SND_SOC_DAPM_MUX_E("TX DEC6 MUX", SND_SOC_NOPM,
1499 SND_SOC_DAPM_MUX_E("TX DEC7 MUX", SND_SOC_NOPM,
1523 {"TX_AIF1_CAP Mixer", "DEC0", "TX DEC0 MUX"},
1524 {"TX_AIF1_CAP Mixer", "DEC1", "TX DEC1 MUX"},
1525 {"TX_AIF1_CAP Mixer", "DEC2", "TX DEC2 MUX"},
1526 {"TX_AIF1_CAP Mixer", "DEC3", "TX DEC3 MUX"},
1527 {"TX_AIF1_CAP Mixer", "DEC4", "TX DEC4 MUX"},
1528 {"TX_AIF1_CAP Mixer", "DEC5", "TX DEC5 MUX"},
1529 {"TX_AIF1_CAP Mixer", "DEC6", "TX DEC6 MUX"},
1530 {"TX_AIF1_CAP Mixer", "DEC7", "TX DEC7 MUX"},
1532 {"TX_AIF2_CAP Mixer", "DEC0", "TX DEC0 MUX"},
1533 {"TX_AIF2_CAP Mixer", "DEC1", "TX DEC1 MUX"},
1534 {"TX_AIF2_CAP Mixer", "DEC2", "TX DEC2 MUX"},
1535 {"TX_AIF2_CAP Mixer", "DEC3", "TX DEC3 MUX"},
1536 {"TX_AIF2_CAP Mixer", "DEC4", "TX DEC4 MUX"},
1537 {"TX_AIF2_CAP Mixer", "DEC5", "TX DEC5 MUX"},
1538 {"TX_AIF2_CAP Mixer", "DEC6", "TX DEC6 MUX"},
1539 {"TX_AIF2_CAP Mixer", "DEC7", "TX DEC7 MUX"},
1541 {"TX_AIF3_CAP Mixer", "DEC0", "TX DEC0 MUX"},
1542 {"TX_AIF3_CAP Mixer", "DEC1", "TX DEC1 MUX"},
1543 {"TX_AIF3_CAP Mixer", "DEC2", "TX DEC2 MUX"},
1544 {"TX_AIF3_CAP Mixer", "DEC3", "TX DEC3 MUX"},
1545 {"TX_AIF3_CAP Mixer", "DEC4", "TX DEC4 MUX"},
1546 {"TX_AIF3_CAP Mixer", "DEC5", "TX DEC5 MUX"},
1547 {"TX_AIF3_CAP Mixer", "DEC6", "TX DEC6 MUX"},
1548 {"TX_AIF3_CAP Mixer", "DEC7", "TX DEC7 MUX"},
1550 {"TX DEC0 MUX", NULL, "TX_MCLK"},
1551 {"TX DEC1 MUX", NULL, "TX_MCLK"},
1552 {"TX DEC2 MUX", NULL, "TX_MCLK"},
1553 {"TX DEC3 MUX", NULL, "TX_MCLK"},
1554 {"TX DEC4 MUX", NULL, "TX_MCLK"},
1555 {"TX DEC5 MUX", NULL, "TX_MCLK"},
1556 {"TX DEC6 MUX", NULL, "TX_MCLK"},
1557 {"TX DEC7 MUX", NULL, "TX_MCLK"},
1559 {"TX DEC0 MUX", "MSM_DMIC", "TX DMIC MUX0"},
1560 {"TX DMIC MUX0", "DMIC0", "TX DMIC0"},
1561 {"TX DMIC MUX0", "DMIC1", "TX DMIC1"},
1562 {"TX DMIC MUX0", "DMIC2", "TX DMIC2"},
1563 {"TX DMIC MUX0", "DMIC3", "TX DMIC3"},
1564 {"TX DMIC MUX0", "DMIC4", "TX DMIC4"},
1565 {"TX DMIC MUX0", "DMIC5", "TX DMIC5"},
1566 {"TX DMIC MUX0", "DMIC6", "TX DMIC6"},
1567 {"TX DMIC MUX0", "DMIC7", "TX DMIC7"},
1569 {"TX DEC1 MUX", "MSM_DMIC", "TX DMIC MUX1"},
1570 {"TX DMIC MUX1", "DMIC0", "TX DMIC0"},
1571 {"TX DMIC MUX1", "DMIC1", "TX DMIC1"},
1572 {"TX DMIC MUX1", "DMIC2", "TX DMIC2"},
1573 {"TX DMIC MUX1", "DMIC3", "TX DMIC3"},
1574 {"TX DMIC MUX1", "DMIC4", "TX DMIC4"},
1575 {"TX DMIC MUX1", "DMIC5", "TX DMIC5"},
1576 {"TX DMIC MUX1", "DMIC6", "TX DMIC6"},
1577 {"TX DMIC MUX1", "DMIC7", "TX DMIC7"},
1579 {"TX DEC2 MUX", "MSM_DMIC", "TX DMIC MUX2"},
1580 {"TX DMIC MUX2", "DMIC0", "TX DMIC0"},
1581 {"TX DMIC MUX2", "DMIC1", "TX DMIC1"},
1582 {"TX DMIC MUX2", "DMIC2", "TX DMIC2"},
1583 {"TX DMIC MUX2", "DMIC3", "TX DMIC3"},
1584 {"TX DMIC MUX2", "DMIC4", "TX DMIC4"},
1585 {"TX DMIC MUX2", "DMIC5", "TX DMIC5"},
1586 {"TX DMIC MUX2", "DMIC6", "TX DMIC6"},
1587 {"TX DMIC MUX2", "DMIC7", "TX DMIC7"},
1589 {"TX DEC3 MUX", "MSM_DMIC", "TX DMIC MUX3"},
1590 {"TX DMIC MUX3", "DMIC0", "TX DMIC0"},
1591 {"TX DMIC MUX3", "DMIC1", "TX DMIC1"},
1592 {"TX DMIC MUX3", "DMIC2", "TX DMIC2"},
1593 {"TX DMIC MUX3", "DMIC3", "TX DMIC3"},
1594 {"TX DMIC MUX3", "DMIC4", "TX DMIC4"},
1595 {"TX DMIC MUX3", "DMIC5", "TX DMIC5"},
1596 {"TX DMIC MUX3", "DMIC6", "TX DMIC6"},
1597 {"TX DMIC MUX3", "DMIC7", "TX DMIC7"},
1599 {"TX DEC4 MUX", "MSM_DMIC", "TX DMIC MUX4"},
1600 {"TX DMIC MUX4", "DMIC0", "TX DMIC0"},
1601 {"TX DMIC MUX4", "DMIC1", "TX DMIC1"},
1602 {"TX DMIC MUX4", "DMIC2", "TX DMIC2"},
1603 {"TX DMIC MUX4", "DMIC3", "TX DMIC3"},
1604 {"TX DMIC MUX4", "DMIC4", "TX DMIC4"},
1605 {"TX DMIC MUX4", "DMIC5", "TX DMIC5"},
1606 {"TX DMIC MUX4", "DMIC6", "TX DMIC6"},
1607 {"TX DMIC MUX4", "DMIC7", "TX DMIC7"},
1609 {"TX DEC5 MUX", "MSM_DMIC", "TX DMIC MUX5"},
1610 {"TX DMIC MUX5", "DMIC0", "TX DMIC0"},
1611 {"TX DMIC MUX5", "DMIC1", "TX DMIC1"},
1612 {"TX DMIC MUX5", "DMIC2", "TX DMIC2"},
1613 {"TX DMIC MUX5", "DMIC3", "TX DMIC3"},
1614 {"TX DMIC MUX5", "DMIC4", "TX DMIC4"},
1615 {"TX DMIC MUX5", "DMIC5", "TX DMIC5"},
1616 {"TX DMIC MUX5", "DMIC6", "TX DMIC6"},
1617 {"TX DMIC MUX5", "DMIC7", "TX DMIC7"},
1619 {"TX DEC6 MUX", "MSM_DMIC", "TX DMIC MUX6"},
1620 {"TX DMIC MUX6", "DMIC0", "TX DMIC0"},
1621 {"TX DMIC MUX6", "DMIC1", "TX DMIC1"},
1622 {"TX DMIC MUX6", "DMIC2", "TX DMIC2"},
1623 {"TX DMIC MUX6", "DMIC3", "TX DMIC3"},
1624 {"TX DMIC MUX6", "DMIC4", "TX DMIC4"},
1625 {"TX DMIC MUX6", "DMIC5", "TX DMIC5"},
1626 {"TX DMIC MUX6", "DMIC6", "TX DMIC6"},
1627 {"TX DMIC MUX6", "DMIC7", "TX DMIC7"},
1629 {"TX DEC7 MUX", "MSM_DMIC", "TX DMIC MUX7"},
1630 {"TX DMIC MUX7", "DMIC0", "TX DMIC0"},
1631 {"TX DMIC MUX7", "DMIC1", "TX DMIC1"},
1632 {"TX DMIC MUX7", "DMIC2", "TX DMIC2"},
1633 {"TX DMIC MUX7", "DMIC3", "TX DMIC3"},
1634 {"TX DMIC MUX7", "DMIC4", "TX DMIC4"},
1635 {"TX DMIC MUX7", "DMIC5", "TX DMIC5"},
1636 {"TX DMIC MUX7", "DMIC6", "TX DMIC6"},
1637 {"TX DMIC MUX7", "DMIC7", "TX DMIC7"},
1640 /* Controls and routes specific to LPASS <= v9.0.0 */
1689 SND_SOC_DAPM_MUX("TX SMIC MUX0", SND_SOC_NOPM, 0, 0, &tx_smic0_mux_v9),
1690 SND_SOC_DAPM_MUX("TX SMIC MUX1", SND_SOC_NOPM, 0, 0, &tx_smic1_mux_v9),
1691 SND_SOC_DAPM_MUX("TX SMIC MUX2", SND_SOC_NOPM, 0, 0, &tx_smic2_mux_v9),
1692 SND_SOC_DAPM_MUX("TX SMIC MUX3", SND_SOC_NOPM, 0, 0, &tx_smic3_mux_v9),
1693 SND_SOC_DAPM_MUX("TX SMIC MUX4", SND_SOC_NOPM, 0, 0, &tx_smic4_mux_v9),
1694 SND_SOC_DAPM_MUX("TX SMIC MUX5", SND_SOC_NOPM, 0, 0, &tx_smic5_mux_v9),
1695 SND_SOC_DAPM_MUX("TX SMIC MUX6", SND_SOC_NOPM, 0, 0, &tx_smic6_mux_v9),
1696 SND_SOC_DAPM_MUX("TX SMIC MUX7", SND_SOC_NOPM, 0, 0, &tx_smic7_mux_v9),
1698 SND_SOC_DAPM_INPUT("TX SWR_ADC0"),
1699 SND_SOC_DAPM_INPUT("TX SWR_ADC1"),
1700 SND_SOC_DAPM_INPUT("TX SWR_ADC2"),
1701 SND_SOC_DAPM_INPUT("TX SWR_ADC3"),
1702 SND_SOC_DAPM_INPUT("TX SWR_DMIC0"),
1703 SND_SOC_DAPM_INPUT("TX SWR_DMIC1"),
1704 SND_SOC_DAPM_INPUT("TX SWR_DMIC2"),
1705 SND_SOC_DAPM_INPUT("TX SWR_DMIC3"),
1706 SND_SOC_DAPM_INPUT("TX SWR_DMIC4"),
1707 SND_SOC_DAPM_INPUT("TX SWR_DMIC5"),
1708 SND_SOC_DAPM_INPUT("TX SWR_DMIC6"),
1709 SND_SOC_DAPM_INPUT("TX SWR_DMIC7"),
1713 {"TX DEC0 MUX", "SWR_MIC", "TX SMIC MUX0"},
1714 {"TX SMIC MUX0", NULL, "TX_SWR_CLK"},
1715 {"TX SMIC MUX0", "ADC0", "TX SWR_ADC0"},
1716 {"TX SMIC MUX0", "ADC1", "TX SWR_ADC1"},
1717 {"TX SMIC MUX0", "ADC2", "TX SWR_ADC2"},
1718 {"TX SMIC MUX0", "ADC3", "TX SWR_ADC3"},
1719 {"TX SMIC MUX0", "SWR_DMIC0", "TX SWR_DMIC0"},
1720 {"TX SMIC MUX0", "SWR_DMIC1", "TX SWR_DMIC1"},
1721 {"TX SMIC MUX0", "SWR_DMIC2", "TX SWR_DMIC2"},
1722 {"TX SMIC MUX0", "SWR_DMIC3", "TX SWR_DMIC3"},
1723 {"TX SMIC MUX0", "SWR_DMIC4", "TX SWR_DMIC4"},
1724 {"TX SMIC MUX0", "SWR_DMIC5", "TX SWR_DMIC5"},
1725 {"TX SMIC MUX0", "SWR_DMIC6", "TX SWR_DMIC6"},
1726 {"TX SMIC MUX0", "SWR_DMIC7", "TX SWR_DMIC7"},
1728 {"TX DEC1 MUX", "SWR_MIC", "TX SMIC MUX1"},
1729 {"TX SMIC MUX1", NULL, "TX_SWR_CLK"},
1730 {"TX SMIC MUX1", "ADC0", "TX SWR_ADC0"},
1731 {"TX SMIC MUX1", "ADC1", "TX SWR_ADC1"},
1732 {"TX SMIC MUX1", "ADC2", "TX SWR_ADC2"},
1733 {"TX SMIC MUX1", "ADC3", "TX SWR_ADC3"},
1734 {"TX SMIC MUX1", "SWR_DMIC0", "TX SWR_DMIC0"},
1735 {"TX SMIC MUX1", "SWR_DMIC1", "TX SWR_DMIC1"},
1736 {"TX SMIC MUX1", "SWR_DMIC2", "TX SWR_DMIC2"},
1737 {"TX SMIC MUX1", "SWR_DMIC3", "TX SWR_DMIC3"},
1738 {"TX SMIC MUX1", "SWR_DMIC4", "TX SWR_DMIC4"},
1739 {"TX SMIC MUX1", "SWR_DMIC5", "TX SWR_DMIC5"},
1740 {"TX SMIC MUX1", "SWR_DMIC6", "TX SWR_DMIC6"},
1741 {"TX SMIC MUX1", "SWR_DMIC7", "TX SWR_DMIC7"},
1743 {"TX DEC2 MUX", "SWR_MIC", "TX SMIC MUX2"},
1744 {"TX SMIC MUX2", NULL, "TX_SWR_CLK"},
1745 {"TX SMIC MUX2", "ADC0", "TX SWR_ADC0"},
1746 {"TX SMIC MUX2", "ADC1", "TX SWR_ADC1"},
1747 {"TX SMIC MUX2", "ADC2", "TX SWR_ADC2"},
1748 {"TX SMIC MUX2", "ADC3", "TX SWR_ADC3"},
1749 {"TX SMIC MUX2", "SWR_DMIC0", "TX SWR_DMIC0"},
1750 {"TX SMIC MUX2", "SWR_DMIC1", "TX SWR_DMIC1"},
1751 {"TX SMIC MUX2", "SWR_DMIC2", "TX SWR_DMIC2"},
1752 {"TX SMIC MUX2", "SWR_DMIC3", "TX SWR_DMIC3"},
1753 {"TX SMIC MUX2", "SWR_DMIC4", "TX SWR_DMIC4"},
1754 {"TX SMIC MUX2", "SWR_DMIC5", "TX SWR_DMIC5"},
1755 {"TX SMIC MUX2", "SWR_DMIC6", "TX SWR_DMIC6"},
1756 {"TX SMIC MUX2", "SWR_DMIC7", "TX SWR_DMIC7"},
1758 {"TX DEC3 MUX", "SWR_MIC", "TX SMIC MUX3"},
1759 {"TX SMIC MUX3", NULL, "TX_SWR_CLK"},
1760 {"TX SMIC MUX3", "ADC0", "TX SWR_ADC0"},
1761 {"TX SMIC MUX3", "ADC1", "TX SWR_ADC1"},
1762 {"TX SMIC MUX3", "ADC2", "TX SWR_ADC2"},
1763 {"TX SMIC MUX3", "ADC3", "TX SWR_ADC3"},
1764 {"TX SMIC MUX3", "SWR_DMIC0", "TX SWR_DMIC0"},
1765 {"TX SMIC MUX3", "SWR_DMIC1", "TX SWR_DMIC1"},
1766 {"TX SMIC MUX3", "SWR_DMIC2", "TX SWR_DMIC2"},
1767 {"TX SMIC MUX3", "SWR_DMIC3", "TX SWR_DMIC3"},
1768 {"TX SMIC MUX3", "SWR_DMIC4", "TX SWR_DMIC4"},
1769 {"TX SMIC MUX3", "SWR_DMIC5", "TX SWR_DMIC5"},
1770 {"TX SMIC MUX3", "SWR_DMIC6", "TX SWR_DMIC6"},
1771 {"TX SMIC MUX3", "SWR_DMIC7", "TX SWR_DMIC7"},
1773 {"TX DEC4 MUX", "SWR_MIC", "TX SMIC MUX4"},
1774 {"TX SMIC MUX4", NULL, "TX_SWR_CLK"},
1775 {"TX SMIC MUX4", "ADC0", "TX SWR_ADC0"},
1776 {"TX SMIC MUX4", "ADC1", "TX SWR_ADC1"},
1777 {"TX SMIC MUX4", "ADC2", "TX SWR_ADC2"},
1778 {"TX SMIC MUX4", "ADC3", "TX SWR_ADC3"},
1779 {"TX SMIC MUX4", "SWR_DMIC0", "TX SWR_DMIC0"},
1780 {"TX SMIC MUX4", "SWR_DMIC1", "TX SWR_DMIC1"},
1781 {"TX SMIC MUX4", "SWR_DMIC2", "TX SWR_DMIC2"},
1782 {"TX SMIC MUX4", "SWR_DMIC3", "TX SWR_DMIC3"},
1783 {"TX SMIC MUX4", "SWR_DMIC4", "TX SWR_DMIC4"},
1784 {"TX SMIC MUX4", "SWR_DMIC5", "TX SWR_DMIC5"},
1785 {"TX SMIC MUX4", "SWR_DMIC6", "TX SWR_DMIC6"},
1786 {"TX SMIC MUX4", "SWR_DMIC7", "TX SWR_DMIC7"},
1788 {"TX DEC5 MUX", "SWR_MIC", "TX SMIC MUX5"},
1789 {"TX SMIC MUX5", NULL, "TX_SWR_CLK"},
1790 {"TX SMIC MUX5", "ADC0", "TX SWR_ADC0"},
1791 {"TX SMIC MUX5", "ADC1", "TX SWR_ADC1"},
1792 {"TX SMIC MUX5", "ADC2", "TX SWR_ADC2"},
1793 {"TX SMIC MUX5", "ADC3", "TX SWR_ADC3"},
1794 {"TX SMIC MUX5", "SWR_DMIC0", "TX SWR_DMIC0"},
1795 {"TX SMIC MUX5", "SWR_DMIC1", "TX SWR_DMIC1"},
1796 {"TX SMIC MUX5", "SWR_DMIC2", "TX SWR_DMIC2"},
1797 {"TX SMIC MUX5", "SWR_DMIC3", "TX SWR_DMIC3"},
1798 {"TX SMIC MUX5", "SWR_DMIC4", "TX SWR_DMIC4"},
1799 {"TX SMIC MUX5", "SWR_DMIC5", "TX SWR_DMIC5"},
1800 {"TX SMIC MUX5", "SWR_DMIC6", "TX SWR_DMIC6"},
1801 {"TX SMIC MUX5", "SWR_DMIC7", "TX SWR_DMIC7"},
1803 {"TX DEC6 MUX", "SWR_MIC", "TX SMIC MUX6"},
1804 {"TX SMIC MUX6", NULL, "TX_SWR_CLK"},
1805 {"TX SMIC MUX6", "ADC0", "TX SWR_ADC0"},
1806 {"TX SMIC MUX6", "ADC1", "TX SWR_ADC1"},
1807 {"TX SMIC MUX6", "ADC2", "TX SWR_ADC2"},
1808 {"TX SMIC MUX6", "ADC3", "TX SWR_ADC3"},
1809 {"TX SMIC MUX6", "SWR_DMIC0", "TX SWR_DMIC0"},
1810 {"TX SMIC MUX6", "SWR_DMIC1", "TX SWR_DMIC1"},
1811 {"TX SMIC MUX6", "SWR_DMIC2", "TX SWR_DMIC2"},
1812 {"TX SMIC MUX6", "SWR_DMIC3", "TX SWR_DMIC3"},
1813 {"TX SMIC MUX6", "SWR_DMIC4", "TX SWR_DMIC4"},
1814 {"TX SMIC MUX6", "SWR_DMIC5", "TX SWR_DMIC5"},
1815 {"TX SMIC MUX6", "SWR_DMIC6", "TX SWR_DMIC6"},
1816 {"TX SMIC MUX6", "SWR_DMIC7", "TX SWR_DMIC7"},
1818 {"TX DEC7 MUX", "SWR_MIC", "TX SMIC MUX7"},
1819 {"TX SMIC MUX7", NULL, "TX_SWR_CLK"},
1820 {"TX SMIC MUX7", "ADC0", "TX SWR_ADC0"},
1821 {"TX SMIC MUX7", "ADC1", "TX SWR_ADC1"},
1822 {"TX SMIC MUX7", "ADC2", "TX SWR_ADC2"},
1823 {"TX SMIC MUX7", "ADC3", "TX SWR_ADC3"},
1824 {"TX SMIC MUX7", "SWR_DMIC0", "TX SWR_DMIC0"},
1825 {"TX SMIC MUX7", "SWR_DMIC1", "TX SWR_DMIC1"},
1826 {"TX SMIC MUX7", "SWR_DMIC2", "TX SWR_DMIC2"},
1827 {"TX SMIC MUX7", "SWR_DMIC3", "TX SWR_DMIC3"},
1828 {"TX SMIC MUX7", "SWR_DMIC4", "TX SWR_DMIC4"},
1829 {"TX SMIC MUX7", "SWR_DMIC5", "TX SWR_DMIC5"},
1830 {"TX SMIC MUX7", "SWR_DMIC6", "TX SWR_DMIC6"},
1831 {"TX SMIC MUX7", "SWR_DMIC7", "TX SWR_DMIC7"},
1834 /* Controls and routes specific to LPASS >= v9.2.0 */
1883 SND_SOC_DAPM_MUX("TX SMIC MUX0", SND_SOC_NOPM, 0, 0, &tx_smic0_mux_v9_2),
1884 SND_SOC_DAPM_MUX("TX SMIC MUX1", SND_SOC_NOPM, 0, 0, &tx_smic1_mux_v9_2),
1885 SND_SOC_DAPM_MUX("TX SMIC MUX2", SND_SOC_NOPM, 0, 0, &tx_smic2_mux_v9_2),
1886 SND_SOC_DAPM_MUX("TX SMIC MUX3", SND_SOC_NOPM, 0, 0, &tx_smic3_mux_v9_2),
1887 SND_SOC_DAPM_MUX("TX SMIC MUX4", SND_SOC_NOPM, 0, 0, &tx_smic4_mux_v9_2),
1888 SND_SOC_DAPM_MUX("TX SMIC MUX5", SND_SOC_NOPM, 0, 0, &tx_smic5_mux_v9_2),
1889 SND_SOC_DAPM_MUX("TX SMIC MUX6", SND_SOC_NOPM, 0, 0, &tx_smic6_mux_v9_2),
1890 SND_SOC_DAPM_MUX("TX SMIC MUX7", SND_SOC_NOPM, 0, 0, &tx_smic7_mux_v9_2),
1892 SND_SOC_DAPM_INPUT("TX SWR_INPUT0"),
1893 SND_SOC_DAPM_INPUT("TX SWR_INPUT1"),
1894 SND_SOC_DAPM_INPUT("TX SWR_INPUT2"),
1895 SND_SOC_DAPM_INPUT("TX SWR_INPUT3"),
1896 SND_SOC_DAPM_INPUT("TX SWR_INPUT4"),
1897 SND_SOC_DAPM_INPUT("TX SWR_INPUT5"),
1898 SND_SOC_DAPM_INPUT("TX SWR_INPUT6"),
1899 SND_SOC_DAPM_INPUT("TX SWR_INPUT7"),
1900 SND_SOC_DAPM_INPUT("TX SWR_INPUT8"),
1901 SND_SOC_DAPM_INPUT("TX SWR_INPUT9"),
1902 SND_SOC_DAPM_INPUT("TX SWR_INPUT10"),
1903 SND_SOC_DAPM_INPUT("TX SWR_INPUT11"),
1907 {"TX DEC0 MUX", "SWR_MIC", "TX SMIC MUX0"},
1908 {"TX SMIC MUX0", NULL, "TX_SWR_CLK"},
1909 {"TX SMIC MUX0", "SWR_MIC0", "TX SWR_INPUT0"},
1910 {"TX SMIC MUX0", "SWR_MIC1", "TX SWR_INPUT1"},
1911 {"TX SMIC MUX0", "SWR_MIC2", "TX SWR_INPUT2"},
1912 {"TX SMIC MUX0", "SWR_MIC3", "TX SWR_INPUT3"},
1913 {"TX SMIC MUX0", "SWR_MIC4", "TX SWR_INPUT4"},
1914 {"TX SMIC MUX0", "SWR_MIC5", "TX SWR_INPUT5"},
1915 {"TX SMIC MUX0", "SWR_MIC6", "TX SWR_INPUT6"},
1916 {"TX SMIC MUX0", "SWR_MIC7", "TX SWR_INPUT7"},
1917 {"TX SMIC MUX0", "SWR_MIC8", "TX SWR_INPUT8"},
1918 {"TX SMIC MUX0", "SWR_MIC9", "TX SWR_INPUT9"},
1919 {"TX SMIC MUX0", "SWR_MIC10", "TX SWR_INPUT11"},
1920 {"TX SMIC MUX0", "SWR_MIC11", "TX SWR_INPUT10"},
1922 {"TX DEC1 MUX", "SWR_MIC", "TX SMIC MUX1"},
1923 {"TX SMIC MUX1", NULL, "TX_SWR_CLK"},
1924 {"TX SMIC MUX1", "SWR_MIC0", "TX SWR_INPUT0"},
1925 {"TX SMIC MUX1", "SWR_MIC1", "TX SWR_INPUT1"},
1926 {"TX SMIC MUX1", "SWR_MIC2", "TX SWR_INPUT2"},
1927 {"TX SMIC MUX1", "SWR_MIC3", "TX SWR_INPUT3"},
1928 {"TX SMIC MUX1", "SWR_MIC4", "TX SWR_INPUT4"},
1929 {"TX SMIC MUX1", "SWR_MIC5", "TX SWR_INPUT5"},
1930 {"TX SMIC MUX1", "SWR_MIC6", "TX SWR_INPUT6"},
1931 {"TX SMIC MUX1", "SWR_MIC7", "TX SWR_INPUT7"},
1932 {"TX SMIC MUX1", "SWR_MIC8", "TX SWR_INPUT8"},
1933 {"TX SMIC MUX1", "SWR_MIC9", "TX SWR_INPUT9"},
1934 {"TX SMIC MUX1", "SWR_MIC10", "TX SWR_INPUT10"},
1935 {"TX SMIC MUX1", "SWR_MIC11", "TX SWR_INPUT11"},
1937 {"TX DEC2 MUX", "SWR_MIC", "TX SMIC MUX2"},
1938 {"TX SMIC MUX2", NULL, "TX_SWR_CLK"},
1939 {"TX SMIC MUX2", "SWR_MIC0", "TX SWR_INPUT0"},
1940 {"TX SMIC MUX2", "SWR_MIC1", "TX SWR_INPUT1"},
1941 {"TX SMIC MUX2", "SWR_MIC2", "TX SWR_INPUT2"},
1942 {"TX SMIC MUX2", "SWR_MIC3", "TX SWR_INPUT3"},
1943 {"TX SMIC MUX2", "SWR_MIC4", "TX SWR_INPUT4"},
1944 {"TX SMIC MUX2", "SWR_MIC5", "TX SWR_INPUT5"},
1945 {"TX SMIC MUX2", "SWR_MIC6", "TX SWR_INPUT6"},
1946 {"TX SMIC MUX2", "SWR_MIC7", "TX SWR_INPUT7"},
1947 {"TX SMIC MUX2", "SWR_MIC8", "TX SWR_INPUT8"},
1948 {"TX SMIC MUX2", "SWR_MIC9", "TX SWR_INPUT9"},
1949 {"TX SMIC MUX2", "SWR_MIC10", "TX SWR_INPUT10"},
1950 {"TX SMIC MUX2", "SWR_MIC11", "TX SWR_INPUT11"},
1952 {"TX DEC3 MUX", "SWR_MIC", "TX SMIC MUX3"},
1953 {"TX SMIC MUX3", NULL, "TX_SWR_CLK"},
1954 {"TX SMIC MUX3", "SWR_MIC0", "TX SWR_INPUT0"},
1955 {"TX SMIC MUX3", "SWR_MIC1", "TX SWR_INPUT1"},
1956 {"TX SMIC MUX3", "SWR_MIC2", "TX SWR_INPUT2"},
1957 {"TX SMIC MUX3", "SWR_MIC3", "TX SWR_INPUT3"},
1958 {"TX SMIC MUX3", "SWR_MIC4", "TX SWR_INPUT4"},
1959 {"TX SMIC MUX3", "SWR_MIC5", "TX SWR_INPUT5"},
1960 {"TX SMIC MUX3", "SWR_MIC6", "TX SWR_INPUT6"},
1961 {"TX SMIC MUX3", "SWR_MIC7", "TX SWR_INPUT7"},
1962 {"TX SMIC MUX3", "SWR_MIC8", "TX SWR_INPUT8"},
1963 {"TX SMIC MUX3", "SWR_MIC9", "TX SWR_INPUT9"},
1964 {"TX SMIC MUX3", "SWR_MIC10", "TX SWR_INPUT10"},
1965 {"TX SMIC MUX3", "SWR_MIC11", "TX SWR_INPUT11"},
1967 {"TX DEC4 MUX", "SWR_MIC", "TX SMIC MUX4"},
1968 {"TX SMIC MUX4", NULL, "TX_SWR_CLK"},
1969 {"TX SMIC MUX4", "SWR_MIC0", "TX SWR_INPUT0"},
1970 {"TX SMIC MUX4", "SWR_MIC1", "TX SWR_INPUT1"},
1971 {"TX SMIC MUX4", "SWR_MIC2", "TX SWR_INPUT2"},
1972 {"TX SMIC MUX4", "SWR_MIC3", "TX SWR_INPUT3"},
1973 {"TX SMIC MUX4", "SWR_MIC4", "TX SWR_INPUT4"},
1974 {"TX SMIC MUX4", "SWR_MIC5", "TX SWR_INPUT5"},
1975 {"TX SMIC MUX4", "SWR_MIC6", "TX SWR_INPUT6"},
1976 {"TX SMIC MUX4", "SWR_MIC7", "TX SWR_INPUT7"},
1977 {"TX SMIC MUX4", "SWR_MIC8", "TX SWR_INPUT8"},
1978 {"TX SMIC MUX4", "SWR_MIC9", "TX SWR_INPUT9"},
1979 {"TX SMIC MUX4", "SWR_MIC10", "TX SWR_INPUT10"},
1980 {"TX SMIC MUX4", "SWR_MIC11", "TX SWR_INPUT11"},
1982 {"TX DEC5 MUX", "SWR_MIC", "TX SMIC MUX5"},
1983 {"TX SMIC MUX5", NULL, "TX_SWR_CLK"},
1984 {"TX SMIC MUX5", "SWR_MIC0", "TX SWR_INPUT0"},
1985 {"TX SMIC MUX5", "SWR_MIC1", "TX SWR_INPUT1"},
1986 {"TX SMIC MUX5", "SWR_MIC2", "TX SWR_INPUT2"},
1987 {"TX SMIC MUX5", "SWR_MIC3", "TX SWR_INPUT3"},
1988 {"TX SMIC MUX5", "SWR_MIC4", "TX SWR_INPUT4"},
1989 {"TX SMIC MUX5", "SWR_MIC5", "TX SWR_INPUT5"},
1990 {"TX SMIC MUX5", "SWR_MIC6", "TX SWR_INPUT6"},
1991 {"TX SMIC MUX5", "SWR_MIC7", "TX SWR_INPUT7"},
1992 {"TX SMIC MUX5", "SWR_MIC8", "TX SWR_INPUT8"},
1993 {"TX SMIC MUX5", "SWR_MIC9", "TX SWR_INPUT9"},
1994 {"TX SMIC MUX5", "SWR_MIC10", "TX SWR_INPUT10"},
1995 {"TX SMIC MUX5", "SWR_MIC11", "TX SWR_INPUT11"},
1997 {"TX DEC6 MUX", "SWR_MIC", "TX SMIC MUX6"},
1998 {"TX SMIC MUX6", NULL, "TX_SWR_CLK"},
1999 {"TX SMIC MUX6", "SWR_MIC0", "TX SWR_INPUT0"},
2000 {"TX SMIC MUX6", "SWR_MIC1", "TX SWR_INPUT1"},
2001 {"TX SMIC MUX6", "SWR_MIC2", "TX SWR_INPUT2"},
2002 {"TX SMIC MUX6", "SWR_MIC3", "TX SWR_INPUT3"},
2003 {"TX SMIC MUX6", "SWR_MIC4", "TX SWR_INPUT4"},
2004 {"TX SMIC MUX6", "SWR_MIC5", "TX SWR_INPUT5"},
2005 {"TX SMIC MUX6", "SWR_MIC6", "TX SWR_INPUT6"},
2006 {"TX SMIC MUX6", "SWR_MIC7", "TX SWR_INPUT7"},
2007 {"TX SMIC MUX6", "SWR_MIC8", "TX SWR_INPUT8"},
2008 {"TX SMIC MUX6", "SWR_MIC9", "TX SWR_INPUT9"},
2009 {"TX SMIC MUX6", "SWR_MIC10", "TX SWR_INPUT10"},
2010 {"TX SMIC MUX6", "SWR_MIC11", "TX SWR_INPUT11"},
2012 {"TX DEC7 MUX", "SWR_MIC", "TX SMIC MUX7"},
2013 {"TX SMIC MUX7", NULL, "TX_SWR_CLK"},
2014 {"TX SMIC MUX7", "SWR_MIC0", "TX SWR_INPUT0"},
2015 {"TX SMIC MUX7", "SWR_MIC1", "TX SWR_INPUT1"},
2016 {"TX SMIC MUX7", "SWR_MIC2", "TX SWR_INPUT2"},
2017 {"TX SMIC MUX7", "SWR_MIC3", "TX SWR_INPUT3"},
2018 {"TX SMIC MUX7", "SWR_MIC4", "TX SWR_INPUT4"},
2019 {"TX SMIC MUX7", "SWR_MIC5", "TX SWR_INPUT5"},
2020 {"TX SMIC MUX7", "SWR_MIC6", "TX SWR_INPUT6"},
2021 {"TX SMIC MUX7", "SWR_MIC7", "TX SWR_INPUT7"},
2022 {"TX SMIC MUX7", "SWR_MIC8", "TX SWR_INPUT8"},
2023 {"TX SMIC MUX7", "SWR_MIC9", "TX SWR_INPUT9"},
2024 {"TX SMIC MUX7", "SWR_MIC10", "TX SWR_INPUT10"},
2025 {"TX SMIC MUX7", "SWR_MIC11", "TX SWR_INPUT11"},
2031 -84, 40, digital_gain),
2034 -84, 40, digital_gain),
2037 -84, 40, digital_gain),
2040 -84, 40, digital_gain),
2043 -84, 40, digital_gain),
2046 -84, 40, digital_gain),
2049 -84, 40, digital_gain),
2052 -84, 40, digital_gain),
2085 struct tx_macro *tx = snd_soc_component_get_drvdata(comp); in tx_macro_component_extend() local
2088 if (tx->data->extra_widgets_num) { in tx_macro_component_extend()
2089 ret = snd_soc_dapm_new_controls(dapm, tx->data->extra_widgets, in tx_macro_component_extend()
2090 tx->data->extra_widgets_num); in tx_macro_component_extend()
2092 dev_err(tx->dev, "failed to add extra widgets: %d\n", ret); in tx_macro_component_extend()
2097 if (tx->data->extra_routes_num) { in tx_macro_component_extend()
2098 ret = snd_soc_dapm_add_routes(dapm, tx->data->extra_routes, in tx_macro_component_extend()
2099 tx->data->extra_routes_num); in tx_macro_component_extend()
2101 dev_err(tx->dev, "failed to add extra routes: %d\n", ret); in tx_macro_component_extend()
2111 struct tx_macro *tx = snd_soc_component_get_drvdata(comp); in tx_macro_component_probe() local
2118 snd_soc_component_init_regmap(comp, tx->regmap); in tx_macro_component_probe()
2121 tx->tx_hpf_work[i].tx = tx; in tx_macro_component_probe()
2122 tx->tx_hpf_work[i].decimator = i; in tx_macro_component_probe()
2123 INIT_DELAYED_WORK(&tx->tx_hpf_work[i].dwork, in tx_macro_component_probe()
2128 tx->tx_mute_dwork[i].tx = tx; in tx_macro_component_probe()
2129 tx->tx_mute_dwork[i].decimator = i; in tx_macro_component_probe()
2130 INIT_DELAYED_WORK(&tx->tx_mute_dwork[i].dwork, in tx_macro_component_probe()
2133 tx->component = comp; in tx_macro_component_probe()
2148 struct tx_macro *tx = to_tx_macro(hw); in swclk_gate_enable() local
2149 struct regmap *regmap = tx->regmap; in swclk_gate_enable()
2152 ret = clk_prepare_enable(tx->mclk); in swclk_gate_enable()
2154 dev_err(tx->dev, "failed to enable mclk\n"); in swclk_gate_enable()
2158 tx_macro_mclk_enable(tx, true); in swclk_gate_enable()
2168 struct tx_macro *tx = to_tx_macro(hw); in swclk_gate_disable() local
2169 struct regmap *regmap = tx->regmap; in swclk_gate_disable()
2174 tx_macro_mclk_enable(tx, false); in swclk_gate_disable()
2175 clk_disable_unprepare(tx->mclk); in swclk_gate_disable()
2180 struct tx_macro *tx = to_tx_macro(hw); in swclk_gate_is_enabled() local
2183 regmap_read(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL, &val); in swclk_gate_is_enabled()
2203 static int tx_macro_register_mclk_output(struct tx_macro *tx) in tx_macro_register_mclk_output() argument
2205 struct device *dev = tx->dev; in tx_macro_register_mclk_output()
2207 const char *clk_name = "lpass-tx-mclk"; in tx_macro_register_mclk_output()
2212 if (tx->npl) in tx_macro_register_mclk_output()
2213 parent_clk_name = __clk_get_name(tx->npl); in tx_macro_register_mclk_output()
2215 parent_clk_name = __clk_get_name(tx->mclk); in tx_macro_register_mclk_output()
2222 tx->hw.init = &init; in tx_macro_register_mclk_output()
2223 hw = &tx->hw; in tx_macro_register_mclk_output()
2232 .name = "TX-MACRO",
2244 struct device *dev = &pdev->dev; in tx_macro_probe()
2245 struct device_node *np = dev->of_node; in tx_macro_probe()
2246 struct tx_macro *tx; in tx_macro_probe() local
2250 tx = devm_kzalloc(dev, sizeof(*tx), GFP_KERNEL); in tx_macro_probe()
2251 if (!tx) in tx_macro_probe()
2252 return -ENOMEM; in tx_macro_probe()
2254 tx->data = device_get_match_data(dev); in tx_macro_probe()
2256 tx->macro = devm_clk_get_optional(dev, "macro"); in tx_macro_probe()
2257 if (IS_ERR(tx->macro)) in tx_macro_probe()
2258 return dev_err_probe(dev, PTR_ERR(tx->macro), "unable to get macro clock\n"); in tx_macro_probe()
2260 tx->dcodec = devm_clk_get_optional(dev, "dcodec"); in tx_macro_probe()
2261 if (IS_ERR(tx->dcodec)) in tx_macro_probe()
2262 return dev_err_probe(dev, PTR_ERR(tx->dcodec), "unable to get dcodec clock\n"); in tx_macro_probe()
2264 tx->mclk = devm_clk_get(dev, "mclk"); in tx_macro_probe()
2265 if (IS_ERR(tx->mclk)) in tx_macro_probe()
2266 return dev_err_probe(dev, PTR_ERR(tx->mclk), "unable to get mclk clock\n"); in tx_macro_probe()
2268 if (tx->data->flags & LPASS_MACRO_FLAG_HAS_NPL_CLOCK) { in tx_macro_probe()
2269 tx->npl = devm_clk_get(dev, "npl"); in tx_macro_probe()
2270 if (IS_ERR(tx->npl)) in tx_macro_probe()
2271 return dev_err_probe(dev, PTR_ERR(tx->npl), "unable to get npl clock\n"); in tx_macro_probe()
2274 tx->fsgen = devm_clk_get(dev, "fsgen"); in tx_macro_probe()
2275 if (IS_ERR(tx->fsgen)) in tx_macro_probe()
2276 return dev_err_probe(dev, PTR_ERR(tx->fsgen), "unable to get fsgen clock\n"); in tx_macro_probe()
2278 tx->pds = lpass_macro_pds_init(dev); in tx_macro_probe()
2279 if (IS_ERR(tx->pds)) in tx_macro_probe()
2280 return PTR_ERR(tx->pds); in tx_macro_probe()
2288 /* Update defaults for lpass sc7280 */ in tx_macro_probe()
2289 if (of_device_is_compatible(np, "qcom,sc7280-lpass-tx-macro")) { in tx_macro_probe()
2302 tx->regmap = devm_regmap_init_mmio(dev, base, &tx_regmap_config); in tx_macro_probe()
2303 if (IS_ERR(tx->regmap)) { in tx_macro_probe()
2304 ret = PTR_ERR(tx->regmap); in tx_macro_probe()
2308 dev_set_drvdata(dev, tx); in tx_macro_probe()
2310 tx->dev = dev; in tx_macro_probe()
2313 tx->active_decimator[TX_MACRO_AIF1_CAP] = -1; in tx_macro_probe()
2314 tx->active_decimator[TX_MACRO_AIF2_CAP] = -1; in tx_macro_probe()
2315 tx->active_decimator[TX_MACRO_AIF3_CAP] = -1; in tx_macro_probe()
2318 clk_set_rate(tx->mclk, MCLK_FREQ); in tx_macro_probe()
2319 clk_set_rate(tx->npl, MCLK_FREQ); in tx_macro_probe()
2321 ret = clk_prepare_enable(tx->macro); in tx_macro_probe()
2325 ret = clk_prepare_enable(tx->dcodec); in tx_macro_probe()
2329 ret = clk_prepare_enable(tx->mclk); in tx_macro_probe()
2333 ret = clk_prepare_enable(tx->npl); in tx_macro_probe()
2337 ret = clk_prepare_enable(tx->fsgen); in tx_macro_probe()
2343 if (tx->data->flags & LPASS_MACRO_FLAG_RESET_SWR) in tx_macro_probe()
2344 regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL, in tx_macro_probe()
2347 regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL, in tx_macro_probe()
2351 if (tx->data->flags & LPASS_MACRO_FLAG_RESET_SWR) in tx_macro_probe()
2352 regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL, in tx_macro_probe()
2367 ret = tx_macro_register_mclk_output(tx); in tx_macro_probe()
2374 clk_disable_unprepare(tx->fsgen); in tx_macro_probe()
2376 clk_disable_unprepare(tx->npl); in tx_macro_probe()
2378 clk_disable_unprepare(tx->mclk); in tx_macro_probe()
2380 clk_disable_unprepare(tx->dcodec); in tx_macro_probe()
2382 clk_disable_unprepare(tx->macro); in tx_macro_probe()
2384 lpass_macro_pds_exit(tx->pds); in tx_macro_probe()
2391 struct tx_macro *tx = dev_get_drvdata(&pdev->dev); in tx_macro_remove() local
2393 clk_disable_unprepare(tx->macro); in tx_macro_remove()
2394 clk_disable_unprepare(tx->dcodec); in tx_macro_remove()
2395 clk_disable_unprepare(tx->mclk); in tx_macro_remove()
2396 clk_disable_unprepare(tx->npl); in tx_macro_remove()
2397 clk_disable_unprepare(tx->fsgen); in tx_macro_remove()
2399 lpass_macro_pds_exit(tx->pds); in tx_macro_remove()
2404 struct tx_macro *tx = dev_get_drvdata(dev); in tx_macro_runtime_suspend() local
2406 regcache_cache_only(tx->regmap, true); in tx_macro_runtime_suspend()
2407 regcache_mark_dirty(tx->regmap); in tx_macro_runtime_suspend()
2409 clk_disable_unprepare(tx->fsgen); in tx_macro_runtime_suspend()
2410 clk_disable_unprepare(tx->npl); in tx_macro_runtime_suspend()
2411 clk_disable_unprepare(tx->mclk); in tx_macro_runtime_suspend()
2418 struct tx_macro *tx = dev_get_drvdata(dev); in tx_macro_runtime_resume() local
2421 ret = clk_prepare_enable(tx->mclk); in tx_macro_runtime_resume()
2427 ret = clk_prepare_enable(tx->npl); in tx_macro_runtime_resume()
2433 ret = clk_prepare_enable(tx->fsgen); in tx_macro_runtime_resume()
2439 regcache_cache_only(tx->regmap, false); in tx_macro_runtime_resume()
2440 regcache_sync(tx->regmap); in tx_macro_runtime_resume()
2444 clk_disable_unprepare(tx->npl); in tx_macro_runtime_resume()
2446 clk_disable_unprepare(tx->mclk); in tx_macro_runtime_resume()
2496 * The block is actually LPASS v9.4, but keep LPASS v9 match
2501 .compatible = "qcom,sc7280-lpass-tx-macro",
2504 .compatible = "qcom,sm6115-lpass-tx-macro",
2507 .compatible = "qcom,sm8250-lpass-tx-macro",
2510 .compatible = "qcom,sm8450-lpass-tx-macro",
2513 .compatible = "qcom,sm8550-lpass-tx-macro",
2516 .compatible = "qcom,sc8280xp-lpass-tx-macro",
2518 * The block is actually LPASS v9.3, but keep LPASS v9 match
2541 MODULE_DESCRIPTION("TX macro driver");