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

Commit dde137e9 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: rouleur: Change hph and ear gain according to soc capacity"

parents 280fd01f 8203a06e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -232,6 +232,12 @@ static int bolero_cdc_update_wcd_event(void *handle, u16 event, u32 data)
				priv->component,
				BOLERO_MACRO_EVT_BCS_CLK_OFF, data);
		break;
	case WCD_BOLERO_EVT_RX_PA_GAIN_UPDATE:
		if (priv->macro_params[RX_MACRO].event_handler)
			priv->macro_params[RX_MACRO].event_handler(
				priv->component,
				BOLERO_MACRO_EVT_RX_PA_GAIN_UPDATE, data);
		break;
	default:
		dev_err(priv->dev, "%s: Invalid event %d trigger from wcd\n",
			__func__, event);
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ enum {
	BOLERO_MACRO_EVT_BCS_CLK_OFF,
	BOLERO_MACRO_EVT_SSR_GFMUX_UP,
	BOLERO_MACRO_EVT_PRE_SSR_UP,
	BOLERO_MACRO_EVT_RX_PA_GAIN_UPDATE,
};

enum {
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ enum {
	WCD_BOLERO_EVT_IMPED_FALSE,  /* for imped false */
	WCD_BOLERO_EVT_RX_COMPANDER_SOFT_RST,
	WCD_BOLERO_EVT_BCS_CLK_OFF,
	WCD_BOLERO_EVT_RX_PA_GAIN_UPDATE,
};

struct wcd_ctrl_platform_data {
+49 −0
Original line number Diff line number Diff line
@@ -77,6 +77,11 @@ static const struct snd_kcontrol_new name##_mux = \
#define RX_MACRO_EC_MIX_TX1_MASK 0x0f
#define RX_MACRO_EC_MIX_TX2_MASK 0x0f

#define RX_MACRO_GAIN_MAX_VAL 0x28
#define RX_MACRO_GAIN_VAL_UNITY 0x0
/* Define macros to increase PA Gain by half */
#define RX_MACRO_MOD_GAIN (RX_MACRO_GAIN_VAL_UNITY + 6)

#define COMP_MAX_COEFF 25

struct wcd_imped_val {
@@ -452,6 +457,8 @@ struct rx_macro_priv {
	struct rx_macro_bcl_pmic_params bcl_pmic_params;
	u16 clk_id;
	u16 default_clk_id;
	int8_t rx0_gain_val;
	int8_t rx1_gain_val;
};

static struct snd_soc_dai_driver rx_macro_dai[];
@@ -1416,6 +1423,46 @@ static int rx_macro_event_handler(struct snd_soc_component *component,
	case BOLERO_MACRO_EVT_CLK_RESET:
		bolero_rsc_clk_reset(rx_dev, RX_CORE_CLK);
		break;
	case BOLERO_MACRO_EVT_RX_PA_GAIN_UPDATE:
		rx_priv->rx0_gain_val = snd_soc_component_read32(component,
					BOLERO_CDC_RX_RX0_RX_VOL_CTL);
		rx_priv->rx1_gain_val = snd_soc_component_read32(component,
					BOLERO_CDC_RX_RX1_RX_VOL_CTL);
		if (data) {
			/* Reduce gain by half only if its greater than -6DB */
			if ((rx_priv->rx0_gain_val >= RX_MACRO_GAIN_VAL_UNITY)
			&& (rx_priv->rx0_gain_val <= RX_MACRO_GAIN_MAX_VAL))
				snd_soc_component_update_bits(component,
					BOLERO_CDC_RX_RX0_RX_VOL_CTL, 0xFF,
					(rx_priv->rx0_gain_val -
					 RX_MACRO_MOD_GAIN));
			if ((rx_priv->rx1_gain_val >= RX_MACRO_GAIN_VAL_UNITY)
			&& (rx_priv->rx1_gain_val <= RX_MACRO_GAIN_MAX_VAL))
				snd_soc_component_update_bits(component,
					BOLERO_CDC_RX_RX1_RX_VOL_CTL, 0xFF,
					(rx_priv->rx1_gain_val -
					 RX_MACRO_MOD_GAIN));
		}
		else {
			/* Reset gain value to default */
			if ((rx_priv->rx0_gain_val >=
			    (RX_MACRO_GAIN_VAL_UNITY - RX_MACRO_MOD_GAIN)) &&
			    (rx_priv->rx0_gain_val <= (RX_MACRO_GAIN_MAX_VAL -
			    RX_MACRO_MOD_GAIN)))
				snd_soc_component_update_bits(component,
					BOLERO_CDC_RX_RX0_RX_VOL_CTL, 0xFF,
					(rx_priv->rx0_gain_val +
					 RX_MACRO_MOD_GAIN));
			if ((rx_priv->rx1_gain_val >=
			    (RX_MACRO_GAIN_VAL_UNITY - RX_MACRO_MOD_GAIN)) &&
			    (rx_priv->rx1_gain_val <= (RX_MACRO_GAIN_MAX_VAL -
			    RX_MACRO_MOD_GAIN)))
				snd_soc_component_update_bits(component,
					BOLERO_CDC_RX_RX1_RX_VOL_CTL, 0xFF,
					(rx_priv->rx1_gain_val +
					 RX_MACRO_MOD_GAIN));
		}
		break;
	}
done:
	return ret;
@@ -3825,6 +3872,8 @@ static int rx_macro_init(struct snd_soc_component *component)
		return ret;
	}
	rx_priv->dev_up = true;
	rx_priv->rx0_gain_val = 0;
	rx_priv->rx1_gain_val = 0;
	snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF1 Playback");
	snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF2 Playback");
	snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF3 Playback");
+46 −0
Original line number Diff line number Diff line
@@ -172,6 +172,52 @@ bool msm_cdc_is_ondemand_supply(struct device *dev,
}
EXPORT_SYMBOL(msm_cdc_is_ondemand_supply);

/*
 * msm_cdc_set_supply_min_voltage:
 *	Set min supply voltage for particular supply
 *
 * @dev: pointer to codec device
 * @supplies: pointer to regulator bulk data
 * @cdc_vreg: pointer to platform regulator data
 * @num_supplies: number of supplies
 * @supply_name: Supply name to change voltage for
 * @vval_min: Min voltage to be set in uV
 * @override_min_vol: True if override min voltage from default
 * Return error code if unable to set voltage
 */
int msm_cdc_set_supply_min_voltage(struct device *dev,
				    struct regulator_bulk_data *supplies,
				    struct cdc_regulator *cdc_vreg,
				    int num_supplies, char *supply_name,
				    int vval_min, bool override_min_vol)
{
	int rc = 0, i;

	if ((!supply_name) || (!supplies)) {
		pr_err("%s: either dev or supplies or cdc_vreg is NULL\n",
				__func__);
		return -EINVAL;
	}
	/* input parameter validation */
	rc = msm_cdc_check_supply_param(dev, cdc_vreg, num_supplies);
	if (rc)
		return rc;
	for (i = 0; i < num_supplies; i++) {
		if (!strcmp(cdc_vreg[i].name, supply_name)) {
			if (override_min_vol)
				regulator_set_voltage(supplies[i].consumer,
					vval_min, cdc_vreg[i].max_uV);
			else
				regulator_set_voltage(supplies[i].consumer,
				    cdc_vreg[i].min_uV, cdc_vreg[i].max_uV);
			break;
		}
	}

	return rc;
}
EXPORT_SYMBOL(msm_cdc_set_supply_min_voltage);

/*
 * msm_cdc_disable_ondemand_supply:
 *	Disable codec ondemand supply
Loading