ASoC: codecs: wcd family: cleanups
Merge series from Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>: Set of simple cleanups from similar issues in all Qualcomm WCD93xx codecs. The first patch "ASoC: codecs: wcd-mbhc: Constify passed MBHC reg fields" is a requirement for few others, but except this they are independent.
This commit is contained in:
commit
f57d7f5289
@ -50,7 +50,7 @@ struct wcd_mbhc {
|
||||
struct wcd_mbhc_config *cfg;
|
||||
const struct wcd_mbhc_cb *mbhc_cb;
|
||||
const struct wcd_mbhc_intr *intr_ids;
|
||||
struct wcd_mbhc_field *fields;
|
||||
const struct wcd_mbhc_field *fields;
|
||||
/* Delayed work to report long button press */
|
||||
struct delayed_work mbhc_btn_dwork;
|
||||
/* Work to handle plug report */
|
||||
@ -1505,7 +1505,7 @@ EXPORT_SYMBOL(wcd_dt_parse_mbhc_data);
|
||||
struct wcd_mbhc *wcd_mbhc_init(struct snd_soc_component *component,
|
||||
const struct wcd_mbhc_cb *mbhc_cb,
|
||||
const struct wcd_mbhc_intr *intr_ids,
|
||||
struct wcd_mbhc_field *fields,
|
||||
const struct wcd_mbhc_field *fields,
|
||||
bool impedance_det_en)
|
||||
{
|
||||
struct device *dev = component->dev;
|
||||
|
@ -279,7 +279,7 @@ int wcd_mbhc_typec_report_unplug(struct wcd_mbhc *mbhc);
|
||||
struct wcd_mbhc *wcd_mbhc_init(struct snd_soc_component *component,
|
||||
const struct wcd_mbhc_cb *mbhc_cb,
|
||||
const struct wcd_mbhc_intr *mbhc_cdc_intr_ids,
|
||||
struct wcd_mbhc_field *fields,
|
||||
const struct wcd_mbhc_field *fields,
|
||||
bool impedance_det_en);
|
||||
int wcd_mbhc_get_impedance(struct wcd_mbhc *mbhc, uint32_t *zl,
|
||||
uint32_t *zr);
|
||||
@ -300,7 +300,7 @@ static inline void wcd_mbhc_stop(struct wcd_mbhc *mbhc)
|
||||
static inline struct wcd_mbhc *wcd_mbhc_init(struct snd_soc_component *component,
|
||||
const struct wcd_mbhc_cb *mbhc_cb,
|
||||
const struct wcd_mbhc_intr *mbhc_cdc_intr_ids,
|
||||
struct wcd_mbhc_field *fields,
|
||||
const struct wcd_mbhc_field *fields,
|
||||
bool impedance_det_en)
|
||||
{
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
|
@ -297,7 +297,6 @@ struct wcd9335_codec {
|
||||
struct clk *mclk;
|
||||
struct clk *native_clk;
|
||||
u32 mclk_rate;
|
||||
u8 version;
|
||||
|
||||
struct slim_device *slim;
|
||||
struct slim_device *slim_ifc_dev;
|
||||
@ -345,10 +344,6 @@ struct wcd9335_codec {
|
||||
int dmic_0_1_clk_cnt;
|
||||
int dmic_2_3_clk_cnt;
|
||||
int dmic_4_5_clk_cnt;
|
||||
int dmic_sample_rate;
|
||||
int mad_dmic_sample_rate;
|
||||
|
||||
int native_clk_users;
|
||||
};
|
||||
|
||||
struct wcd9335_irq {
|
||||
@ -397,13 +392,13 @@ struct interp_sample_rate {
|
||||
int rate_val;
|
||||
};
|
||||
|
||||
static struct interp_sample_rate int_mix_rate_val[] = {
|
||||
static const struct interp_sample_rate int_mix_rate_val[] = {
|
||||
{48000, 0x4}, /* 48K */
|
||||
{96000, 0x5}, /* 96K */
|
||||
{192000, 0x6}, /* 192K */
|
||||
};
|
||||
|
||||
static struct interp_sample_rate int_prim_rate_val[] = {
|
||||
static const struct interp_sample_rate int_prim_rate_val[] = {
|
||||
{8000, 0x0}, /* 8K */
|
||||
{16000, 0x1}, /* 16K */
|
||||
{24000, -EINVAL},/* 24K */
|
||||
@ -2847,56 +2842,15 @@ out:
|
||||
}
|
||||
|
||||
static u8 wcd9335_get_dmic_clk_val(struct snd_soc_component *component,
|
||||
u32 mclk_rate, u32 dmic_clk_rate)
|
||||
u32 mclk_rate)
|
||||
{
|
||||
u32 div_factor;
|
||||
u8 dmic_ctl_val;
|
||||
|
||||
dev_err(component->dev,
|
||||
"%s: mclk_rate = %d, dmic_sample_rate = %d\n",
|
||||
__func__, mclk_rate, dmic_clk_rate);
|
||||
|
||||
/* Default value to return in case of error */
|
||||
if (mclk_rate == WCD9335_MCLK_CLK_9P6MHZ)
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_2;
|
||||
else
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_3;
|
||||
|
||||
if (dmic_clk_rate == 0) {
|
||||
dev_err(component->dev,
|
||||
"%s: dmic_sample_rate cannot be 0\n",
|
||||
__func__);
|
||||
goto done;
|
||||
}
|
||||
|
||||
div_factor = mclk_rate / dmic_clk_rate;
|
||||
switch (div_factor) {
|
||||
case 2:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_2;
|
||||
break;
|
||||
case 3:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_3;
|
||||
break;
|
||||
case 4:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_4;
|
||||
break;
|
||||
case 6:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_6;
|
||||
break;
|
||||
case 8:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_8;
|
||||
break;
|
||||
case 16:
|
||||
dmic_ctl_val = WCD9335_DMIC_CLK_DIV_16;
|
||||
break;
|
||||
default:
|
||||
dev_err(component->dev,
|
||||
"%s: Invalid div_factor %u, clk_rate(%u), dmic_rate(%u)\n",
|
||||
__func__, div_factor, mclk_rate, dmic_clk_rate);
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
return dmic_ctl_val;
|
||||
}
|
||||
|
||||
@ -2950,11 +2904,7 @@ static int wcd9335_codec_enable_dmic(struct snd_soc_dapm_widget *w,
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_PRE_PMU:
|
||||
dmic_rate_val =
|
||||
wcd9335_get_dmic_clk_val(comp,
|
||||
wcd->mclk_rate,
|
||||
wcd->dmic_sample_rate);
|
||||
|
||||
dmic_rate_val = wcd9335_get_dmic_clk_val(comp, wcd->mclk_rate);
|
||||
(*dmic_clk_cnt)++;
|
||||
if (*dmic_clk_cnt == 1) {
|
||||
snd_soc_component_update_bits(comp, dmic_clk_reg,
|
||||
@ -2966,10 +2916,7 @@ static int wcd9335_codec_enable_dmic(struct snd_soc_dapm_widget *w,
|
||||
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
dmic_rate_val =
|
||||
wcd9335_get_dmic_clk_val(comp,
|
||||
wcd->mclk_rate,
|
||||
wcd->mad_dmic_sample_rate);
|
||||
dmic_rate_val = wcd9335_get_dmic_clk_val(comp, wcd->mclk_rate);
|
||||
(*dmic_clk_cnt)--;
|
||||
if (*dmic_clk_cnt == 0) {
|
||||
snd_soc_component_update_bits(comp, dmic_clk_reg,
|
||||
@ -4026,7 +3973,7 @@ static irqreturn_t wcd9335_slimbus_irq(int irq, void *data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct wcd9335_irq wcd9335_irqs[] = {
|
||||
static const struct wcd9335_irq wcd9335_irqs[] = {
|
||||
{
|
||||
.irq = WCD9335_IRQ_SLIMBUS,
|
||||
.handler = wcd9335_slimbus_irq,
|
||||
@ -4963,7 +4910,7 @@ static bool wcd9335_is_volatile_register(struct device *dev, unsigned int reg)
|
||||
}
|
||||
}
|
||||
|
||||
static struct regmap_config wcd9335_regmap_config = {
|
||||
static const struct regmap_config wcd9335_regmap_config = {
|
||||
.reg_bits = 16,
|
||||
.val_bits = 8,
|
||||
.cache_type = REGCACHE_MAPLE,
|
||||
@ -4987,7 +4934,7 @@ static const struct regmap_range_cfg wcd9335_ifc_ranges[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct regmap_config wcd9335_ifc_regmap_config = {
|
||||
static const struct regmap_config wcd9335_ifc_regmap_config = {
|
||||
.reg_bits = 16,
|
||||
.val_bits = 8,
|
||||
.can_multi_write = true,
|
||||
@ -5034,22 +4981,16 @@ static int wcd9335_parse_dt(struct wcd9335_codec *wcd)
|
||||
int ret;
|
||||
|
||||
wcd->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0);
|
||||
if (wcd->reset_gpio < 0) {
|
||||
dev_err(dev, "Reset GPIO missing from DT\n");
|
||||
return wcd->reset_gpio;
|
||||
}
|
||||
if (wcd->reset_gpio < 0)
|
||||
return dev_err_probe(dev, wcd->reset_gpio, "Reset GPIO missing from DT\n");
|
||||
|
||||
wcd->mclk = devm_clk_get(dev, "mclk");
|
||||
if (IS_ERR(wcd->mclk)) {
|
||||
dev_err(dev, "mclk not found\n");
|
||||
return PTR_ERR(wcd->mclk);
|
||||
}
|
||||
if (IS_ERR(wcd->mclk))
|
||||
return dev_err_probe(dev, PTR_ERR(wcd->mclk), "mclk not found\n");
|
||||
|
||||
wcd->native_clk = devm_clk_get(dev, "slimbus");
|
||||
if (IS_ERR(wcd->native_clk)) {
|
||||
dev_err(dev, "slimbus clock not found\n");
|
||||
return PTR_ERR(wcd->native_clk);
|
||||
}
|
||||
if (IS_ERR(wcd->native_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(wcd->native_clk), "slimbus clock not found\n");
|
||||
|
||||
wcd->supplies[0].supply = "vdd-buck";
|
||||
wcd->supplies[1].supply = "vdd-buck-sido";
|
||||
@ -5058,10 +4999,8 @@ static int wcd9335_parse_dt(struct wcd9335_codec *wcd)
|
||||
wcd->supplies[4].supply = "vdd-io";
|
||||
|
||||
ret = regulator_bulk_get(dev, WCD9335_MAX_SUPPLY, wcd->supplies);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to get supplies: err = %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Failed to get supplies\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -5109,7 +5048,6 @@ static int wcd9335_bring_up(struct wcd9335_codec *wcd)
|
||||
|
||||
if (byte0 == 0x1) {
|
||||
dev_info(wcd->dev, "WCD9335 CODEC version is v2.0\n");
|
||||
wcd->version = WCD9335_VERSION_2_0;
|
||||
regmap_write(rm, WCD9335_CODEC_RPM_RST_CTL, 0x01);
|
||||
regmap_write(rm, WCD9335_SIDO_SIDO_TEST_2, 0x00);
|
||||
regmap_write(rm, WCD9335_SIDO_SIDO_CCL_8, 0x6F);
|
||||
@ -5161,10 +5099,8 @@ static int wcd9335_slim_probe(struct slim_device *slim)
|
||||
|
||||
wcd->dev = dev;
|
||||
ret = wcd9335_parse_dt(wcd);
|
||||
if (ret) {
|
||||
dev_err(dev, "Error parsing DT: %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = wcd9335_power_on_reset(wcd);
|
||||
if (ret)
|
||||
|
@ -475,17 +475,12 @@ enum {
|
||||
INTn_2_INP_SEL_PROXIMITY,
|
||||
};
|
||||
|
||||
enum {
|
||||
INTERP_MAIN_PATH,
|
||||
INTERP_MIX_PATH,
|
||||
};
|
||||
|
||||
struct interp_sample_rate {
|
||||
int sample_rate;
|
||||
int rate_val;
|
||||
};
|
||||
|
||||
static struct interp_sample_rate sr_val_tbl[] = {
|
||||
static const struct interp_sample_rate sr_val_tbl[] = {
|
||||
{8000, 0x0},
|
||||
{16000, 0x1},
|
||||
{32000, 0x3},
|
||||
@ -527,7 +522,7 @@ static const struct regmap_range_cfg wcd934x_ifc_ranges[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct regmap_config wcd934x_ifc_regmap_config = {
|
||||
static const struct regmap_config wcd934x_ifc_regmap_config = {
|
||||
.reg_bits = 16,
|
||||
.val_bits = 8,
|
||||
.max_register = 0xffff,
|
||||
@ -571,10 +566,7 @@ struct wcd934x_codec {
|
||||
struct mutex micb_lock;
|
||||
u32 micb_ref[WCD934X_MAX_MICBIAS];
|
||||
u32 pullup_ref[WCD934X_MAX_MICBIAS];
|
||||
u32 micb1_mv;
|
||||
u32 micb2_mv;
|
||||
u32 micb3_mv;
|
||||
u32 micb4_mv;
|
||||
};
|
||||
|
||||
#define to_wcd934x_codec(_hw) container_of(_hw, struct wcd934x_codec, hw)
|
||||
@ -1217,7 +1209,7 @@ static const struct soc_enum cdc_if_tx13_mux_enum =
|
||||
SOC_ENUM_SINGLE(WCD934X_DATA_HUB_SB_TX13_INP_CFG, 0,
|
||||
ARRAY_SIZE(cdc_if_tx13_mux_text), cdc_if_tx13_mux_text);
|
||||
|
||||
static struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
static const struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
WCD_MBHC_FIELD(WCD_MBHC_L_DET_EN, WCD934X_ANA_MBHC_MECH, 0x80),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_GND_DET_EN, WCD934X_ANA_MBHC_MECH, 0x40),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_MECH_DETECTION_TYPE, WCD934X_ANA_MBHC_MECH, 0x20),
|
||||
@ -2208,7 +2200,8 @@ static int wcd934x_get_micbias_val(struct device *dev, const char *micbias,
|
||||
mv = WCD934X_DEF_MICBIAS_MV;
|
||||
}
|
||||
|
||||
*micb_mv = mv;
|
||||
if (micb_mv)
|
||||
*micb_mv = mv;
|
||||
|
||||
return (mv - 1000) / 50;
|
||||
}
|
||||
@ -2220,17 +2213,14 @@ static int wcd934x_init_dmic(struct snd_soc_component *comp)
|
||||
u32 def_dmic_rate, dmic_clk_drv;
|
||||
|
||||
vout_ctl_1 = wcd934x_get_micbias_val(comp->dev,
|
||||
"qcom,micbias1-microvolt",
|
||||
&wcd->micb1_mv);
|
||||
"qcom,micbias1-microvolt", NULL);
|
||||
vout_ctl_2 = wcd934x_get_micbias_val(comp->dev,
|
||||
"qcom,micbias2-microvolt",
|
||||
&wcd->micb2_mv);
|
||||
vout_ctl_3 = wcd934x_get_micbias_val(comp->dev,
|
||||
"qcom,micbias3-microvolt",
|
||||
&wcd->micb3_mv);
|
||||
"qcom,micbias3-microvolt", NULL);
|
||||
vout_ctl_4 = wcd934x_get_micbias_val(comp->dev,
|
||||
"qcom,micbias4-microvolt",
|
||||
&wcd->micb4_mv);
|
||||
"qcom,micbias4-microvolt", NULL);
|
||||
|
||||
snd_soc_component_update_bits(comp, WCD934X_ANA_MICB1,
|
||||
WCD934X_MICB_VAL_MASK, vout_ctl_1);
|
||||
@ -5866,17 +5856,13 @@ static int wcd934x_codec_parse_data(struct wcd934x_codec *wcd)
|
||||
struct device_node *ifc_dev_np;
|
||||
|
||||
ifc_dev_np = of_parse_phandle(dev->of_node, "slim-ifc-dev", 0);
|
||||
if (!ifc_dev_np) {
|
||||
dev_err(dev, "No Interface device found\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!ifc_dev_np)
|
||||
return dev_err_probe(dev, -EINVAL, "No Interface device found\n");
|
||||
|
||||
wcd->sidev = of_slim_get_device(wcd->sdev->ctrl, ifc_dev_np);
|
||||
of_node_put(ifc_dev_np);
|
||||
if (!wcd->sidev) {
|
||||
dev_err(dev, "Unable to get SLIM Interface device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!wcd->sidev)
|
||||
return dev_err_probe(dev, -EINVAL, "Unable to get SLIM Interface device\n");
|
||||
|
||||
slim_get_logical_addr(wcd->sidev);
|
||||
wcd->if_regmap = regmap_init_slimbus(wcd->sidev,
|
||||
@ -5922,10 +5908,8 @@ static int wcd934x_codec_probe(struct platform_device *pdev)
|
||||
mutex_init(&wcd->micb_lock);
|
||||
|
||||
ret = wcd934x_codec_parse_data(wcd);
|
||||
if (ret) {
|
||||
dev_err(wcd->dev, "Failed to get SLIM IRQ\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* set default rate 9P6MHz */
|
||||
regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_MCLK_CFG,
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <sound/soc.h>
|
||||
#include "wcd937x.h"
|
||||
|
||||
static struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[] = {
|
||||
static const struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD937X_HPH_L, WCD937X_HPH_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD937X_HPH_R, WCD937X_HPH_PORT, BIT(1)),
|
||||
WCD_SDW_CH(WCD937X_CLSH, WCD937X_CLSH_PORT, BIT(0)),
|
||||
@ -30,7 +30,7 @@ static struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD937X_DSD_R, WCD937X_DSD_PORT, BIT(1)),
|
||||
};
|
||||
|
||||
static struct wcd937x_sdw_ch_info wcd937x_sdw_tx_ch_info[] = {
|
||||
static const struct wcd937x_sdw_ch_info wcd937x_sdw_tx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD937X_ADC1, WCD937X_ADC_1_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD937X_ADC2, WCD937X_ADC_2_3_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD937X_ADC3, WCD937X_ADC_2_3_PORT, BIT(0)),
|
||||
|
@ -99,11 +99,9 @@ struct wcd937x_priv {
|
||||
s32 pullup_ref[WCD937X_MAX_MICBIAS];
|
||||
u32 hph_mode;
|
||||
int ear_rx_path;
|
||||
u32 chipid;
|
||||
u32 micb1_mv;
|
||||
u32 micb2_mv;
|
||||
u32 micb3_mv;
|
||||
u32 micb4_mv; /* 9375 only */
|
||||
int hphr_pdm_wd_int;
|
||||
int hphl_pdm_wd_int;
|
||||
int aux_pdm_wd_int;
|
||||
@ -113,9 +111,6 @@ struct wcd937x_priv {
|
||||
struct gpio_desc *us_euro_gpio;
|
||||
struct gpio_desc *reset_gpio;
|
||||
|
||||
int dmic_0_1_clk_cnt;
|
||||
int dmic_2_3_clk_cnt;
|
||||
int dmic_4_5_clk_cnt;
|
||||
atomic_t rx_clk_cnt;
|
||||
atomic_t ana_clk_count;
|
||||
};
|
||||
@ -133,7 +128,7 @@ struct wcd937x_mbhc_zdet_param {
|
||||
u16 btn7;
|
||||
};
|
||||
|
||||
static struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
static const struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
WCD_MBHC_FIELD(WCD_MBHC_L_DET_EN, WCD937X_ANA_MBHC_MECH, 0x80),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_GND_DET_EN, WCD937X_ANA_MBHC_MECH, 0x40),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_MECH_DETECTION_TYPE, WCD937X_ANA_MBHC_MECH, 0x20),
|
||||
@ -227,7 +222,7 @@ static const u32 wcd937x_config_regs[] = {
|
||||
WCD937X_DIGITAL_INTR_LEVEL_0,
|
||||
};
|
||||
|
||||
static struct regmap_irq_chip wcd937x_regmap_irq_chip = {
|
||||
static const struct regmap_irq_chip wcd937x_regmap_irq_chip = {
|
||||
.name = "wcd937x",
|
||||
.irqs = wcd937x_irqs,
|
||||
.num_irqs = ARRAY_SIZE(wcd937x_irqs),
|
||||
@ -1244,7 +1239,7 @@ static int wcd937x_codec_enable_micbias_pullup(struct snd_soc_dapm_widget *w,
|
||||
static int wcd937x_connect_port(struct wcd937x_sdw_priv *wcd, u8 port_idx, u8 ch_id, bool enable)
|
||||
{
|
||||
struct sdw_port_config *port_config = &wcd->port_config[port_idx - 1];
|
||||
struct wcd937x_sdw_ch_info *ch_info = &wcd->ch_info[ch_id];
|
||||
const struct wcd937x_sdw_ch_info *ch_info = &wcd->ch_info[ch_id];
|
||||
u8 port_num = ch_info->port_num;
|
||||
u8 ch_mask = ch_info->ch_mask;
|
||||
|
||||
@ -2503,7 +2498,7 @@ static irqreturn_t wcd937x_wd_handle_irq(int irq, void *data)
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct irq_chip wcd_irq_chip = {
|
||||
static const struct irq_chip wcd_irq_chip = {
|
||||
.name = "WCD937x",
|
||||
};
|
||||
|
||||
@ -2543,6 +2538,7 @@ static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
|
||||
struct device *dev = component->dev;
|
||||
unsigned long time_left;
|
||||
int i, ret;
|
||||
u32 chipid;
|
||||
|
||||
time_left = wait_for_completion_timeout(&tx_sdw_dev->initialization_complete,
|
||||
msecs_to_jiffies(5000));
|
||||
@ -2556,11 +2552,10 @@ static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
wcd937x->chipid = (snd_soc_component_read(component,
|
||||
WCD937X_DIGITAL_EFUSE_REG_0) & 0x1e) >> 1;
|
||||
if (wcd937x->chipid != CHIPID_WCD9370 &&
|
||||
wcd937x->chipid != CHIPID_WCD9375) {
|
||||
dev_err(dev, "Got unknown chip id: 0x%x\n", wcd937x->chipid);
|
||||
chipid = (snd_soc_component_read(component,
|
||||
WCD937X_DIGITAL_EFUSE_REG_0) & 0x1e) >> 1;
|
||||
if (chipid != CHIPID_WCD9370 && chipid != CHIPID_WCD9375) {
|
||||
dev_err(dev, "Got unknown chip id: 0x%x\n", chipid);
|
||||
pm_runtime_put(dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -2609,7 +2604,7 @@ static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
|
||||
disable_irq_nosync(wcd937x->hphl_pdm_wd_int);
|
||||
disable_irq_nosync(wcd937x->aux_pdm_wd_int);
|
||||
|
||||
if (wcd937x->chipid == CHIPID_WCD9375) {
|
||||
if (chipid == CHIPID_WCD9375) {
|
||||
ret = snd_soc_dapm_new_controls(dapm, wcd9375_dapm_widgets,
|
||||
ARRAY_SIZE(wcd9375_dapm_widgets));
|
||||
if (ret < 0) {
|
||||
|
@ -488,23 +488,6 @@
|
||||
#define WCD937X_MAX_SWR_PORTS 5
|
||||
#define WCD937X_MAX_SWR_CH_IDS 15
|
||||
|
||||
/* Convert from vout ctl to micbias voltage in mV */
|
||||
#define WCD_VOUT_CTL_TO_MICB(v) (1000 + (v) * 50)
|
||||
#define MAX_PORT 8
|
||||
#define MAX_CH_PER_PORT 8
|
||||
#define MAX_TX_PWR_CH 2
|
||||
#define SWR_NUM_PORTS 4
|
||||
|
||||
#define WCD937X_MAX_SLAVE_PORT_TYPES 10
|
||||
|
||||
struct codec_port_info {
|
||||
u32 slave_port_type;
|
||||
u32 master_port_type;
|
||||
u32 ch_mask;
|
||||
u32 num_ch;
|
||||
u32 ch_rate;
|
||||
};
|
||||
|
||||
struct wcd937x_sdw_ch_info {
|
||||
int port_num;
|
||||
unsigned int ch_mask;
|
||||
@ -522,10 +505,9 @@ struct wcd937x_sdw_priv {
|
||||
struct sdw_stream_config sconfig;
|
||||
struct sdw_stream_runtime *sruntime;
|
||||
struct sdw_port_config port_config[WCD937X_MAX_SWR_PORTS];
|
||||
struct wcd937x_sdw_ch_info *ch_info;
|
||||
const struct wcd937x_sdw_ch_info *ch_info;
|
||||
bool port_enable[WCD937X_MAX_SWR_CH_IDS];
|
||||
int active_ports;
|
||||
int num_ports;
|
||||
bool is_tx;
|
||||
struct wcd937x_priv *wcd937x;
|
||||
struct irq_domain *slave_irq;
|
||||
@ -570,12 +552,6 @@ int wcd937x_sdw_hw_params(struct wcd937x_sdw_priv *wcd,
|
||||
}
|
||||
#endif
|
||||
|
||||
enum {
|
||||
WCD_RX1,
|
||||
WCD_RX2,
|
||||
WCD_RX3
|
||||
};
|
||||
|
||||
enum {
|
||||
/* INTR_CTRL_INT_MASK_0 */
|
||||
WCD937X_IRQ_MBHC_BUTTON_PRESS_DET = 0,
|
||||
@ -645,9 +621,4 @@ enum wcd937x_rx_sdw_channels {
|
||||
WCD937X_DSD_L,
|
||||
};
|
||||
|
||||
enum {
|
||||
WCD937X_SDW_DIR_RX,
|
||||
WCD937X_SDW_DIR_TX,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m))
|
||||
|
||||
static struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] = {
|
||||
static const struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD938X_HPH_L, WCD938X_HPH_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD938X_HPH_R, WCD938X_HPH_PORT, BIT(1)),
|
||||
WCD_SDW_CH(WCD938X_CLSH, WCD938X_CLSH_PORT, BIT(0)),
|
||||
@ -32,7 +32,7 @@ static struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD938X_DSD_R, WCD938X_DSD_PORT, BIT(1)),
|
||||
};
|
||||
|
||||
static struct wcd938x_sdw_ch_info wcd938x_sdw_tx_ch_info[] = {
|
||||
static const struct wcd938x_sdw_ch_info wcd938x_sdw_tx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD938X_ADC1, WCD938X_ADC_1_2_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD938X_ADC2, WCD938X_ADC_1_2_PORT, BIT(1)),
|
||||
WCD_SDW_CH(WCD938X_ADC3, WCD938X_ADC_3_4_PORT, BIT(0)),
|
||||
|
@ -221,7 +221,7 @@ struct wcd938x_mbhc_zdet_param {
|
||||
u16 btn7;
|
||||
};
|
||||
|
||||
static struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
static const struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
WCD_MBHC_FIELD(WCD_MBHC_L_DET_EN, WCD938X_ANA_MBHC_MECH, 0x80),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_GND_DET_EN, WCD938X_ANA_MBHC_MECH, 0x40),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_MECH_DETECTION_TYPE, WCD938X_ANA_MBHC_MECH, 0x20),
|
||||
@ -418,7 +418,7 @@ static int wcd938x_io_init(struct wcd938x_priv *wcd938x)
|
||||
|
||||
}
|
||||
|
||||
static int wcd938x_sdw_connect_port(struct wcd938x_sdw_ch_info *ch_info,
|
||||
static int wcd938x_sdw_connect_port(const struct wcd938x_sdw_ch_info *ch_info,
|
||||
struct sdw_port_config *port_config,
|
||||
u8 enable)
|
||||
{
|
||||
@ -3027,7 +3027,7 @@ static irqreturn_t wcd938x_wd_handle_irq(int irq, void *data)
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct irq_chip wcd_irq_chip = {
|
||||
static const struct irq_chip wcd_irq_chip = {
|
||||
.name = "WCD938x",
|
||||
};
|
||||
|
||||
|
@ -642,10 +642,6 @@ enum wcd938x_rx_sdw_channels {
|
||||
WCD938X_DSD_R,
|
||||
WCD938X_DSD_L,
|
||||
};
|
||||
enum {
|
||||
WCD938X_SDW_DIR_RX,
|
||||
WCD938X_SDW_DIR_TX,
|
||||
};
|
||||
|
||||
struct wcd938x_priv;
|
||||
struct wcd938x_sdw_priv {
|
||||
@ -653,10 +649,9 @@ struct wcd938x_sdw_priv {
|
||||
struct sdw_stream_config sconfig;
|
||||
struct sdw_stream_runtime *sruntime;
|
||||
struct sdw_port_config port_config[WCD938X_MAX_SWR_PORTS];
|
||||
struct wcd938x_sdw_ch_info *ch_info;
|
||||
const struct wcd938x_sdw_ch_info *ch_info;
|
||||
bool port_enable[WCD938X_MAX_SWR_CH_IDS];
|
||||
int active_ports;
|
||||
int num_ports;
|
||||
bool is_tx;
|
||||
struct wcd938x_priv *wcd938x;
|
||||
struct irq_domain *slave_irq;
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m))
|
||||
|
||||
static struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch_info[] = {
|
||||
static const struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD939X_HPH_L, WCD939X_HPH_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD939X_HPH_R, WCD939X_HPH_PORT, BIT(1)),
|
||||
WCD_SDW_CH(WCD939X_CLSH, WCD939X_CLSH_PORT, BIT(0)),
|
||||
@ -36,7 +36,7 @@ static struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD939X_HIFI_PCM_R, WCD939X_HIFI_PCM_PORT, BIT(1)),
|
||||
};
|
||||
|
||||
static struct wcd939x_sdw_ch_info wcd939x_sdw_tx_ch_info[] = {
|
||||
static const struct wcd939x_sdw_ch_info wcd939x_sdw_tx_ch_info[] = {
|
||||
WCD_SDW_CH(WCD939X_ADC1, WCD939X_ADC_1_4_PORT, BIT(0)),
|
||||
WCD_SDW_CH(WCD939X_ADC2, WCD939X_ADC_1_4_PORT, BIT(1)),
|
||||
WCD_SDW_CH(WCD939X_ADC3, WCD939X_ADC_1_4_PORT, BIT(2)),
|
||||
|
@ -220,7 +220,7 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(ear_pa_gain, 600, -1800);
|
||||
static const DECLARE_TLV_DB_SCALE(line_gain, 0, 7, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(analog_gain, 0, 25, 1);
|
||||
|
||||
static struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
static const struct wcd_mbhc_field wcd_mbhc_fields[WCD_MBHC_REG_FUNC_MAX] = {
|
||||
WCD_MBHC_FIELD(WCD_MBHC_L_DET_EN, WCD939X_ANA_MBHC_MECH, 0x80),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_GND_DET_EN, WCD939X_ANA_MBHC_MECH, 0x40),
|
||||
WCD_MBHC_FIELD(WCD_MBHC_MECH_DETECTION_TYPE, WCD939X_ANA_MBHC_MECH, 0x20),
|
||||
@ -291,7 +291,7 @@ static const struct regmap_irq wcd939x_irqs[WCD939X_NUM_IRQS] = {
|
||||
REGMAP_IRQ_REG(WCD939X_IRQ_HPHR_SURGE_DET_INT, 2, 0x08),
|
||||
};
|
||||
|
||||
static struct regmap_irq_chip wcd939x_regmap_irq_chip = {
|
||||
static const struct regmap_irq_chip wcd939x_regmap_irq_chip = {
|
||||
.name = "wcd939x",
|
||||
.irqs = wcd939x_irqs,
|
||||
.num_irqs = ARRAY_SIZE(wcd939x_irqs),
|
||||
@ -414,7 +414,7 @@ static int wcd939x_io_init(struct snd_soc_component *component)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wcd939x_sdw_connect_port(struct wcd939x_sdw_ch_info *ch_info,
|
||||
static int wcd939x_sdw_connect_port(const struct wcd939x_sdw_ch_info *ch_info,
|
||||
struct sdw_port_config *port_config,
|
||||
u8 enable)
|
||||
{
|
||||
@ -2957,7 +2957,7 @@ static irqreturn_t wcd939x_wd_handle_irq(int irq, void *data)
|
||||
* \- regmap_irq_thread()
|
||||
* \- handle_nested_irq(i)
|
||||
*/
|
||||
static struct irq_chip wcd_irq_chip = {
|
||||
static const struct irq_chip wcd_irq_chip = {
|
||||
.name = "WCD939x",
|
||||
};
|
||||
|
||||
|
@ -903,21 +903,15 @@ enum wcd939x_rx_sdw_channels {
|
||||
WCD939X_HIFI_PCM_R,
|
||||
};
|
||||
|
||||
enum {
|
||||
WCD939X_SDW_DIR_RX,
|
||||
WCD939X_SDW_DIR_TX,
|
||||
};
|
||||
|
||||
struct wcd939x_priv;
|
||||
struct wcd939x_sdw_priv {
|
||||
struct sdw_slave *sdev;
|
||||
struct sdw_stream_config sconfig;
|
||||
struct sdw_stream_runtime *sruntime;
|
||||
struct sdw_port_config port_config[WCD939X_MAX_SWR_PORTS];
|
||||
struct wcd939x_sdw_ch_info *ch_info;
|
||||
const struct wcd939x_sdw_ch_info *ch_info;
|
||||
bool port_enable[WCD939X_MAX_SWR_CH_IDS];
|
||||
int active_ports;
|
||||
int num_ports;
|
||||
bool is_tx;
|
||||
struct wcd939x_priv *wcd939x;
|
||||
struct irq_domain *slave_irq;
|
||||
|
Loading…
x
Reference in New Issue
Block a user