Loading asoc/codecs/bolero/bolero-cdc.c +6 −0 Original line number Diff line number Diff line Loading @@ -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); Loading asoc/codecs/bolero/bolero-cdc.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading asoc/codecs/bolero/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading asoc/codecs/bolero/rx-macro.c +49 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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[]; Loading Loading @@ -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; Loading Loading @@ -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"); Loading asoc/codecs/msm-cdc-supply.c +46 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
asoc/codecs/bolero/bolero-cdc.c +6 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
asoc/codecs/bolero/bolero-cdc.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
asoc/codecs/bolero/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
asoc/codecs/bolero/rx-macro.c +49 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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[]; Loading Loading @@ -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; Loading Loading @@ -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"); Loading
asoc/codecs/msm-cdc-supply.c +46 −0 Original line number Diff line number Diff line Loading @@ -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