Lines Matching defs:nau8824
29 #include "nau8824.h"
38 static int nau8824_config_sysclk(struct nau8824 *nau8824,
40 static bool nau8824_is_jack_inserted(struct nau8824 *nau8824);
205 static int nau8824_sema_acquire(struct nau8824 *nau8824, long timeout)
210 ret = down_timeout(&nau8824->jd_sem, timeout);
212 dev_warn(nau8824->dev, "Acquire semaphore timeout\n");
214 ret = down_interruptible(&nau8824->jd_sem);
216 dev_warn(nau8824->dev, "Acquire semaphore fail\n");
222 static inline void nau8824_sema_release(struct nau8824 *nau8824)
224 up(&nau8824->jd_sem);
431 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
436 regmap_update_bits(nau8824->regmap, NAU8824_REG_ENABLE_LO,
440 regmap_update_bits(nau8824->regmap, NAU8824_REG_ENABLE_LO,
454 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
458 regmap_update_bits(nau8824->regmap,
463 regmap_update_bits(nau8824->regmap,
478 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
484 regmap_update_bits(nau8824->regmap,
489 regmap_update_bits(nau8824->regmap,
504 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
505 struct regmap *regmap = nau8824->regmap;
510 dev_dbg(nau8824->dev, "system clock control : POWER OFF\n");
516 if (nau8824_is_jack_inserted(nau8824)) {
517 nau8824_config_sysclk(nau8824,
520 nau8824_config_sysclk(nau8824, NAU8824_CLK_DIS, 0);
523 dev_dbg(nau8824->dev, "system clock control : POWER ON\n");
550 nau8824_config_sysclk(nau8824,
563 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
571 if ((0x1 << (8 - src)) * nau8824->fs <= DMIC_CLK)
574 dev_dbg(nau8824->dev, "dmic src %d for mclk %d\n", src, nau8824->fs * 256);
575 regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
811 static bool nau8824_is_jack_inserted(struct nau8824 *nau8824)
813 struct snd_soc_jack *jack = nau8824->jack;
816 if (nau8824->irq && jack)
838 static void nau8824_dapm_disable_pin(struct nau8824 *nau8824, const char *pin)
840 struct snd_soc_dapm_context *dapm = nau8824->dapm;
853 static void nau8824_dapm_enable_pin(struct nau8824 *nau8824, const char *pin)
855 struct snd_soc_dapm_context *dapm = nau8824->dapm;
868 static void nau8824_eject_jack(struct nau8824 *nau8824)
870 struct snd_soc_dapm_context *dapm = nau8824->dapm;
871 struct regmap *regmap = nau8824->regmap;
876 nau8824_dapm_disable_pin(nau8824, "SAR");
877 nau8824_dapm_disable_pin(nau8824, "MICBIAS");
896 nau8824_config_sysclk(nau8824, NAU8824_CLK_DIS, 0);
901 struct nau8824 *nau8824 = container_of(
902 work, struct nau8824, jdet_work);
903 struct snd_soc_dapm_context *dapm = nau8824->dapm;
904 struct regmap *regmap = nau8824->regmap;
907 nau8824_dapm_enable_pin(nau8824, "MICBIAS");
908 nau8824_dapm_enable_pin(nau8824, "SAR");
915 dev_dbg(nau8824->dev, "SAR ADC data 0x%02x\n", adc_value);
919 nau8824_dapm_disable_pin(nau8824, "SAR");
920 nau8824_dapm_disable_pin(nau8824, "MICBIAS");
926 snd_soc_jack_report(nau8824->jack, event, event_mask);
933 nau8824_sema_release(nau8824);
936 static void nau8824_setup_auto_irq(struct nau8824 *nau8824)
938 struct regmap *regmap = nau8824->regmap;
947 if (nau8824->dapm->bias_level < SND_SOC_BIAS_PREPARE)
948 nau8824_config_sysclk(nau8824, NAU8824_CLK_INTERNAL, 0);
981 struct nau8824 *nau8824 = (struct nau8824 *)data;
982 struct regmap *regmap = nau8824->regmap;
986 dev_err(nau8824->dev, "failed to read irq status\n");
989 dev_dbg(nau8824->dev, "IRQ %x\n", active_irq);
992 nau8824_eject_jack(nau8824);
998 nau8824_sema_release(nau8824);
999 cancel_work_sync(&nau8824->jdet_work);
1010 dev_dbg(nau8824->dev, "button %x pressed\n", event);
1026 cancel_work_sync(&nau8824->jdet_work);
1027 schedule_work(&nau8824->jdet_work);
1032 nau8824_setup_auto_irq(nau8824);
1041 snd_soc_jack_report(nau8824->jack, event, event_mask);
1046 static int nau8824_clock_check(struct nau8824 *nau8824,
1062 dev_err(nau8824->dev, "exceed the maximum frequency of CLK_ADC or CLK_DAC\n");
1073 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1077 nau8824_sema_acquire(nau8824, HZ);
1085 nau8824->fs = params_rate(params);
1087 regmap_read(nau8824->regmap,
1090 if (nau8824_clock_check(nau8824, substream->stream,
1091 nau8824->fs, osr))
1093 regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
1097 regmap_read(nau8824->regmap,
1100 if (nau8824_clock_check(nau8824, substream->stream,
1101 nau8824->fs, osr))
1103 regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
1109 regmap_read(nau8824->regmap,
1113 bclk_fs = snd_soc_params_to_bclk(params) / nau8824->fs;
1124 regmap_update_bits(nau8824->regmap,
1147 regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
1152 nau8824_sema_release(nau8824);
1160 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1204 nau8824_sema_acquire(nau8824, HZ);
1206 regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
1209 regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_2,
1212 nau8824_sema_release(nau8824);
1237 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1258 regmap_update_bits(nau8824->regmap, NAU8824_REG_TDM_CTRL,
1262 regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_LEFT_TIME_SLOT,
1378 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1385 dev_err(nau8824->dev, "Unsupported input clock %d\n", freq_in);
1388 dev_dbg(nau8824->dev, "mclk_src=%x ratio=%x fll_frac=%x fll_int=%x clk_ref_div=%x\n",
1392 nau8824_fll_apply(nau8824->regmap, &fll_param);
1394 regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
1400 static int nau8824_config_sysclk(struct nau8824 *nau8824,
1403 struct regmap *regmap = nau8824->regmap;
1414 nau8824_sema_acquire(nau8824, HZ);
1419 nau8824_sema_release(nau8824);
1430 nau8824_sema_acquire(nau8824, HZ);
1433 nau8824_sema_release(nau8824);
1437 nau8824_sema_acquire(nau8824, HZ);
1440 nau8824_sema_release(nau8824);
1444 nau8824_sema_acquire(nau8824, HZ);
1447 nau8824_sema_release(nau8824);
1451 dev_err(nau8824->dev, "Invalid clock id (%d)\n", clk_id);
1455 dev_dbg(nau8824->dev, "Sysclk is %dHz and clock id is %d\n", freq,
1464 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1466 return nau8824_config_sysclk(nau8824, clk_id, freq);
1469 static void nau8824_resume_setup(struct nau8824 *nau8824)
1471 nau8824_config_sysclk(nau8824, NAU8824_CLK_DIS, 0);
1472 if (nau8824->irq) {
1474 nau8824_int_status_clear_all(nau8824->regmap);
1478 regmap_update_bits(nau8824->regmap, NAU8824_REG_ENA_CTRL,
1480 regmap_update_bits(nau8824->regmap,
1484 regmap_update_bits(nau8824->regmap,
1493 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1505 nau8824_resume_setup(nau8824);
1510 regmap_update_bits(nau8824->regmap,
1512 regmap_update_bits(nau8824->regmap,
1523 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1526 nau8824->dapm = dapm;
1533 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1535 if (nau8824->irq) {
1536 disable_irq(nau8824->irq);
1539 regcache_cache_only(nau8824->regmap, true);
1540 regcache_mark_dirty(nau8824->regmap);
1547 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1549 regcache_cache_only(nau8824->regmap, false);
1550 regcache_sync(nau8824->regmap);
1551 if (nau8824->irq) {
1555 nau8824_sema_acquire(nau8824, 0);
1556 enable_irq(nau8824->irq);
1638 struct nau8824 *nau8824 = snd_soc_component_get_drvdata(component);
1641 nau8824->jack = jack;
1643 INIT_WORK(&nau8824->jdet_work, nau8824_jdet_work);
1644 ret = devm_request_threaded_irq(nau8824->dev, nau8824->irq, NULL,
1646 "nau8824", nau8824);
1648 dev_err(nau8824->dev, "Cannot request irq %d (%d)\n",
1649 nau8824->irq, ret);
1662 static void nau8824_setup_buttons(struct nau8824 *nau8824)
1664 struct regmap *regmap = nau8824->regmap;
1668 nau8824->sar_voltage << NAU8824_SAR_TRACKING_GAIN_SFT);
1671 nau8824->sar_compare_time << NAU8824_SAR_COMPARE_TIME_SFT);
1674 nau8824->sar_sampling_time << NAU8824_SAR_SAMPLING_TIME_SFT);
1678 (nau8824->sar_threshold_num - 1) << NAU8824_LEVELS_NR_SFT);
1681 nau8824->sar_hysteresis << NAU8824_HYSTERESIS_SFT);
1684 nau8824->key_debounce << NAU8824_SHORTKEY_DEBOUNCE_SFT);
1687 (nau8824->sar_threshold[0] << 8) | nau8824->sar_threshold[1]);
1689 (nau8824->sar_threshold[2] << 8) | nau8824->sar_threshold[3]);
1691 (nau8824->sar_threshold[4] << 8) | nau8824->sar_threshold[5]);
1693 (nau8824->sar_threshold[6] << 8) | nau8824->sar_threshold[7]);
1696 static void nau8824_init_regs(struct nau8824 *nau8824)
1698 struct regmap *regmap = nau8824->regmap;
1703 (nau8824->vref_impedance << NAU8824_VMID_SEL_SFT));
1708 NAU8824_MICBIAS_VOLTAGE_MASK, nau8824->micbias_voltage);
1788 nau8824->jkdet_polarity ? 0 : NAU8824_JACK_LOGIC);
1791 (nau8824->jack_eject_debounce << NAU8824_JACK_EJECT_DT_SFT));
1792 if (nau8824->sar_threshold_num)
1793 nau8824_setup_buttons(nau8824);
1796 static int nau8824_setup_irq(struct nau8824 *nau8824)
1799 regmap_update_bits(nau8824->regmap, NAU8824_REG_ENA_CTRL,
1801 regmap_update_bits(nau8824->regmap,
1803 regmap_update_bits(nau8824->regmap, NAU8824_REG_INTERRUPT_SETTING_1,
1809 static void nau8824_print_device_properties(struct nau8824 *nau8824)
1811 struct device *dev = nau8824->dev;
1814 dev_dbg(dev, "jkdet-polarity: %d\n", nau8824->jkdet_polarity);
1815 dev_dbg(dev, "micbias-voltage: %d\n", nau8824->micbias_voltage);
1816 dev_dbg(dev, "vref-impedance: %d\n", nau8824->vref_impedance);
1818 dev_dbg(dev, "sar-threshold-num: %d\n", nau8824->sar_threshold_num);
1819 for (i = 0; i < nau8824->sar_threshold_num; i++)
1821 nau8824->sar_threshold[i]);
1823 dev_dbg(dev, "sar-hysteresis: %d\n", nau8824->sar_hysteresis);
1824 dev_dbg(dev, "sar-voltage: %d\n", nau8824->sar_voltage);
1825 dev_dbg(dev, "sar-compare-time: %d\n", nau8824->sar_compare_time);
1826 dev_dbg(dev, "sar-sampling-time: %d\n", nau8824->sar_sampling_time);
1827 dev_dbg(dev, "short-key-debounce: %d\n", nau8824->key_debounce);
1829 nau8824->jack_eject_debounce);
1833 struct nau8824 *nau8824) {
1837 &nau8824->jkdet_polarity);
1839 nau8824->jkdet_polarity = 1;
1841 &nau8824->micbias_voltage);
1843 nau8824->micbias_voltage = 6;
1845 &nau8824->vref_impedance);
1847 nau8824->vref_impedance = 2;
1849 &nau8824->sar_threshold_num);
1851 nau8824->sar_threshold_num = 4;
1853 nau8824->sar_threshold, nau8824->sar_threshold_num);
1855 nau8824->sar_threshold[0] = 0x0a;
1856 nau8824->sar_threshold[1] = 0x14;
1857 nau8824->sar_threshold[2] = 0x26;
1858 nau8824->sar_threshold[3] = 0x73;
1861 &nau8824->sar_hysteresis);
1863 nau8824->sar_hysteresis = 0;
1865 &nau8824->sar_voltage);
1867 nau8824->sar_voltage = 6;
1869 &nau8824->sar_compare_time);
1871 nau8824->sar_compare_time = 1;
1873 &nau8824->sar_sampling_time);
1875 nau8824->sar_sampling_time = 1;
1877 &nau8824->key_debounce);
1879 nau8824->key_debounce = 0;
1881 &nau8824->jack_eject_debounce);
1883 nau8824->jack_eject_debounce = 1;
1944 struct nau8824 *nau8824 = dev_get_platdata(dev);
1947 if (!nau8824) {
1948 nau8824 = devm_kzalloc(dev, sizeof(*nau8824), GFP_KERNEL);
1949 if (!nau8824)
1951 ret = nau8824_read_device_properties(dev, nau8824);
1955 i2c_set_clientdata(i2c, nau8824);
1957 nau8824->regmap = devm_regmap_init_i2c(i2c, &nau8824_regmap_config);
1958 if (IS_ERR(nau8824->regmap))
1959 return PTR_ERR(nau8824->regmap);
1960 nau8824->dev = dev;
1961 nau8824->irq = i2c->irq;
1962 sema_init(&nau8824->jd_sem, 1);
1967 nau8824->jkdet_polarity = 0;
1969 nau8824_print_device_properties(nau8824);
1971 ret = regmap_read(nau8824->regmap, NAU8824_REG_I2C_DEVICE_ID, &value);
1977 nau8824_reset_chip(nau8824->regmap);
1978 nau8824_init_regs(nau8824);
1981 nau8824_setup_irq(nau8824);
1988 { "nau8824", 0 },
1995 { .compatible = "nuvoton,nau8824", },
2011 .name = "nau8824",