Lines Matching +full:max +full:- +full:bit +full:- +full:rate

1 // SPDX-License-Identifier: GPL-2.0-only
22 #define DVOL_CTL_DVMUTE_ON BIT(4) /* Digital volume MUTE On */
24 #define ML26124_SAI_NO_DELAY BIT(1)
25 #define ML26124_SAI_FRAME_SYNC (BIT(5) | BIT(0)) /* For mono (Telecodec) */
27 #define ML26124_VMID BIT(1)
36 u32 rate; member
44 u32 rate; member
53 static const DECLARE_TLV_DB_SCALE(digital_tlv, -7150, 50, 0);
55 static const DECLARE_TLV_DB_SCALE(alclvl, -2250, 150, 0);
56 static const DECLARE_TLV_DB_SCALE(mingain, -1200, 600, 0);
57 static const DECLARE_TLV_DB_SCALE(maxgain, -675, 600, 0);
58 static const DECLARE_TLV_DB_SCALE(boost_vol, -1200, 75, 0);
60 static const char * const ml26124_companding[] = {"16bit PCM", "u-law",
61 "A-law"};
90 SOC_SINGLE_TLV("ALC Max Input Volume", ML26124_ALC_MAXMIN_GAIN, 4,
94 SOC_SINGLE_TLV("Playback Limiter Max Input Volume",
191 {0x00, 0x00 }, /* Sampling Rate */
209 {0x26, 0x00}, /* SP-AMP Power Management */
212 {0x2e, 0x00}, /* AC-CMP Power Management */
230 {0x60, 0x00}, /* SAI-Trans Control */
231 {0x62, 0x00}, /* SAI-Receive Control */
274 {0xba, 0x70}, /* ALC Max/Min Gain */
282 {0xc6, 0x70}, /* PL Max/Min Gain */
292 /* Get sampling rate value of sampling rate setting register (0x0) */
293 static inline int get_srate(int rate) in get_srate() argument
297 switch (rate) { in get_srate()
308 return -EINVAL; in get_srate()
313 static inline int get_coeff(int mclk, int rate) in get_coeff() argument
318 if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk) in get_coeff()
321 return -EINVAL; in get_coeff()
328 struct snd_soc_component *component = dai->component; in ml26124_hw_params()
330 int i = get_coeff(priv->mclk, params_rate(hw_params)); in ml26124_hw_params()
335 priv->substream = substream; in ml26124_hw_params()
336 priv->rate = params_rate(hw_params); in ml26124_hw_params()
338 if (priv->clk_in) { in ml26124_hw_params()
339 switch (priv->mclk / params_rate(hw_params)) { in ml26124_hw_params()
342 BIT(0) | BIT(1), 1); in ml26124_hw_params()
346 BIT(0) | BIT(1), 2); in ml26124_hw_params()
350 BIT(0) | BIT(1), 3); in ml26124_hw_params()
353 dev_err(component->dev, "Unsupported MCLKI\n"); in ml26124_hw_params()
358 BIT(0) | BIT(1), 0); in ml26124_hw_params()
377 struct snd_soc_component *component = dai->component; in ml26124_mute()
380 switch (priv->substream->stream) { in ml26124_mute()
382 snd_soc_component_update_bits(component, ML26124_REC_PLYBAK_RUN, BIT(0), 1); in ml26124_mute()
385 snd_soc_component_update_bits(component, ML26124_REC_PLYBAK_RUN, BIT(1), 2); in ml26124_mute()
390 snd_soc_component_update_bits(component, ML26124_DVOL_CTL, BIT(4), in ml26124_mute()
393 snd_soc_component_update_bits(component, ML26124_DVOL_CTL, BIT(4), in ml26124_mute()
403 struct snd_soc_component *component = codec_dai->component; in ml26124_set_dai_fmt()
413 return -EINVAL; in ml26124_set_dai_fmt()
415 snd_soc_component_update_bits(component, ML26124_SAI_MODE_SEL, BIT(0), mode); in ml26124_set_dai_fmt()
422 return -EINVAL; in ml26124_set_dai_fmt()
430 return -EINVAL; in ml26124_set_dai_fmt()
439 struct snd_soc_component *component = codec_dai->component; in ml26124_set_dai_sysclk()
444 priv->clk_in = ML26124_USE_PLLOUT; in ml26124_set_dai_sysclk()
447 priv->clk_in = ML26124_USE_MCLKI; in ml26124_set_dai_sysclk()
450 return -EINVAL; in ml26124_set_dai_sysclk()
453 priv->mclk = freq; in ml26124_set_dai_sysclk()
480 regcache_sync(priv->regmap); in ml26124_set_bias_level()
501 .name = "ml26124-hifi",
557 priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL); in ml26124_i2c_probe()
559 return -ENOMEM; in ml26124_i2c_probe()
563 priv->regmap = devm_regmap_init_i2c(i2c, &ml26124_i2c_regmap); in ml26124_i2c_probe()
564 if (IS_ERR(priv->regmap)) { in ml26124_i2c_probe()
565 ret = PTR_ERR(priv->regmap); in ml26124_i2c_probe()
566 dev_err(&i2c->dev, "regmap_init_i2c() failed: %d\n", ret); in ml26124_i2c_probe()
570 return devm_snd_soc_register_component(&i2c->dev, in ml26124_i2c_probe()