Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions sound/soc/codecs/lpass-macro-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ enum lpass_codec_version {
LPASS_CODEC_VERSION_2_7,
LPASS_CODEC_VERSION_2_8,
LPASS_CODEC_VERSION_2_9,
LPASS_CODEC_VERSION_4_0,
};

struct lpass_macro {
Expand Down Expand Up @@ -68,6 +69,8 @@ static inline const char *lpass_macro_get_codec_version_string(int version)
return "v2.7";
case LPASS_CODEC_VERSION_2_8:
return "v2.8";
case LPASS_CODEC_VERSION_4_0:
return "v4.0";
default:
break;
}
Expand Down
47 changes: 35 additions & 12 deletions sound/soc/codecs/lpass-rx-macro.c
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ static SOC_ENUM_SINGLE_DECL(rx_macro_rx5_enum, SND_SOC_NOPM, 0, rx_macro_mux_tex

static const struct snd_kcontrol_new rx_mix_tx1_mux =
SOC_DAPM_ENUM("RX MIX TX1_MUX Mux", rx_mix_tx1_mux_enum);
static const struct snd_kcontrol_new rx_mix_tx2_mux =
static const struct snd_kcontrol_new rx_mix_tx2_mux =
SOC_DAPM_ENUM("RX MIX TX2_MUX Mux", rx_mix_tx2_mux_enum);
static const struct snd_kcontrol_new rx_int0_2_mux =
SOC_DAPM_ENUM("rx_int0_2", rx_int0_2_enum);
Expand Down Expand Up @@ -1612,6 +1612,7 @@ static bool rx_is_rw_register(struct device *dev, unsigned int reg)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
case LPASS_CODEC_VERSION_4_0:
return rx_2_5_is_rw_register(dev, reg);
default:
break;
Expand Down Expand Up @@ -2043,6 +2044,9 @@ static void rx_macro_mclk_enable(struct rx_macro *rx, bool mclk_enable)
CDC_RX_CLK_MCLK2_ENABLE);
regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_RX_FS_MCLK_CNT_CLR_MASK, 0x00);

regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
0x80, 0x80);
regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_RX_FS_MCLK_CNT_EN_MASK,
CDC_RX_FS_MCLK_CNT_ENABLE);
Expand Down Expand Up @@ -3648,6 +3652,7 @@ static int rx_macro_component_probe(struct snd_soc_component *component)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
case LPASS_CODEC_VERSION_4_0:
controls = rx_macro_2_5_snd_controls;
num_controls = ARRAY_SIZE(rx_macro_2_5_snd_controls);
widgets = rx_macro_2_5_dapm_widgets;
Expand Down Expand Up @@ -3681,6 +3686,8 @@ static int swclk_gate_enable(struct clk_hw *hw)

regmap_update_bits(rx->regmap, CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
CDC_RX_SWR_CLK_EN_MASK, 1);
regmap_write(rx->regmap, CDC_RX_INTR_CTRL_PIN1_MASK0, 0x00);
regmap_write(rx->regmap, CDC_RX_INTR_CTRL_PIN2_MASK0, 0x00);

return 0;
}
Expand All @@ -3689,7 +3696,7 @@ static void swclk_gate_disable(struct clk_hw *hw)
{
struct rx_macro *rx = to_rx_macro(hw);

regmap_update_bits(rx->regmap, CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
regmap_update_bits(rx->regmap, CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
CDC_RX_SWR_CLK_EN_MASK, 0);

rx_macro_mclk_enable(rx, false);
Expand Down Expand Up @@ -3831,6 +3838,7 @@ static int rx_macro_probe(struct platform_device *pdev)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
case LPASS_CODEC_VERSION_4_0:
rx->rxn_reg_stride = 0xc0;
rx->rxn_reg_stride2 = 0x0;
def_count = ARRAY_SIZE(rx_defaults) + ARRAY_SIZE(rx_2_5_defaults);
Expand Down Expand Up @@ -3867,13 +3875,21 @@ static int rx_macro_probe(struct platform_device *pdev)
clk_set_rate(rx->mclk, MCLK_FREQ);
clk_set_rate(rx->npl, MCLK_FREQ);

ret = clk_prepare_enable(rx->macro);
if (ret)
return ret;
if (rx->macro) {
ret = clk_prepare_enable(rx->macro);
if (ret) {
dev_err(dev, "enable macro clock failed: %d\n", ret);
return ret;
}
}

ret = clk_prepare_enable(rx->dcodec);
if (ret)
goto err_dcodec;
if (rx->dcodec) {
ret = clk_prepare_enable(rx->dcodec);
if (ret) {
dev_err(dev, "enable dcodec clock failed: %d\n", ret);
goto err_dcodec;
}
}

ret = clk_prepare_enable(rx->mclk);
if (ret)
Expand Down Expand Up @@ -3924,9 +3940,11 @@ static int rx_macro_probe(struct platform_device *pdev)
err_npl:
clk_disable_unprepare(rx->mclk);
err_mclk:
clk_disable_unprepare(rx->dcodec);
if (rx->dcodec)
clk_disable_unprepare(rx->dcodec);
err_dcodec:
clk_disable_unprepare(rx->macro);
if (rx->macro)
clk_disable_unprepare(rx->macro);

return ret;
}
Expand All @@ -3938,8 +3956,10 @@ static void rx_macro_remove(struct platform_device *pdev)
clk_disable_unprepare(rx->mclk);
clk_disable_unprepare(rx->npl);
clk_disable_unprepare(rx->fsgen);
clk_disable_unprepare(rx->macro);
clk_disable_unprepare(rx->dcodec);
if (rx->macro)
clk_disable_unprepare(rx->macro);
if (rx->dcodec)
clk_disable_unprepare(rx->dcodec);
}

static const struct of_device_id rx_macro_dt_match[] = {
Expand All @@ -3961,6 +3981,9 @@ static const struct of_device_id rx_macro_dt_match[] = {
}, {
.compatible = "qcom,sc8280xp-lpass-rx-macro",
.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
}, {
.compatible = "qcom,shikra-lpass-rx-macro",
.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
},
{ }
};
Expand Down
Loading