Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af0dddb2 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge b28f33f7 on remote branch

Change-Id: I71b8a21eee1e0c70ebbea83260128d0c8162be53
parents 348bc678 b28f33f7
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -600,6 +600,28 @@ int bolero_dmic_clk_enable(struct snd_soc_component *component,
}
EXPORT_SYMBOL(bolero_dmic_clk_enable);

bool bolero_is_va_macro_registered(struct device *dev)
{
	struct bolero_priv *priv;

	if (!dev) {
		pr_err("%s: dev is null\n", __func__);
		return false;
	}
	if (!bolero_is_valid_child_dev(dev)) {
		dev_err(dev, "%s: child device calling is not added yet\n",
			__func__);
		return false;
	}
	priv = dev_get_drvdata(dev->parent);
	if (!priv) {
		dev_err(dev, "%s: priv is null\n", __func__);
		return false;
	}
	return priv->macros_supported[VA_MACRO];
}
EXPORT_SYMBOL(bolero_is_va_macro_registered);

/**
 * bolero_register_macro - Registers macro to bolero
 *
@@ -661,7 +683,7 @@ int bolero_register_macro(struct device *dev, u16 macro_id,
	priv->num_macros_registered++;
	priv->macros_supported[macro_id] = true;

	dev_dbg(dev, "%s: register macro successful:%d\n", __func__, macro_id);
	dev_info(dev, "%s: register macro successful:%d\n", __func__, macro_id);

	if (priv->num_macros_registered == priv->num_macros) {
		ret = bolero_copy_dais_from_macro(priv);
+6 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ typedef int (*rsc_clk_cb_t)(struct device *dev, u16 event);
#if IS_ENABLED(CONFIG_SND_SOC_BOLERO)
int bolero_register_res_clk(struct device *dev, rsc_clk_cb_t cb);
void bolero_unregister_res_clk(struct device *dev);
bool bolero_is_va_macro_registered(struct device *dev);
int bolero_register_macro(struct device *dev, u16 macro_id,
			  struct macro_ops *ops);
void bolero_unregister_macro(struct device *dev, u16 macro_id);
@@ -132,6 +133,11 @@ static inline void bolero_unregister_res_clk(struct device *dev)
{
}

static bool bolero_is_va_macro_registered(struct device *dev)
{
	return false;
}

static inline int bolero_register_macro(struct device *dev,
					u16 macro_id,
					struct macro_ops *ops)
+6 −0
Original line number Diff line number Diff line
@@ -3994,6 +3994,12 @@ static int rx_macro_probe(struct platform_device *pdev)
	u32 is_used_rx_swr_gpio = 1;
	const char *is_used_rx_swr_gpio_dt = "qcom,is-used-swr-gpio";

	if (!bolero_is_va_macro_registered(&pdev->dev)) {
		dev_err(&pdev->dev,
			"%s: va-macro not registered yet, defer\n", __func__);
		return -EPROBE_DEFER;
	}

	rx_priv = devm_kzalloc(&pdev->dev, sizeof(struct rx_macro_priv),
			    GFP_KERNEL);
	if (!rx_priv)
+36 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ struct tx_macro_priv {
	int dec_mode[NUM_DECIMATORS];
	bool bcs_clk_en;
	bool hs_slow_insert_complete;
	int amic_sample_rate;
};

static bool tx_macro_get_data(struct snd_soc_component *component,
@@ -499,6 +500,29 @@ static void tx_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
				hpf_cut_off_freq << 5);
		snd_soc_component_update_bits(component, hpf_gate_reg,
						0x03, 0x02);
		/* Add delay between toggle hpf gate based on sample rate */
		switch(tx_priv->amic_sample_rate) {
		case 8000:
			usleep_range(125, 130);
			break;
		case 16000:
			usleep_range(62, 65);
			break;
		case 32000:
			usleep_range(31, 32);
			break;
		case 48000:
			usleep_range(20, 21);
			break;
		case 96000:
			usleep_range(10, 11);
			break;
		case 192000:
			usleep_range(5, 6);
			break;
		default:
			usleep_range(125, 130);
		}
		snd_soc_component_update_bits(component, hpf_gate_reg,
						0x03, 0x01);
	} else {
@@ -901,6 +925,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
	u16 dec_cfg_reg = 0;
	u16 hpf_gate_reg = 0;
	u16 tx_gain_ctl_reg = 0;
	u16 tx_fs_reg = 0;
	u8 hpf_cut_off_freq = 0;
	int hpf_delay = TX_MACRO_DMIC_HPF_DELAY_MS;
	int unmute_delay = TX_MACRO_DMIC_UNMUTE_DELAY_MS;
@@ -925,6 +950,11 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
				TX_MACRO_TX_PATH_OFFSET * decimator;
	tx_gain_ctl_reg = BOLERO_CDC_TX0_TX_VOL_CTL +
				TX_MACRO_TX_PATH_OFFSET * decimator;
	tx_fs_reg = BOLERO_CDC_TX0_TX_PATH_CTL +
				TX_MACRO_TX_PATH_OFFSET * decimator;

	tx_priv->amic_sample_rate = (snd_soc_component_read32(component,
				     tx_fs_reg) & 0x0F);

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
@@ -3161,6 +3191,12 @@ static int tx_macro_probe(struct platform_device *pdev)
	u32 is_used_tx_swr_gpio = 1;
	const char *is_used_tx_swr_gpio_dt = "qcom,is-used-swr-gpio";

	if (!bolero_is_va_macro_registered(&pdev->dev)) {
		dev_err(&pdev->dev,
			"%s: va-macro not registered yet, defer\n", __func__);
		return -EPROBE_DEFER;
	}

	tx_priv = devm_kzalloc(&pdev->dev, sizeof(struct tx_macro_priv),
			    GFP_KERNEL);
	if (!tx_priv)
+7 −0
Original line number Diff line number Diff line
@@ -3144,6 +3144,12 @@ static int wsa_macro_probe(struct platform_device *pdev)
	u32 is_used_wsa_swr_gpio = 1;
	const char *is_used_wsa_swr_gpio_dt = "qcom,is-used-swr-gpio";

	if (!bolero_is_va_macro_registered(&pdev->dev)) {
		dev_err(&pdev->dev,
			"%s: va-macro not registered yet, defer\n", __func__);
		return -EPROBE_DEFER;
	}

	wsa_priv = devm_kzalloc(&pdev->dev, sizeof(struct wsa_macro_priv),
				GFP_KERNEL);
	if (!wsa_priv)
@@ -3227,6 +3233,7 @@ static int wsa_macro_probe(struct platform_device *pdev)
	wsa_macro_init_ops(&ops, wsa_io_base);
	ops.clk_id_req = wsa_priv->default_clk_id;
	ops.default_clk_id = wsa_priv->default_clk_id;

	ret = bolero_register_macro(&pdev->dev, WSA_MACRO, &ops);
	if (ret < 0) {
		dev_err(&pdev->dev, "%s: register macro failed\n", __func__);
Loading