Lines Matching refs:nau8825

403 	struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec);  in nau8825_hw_params()  local
423 regmap_update_bits(nau8825->regmap, NAU8825_REG_I2S_PCM_CTRL1, in nau8825_hw_params()
432 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_set_dai_fmt() local
476 regmap_update_bits(nau8825->regmap, NAU8825_REG_I2S_PCM_CTRL1, in nau8825_set_dai_fmt()
480 regmap_update_bits(nau8825->regmap, NAU8825_REG_I2S_PCM_CTRL2, in nau8825_set_dai_fmt()
527 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_enable_jack_detect() local
528 struct regmap *regmap = nau8825->regmap; in nau8825_enable_jack_detect()
530 nau8825->jack = jack; in nau8825_enable_jack_detect()
567 static void nau8825_eject_jack(struct nau8825 *nau8825) in nau8825_eject_jack() argument
569 struct snd_soc_dapm_context *dapm = nau8825->dapm; in nau8825_eject_jack()
570 struct regmap *regmap = nau8825->regmap; in nau8825_eject_jack()
604 static int nau8825_jack_insert(struct nau8825 *nau8825) in nau8825_jack_insert() argument
606 struct regmap *regmap = nau8825->regmap; in nau8825_jack_insert()
607 struct snd_soc_dapm_context *dapm = nau8825->dapm; in nau8825_jack_insert()
620 dev_dbg(nau8825->dev, "OMTP (micgnd1) mic connected\n"); in nau8825_jack_insert()
641 dev_dbg(nau8825->dev, "CTIA (micgnd2) mic connected\n"); in nau8825_jack_insert()
675 struct nau8825 *nau8825 = (struct nau8825 *)data; in nau8825_interrupt() local
676 struct regmap *regmap = nau8825->regmap; in nau8825_interrupt()
684 nau8825_eject_jack(nau8825); in nau8825_interrupt()
696 nau8825->button_pressed = nau8825_button_decode( in nau8825_interrupt()
699 event |= nau8825->button_pressed; in nau8825_interrupt()
707 event |= nau8825_jack_insert(nau8825); in nau8825_interrupt()
709 dev_warn(nau8825->dev, "Headset completion IRQ fired but no headset connected\n"); in nau8825_interrupt()
710 nau8825_eject_jack(nau8825); in nau8825_interrupt()
723 snd_soc_jack_report(nau8825->jack, event, event_mask); in nau8825_interrupt()
728 static void nau8825_setup_buttons(struct nau8825 *nau8825) in nau8825_setup_buttons() argument
730 struct regmap *regmap = nau8825->regmap; in nau8825_setup_buttons()
734 nau8825->sar_voltage << NAU8825_SAR_TRACKING_GAIN_SFT); in nau8825_setup_buttons()
737 nau8825->sar_compare_time << NAU8825_SAR_COMPARE_TIME_SFT); in nau8825_setup_buttons()
740 nau8825->sar_sampling_time << NAU8825_SAR_SAMPLING_TIME_SFT); in nau8825_setup_buttons()
744 (nau8825->sar_threshold_num - 1) << NAU8825_KEYDET_LEVELS_NR_SFT); in nau8825_setup_buttons()
747 nau8825->sar_hysteresis << NAU8825_KEYDET_HYSTERESIS_SFT); in nau8825_setup_buttons()
750 nau8825->key_debounce << NAU8825_KEYDET_SHORTKEY_DEBOUNCE_SFT); in nau8825_setup_buttons()
753 (nau8825->sar_threshold[0] << 8) | nau8825->sar_threshold[1]); in nau8825_setup_buttons()
755 (nau8825->sar_threshold[2] << 8) | nau8825->sar_threshold[3]); in nau8825_setup_buttons()
757 (nau8825->sar_threshold[4] << 8) | nau8825->sar_threshold[5]); in nau8825_setup_buttons()
759 (nau8825->sar_threshold[6] << 8) | nau8825->sar_threshold[7]); in nau8825_setup_buttons()
767 static void nau8825_init_regs(struct nau8825 *nau8825) in nau8825_init_regs() argument
769 struct regmap *regmap = nau8825->regmap; in nau8825_init_regs()
772 regmap_update_bits(nau8825->regmap, NAU8825_REG_BIAS_ADJ, in nau8825_init_regs()
774 regmap_update_bits(nau8825->regmap, NAU8825_REG_BOOST, in nau8825_init_regs()
780 nau8825->vref_impedance << NAU8825_BIAS_VMID_SEL_SFT); in nau8825_init_regs()
790 nau8825->jkdet_enable ? 0 : NAU8825_JKDET_OUTPUT_EN); in nau8825_init_regs()
793 nau8825->jkdet_pull_enable ? 0 : NAU8825_JKDET_PULL_EN); in nau8825_init_regs()
796 nau8825->jkdet_pull_up ? NAU8825_JKDET_PULL_UP : 0); in nau8825_init_regs()
800 nau8825->jkdet_polarity ? 0 : NAU8825_JACK_POLARITY); in nau8825_init_regs()
804 nau8825->jack_insert_debounce << NAU8825_JACK_INSERT_DEBOUNCE_SFT); in nau8825_init_regs()
807 nau8825->jack_eject_debounce << NAU8825_JACK_EJECT_DEBOUNCE_SFT); in nau8825_init_regs()
813 NAU8825_MICBIAS_VOLTAGE_MASK, nau8825->micbias_voltage); in nau8825_init_regs()
815 if (nau8825->sar_threshold_num) in nau8825_init_regs()
816 nau8825_setup_buttons(nau8825); in nau8825_init_regs()
843 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_codec_probe() local
846 nau8825->dapm = dapm; in nau8825_codec_probe()
858 regmap_write(nau8825->regmap, NAU8825_REG_INTERRUPT_DIS_CTRL, 0); in nau8825_codec_probe()
859 nau8825_restart_jack_detection(nau8825->regmap); in nau8825_codec_probe()
925 static void nau8825_fll_apply(struct nau8825 *nau8825, in nau8825_fll_apply() argument
928 regmap_update_bits(nau8825->regmap, NAU8825_REG_CLK_DIVIDER, in nau8825_fll_apply()
930 regmap_update_bits(nau8825->regmap, NAU8825_REG_FLL1, in nau8825_fll_apply()
933 regmap_write(nau8825->regmap, NAU8825_REG_FLL2, fll_param->fll_frac); in nau8825_fll_apply()
935 regmap_update_bits(nau8825->regmap, NAU8825_REG_FLL3, in nau8825_fll_apply()
938 regmap_update_bits(nau8825->regmap, NAU8825_REG_FLL4, in nau8825_fll_apply()
941 regmap_update_bits(nau8825->regmap, NAU8825_REG_FLL5, in nau8825_fll_apply()
944 regmap_update_bits(nau8825->regmap, NAU8825_REG_FLL6, in nau8825_fll_apply()
952 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_set_pll() local
966 nau8825_fll_apply(nau8825, &fll_param); in nau8825_set_pll()
968 regmap_update_bits(nau8825->regmap, NAU8825_REG_CLK_DIVIDER, in nau8825_set_pll()
973 static int nau8825_configure_sysclk(struct nau8825 *nau8825, int clk_id, in nau8825_configure_sysclk() argument
976 struct regmap *regmap = nau8825->regmap; in nau8825_configure_sysclk()
986 if (!nau8825->mclk) in nau8825_configure_sysclk()
989 if (!nau8825->mclk_freq) { in nau8825_configure_sysclk()
990 ret = clk_prepare_enable(nau8825->mclk); in nau8825_configure_sysclk()
992 dev_err(nau8825->dev, "Unable to prepare codec mclk\n"); in nau8825_configure_sysclk()
997 if (nau8825->mclk_freq != freq) { in nau8825_configure_sysclk()
998 nau8825->mclk_freq = freq; in nau8825_configure_sysclk()
1000 freq = clk_round_rate(nau8825->mclk, freq); in nau8825_configure_sysclk()
1001 ret = clk_set_rate(nau8825->mclk, freq); in nau8825_configure_sysclk()
1003 dev_err(nau8825->dev, "Unable to set mclk rate\n"); in nau8825_configure_sysclk()
1015 if (nau8825->mclk_freq) { in nau8825_configure_sysclk()
1016 clk_disable_unprepare(nau8825->mclk); in nau8825_configure_sysclk()
1017 nau8825->mclk_freq = 0; in nau8825_configure_sysclk()
1022 dev_err(nau8825->dev, "Invalid clock id (%d)\n", clk_id); in nau8825_configure_sysclk()
1026 dev_dbg(nau8825->dev, "Sysclk is %dHz and clock id is %d\n", freq, in nau8825_configure_sysclk()
1034 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_set_sysclk() local
1036 return nau8825_configure_sysclk(nau8825, clk_id, freq); in nau8825_set_sysclk()
1042 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); in nau8825_set_bias_level() local
1054 if (nau8825->mclk_freq) { in nau8825_set_bias_level()
1055 ret = clk_prepare_enable(nau8825->mclk); in nau8825_set_bias_level()
1057 dev_err(nau8825->dev, "Unable to prepare codec mclk\n"); in nau8825_set_bias_level()
1062 ret = regcache_sync(nau8825->regmap); in nau8825_set_bias_level()
1073 if (nau8825->mclk_freq) in nau8825_set_bias_level()
1074 clk_disable_unprepare(nau8825->mclk); in nau8825_set_bias_level()
1076 regcache_mark_dirty(nau8825->regmap); in nau8825_set_bias_level()
1103 static void nau8825_print_device_properties(struct nau8825 *nau8825) in nau8825_print_device_properties() argument
1106 struct device *dev = nau8825->dev; in nau8825_print_device_properties()
1108 dev_dbg(dev, "jkdet-enable: %d\n", nau8825->jkdet_enable); in nau8825_print_device_properties()
1109 dev_dbg(dev, "jkdet-pull-enable: %d\n", nau8825->jkdet_pull_enable); in nau8825_print_device_properties()
1110 dev_dbg(dev, "jkdet-pull-up: %d\n", nau8825->jkdet_pull_up); in nau8825_print_device_properties()
1111 dev_dbg(dev, "jkdet-polarity: %d\n", nau8825->jkdet_polarity); in nau8825_print_device_properties()
1112 dev_dbg(dev, "micbias-voltage: %d\n", nau8825->micbias_voltage); in nau8825_print_device_properties()
1113 dev_dbg(dev, "vref-impedance: %d\n", nau8825->vref_impedance); in nau8825_print_device_properties()
1115 dev_dbg(dev, "sar-threshold-num: %d\n", nau8825->sar_threshold_num); in nau8825_print_device_properties()
1116 for (i = 0; i < nau8825->sar_threshold_num; i++) in nau8825_print_device_properties()
1118 nau8825->sar_threshold[i]); in nau8825_print_device_properties()
1120 dev_dbg(dev, "sar-hysteresis: %d\n", nau8825->sar_hysteresis); in nau8825_print_device_properties()
1121 dev_dbg(dev, "sar-voltage: %d\n", nau8825->sar_voltage); in nau8825_print_device_properties()
1122 dev_dbg(dev, "sar-compare-time: %d\n", nau8825->sar_compare_time); in nau8825_print_device_properties()
1123 dev_dbg(dev, "sar-sampling-time: %d\n", nau8825->sar_sampling_time); in nau8825_print_device_properties()
1124 dev_dbg(dev, "short-key-debounce: %d\n", nau8825->key_debounce); in nau8825_print_device_properties()
1126 nau8825->jack_insert_debounce); in nau8825_print_device_properties()
1128 nau8825->jack_eject_debounce); in nau8825_print_device_properties()
1132 struct nau8825 *nau8825) { in nau8825_read_device_properties() argument
1134 nau8825->jkdet_enable = device_property_read_bool(dev, in nau8825_read_device_properties()
1136 nau8825->jkdet_pull_enable = device_property_read_bool(dev, in nau8825_read_device_properties()
1138 nau8825->jkdet_pull_up = device_property_read_bool(dev, in nau8825_read_device_properties()
1141 &nau8825->jkdet_polarity); in nau8825_read_device_properties()
1143 &nau8825->micbias_voltage); in nau8825_read_device_properties()
1145 &nau8825->vref_impedance); in nau8825_read_device_properties()
1147 &nau8825->sar_threshold_num); in nau8825_read_device_properties()
1149 nau8825->sar_threshold, nau8825->sar_threshold_num); in nau8825_read_device_properties()
1151 &nau8825->sar_hysteresis); in nau8825_read_device_properties()
1153 &nau8825->sar_voltage); in nau8825_read_device_properties()
1155 &nau8825->sar_compare_time); in nau8825_read_device_properties()
1157 &nau8825->sar_sampling_time); in nau8825_read_device_properties()
1159 &nau8825->key_debounce); in nau8825_read_device_properties()
1161 &nau8825->jack_insert_debounce); in nau8825_read_device_properties()
1163 &nau8825->jack_eject_debounce); in nau8825_read_device_properties()
1165 nau8825->mclk = devm_clk_get(dev, "mclk"); in nau8825_read_device_properties()
1166 if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) { in nau8825_read_device_properties()
1168 } else if (PTR_ERR(nau8825->mclk) == -ENOENT) { in nau8825_read_device_properties()
1170 nau8825->mclk = NULL; in nau8825_read_device_properties()
1172 } else if (IS_ERR(nau8825->mclk)) { in nau8825_read_device_properties()
1179 static int nau8825_setup_irq(struct nau8825 *nau8825) in nau8825_setup_irq() argument
1181 struct regmap *regmap = nau8825->regmap; in nau8825_setup_irq()
1189 nau8825_configure_sysclk(nau8825, NAU8825_CLK_INTERNAL, 0); in nau8825_setup_irq()
1207 ret = devm_request_threaded_irq(nau8825->dev, nau8825->irq, NULL, in nau8825_setup_irq()
1209 "nau8825", nau8825); in nau8825_setup_irq()
1212 dev_err(nau8825->dev, "Cannot request irq %d (%d)\n", in nau8825_setup_irq()
1213 nau8825->irq, ret); in nau8825_setup_irq()
1224 struct nau8825 *nau8825 = dev_get_platdata(&i2c->dev); in nau8825_i2c_probe() local
1227 if (!nau8825) { in nau8825_i2c_probe()
1228 nau8825 = devm_kzalloc(dev, sizeof(*nau8825), GFP_KERNEL); in nau8825_i2c_probe()
1229 if (!nau8825) in nau8825_i2c_probe()
1231 ret = nau8825_read_device_properties(dev, nau8825); in nau8825_i2c_probe()
1236 i2c_set_clientdata(i2c, nau8825); in nau8825_i2c_probe()
1238 nau8825->regmap = devm_regmap_init_i2c(i2c, &nau8825_regmap_config); in nau8825_i2c_probe()
1239 if (IS_ERR(nau8825->regmap)) in nau8825_i2c_probe()
1240 return PTR_ERR(nau8825->regmap); in nau8825_i2c_probe()
1241 nau8825->dev = dev; in nau8825_i2c_probe()
1242 nau8825->irq = i2c->irq; in nau8825_i2c_probe()
1244 nau8825_print_device_properties(nau8825); in nau8825_i2c_probe()
1246 nau8825_reset_chip(nau8825->regmap); in nau8825_i2c_probe()
1247 ret = regmap_read(nau8825->regmap, NAU8825_REG_I2C_DEVICE_ID, &value); in nau8825_i2c_probe()
1259 nau8825_init_regs(nau8825); in nau8825_i2c_probe()
1262 nau8825_setup_irq(nau8825); in nau8825_i2c_probe()
1278 struct nau8825 *nau8825 = dev_get_drvdata(dev); in nau8825_suspend() local
1281 regcache_cache_only(nau8825->regmap, true); in nau8825_suspend()
1282 regcache_mark_dirty(nau8825->regmap); in nau8825_suspend()
1290 struct nau8825 *nau8825 = dev_get_drvdata(dev); in nau8825_resume() local
1292 regcache_cache_only(nau8825->regmap, false); in nau8825_resume()
1293 regcache_sync(nau8825->regmap); in nau8825_resume()