sound/soc/amd/acp/acp-mach-common.c
1304
SND_SOC_DAILINK_DEF(nau8821,
sound/soc/amd/acp/acp-mach-common.c
1454
links[i].codecs = nau8821;
sound/soc/amd/acp/acp-mach-common.c
1455
links[i].num_codecs = ARRAY_SIZE(nau8821);
sound/soc/amd/vangogh/acp5x-mach.c
280
SND_SOC_DAILINK_REG(acp5x_i2s, nau8821, platform),
sound/soc/amd/vangogh/acp5x-mach.c
376
SND_SOC_DAILINK_REG(acp5x_i2s, nau8821, platform),
sound/soc/amd/vangogh/acp5x-mach.c
41
SND_SOC_DAILINK_DEF(nau8821, DAILINK_COMP_ARRAY(COMP_CODEC(ACP5X_NAU8821_COMP_NAME,
sound/soc/codecs/nau8821.c
1052
static void nau8821_eject_jack(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1054
struct snd_soc_dapm_context *dapm = nau8821->dapm;
sound/soc/codecs/nau8821.c
1055
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1089
nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
sound/soc/codecs/nau8821.c
1094
if (nau8821->key_enable) {
sound/soc/codecs/nau8821.c
1111
struct nau8821 *nau8821 =
sound/soc/codecs/nau8821.c
1112
container_of(work, struct nau8821, jdet_work.work);
sound/soc/codecs/nau8821.c
1113
struct snd_soc_dapm_context *dapm = nau8821->dapm;
sound/soc/codecs/nau8821.c
1114
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1120
dev_dbg(nau8821->dev, "Headset connected\n");
sound/soc/codecs/nau8821.c
1131
if (nau8821->key_enable) {
sound/soc/codecs/nau8821.c
1144
dev_dbg(nau8821->dev, "Headphone connected\n");
sound/soc/codecs/nau8821.c
1151
snd_soc_jack_report(nau8821->jack, event, event_mask);
sound/soc/codecs/nau8821.c
1155
static void nau8821_setup_inserted_irq(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1157
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1169
if (snd_soc_dapm_get_bias_level(nau8821->dapm) < SND_SOC_BIAS_PREPARE)
sound/soc/codecs/nau8821.c
1170
nau8821_configure_sysclk(nau8821, NAU8821_CLK_INTERNAL, 0);
sound/soc/codecs/nau8821.c
1196
struct nau8821 *nau8821 = (struct nau8821 *)data;
sound/soc/codecs/nau8821.c
1197
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1201
dev_err(nau8821->dev, "failed to read irq status\n");
sound/soc/codecs/nau8821.c
1205
dev_dbg(nau8821->dev, "IRQ %d\n", active_irq);
sound/soc/codecs/nau8821.c
1209
cancel_delayed_work_sync(&nau8821->jdet_work);
sound/soc/codecs/nau8821.c
1212
nau8821_eject_jack(nau8821);
sound/soc/codecs/nau8821.c
1223
cancel_delayed_work_sync(&nau8821->jdet_work);
sound/soc/codecs/nau8821.c
1228
snd_soc_dapm_force_enable_pin(nau8821->dapm, "MICBIAS");
sound/soc/codecs/nau8821.c
1229
snd_soc_dapm_sync(nau8821->dapm);
sound/soc/codecs/nau8821.c
1230
schedule_delayed_work(&nau8821->jdet_work, msecs_to_jiffies(20));
sound/soc/codecs/nau8821.c
1232
nau8821_setup_inserted_irq(nau8821);
sound/soc/codecs/nau8821.c
1234
dev_warn(nau8821->dev,
sound/soc/codecs/nau8821.c
1236
nau8821_eject_jack(nau8821);
sound/soc/codecs/nau8821.c
1244
snd_soc_jack_report(nau8821->jack, event, event_mask);
sound/soc/codecs/nau8821.c
1265
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1268
nau8821->dapm = dapm;
sound/soc/codecs/nau8821.c
1275
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1277
if (nau8821->jdet_active)
sound/soc/codecs/nau8821.c
1278
cancel_delayed_work_sync(&nau8821->jdet_work);
sound/soc/codecs/nau8821.c
1348
static void nau8821_fll_apply(struct nau8821 *nau8821,
sound/soc/codecs/nau8821.c
1351
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1414
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1421
dev_err(nau8821->dev,
sound/soc/codecs/nau8821.c
1426
dev_dbg(nau8821->dev,
sound/soc/codecs/nau8821.c
1431
nau8821_fll_apply(nau8821, fll_param);
sound/soc/codecs/nau8821.c
1433
regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
sound/soc/codecs/nau8821.c
1450
static int nau8821_configure_sysclk(struct nau8821 *nau8821,
sound/soc/codecs/nau8821.c
1453
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1518
dev_err(nau8821->dev, "Invalid clock id (%d)\n", clk_id);
sound/soc/codecs/nau8821.c
1521
nau8821->clk_id = clk_id;
sound/soc/codecs/nau8821.c
1522
dev_dbg(nau8821->dev, "Sysclk is %dHz and clock id is %d\n", freq,
sound/soc/codecs/nau8821.c
1523
nau8821->clk_id);
sound/soc/codecs/nau8821.c
1531
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1533
return nau8821_configure_sysclk(nau8821, clk_id, freq);
sound/soc/codecs/nau8821.c
1536
static int nau8821_resume_setup(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1538
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1541
nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
sound/soc/codecs/nau8821.c
1542
if (nau8821->irq) {
sound/soc/codecs/nau8821.c
1564
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1565
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1576
if (snd_soc_dapm_get_bias_level(nau8821->dapm) == SND_SOC_BIAS_OFF)
sound/soc/codecs/nau8821.c
1577
nau8821_resume_setup(nau8821);
sound/soc/codecs/nau8821.c
1584
if (nau8821->irq) {
sound/soc/codecs/nau8821.c
1610
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1612
if (nau8821->irq)
sound/soc/codecs/nau8821.c
1613
disable_irq(nau8821->irq);
sound/soc/codecs/nau8821.c
1615
if (nau8821->jdet_active)
sound/soc/codecs/nau8821.c
1616
cancel_delayed_work_sync(&nau8821->jdet_work);
sound/soc/codecs/nau8821.c
1618
snd_soc_dapm_force_bias_level(nau8821->dapm, SND_SOC_BIAS_OFF);
sound/soc/codecs/nau8821.c
1620
snd_soc_dapm_disable_pin(nau8821->dapm, "MICBIAS");
sound/soc/codecs/nau8821.c
1621
snd_soc_dapm_sync(nau8821->dapm);
sound/soc/codecs/nau8821.c
1622
regcache_cache_only(nau8821->regmap, true);
sound/soc/codecs/nau8821.c
1623
regcache_mark_dirty(nau8821->regmap);
sound/soc/codecs/nau8821.c
1630
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1632
regcache_cache_only(nau8821->regmap, false);
sound/soc/codecs/nau8821.c
1633
regcache_sync(nau8821->regmap);
sound/soc/codecs/nau8821.c
1634
if (nau8821->irq)
sound/soc/codecs/nau8821.c
1635
enable_irq(nau8821->irq);
sound/soc/codecs/nau8821.c
1673
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
1676
nau8821->jack = jack;
sound/soc/codecs/nau8821.c
1678
if (nau8821->jdet_active)
sound/soc/codecs/nau8821.c
1682
INIT_DELAYED_WORK(&nau8821->jdet_work, nau8821_jdet_work);
sound/soc/codecs/nau8821.c
1683
nau8821->jdet_active = true;
sound/soc/codecs/nau8821.c
1685
ret = devm_request_threaded_irq(nau8821->dev, nau8821->irq, NULL,
sound/soc/codecs/nau8821.c
1687
"nau8821", nau8821);
sound/soc/codecs/nau8821.c
1689
dev_err(nau8821->dev, "Cannot request irq %d (%d)\n",
sound/soc/codecs/nau8821.c
1690
nau8821->irq, ret);
sound/soc/codecs/nau8821.c
1702
static void nau8821_print_device_properties(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1704
struct device *dev = nau8821->dev;
sound/soc/codecs/nau8821.c
1706
dev_dbg(dev, "jkdet-enable: %d\n", nau8821->jkdet_enable);
sound/soc/codecs/nau8821.c
1707
dev_dbg(dev, "jkdet-pull-enable: %d\n", nau8821->jkdet_pull_enable);
sound/soc/codecs/nau8821.c
1708
dev_dbg(dev, "jkdet-pull-up: %d\n", nau8821->jkdet_pull_up);
sound/soc/codecs/nau8821.c
1709
dev_dbg(dev, "jkdet-polarity: %d\n", nau8821->jkdet_polarity);
sound/soc/codecs/nau8821.c
1710
dev_dbg(dev, "micbias-voltage: %d\n", nau8821->micbias_voltage);
sound/soc/codecs/nau8821.c
1711
dev_dbg(dev, "vref-impedance: %d\n", nau8821->vref_impedance);
sound/soc/codecs/nau8821.c
1713
nau8821->jack_insert_debounce);
sound/soc/codecs/nau8821.c
1715
nau8821->jack_eject_debounce);
sound/soc/codecs/nau8821.c
1717
nau8821->dmic_clk_threshold);
sound/soc/codecs/nau8821.c
1718
dev_dbg(dev, "key_enable: %d\n", nau8821->key_enable);
sound/soc/codecs/nau8821.c
1719
dev_dbg(dev, "adc-delay-ms: %d\n", nau8821->adc_delay);
sound/soc/codecs/nau8821.c
1723
struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1727
nau8821->jkdet_enable = device_property_read_bool(dev,
sound/soc/codecs/nau8821.c
1729
nau8821->jkdet_pull_enable = device_property_read_bool(dev,
sound/soc/codecs/nau8821.c
1731
nau8821->jkdet_pull_up = device_property_read_bool(dev,
sound/soc/codecs/nau8821.c
1733
nau8821->key_enable = device_property_read_bool(dev,
sound/soc/codecs/nau8821.c
1735
nau8821->left_input_single_end = device_property_read_bool(dev,
sound/soc/codecs/nau8821.c
1738
&nau8821->jkdet_polarity);
sound/soc/codecs/nau8821.c
1740
nau8821->jkdet_polarity = 1;
sound/soc/codecs/nau8821.c
1742
&nau8821->micbias_voltage);
sound/soc/codecs/nau8821.c
1744
nau8821->micbias_voltage = 6;
sound/soc/codecs/nau8821.c
1746
&nau8821->vref_impedance);
sound/soc/codecs/nau8821.c
1748
nau8821->vref_impedance = 2;
sound/soc/codecs/nau8821.c
1750
&nau8821->jack_insert_debounce);
sound/soc/codecs/nau8821.c
1752
nau8821->jack_insert_debounce = 7;
sound/soc/codecs/nau8821.c
1754
&nau8821->jack_eject_debounce);
sound/soc/codecs/nau8821.c
1756
nau8821->jack_eject_debounce = 0;
sound/soc/codecs/nau8821.c
1758
&nau8821->dmic_clk_threshold);
sound/soc/codecs/nau8821.c
1760
nau8821->dmic_clk_threshold = 3072000;
sound/soc/codecs/nau8821.c
1762
&nau8821->dmic_slew_rate);
sound/soc/codecs/nau8821.c
1764
nau8821->dmic_slew_rate = 0;
sound/soc/codecs/nau8821.c
1766
&nau8821->adc_delay);
sound/soc/codecs/nau8821.c
1768
nau8821->adc_delay = 125;
sound/soc/codecs/nau8821.c
1769
if (nau8821->adc_delay < 125 || nau8821->adc_delay > 500)
sound/soc/codecs/nau8821.c
1775
static void nau8821_init_regs(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1777
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1791
(nau8821->vref_impedance << NAU8821_BIAS_VMID_SEL_SFT) |
sound/soc/codecs/nau8821.c
1822
NAU8821_MICBIAS_VOLTAGE_MASK, nau8821->micbias_voltage);
sound/soc/codecs/nau8821.c
1831
NAU8821_DMIC_SLEW_MASK, nau8821->dmic_slew_rate <<
sound/soc/codecs/nau8821.c
1833
if (nau8821->left_input_single_end) {
sound/soc/codecs/nau8821.c
1841
static int nau8821_setup_irq(struct nau8821 *nau8821)
sound/soc/codecs/nau8821.c
1843
struct regmap *regmap = nau8821->regmap;
sound/soc/codecs/nau8821.c
1848
nau8821->jkdet_enable ? 0 : NAU8821_JKDET_OUTPUT_EN);
sound/soc/codecs/nau8821.c
1851
nau8821->jkdet_pull_enable ? 0 : NAU8821_JKDET_PULL_EN);
sound/soc/codecs/nau8821.c
1854
nau8821->jkdet_pull_up ? NAU8821_JKDET_PULL_UP : 0);
sound/soc/codecs/nau8821.c
1858
nau8821->jkdet_polarity ? 0 : NAU8821_JACK_POLARITY);
sound/soc/codecs/nau8821.c
1861
nau8821->jack_insert_debounce <<
sound/soc/codecs/nau8821.c
1865
nau8821->jack_eject_debounce <<
sound/soc/codecs/nau8821.c
1925
struct nau8821 *nau8821 = dev_get_platdata(&i2c->dev);
sound/soc/codecs/nau8821.c
1928
if (!nau8821) {
sound/soc/codecs/nau8821.c
1929
nau8821 = devm_kzalloc(dev, sizeof(*nau8821), GFP_KERNEL);
sound/soc/codecs/nau8821.c
1930
if (!nau8821)
sound/soc/codecs/nau8821.c
1932
nau8821_read_device_properties(dev, nau8821);
sound/soc/codecs/nau8821.c
1934
i2c_set_clientdata(i2c, nau8821);
sound/soc/codecs/nau8821.c
1936
nau8821->regmap = devm_regmap_init_i2c(i2c, &nau8821_regmap_config);
sound/soc/codecs/nau8821.c
1937
if (IS_ERR(nau8821->regmap))
sound/soc/codecs/nau8821.c
1938
return PTR_ERR(nau8821->regmap);
sound/soc/codecs/nau8821.c
1940
nau8821->dev = dev;
sound/soc/codecs/nau8821.c
1941
nau8821->irq = i2c->irq;
sound/soc/codecs/nau8821.c
1946
nau8821->jkdet_polarity = 0;
sound/soc/codecs/nau8821.c
1951
nau8821_print_device_properties(nau8821);
sound/soc/codecs/nau8821.c
1953
nau8821_reset_chip(nau8821->regmap);
sound/soc/codecs/nau8821.c
1954
ret = regmap_read(nau8821->regmap, NAU8821_R58_I2C_DEVICE_ID, &value);
sound/soc/codecs/nau8821.c
1959
nau8821_init_regs(nau8821);
sound/soc/codecs/nau8821.c
1962
nau8821_setup_irq(nau8821);
sound/soc/codecs/nau8821.c
47
static int nau8821_configure_sysclk(struct nau8821 *nau8821,
sound/soc/codecs/nau8821.c
472
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
480
regmap_read(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
sound/soc/codecs/nau8821.c
484
clk_adc = (nau8821->fs * 256) >> clk_adc_src;
sound/soc/codecs/nau8821.c
488
nau8821->dmic_clk_threshold) {
sound/soc/codecs/nau8821.c
495
dev_dbg(nau8821->dev,
sound/soc/codecs/nau8821.c
497
clk_adc, nau8821->dmic_clk_threshold,
sound/soc/codecs/nau8821.c
499
regmap_update_bits(nau8821->regmap, NAU8821_R13_DMIC_CTRL,
sound/soc/codecs/nau8821.c
511
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
515
msleep(nau8821->adc_delay);
sound/soc/codecs/nau8821.c
531
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
535
msleep(nau8821->adc_delay);
sound/soc/codecs/nau8821.c
551
struct nau8821 *nau8821 =
sound/soc/codecs/nau8821.c
558
regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP,
sound/soc/codecs/nau8821.c
562
regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP,
sound/soc/codecs/nau8821.c
577
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
582
regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ,
sound/soc/codecs/nau8821.c
586
regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ,
sound/soc/codecs/nau8821.c
601
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
604
dev_dbg(nau8821->dev, "system clock control : POWER OFF\n");
sound/soc/codecs/nau8821.c
610
if (nau8821_is_jack_inserted(nau8821->regmap)) {
sound/soc/codecs/nau8821.c
611
nau8821_configure_sysclk(nau8821,
sound/soc/codecs/nau8821.c
614
nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
sound/soc/codecs/nau8821.c
624
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
626
if (!nau8821->left_input_single_end)
sound/soc/codecs/nau8821.c
631
regmap_update_bits(nau8821->regmap, NAU8821_R77_FEPGA,
sound/soc/codecs/nau8821.c
634
regmap_update_bits(nau8821->regmap, NAU8821_R76_BOOST,
sound/soc/codecs/nau8821.c
638
regmap_update_bits(nau8821->regmap, NAU8821_R77_FEPGA,
sound/soc/codecs/nau8821.c
640
regmap_update_bits(nau8821->regmap, NAU8821_R76_BOOST,
sound/soc/codecs/nau8821.c
803
nau8821_get_osr(struct nau8821 *nau8821, int stream)
sound/soc/codecs/nau8821.c
808
regmap_read(nau8821->regmap, NAU8821_R2C_DAC_CTRL1, &osr);
sound/soc/codecs/nau8821.c
817
regmap_read(nau8821->regmap, NAU8821_R2B_ADC_RATE, &osr);
sound/soc/codecs/nau8821.c
830
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
833
osr = nau8821_get_osr(nau8821, substream->stream);
sound/soc/codecs/nau8821.c
846
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
850
nau8821->fs = params_rate(params);
sound/soc/codecs/nau8821.c
857
osr = nau8821_get_osr(nau8821, substream->stream);
sound/soc/codecs/nau8821.c
860
if (nau8821->fs * osr->osr > CLK_DA_AD_MAX)
sound/soc/codecs/nau8821.c
863
regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
sound/soc/codecs/nau8821.c
867
regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
sound/soc/codecs/nau8821.c
872
regmap_read(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2, &ctrl_val);
sound/soc/codecs/nau8821.c
875
bclk_fs = snd_soc_params_to_bclk(params) / nau8821->fs;
sound/soc/codecs/nau8821.c
886
regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2,
sound/soc/codecs/nau8821.c
908
regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1,
sound/soc/codecs/nau8821.c
917
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
961
regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1,
sound/soc/codecs/nau8821.c
964
regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2,
sound/soc/codecs/nau8821.c
974
struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/nau8821.c
980
return regmap_update_bits(nau8821->regmap,