nau8325
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
regmap_update_bits(nau8325->regmap, NAU8325_R12_MUTE_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R12_MUTE_CTRL,
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
if (nau8325->clock_detection)
regmap_update_bits(nau8325->regmap, NAU8325_R40_CLK_DET_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R40_CLK_DET_CTRL,
static int nau8325_srate_clk_apply(struct nau8325 *nau8325,
dev_dbg(nau8325->dev, "The CLK isn't supported.");
regmap_update_bits(nau8325->regmap, NAU8325_R40_CLK_DET_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R03_CLK_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R03_CLK_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R03_CLK_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R03_CLK_CTRL,
regmap_update_bits(nau8325->regmap, NAU8325_R65_ANALOG_CONTROL_5,
regmap_update_bits(nau8325->regmap, NAU8325_R65_ANALOG_CONTROL_5,
regmap_update_bits(nau8325->regmap, NAU8325_R65_ANALOG_CONTROL_5,
static int nau8325_clksrc_n2(struct nau8325 *nau8325,
static int nau8325_clksrc_choose(struct nau8325 *nau8325,
if (!nau8325->mclk || !nau8325->fs)
*srate_table = target_srate_attribute(nau8325->fs);
ratio = nau8325_clksrc_n2(nau8325, *srate_table, nau8325->mclk, n2_sel);
mclk = nau8325->mclk << mclk_n3_mult[j].param;
ratio = nau8325_clksrc_n2(nau8325,
dev_dbg(nau8325->dev, "The MCLK %d is invalid. It can't get MCLK_SRC of 256/400/500 FS (%d)",
nau8325->mclk, nau8325->fs);
dev_dbg(nau8325->dev, "nau8325->fs=%d,range=0x%x, %s, (n1,mu,n2,dmu):(%d,%d,%d), MCLK_SRC=%uHz (%d)",
nau8325->fs, (*srate_table)->range,
(*srate_table)->mclk_src[ratio] / nau8325->fs);
static int nau8325_clock_config(struct nau8325 *nau8325)
ret = nau8325_clksrc_choose(nau8325, &srate_table,
ret = nau8325_srate_clk_apply(nau8325, srate_table,
static const struct nau8325_osr_attr *nau8325_get_osr(struct nau8325 *nau8325)
regmap_read(nau8325->regmap, NAU8325_R29_DAC_CTRL1, &osr);
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
osr = nau8325_get_osr(nau8325);
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
nau8325->fs = params_rate(params);
osr = nau8325_get_osr(nau8325);
if (!osr || !osr->osr || nau8325->fs * osr->osr > CLK_DA_AD_MAX) {
regmap_update_bits(nau8325->regmap, NAU8325_R03_CLK_CTRL,
ret = nau8325_clock_config(nau8325);
regmap_update_bits(nau8325->regmap, NAU8325_R0D_I2S_PCM_CTRL1,
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
regmap_update_bits(nau8325->regmap, NAU8325_R0D_I2S_PCM_CTRL1,
struct nau8325 *nau8325 = snd_soc_component_get_drvdata(component);
dev_dbg(nau8325->dev, "MCLK exceeds the range, MCLK:%d", freq);
nau8325->mclk = freq;
dev_dbg(nau8325->dev, "MCLK %dHz", nau8325->mclk);
static void nau8325_init_regs(struct nau8325 *nau8325)
struct regmap *regmap = nau8325->regmap;
struct device *dev = nau8325->dev;
if (nau8325->alc_enable)
if (nau8325->clock_detection)
if (nau8325->clock_det_data)
switch (nau8325->dac_vref_microvolt) {
dev_dbg(dev, "Invalid dac-vref-microvolt %d", nau8325->dac_vref_microvolt);
switch (nau8325->vref_impedance_ohms) {
dev_dbg(dev, "Invalid vref-impedance-ohms %d", nau8325->vref_impedance_ohms);
if (nau8325->alc_enable)
if (nau8325->clock_det_data)
if (nau8325->clock_detection)
static void nau8325_print_device_properties(struct nau8325 *nau8325)
struct device *dev = nau8325->dev;
dev_dbg(dev, "vref-impedance-ohms: %d", nau8325->vref_impedance_ohms);
dev_dbg(dev, "dac-vref-microvolt: %d", nau8325->dac_vref_microvolt);
dev_dbg(dev, "alc-enable: %d", nau8325->alc_enable);
dev_dbg(dev, "clock-det-data: %d", nau8325->clock_det_data);
dev_dbg(dev, "clock-detection-disable: %d", nau8325->clock_detection);
struct nau8325 *nau8325)
nau8325->alc_enable =
nau8325->clock_det_data =
nau8325->clock_detection =
&nau8325->vref_impedance_ohms);
nau8325->vref_impedance_ohms = 125000;
&nau8325->dac_vref_microvolt);
nau8325->dac_vref_microvolt = 2880000;
struct nau8325 *nau8325 = dev_get_platdata(dev);
if (!nau8325) {
nau8325 = devm_kzalloc(dev, sizeof(*nau8325), GFP_KERNEL);
if (!nau8325) {
ret = nau8325_read_device_properties(dev, nau8325);
i2c_set_clientdata(i2c, nau8325);
nau8325->regmap = devm_regmap_init_i2c(i2c, &nau8325_regmap_config);
if (IS_ERR(nau8325->regmap)) {
ret = PTR_ERR(nau8325->regmap);
nau8325->dev = dev;
nau8325_print_device_properties(nau8325);
nau8325_reset_chip(nau8325->regmap);
nau8325_software_reset(nau8325->regmap);
ret = regmap_read(nau8325->regmap, NAU8325_R02_DEVICE_ID, &value);
nau8325_init_regs(nau8325);