Lines Matching refs:nau8821

35 static int nau8821_configure_sysclk(struct nau8821 *nau8821,
364 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in dmic_clock_control() local
372 regmap_read(nau8821->regmap, NAU8821_R03_CLK_DIVIDER, in dmic_clock_control()
376 clk_adc = (nau8821->fs * 256) >> clk_adc_src; in dmic_clock_control()
380 nau8821->dmic_clk_threshold) { in dmic_clock_control()
387 dev_dbg(nau8821->dev, in dmic_clock_control()
389 clk_adc, nau8821->dmic_clk_threshold, in dmic_clock_control()
391 regmap_update_bits(nau8821->regmap, NAU8821_R13_DMIC_CTRL, in dmic_clock_control()
403 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_left_adc_event() local
408 regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL, in nau8821_left_adc_event()
412 regmap_update_bits(nau8821->regmap, in nau8821_left_adc_event()
427 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_right_adc_event() local
432 regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL, in nau8821_right_adc_event()
436 regmap_update_bits(nau8821->regmap, in nau8821_right_adc_event()
451 struct nau8821 *nau8821 = in nau8821_pump_event() local
458 regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP, in nau8821_pump_event()
462 regmap_update_bits(nau8821->regmap, NAU8821_R80_CHARGE_PUMP, in nau8821_pump_event()
477 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_output_dac_event() local
482 regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ, in nau8821_output_dac_event()
486 regmap_update_bits(nau8821->regmap, NAU8821_R66_BIAS_ADJ, in nau8821_output_dac_event()
641 static int nau8821_clock_check(struct nau8821 *nau8821, in nau8821_clock_check() argument
657 dev_err(nau8821->dev, in nau8821_clock_check()
669 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_hw_params() local
672 nau8821->fs = params_rate(params); in nau8821_hw_params()
680 regmap_read(nau8821->regmap, NAU8821_R2C_DAC_CTRL1, &osr); in nau8821_hw_params()
682 if (nau8821_clock_check(nau8821, substream->stream, in nau8821_hw_params()
683 nau8821->fs, osr)) { in nau8821_hw_params()
686 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER, in nau8821_hw_params()
690 regmap_read(nau8821->regmap, NAU8821_R2B_ADC_RATE, &osr); in nau8821_hw_params()
692 if (nau8821_clock_check(nau8821, substream->stream, in nau8821_hw_params()
693 nau8821->fs, osr)) { in nau8821_hw_params()
696 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER, in nau8821_hw_params()
702 regmap_read(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2, &ctrl_val); in nau8821_hw_params()
705 bclk_fs = snd_soc_params_to_bclk(params) / nau8821->fs; in nau8821_hw_params()
715 regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2, in nau8821_hw_params()
737 regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1, in nau8821_hw_params()
746 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_set_dai_fmt() local
790 regmap_update_bits(nau8821->regmap, NAU8821_R1C_I2S_PCM_CTRL1, in nau8821_set_dai_fmt()
793 regmap_update_bits(nau8821->regmap, NAU8821_R1D_I2S_PCM_CTRL2, in nau8821_set_dai_fmt()
803 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_digital_mute() local
809 return regmap_update_bits(nau8821->regmap, in nau8821_digital_mute()
875 static void nau8821_eject_jack(struct nau8821 *nau8821) in nau8821_eject_jack() argument
877 struct snd_soc_dapm_context *dapm = nau8821->dapm; in nau8821_eject_jack()
878 struct regmap *regmap = nau8821->regmap; in nau8821_eject_jack()
909 nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0); in nau8821_eject_jack()
918 struct nau8821 *nau8821 = in nau8821_jdet_work() local
919 container_of(work, struct nau8821, jdet_work); in nau8821_jdet_work()
920 struct snd_soc_dapm_context *dapm = nau8821->dapm; in nau8821_jdet_work()
922 struct regmap *regmap = nau8821->regmap; in nau8821_jdet_work()
932 dev_dbg(nau8821->dev, "Headset connected\n"); in nau8821_jdet_work()
944 dev_dbg(nau8821->dev, "Headphone connected\n"); in nau8821_jdet_work()
950 snd_soc_jack_report(nau8821->jack, event, event_mask); in nau8821_jdet_work()
954 static void nau8821_setup_inserted_irq(struct nau8821 *nau8821) in nau8821_setup_inserted_irq() argument
956 struct regmap *regmap = nau8821->regmap; in nau8821_setup_inserted_irq()
959 if (nau8821->dapm->bias_level < SND_SOC_BIAS_PREPARE) in nau8821_setup_inserted_irq()
960 nau8821_configure_sysclk(nau8821, NAU8821_CLK_INTERNAL, 0); in nau8821_setup_inserted_irq()
984 struct nau8821 *nau8821 = (struct nau8821 *)data; in nau8821_interrupt() local
985 struct regmap *regmap = nau8821->regmap; in nau8821_interrupt()
989 dev_err(nau8821->dev, "failed to read irq status\n"); in nau8821_interrupt()
993 dev_dbg(nau8821->dev, "IRQ %d\n", active_irq); in nau8821_interrupt()
999 nau8821_eject_jack(nau8821); in nau8821_interrupt()
1008 cancel_work_sync(&nau8821->jdet_work); in nau8821_interrupt()
1009 schedule_work(&nau8821->jdet_work); in nau8821_interrupt()
1019 nau8821_setup_inserted_irq(nau8821); in nau8821_interrupt()
1021 dev_warn(nau8821->dev, in nau8821_interrupt()
1023 nau8821_eject_jack(nau8821); in nau8821_interrupt()
1033 snd_soc_jack_report(nau8821->jack, event, event_mask); in nau8821_interrupt()
1054 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_component_probe() local
1058 nau8821->dapm = dapm; in nau8821_component_probe()
1130 static void nau8821_fll_apply(struct nau8821 *nau8821, in nau8821_fll_apply() argument
1133 struct regmap *regmap = nau8821->regmap; in nau8821_fll_apply()
1196 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_set_fll() local
1203 dev_err(nau8821->dev, in nau8821_set_fll()
1208 dev_dbg(nau8821->dev, in nau8821_set_fll()
1213 nau8821_fll_apply(nau8821, fll_param); in nau8821_set_fll()
1215 regmap_update_bits(nau8821->regmap, NAU8821_R03_CLK_DIVIDER, in nau8821_set_fll()
1232 static int nau8821_configure_sysclk(struct nau8821 *nau8821, in nau8821_configure_sysclk() argument
1235 struct regmap *regmap = nau8821->regmap; in nau8821_configure_sysclk()
1300 dev_err(nau8821->dev, "Invalid clock id (%d)\n", clk_id); in nau8821_configure_sysclk()
1303 nau8821->clk_id = clk_id; in nau8821_configure_sysclk()
1304 dev_dbg(nau8821->dev, "Sysclk is %dHz and clock id is %d\n", freq, in nau8821_configure_sysclk()
1305 nau8821->clk_id); in nau8821_configure_sysclk()
1313 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_set_sysclk() local
1315 return nau8821_configure_sysclk(nau8821, clk_id, freq); in nau8821_set_sysclk()
1318 static int nau8821_resume_setup(struct nau8821 *nau8821) in nau8821_resume_setup() argument
1320 struct regmap *regmap = nau8821->regmap; in nau8821_resume_setup()
1323 nau8821_configure_sysclk(nau8821, NAU8821_CLK_DIS, 0); in nau8821_resume_setup()
1324 if (nau8821->irq) { in nau8821_resume_setup()
1346 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_set_bias_level() local
1347 struct regmap *regmap = nau8821->regmap; in nau8821_set_bias_level()
1360 nau8821_resume_setup(nau8821); in nau8821_set_bias_level()
1367 if (nau8821->irq) { in nau8821_set_bias_level()
1393 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_suspend() local
1395 if (nau8821->irq) in nau8821_suspend()
1396 disable_irq(nau8821->irq); in nau8821_suspend()
1400 snd_soc_dapm_sync(nau8821->dapm); in nau8821_suspend()
1401 regcache_cache_only(nau8821->regmap, true); in nau8821_suspend()
1402 regcache_mark_dirty(nau8821->regmap); in nau8821_suspend()
1409 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_resume() local
1411 regcache_cache_only(nau8821->regmap, false); in nau8821_resume()
1412 regcache_sync(nau8821->regmap); in nau8821_resume()
1413 if (nau8821->irq) in nau8821_resume()
1414 enable_irq(nau8821->irq); in nau8821_resume()
1452 struct nau8821 *nau8821 = snd_soc_component_get_drvdata(component); in nau8821_enable_jack_detect() local
1455 nau8821->jack = jack; in nau8821_enable_jack_detect()
1457 INIT_WORK(&nau8821->jdet_work, nau8821_jdet_work); in nau8821_enable_jack_detect()
1458 ret = devm_request_threaded_irq(nau8821->dev, nau8821->irq, NULL, in nau8821_enable_jack_detect()
1460 "nau8821", nau8821); in nau8821_enable_jack_detect()
1462 dev_err(nau8821->dev, "Cannot request irq %d (%d)\n", in nau8821_enable_jack_detect()
1463 nau8821->irq, ret); in nau8821_enable_jack_detect()
1477 static void nau8821_print_device_properties(struct nau8821 *nau8821) in nau8821_print_device_properties() argument
1479 struct device *dev = nau8821->dev; in nau8821_print_device_properties()
1481 dev_dbg(dev, "jkdet-enable: %d\n", nau8821->jkdet_enable); in nau8821_print_device_properties()
1482 dev_dbg(dev, "jkdet-pull-enable: %d\n", nau8821->jkdet_pull_enable); in nau8821_print_device_properties()
1483 dev_dbg(dev, "jkdet-pull-up: %d\n", nau8821->jkdet_pull_up); in nau8821_print_device_properties()
1484 dev_dbg(dev, "jkdet-polarity: %d\n", nau8821->jkdet_polarity); in nau8821_print_device_properties()
1485 dev_dbg(dev, "micbias-voltage: %d\n", nau8821->micbias_voltage); in nau8821_print_device_properties()
1486 dev_dbg(dev, "vref-impedance: %d\n", nau8821->vref_impedance); in nau8821_print_device_properties()
1488 nau8821->jack_insert_debounce); in nau8821_print_device_properties()
1490 nau8821->jack_eject_debounce); in nau8821_print_device_properties()
1492 nau8821->dmic_clk_threshold); in nau8821_print_device_properties()
1496 struct nau8821 *nau8821) in nau8821_read_device_properties() argument
1500 nau8821->jkdet_enable = device_property_read_bool(dev, in nau8821_read_device_properties()
1502 nau8821->jkdet_pull_enable = device_property_read_bool(dev, in nau8821_read_device_properties()
1504 nau8821->jkdet_pull_up = device_property_read_bool(dev, in nau8821_read_device_properties()
1507 &nau8821->jkdet_polarity); in nau8821_read_device_properties()
1509 nau8821->jkdet_polarity = 1; in nau8821_read_device_properties()
1511 &nau8821->micbias_voltage); in nau8821_read_device_properties()
1513 nau8821->micbias_voltage = 6; in nau8821_read_device_properties()
1515 &nau8821->vref_impedance); in nau8821_read_device_properties()
1517 nau8821->vref_impedance = 2; in nau8821_read_device_properties()
1519 &nau8821->jack_insert_debounce); in nau8821_read_device_properties()
1521 nau8821->jack_insert_debounce = 7; in nau8821_read_device_properties()
1523 &nau8821->jack_eject_debounce); in nau8821_read_device_properties()
1525 nau8821->jack_eject_debounce = 0; in nau8821_read_device_properties()
1527 &nau8821->dmic_clk_threshold); in nau8821_read_device_properties()
1529 nau8821->dmic_clk_threshold = 3072000; in nau8821_read_device_properties()
1534 static void nau8821_init_regs(struct nau8821 *nau8821) in nau8821_init_regs() argument
1536 struct regmap *regmap = nau8821->regmap; in nau8821_init_regs()
1550 (nau8821->vref_impedance << NAU8821_BIAS_VMID_SEL_SFT) | in nau8821_init_regs()
1581 NAU8821_MICBIAS_VOLTAGE_MASK, nau8821->micbias_voltage); in nau8821_init_regs()
1591 static int nau8821_setup_irq(struct nau8821 *nau8821) in nau8821_setup_irq() argument
1593 struct regmap *regmap = nau8821->regmap; in nau8821_setup_irq()
1598 nau8821->jkdet_enable ? 0 : NAU8821_JKDET_OUTPUT_EN); in nau8821_setup_irq()
1601 nau8821->jkdet_pull_enable ? 0 : NAU8821_JKDET_PULL_EN); in nau8821_setup_irq()
1604 nau8821->jkdet_pull_up ? NAU8821_JKDET_PULL_UP : 0); in nau8821_setup_irq()
1608 nau8821->jkdet_polarity ? 0 : NAU8821_JACK_POLARITY); in nau8821_setup_irq()
1611 nau8821->jack_insert_debounce << in nau8821_setup_irq()
1615 nau8821->jack_eject_debounce << in nau8821_setup_irq()
1632 struct nau8821 *nau8821 = dev_get_platdata(&i2c->dev); in nau8821_i2c_probe() local
1635 if (!nau8821) { in nau8821_i2c_probe()
1636 nau8821 = devm_kzalloc(dev, sizeof(*nau8821), GFP_KERNEL); in nau8821_i2c_probe()
1637 if (!nau8821) in nau8821_i2c_probe()
1639 nau8821_read_device_properties(dev, nau8821); in nau8821_i2c_probe()
1641 i2c_set_clientdata(i2c, nau8821); in nau8821_i2c_probe()
1643 nau8821->regmap = devm_regmap_init_i2c(i2c, &nau8821_regmap_config); in nau8821_i2c_probe()
1644 if (IS_ERR(nau8821->regmap)) in nau8821_i2c_probe()
1645 return PTR_ERR(nau8821->regmap); in nau8821_i2c_probe()
1647 nau8821->dev = dev; in nau8821_i2c_probe()
1648 nau8821->irq = i2c->irq; in nau8821_i2c_probe()
1649 nau8821_print_device_properties(nau8821); in nau8821_i2c_probe()
1651 nau8821_reset_chip(nau8821->regmap); in nau8821_i2c_probe()
1652 ret = regmap_read(nau8821->regmap, NAU8821_R58_I2C_DEVICE_ID, &value); in nau8821_i2c_probe()
1657 nau8821_init_regs(nau8821); in nau8821_i2c_probe()
1660 nau8821_setup_irq(nau8821); in nau8821_i2c_probe()