Lines Matching defs:nau8821

3 // nau8821.c -- Nuvoton NAU88L21 audio codec driver
27 #include "nau8821.h"
45 static int nau8821_configure_sysclk(struct nau8821 *nau8821,
471 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
477 * less than nau8821->dmic_clk_threshold.
479 regmap_read(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
483 clk_adc = (nau8821->fs * 256) >> clk_adc_src;
487 nau8821->dmic_clk_threshold) {
494 dev_dbg(nau8821->dev,
496 clk_adc, nau8821->dmic_clk_threshold,
498 regmap_update_bits(nau8821->regmap, NAU8821_R13_DMIC_CTRL,
510 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
515 regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
519 regmap_update_bits(nau8821->regmap,
534 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
539 regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
543 regmap_update_bits(nau8821->regmap,
558 struct nau8821 *nau8821 =
565 regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP,
569 regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP,
584 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
589 regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ,
593 regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ,
608 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
611 dev_dbg(nau8821->dev, "system clock control : POWER OFF\n");
617 if (nau8821_is_jack_inserted(nau8821->regmap)) {
618 nau8821_configure_sysclk(nau8821,
621 nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
631 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
633 if (!nau8821->left_input_single_end)
638 regmap_update_bits(nau8821->regmap, NAU8821_R77_FEPGA,
641 regmap_update_bits(nau8821->regmap, NAU8821_R76_BOOST,
645 regmap_update_bits(nau8821->regmap, NAU8821_R77_FEPGA,
647 regmap_update_bits(nau8821->regmap, NAU8821_R76_BOOST,
810 nau8821_get_osr(struct nau8821 *nau8821, int stream)
815 regmap_read(nau8821->regmap, NAU8821_R2C_DAC_CTRL1, &osr);
821 regmap_read(nau8821->regmap, NAU8821_R2B_ADC_RATE, &osr);
833 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
836 osr = nau8821_get_osr(nau8821, substream->stream);
849 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
853 nau8821->fs = params_rate(params);
860 osr = nau8821_get_osr(nau8821, substream->stream);
863 if (nau8821->fs * osr->osr > CLK_DA_AD_MAX)
866 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
870 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
875 regmap_read(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2, &ctrl_val);
878 bclk_fs = snd_soc_params_to_bclk(params) / nau8821->fs;
888 regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2,
910 regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1,
919 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
963 regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1,
966 regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2,
976 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
982 return regmap_update_bits(nau8821->regmap,
1049 static void nau8821_eject_jack(struct nau8821 *nau8821)
1051 struct snd_soc_dapm_context *dapm = nau8821->dapm;
1052 struct regmap *regmap = nau8821->regmap;
1083 nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
1088 if (nau8821->key_enable) {
1106 struct nau8821 *nau8821 =
1107 container_of(work, struct nau8821, jdet_work);
1108 struct snd_soc_dapm_context *dapm = nau8821->dapm;
1110 struct regmap *regmap = nau8821->regmap;
1120 dev_dbg(nau8821->dev, "Headset connected\n");
1131 if (nau8821->key_enable) {
1141 dev_dbg(nau8821->dev, "Headphone connected\n");
1147 snd_soc_jack_report(nau8821->jack, event, event_mask);
1151 static void nau8821_setup_inserted_irq(struct nau8821 *nau8821)
1153 struct regmap *regmap = nau8821->regmap;
1156 if (nau8821->dapm->bias_level < SND_SOC_BIAS_PREPARE)
1157 nau8821_configure_sysclk(nau8821, NAU8821_CLK_INTERNAL, 0);
1181 struct nau8821 *nau8821 = (struct nau8821 *)data;
1182 struct regmap *regmap = nau8821->regmap;
1186 dev_err(nau8821->dev, "failed to read irq status\n");
1190 dev_dbg(nau8821->dev, "IRQ %d\n", active_irq);
1196 nau8821_eject_jack(nau8821);
1212 cancel_work_sync(&nau8821->jdet_work);
1213 schedule_work(&nau8821->jdet_work);
1223 nau8821_setup_inserted_irq(nau8821);
1225 dev_warn(nau8821->dev,
1227 nau8821_eject_jack(nau8821);
1237 snd_soc_jack_report(nau8821->jack, event, event_mask);
1258 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1262 nau8821->dapm = dapm;
1334 static void nau8821_fll_apply(struct nau8821 *nau8821,
1337 struct regmap *regmap = nau8821->regmap;
1385 * nau8821_set_fll - FLL configuration of nau8821
1400 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1407 dev_err(nau8821->dev,
1412 dev_dbg(nau8821->dev,
1417 nau8821_fll_apply(nau8821, fll_param);
1419 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER,
1436 static int nau8821_configure_sysclk(struct nau8821 *nau8821,
1439 struct regmap *regmap = nau8821->regmap;
1504 dev_err(nau8821->dev, "Invalid clock id (%d)\n", clk_id);
1507 nau8821->clk_id = clk_id;
1508 dev_dbg(nau8821->dev, "Sysclk is %dHz and clock id is %d\n", freq,
1509 nau8821->clk_id);
1517 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1519 return nau8821_configure_sysclk(nau8821, clk_id, freq);
1522 static int nau8821_resume_setup(struct nau8821 *nau8821)
1524 struct regmap *regmap = nau8821->regmap;
1527 nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0);
1528 if (nau8821->irq) {
1550 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1551 struct regmap *regmap = nau8821->regmap;
1564 nau8821_resume_setup(nau8821);
1571 if (nau8821->irq) {
1597 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1599 if (nau8821->irq)
1600 disable_irq(nau8821->irq);
1604 snd_soc_dapm_sync(nau8821->dapm);
1605 regcache_cache_only(nau8821->regmap, true);
1606 regcache_mark_dirty(nau8821->regmap);
1613 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1615 regcache_cache_only(nau8821->regmap, false);
1616 regcache_sync(nau8821->regmap);
1617 if (nau8821->irq)
1618 enable_irq(nau8821->irq);
1655 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component);
1658 nau8821->jack = jack;
1660 INIT_WORK(&nau8821->jdet_work, nau8821_jdet_work);
1661 ret = devm_request_threaded_irq(nau8821->dev, nau8821->irq, NULL,
1663 "nau8821", nau8821);
1665 dev_err(nau8821->dev, "Cannot request irq %d (%d)\n",
1666 nau8821->irq, ret);
1680 static void nau8821_print_device_properties(struct nau8821 *nau8821)
1682 struct device *dev = nau8821->dev;
1684 dev_dbg(dev, "jkdet-enable: %d\n", nau8821->jkdet_enable);
1685 dev_dbg(dev, "jkdet-pull-enable: %d\n", nau8821->jkdet_pull_enable);
1686 dev_dbg(dev, "jkdet-pull-up: %d\n", nau8821->jkdet_pull_up);
1687 dev_dbg(dev, "jkdet-polarity: %d\n", nau8821->jkdet_polarity);
1688 dev_dbg(dev, "micbias-voltage: %d\n", nau8821->micbias_voltage);
1689 dev_dbg(dev, "vref-impedance: %d\n", nau8821->vref_impedance);
1691 nau8821->jack_insert_debounce);
1693 nau8821->jack_eject_debounce);
1695 nau8821->dmic_clk_threshold);
1696 dev_dbg(dev, "key_enable: %d\n", nau8821->key_enable);
1700 struct nau8821 *nau8821)
1704 nau8821->jkdet_enable = device_property_read_bool(dev,
1706 nau8821->jkdet_pull_enable = device_property_read_bool(dev,
1708 nau8821->jkdet_pull_up = device_property_read_bool(dev,
1710 nau8821->key_enable = device_property_read_bool(dev,
1712 nau8821->left_input_single_end = device_property_read_bool(dev,
1715 &nau8821->jkdet_polarity);
1717 nau8821->jkdet_polarity = 1;
1719 &nau8821->micbias_voltage);
1721 nau8821->micbias_voltage = 6;
1723 &nau8821->vref_impedance);
1725 nau8821->vref_impedance = 2;
1727 &nau8821->jack_insert_debounce);
1729 nau8821->jack_insert_debounce = 7;
1731 &nau8821->jack_eject_debounce);
1733 nau8821->jack_eject_debounce = 0;
1735 &nau8821->dmic_clk_threshold);
1737 nau8821->dmic_clk_threshold = 3072000;
1742 static void nau8821_init_regs(struct nau8821 *nau8821)
1744 struct regmap *regmap = nau8821->regmap;
1758 (nau8821->vref_impedance << NAU8821_BIAS_VMID_SEL_SFT) |
1789 NAU8821_MICBIAS_VOLTAGE_MASK, nau8821->micbias_voltage);
1797 if (nau8821->left_input_single_end) {
1805 static int nau8821_setup_irq(struct nau8821 *nau8821)
1807 struct regmap *regmap = nau8821->regmap;
1812 nau8821->jkdet_enable ? 0 : NAU8821_JKDET_OUTPUT_EN);
1815 nau8821->jkdet_pull_enable ? 0 : NAU8821_JKDET_PULL_EN);
1818 nau8821->jkdet_pull_up ? NAU8821_JKDET_PULL_UP : 0);
1822 nau8821->jkdet_polarity ? 0 : NAU8821_JACK_POLARITY);
1825 nau8821->jack_insert_debounce <<
1829 nau8821->jack_eject_debounce <<
1873 struct nau8821 *nau8821 = dev_get_platdata(&i2c->dev);
1876 if (!nau8821) {
1877 nau8821 = devm_kzalloc(dev, sizeof(*nau8821), GFP_KERNEL);
1878 if (!nau8821)
1880 nau8821_read_device_properties(dev, nau8821);
1882 i2c_set_clientdata(i2c, nau8821);
1884 nau8821->regmap = devm_regmap_init_i2c(i2c, &nau8821_regmap_config);
1885 if (IS_ERR(nau8821->regmap))
1886 return PTR_ERR(nau8821->regmap);
1888 nau8821->dev = dev;
1889 nau8821->irq = i2c->irq;
1894 nau8821->jkdet_polarity = 0;
1896 nau8821_print_device_properties(nau8821);
1898 nau8821_reset_chip(nau8821->regmap);
1899 ret = regmap_read(nau8821->regmap, NAU8821_R58_I2C_DEVICE_ID, &value);
1904 nau8821_init_regs(nau8821);
1907 nau8821_setup_irq(nau8821);
1916 { "nau8821", 0 },
1923 { .compatible = "nuvoton,nau8821", },
1939 .name = "nau8821",
1948 MODULE_DESCRIPTION("ASoC nau8821 driver");