Lines Matching +full:max +full:- +full:clk +full:- +full:rate +full:- +full:hz

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * da7219.c - DA7219 ALSA SoC Codec Driver
11 #include <linux/clk.h>
13 #include <linux/clk-provider.h>
26 #include <sound/soc-dapm.h>
33 #include "da7219-aad.h"
41 static const DECLARE_TLV_DB_SCALE(da7219_mic_gain_tlv, -600, 600, 0);
42 static const DECLARE_TLV_DB_SCALE(da7219_mixin_gain_tlv, -450, 150, 0);
43 static const DECLARE_TLV_DB_SCALE(da7219_adc_dig_gain_tlv, -8325, 75, 0);
44 static const DECLARE_TLV_DB_SCALE(da7219_alc_threshold_tlv, -9450, 150, 0);
47 static const DECLARE_TLV_DB_SCALE(da7219_sidetone_gain_tlv, -4200, 300, 0);
48 static const DECLARE_TLV_DB_SCALE(da7219_tonegen_gain_tlv, -4500, 300, 0);
51 static const DECLARE_TLV_DB_SCALE(da7219_dac_eq_band_tlv, -1050, 150, 0);
55 /* -77.25dB to 12dB */
56 0x08, 0x7f, TLV_DB_SCALE_ITEM(-7725, 75, 0)
59 static const DECLARE_TLV_DB_SCALE(da7219_dac_ng_threshold_tlv, -10200, 600, 0);
60 static const DECLARE_TLV_DB_SCALE(da7219_hp_gain_tlv, -5700, 100, 0);
116 "Nominal Rate * 8", "Nominal Rate", "Nominal Rate / 8",
117 "Nominal Rate / 16"
143 "2Hz", "4Hz", "8Hz", "16Hz"
159 "2.5Hz", "25Hz", "50Hz", "100Hz", "150Hz", "200Hz", "300Hz", "400Hz"
184 "Sum", "SWG1", "SWG2", "SWG1_1-Cos"
261 mutex_lock(&da7219->ctrl_lock); in da7219_volsw_locked_get()
263 mutex_unlock(&da7219->ctrl_lock); in da7219_volsw_locked_get()
275 mutex_lock(&da7219->ctrl_lock); in da7219_volsw_locked_put()
277 mutex_unlock(&da7219->ctrl_lock); in da7219_volsw_locked_put()
289 mutex_lock(&da7219->ctrl_lock); in da7219_enum_locked_get()
291 mutex_unlock(&da7219->ctrl_lock); in da7219_enum_locked_get()
303 mutex_lock(&da7219->ctrl_lock); in da7219_enum_locked_put()
305 mutex_unlock(&da7219->ctrl_lock); in da7219_enum_locked_put()
352 dev_warn(component->dev, in da7219_alc_calib()
389 if ((ret == 1) && (da7219->alc_en)) in da7219_mixin_gain_put()
403 if ((ucontrol->value.integer.value[0]) && (!da7219->alc_en)) { in da7219_alc_sw_put()
405 da7219->alc_en = true; in da7219_alc_sw_put()
407 da7219->alc_en = false; in da7219_alc_sw_put()
420 (struct soc_mixer_control *) kcontrol->private_value; in da7219_tonegen_freq_get()
421 unsigned int reg = mixer_ctrl->reg; in da7219_tonegen_freq_get()
425 mutex_lock(&da7219->ctrl_lock); in da7219_tonegen_freq_get()
426 ret = regmap_raw_read(da7219->regmap, reg, &val, sizeof(val)); in da7219_tonegen_freq_get()
427 mutex_unlock(&da7219->ctrl_lock); in da7219_tonegen_freq_get()
433 * Frequency value spans two 8-bit registers, lower then upper byte. in da7219_tonegen_freq_get()
436 ucontrol->value.integer.value[0] = le16_to_cpu(val); in da7219_tonegen_freq_get()
447 (struct soc_mixer_control *) kcontrol->private_value; in da7219_tonegen_freq_put()
448 unsigned int reg = mixer_ctrl->reg; in da7219_tonegen_freq_put()
453 * Frequency value spans two 8-bit registers, lower then upper byte. in da7219_tonegen_freq_put()
457 val = cpu_to_le16(ucontrol->value.integer.value[0]); in da7219_tonegen_freq_put()
459 mutex_lock(&da7219->ctrl_lock); in da7219_tonegen_freq_put()
460 ret = regmap_raw_write(da7219->regmap, reg, &val, sizeof(val)); in da7219_tonegen_freq_put()
461 mutex_unlock(&da7219->ctrl_lock); in da7219_tonegen_freq_put()
509 SOC_ENUM("ALC Attack Rate", da7219_alc_attack_rate),
510 SOC_ENUM("ALC Release Rate", da7219_alc_release_rate),
512 SOC_ENUM("ALC Envelope Attack Rate", da7219_alc_env_attack_rate),
513 SOC_ENUM("ALC Envelope Release Rate", da7219_alc_env_release_rate),
520 SOC_SINGLE_TLV("ALC Max Threshold", DA7219_ALC_TARGET_MAX,
523 SOC_SINGLE_TLV("ALC Max Attenuation", DA7219_ALC_GAIN_LIMITS,
526 SOC_SINGLE_TLV("ALC Max Volume", DA7219_ALC_GAIN_LIMITS,
533 SOC_SINGLE_RANGE_TLV("ALC Max Analog Volume", DA7219_ALC_ANA_GAIN_LIMITS,
545 /* Input High-Pass Filters */
586 SOC_ENUM("Gain Ramp Rate", da7219_gain_ramp_rate),
588 /* DAC High-Pass Filter */
594 /* DAC 5-Band Equaliser */
616 SOC_ENUM("DAC Soft Mute Rate", da7219_dac_softmute_rate),
624 SOC_ENUM("DAC NG Rampup Rate", da7219_dac_ng_rampup_rate),
625 SOC_ENUM("DAC NG Rampdown Rate", da7219_dac_ng_rampdown_rate),
770 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7219_mic_pga_event()
775 if (da7219->micbias_on_event) { in da7219_mic_pga_event()
780 da7219->micbias_on_event = false; in da7219_mic_pga_event()
781 msleep(da7219->mic_pga_delay); in da7219_mic_pga_event()
794 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7219_dai_event()
796 struct clk *bclk = da7219->dai_clks[DA7219_DAI_BCLK_IDX]; in da7219_dai_event()
803 if (da7219->master) { in da7219_dai_event()
808 dev_err(component->dev, in da7219_dai_event()
841 dev_warn(component->dev, "SRM failed to lock\n"); in da7219_dai_event()
845 /* PC free-running */ in da7219_dai_event()
851 if (da7219->master) { in da7219_dai_event()
863 return -EINVAL; in da7219_dai_event()
885 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7219_mixout_event()
888 switch (w->reg) { in da7219_mixout_event()
898 return -EINVAL; in da7219_mixout_event()
923 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in da7219_gain_ramp_event()
930 da7219->gain_ramp_ctrl = in da7219_gain_ramp_event()
939 da7219->gain_ramp_ctrl); in da7219_gain_ramp_event()
1160 struct snd_soc_component *component = codec_dai->component; in da7219_set_dai_sysclk()
1164 if ((da7219->clk_src == clk_id) && (da7219->mclk_rate == freq)) in da7219_set_dai_sysclk()
1168 dev_err(codec_dai->dev, "Unsupported MCLK value %d\n", in da7219_set_dai_sysclk()
1170 return -EINVAL; in da7219_set_dai_sysclk()
1173 mutex_lock(&da7219->pll_lock); in da7219_set_dai_sysclk()
1186 dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id); in da7219_set_dai_sysclk()
1187 mutex_unlock(&da7219->pll_lock); in da7219_set_dai_sysclk()
1188 return -EINVAL; in da7219_set_dai_sysclk()
1191 da7219->clk_src = clk_id; in da7219_set_dai_sysclk()
1193 if (da7219->mclk) { in da7219_set_dai_sysclk()
1194 freq = clk_round_rate(da7219->mclk, freq); in da7219_set_dai_sysclk()
1195 ret = clk_set_rate(da7219->mclk, freq); in da7219_set_dai_sysclk()
1197 dev_err(codec_dai->dev, "Failed to set clock rate %d\n", in da7219_set_dai_sysclk()
1199 mutex_unlock(&da7219->pll_lock); in da7219_set_dai_sysclk()
1204 da7219->mclk_rate = freq; in da7219_set_dai_sysclk()
1206 mutex_unlock(&da7219->pll_lock); in da7219_set_dai_sysclk()
1220 /* Verify 2MHz - 54MHz MCLK provided, and set input divider */ in da7219_set_pll()
1221 if (da7219->mclk_rate < 2000000) { in da7219_set_pll()
1222 dev_err(component->dev, "PLL input clock %d below valid range\n", in da7219_set_pll()
1223 da7219->mclk_rate); in da7219_set_pll()
1224 return -EINVAL; in da7219_set_pll()
1225 } else if (da7219->mclk_rate <= 4500000) { in da7219_set_pll()
1228 } else if (da7219->mclk_rate <= 9000000) { in da7219_set_pll()
1231 } else if (da7219->mclk_rate <= 18000000) { in da7219_set_pll()
1234 } else if (da7219->mclk_rate <= 36000000) { in da7219_set_pll()
1237 } else if (da7219->mclk_rate <= 54000000) { in da7219_set_pll()
1241 dev_err(component->dev, "PLL input clock %d above valid range\n", in da7219_set_pll()
1242 da7219->mclk_rate); in da7219_set_pll()
1243 return -EINVAL; in da7219_set_pll()
1245 freq_ref = (da7219->mclk_rate / indiv); in da7219_set_pll()
1263 dev_err(component->dev, "Invalid PLL config\n"); in da7219_set_pll()
1264 return -EINVAL; in da7219_set_pll()
1288 struct snd_soc_component *component = codec_dai->component; in da7219_set_dai_pll()
1292 mutex_lock(&da7219->pll_lock); in da7219_set_dai_pll()
1294 mutex_unlock(&da7219->pll_lock); in da7219_set_dai_pll()
1301 struct snd_soc_component *component = codec_dai->component; in da7219_set_dai_fmt()
1307 da7219->master = true; in da7219_set_dai_fmt()
1310 da7219->master = false; in da7219_set_dai_fmt()
1313 return -EINVAL; in da7219_set_dai_fmt()
1334 return -EINVAL; in da7219_set_dai_fmt()
1352 return -EINVAL; in da7219_set_dai_fmt()
1356 return -EINVAL; in da7219_set_dai_fmt()
1373 return -EINVAL; in da7219_set_dai_fmt()
1404 return -EINVAL; in da7219_set_bclks_per_wclk()
1418 struct snd_soc_component *component = dai->component; in da7219_set_dai_tdm_slot()
1420 struct clk *wclk = da7219->dai_clks[DA7219_DAI_WCLK_IDX]; in da7219_set_dai_tdm_slot()
1421 struct clk *bclk = da7219->dai_clks[DA7219_DAI_BCLK_IDX]; in da7219_set_dai_tdm_slot()
1435 da7219->tdm_en = false; in da7219_set_dai_tdm_slot()
1440 slot_offset = ffs(tx_mask) - 1; in da7219_set_dai_tdm_slot()
1443 dev_err(component->dev, in da7219_set_dai_tdm_slot()
1444 "Invalid number of slots, max = %d\n", in da7219_set_dai_tdm_slot()
1446 return -EINVAL; in da7219_set_dai_tdm_slot()
1455 dev_err(component->dev, "Invalid frame offset %d\n", offset); in da7219_set_dai_tdm_slot()
1456 return -EINVAL; in da7219_set_dai_tdm_slot()
1463 if (da7219->master) { in da7219_set_dai_tdm_slot()
1471 dev_err(component->dev, in da7219_set_dai_tdm_slot()
1472 "Failed to set TDM BCLK rate %lu: %d\n", in da7219_set_dai_tdm_slot()
1479 dev_err(component->dev, in da7219_set_dai_tdm_slot()
1488 regmap_bulk_write(da7219->regmap, DA7219_DAI_OFFSET_LOWER, in da7219_set_dai_tdm_slot()
1497 da7219->tdm_en = true; in da7219_set_dai_tdm_slot()
1503 unsigned long rate) in da7219_set_sr() argument
1507 switch (rate) { in da7219_set_sr()
1542 return -EINVAL; in da7219_set_sr()
1554 struct snd_soc_component *component = dai->component; in da7219_hw_params()
1556 struct clk *wclk = da7219->dai_clks[DA7219_DAI_WCLK_IDX]; in da7219_hw_params()
1557 struct clk *bclk = da7219->dai_clks[DA7219_DAI_BCLK_IDX]; in da7219_hw_params()
1578 return -EINVAL; in da7219_hw_params()
1583 dev_err(component->dev, in da7219_hw_params()
1586 return -EINVAL; in da7219_hw_params()
1591 if (da7219->master && wclk) { in da7219_hw_params()
1594 dev_err(component->dev, in da7219_hw_params()
1601 dev_err(component->dev, in da7219_hw_params()
1610 * the BCLK rate automatically. in da7219_hw_params()
1612 if (da7219->master && !da7219->tdm_en) { in da7219_hw_params()
1621 * Rounding the rate here avoids failure trying to set a in da7219_hw_params()
1622 * new rate on an already enabled bclk. In that in da7219_hw_params()
1623 * instance this will just set the same rate as is in da7219_hw_params()
1625 * problem, as long as the BCLK rate is suitable for the in da7219_hw_params()
1630 dev_err(component->dev, in da7219_hw_params()
1631 "BCLK rate mismatch against frame size"); in da7219_hw_params()
1632 return -EINVAL; in da7219_hw_params()
1637 dev_err(component->dev, in da7219_hw_params()
1638 "Failed to set BCLK rate %lu: %d\n", in da7219_hw_params()
1645 dev_err(component->dev, in da7219_hw_params()
1679 .name = "da7219-hifi",
1766 pdata->wakeup_source = device_property_read_bool(dev, "wakeup-source"); in da7219_fw_to_pdata()
1768 pdata->dai_clk_names[DA7219_DAI_WCLK_IDX] = "da7219-dai-wclk"; in da7219_fw_to_pdata()
1769 pdata->dai_clk_names[DA7219_DAI_BCLK_IDX] = "da7219-dai-bclk"; in da7219_fw_to_pdata()
1770 if (device_property_read_string_array(dev, "clock-output-names", in da7219_fw_to_pdata()
1771 pdata->dai_clk_names, in da7219_fw_to_pdata()
1773 dev_warn(dev, "Using default DAI clk names: %s, %s\n", in da7219_fw_to_pdata()
1774 pdata->dai_clk_names[DA7219_DAI_WCLK_IDX], in da7219_fw_to_pdata()
1775 pdata->dai_clk_names[DA7219_DAI_BCLK_IDX]); in da7219_fw_to_pdata()
1777 if (device_property_read_u32(dev, "dlg,micbias-lvl", &of_val32) >= 0) in da7219_fw_to_pdata()
1778 pdata->micbias_lvl = da7219_fw_micbias_lvl(dev, of_val32); in da7219_fw_to_pdata()
1780 pdata->micbias_lvl = DA7219_MICBIAS_2_2V; in da7219_fw_to_pdata()
1782 if (!device_property_read_string(dev, "dlg,mic-amp-in-sel", &of_str)) in da7219_fw_to_pdata()
1783 pdata->mic_amp_in_sel = da7219_fw_mic_amp_in_sel(dev, of_str); in da7219_fw_to_pdata()
1785 pdata->mic_amp_in_sel = DA7219_MIC_AMP_IN_SEL_DIFF; in da7219_fw_to_pdata()
1807 if (da7219->mclk) { in da7219_set_bias_level()
1808 ret = clk_prepare_enable(da7219->mclk); in da7219_set_bias_level()
1810 dev_err(component->dev, in da7219_set_bias_level()
1827 if (da7219->mclk) in da7219_set_bias_level()
1828 clk_disable_unprepare(da7219->mclk); in da7219_set_bias_level()
1832 /* Only disable master bias if we're not a wake-up source */ in da7219_set_bias_level()
1833 if (!da7219->wakeup_source) in da7219_set_bias_level()
1858 da7219->supplies[i].supply = da7219_supply_names[i]; in da7219_handle_supplies()
1860 ret = regulator_bulk_get(component->dev, DA7219_NUM_SUPPLIES, in da7219_handle_supplies()
1861 da7219->supplies); in da7219_handle_supplies()
1863 dev_err(component->dev, "Failed to get supplies"); in da7219_handle_supplies()
1871 vddio = da7219->supplies[DA7219_SUPPLY_VDDIO].consumer; in da7219_handle_supplies()
1874 dev_warn(component->dev, "Invalid VDDIO voltage\n"); in da7219_handle_supplies()
1879 ret = regulator_bulk_enable(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_handle_supplies()
1881 dev_err(component->dev, "Failed to enable supplies"); in da7219_handle_supplies()
1882 regulator_bulk_free(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_handle_supplies()
1895 struct snd_soc_component *component = da7219->component; in da7219_wclk_prepare()
1897 if (!da7219->master) in da7219_wclk_prepare()
1898 return -EINVAL; in da7219_wclk_prepare()
1912 struct snd_soc_component *component = da7219->component; in da7219_wclk_unprepare()
1914 if (!da7219->master) in da7219_wclk_unprepare()
1926 struct snd_soc_component *component = da7219->component; in da7219_wclk_is_prepared()
1929 if (!da7219->master) in da7219_wclk_is_prepared()
1930 return -EINVAL; in da7219_wclk_is_prepared()
1943 struct snd_soc_component *component = da7219->component; in da7219_wclk_recalc_rate()
1974 static long da7219_wclk_round_rate(struct clk_hw *hw, unsigned long rate, in da7219_wclk_round_rate() argument
1981 if (!da7219->master) in da7219_wclk_round_rate()
1982 return -EINVAL; in da7219_wclk_round_rate()
1984 if (rate < 11025) in da7219_wclk_round_rate()
1986 else if (rate < 12000) in da7219_wclk_round_rate()
1988 else if (rate < 16000) in da7219_wclk_round_rate()
1990 else if (rate < 22050) in da7219_wclk_round_rate()
1992 else if (rate < 24000) in da7219_wclk_round_rate()
1994 else if (rate < 32000) in da7219_wclk_round_rate()
1996 else if (rate < 44100) in da7219_wclk_round_rate()
1998 else if (rate < 48000) in da7219_wclk_round_rate()
2000 else if (rate < 88200) in da7219_wclk_round_rate()
2002 else if (rate < 96000) in da7219_wclk_round_rate()
2008 static int da7219_wclk_set_rate(struct clk_hw *hw, unsigned long rate, in da7219_wclk_set_rate() argument
2014 struct snd_soc_component *component = da7219->component; in da7219_wclk_set_rate()
2016 if (!da7219->master) in da7219_wclk_set_rate()
2017 return -EINVAL; in da7219_wclk_set_rate()
2019 return da7219_set_sr(component, rate); in da7219_wclk_set_rate()
2028 struct snd_soc_component *component = da7219->component; in da7219_bclk_recalc_rate()
2046 static unsigned long da7219_bclk_get_factor(unsigned long rate, in da7219_bclk_get_factor() argument
2051 factor = rate / parent_rate; in da7219_bclk_get_factor()
2062 static long da7219_bclk_round_rate(struct clk_hw *hw, unsigned long rate, in da7219_bclk_round_rate() argument
2070 if (!*parent_rate || !da7219->master) in da7219_bclk_round_rate()
2071 return -EINVAL; in da7219_bclk_round_rate()
2074 * We don't allow changing the parent rate as some BCLK rates can be in da7219_bclk_round_rate()
2077 * parent WCLK rate set and find the appropriate multiplier of BCLK to in da7219_bclk_round_rate()
2080 factor = da7219_bclk_get_factor(rate, *parent_rate); in da7219_bclk_round_rate()
2085 static int da7219_bclk_set_rate(struct clk_hw *hw, unsigned long rate, in da7219_bclk_set_rate() argument
2091 struct snd_soc_component *component = da7219->component; in da7219_bclk_set_rate()
2094 if (!da7219->master) in da7219_bclk_set_rate()
2095 return -EINVAL; in da7219_bclk_set_rate()
2097 factor = da7219_bclk_get_factor(rate, parent_rate); in da7219_bclk_set_rate()
2120 struct device *dev = component->dev; in da7219_register_dai_clks()
2121 struct device_node *np = dev->of_node; in da7219_register_dai_clks()
2123 struct da7219_pdata *pdata = da7219->pdata; in da7219_register_dai_clks()
2133 return -ENOMEM; in da7219_register_dai_clks()
2135 clk_data->num = DA7219_DAI_NUM_CLKS; in da7219_register_dai_clks()
2136 da7219->clk_hw_data = clk_data; in da7219_register_dai_clks()
2142 struct clk_hw *dai_clk_hw = &da7219->dai_clks_hw[i]; in da7219_register_dai_clks()
2150 if (da7219->mclk) { in da7219_register_dai_clks()
2151 parent_name = __clk_get_name(da7219->mclk); in da7219_register_dai_clks()
2161 parent_name = __clk_get_name(da7219->dai_clks[DA7219_DAI_WCLK_IDX]); in da7219_register_dai_clks()
2167 ret = -EINVAL; in da7219_register_dai_clks()
2171 init.name = pdata->dai_clk_names[i]; in da7219_register_dai_clks()
2174 dai_clk_hw->init = &init; in da7219_register_dai_clks()
2182 da7219->dai_clks[i] = dai_clk_hw->clk; in da7219_register_dai_clks()
2186 da7219->clk_hw_data->hws[i] = dai_clk_hw; in da7219_register_dai_clks()
2191 ret = -ENOMEM; in da7219_register_dai_clks()
2194 da7219->dai_clks_lookup[i] = dai_clk_lookup; in da7219_register_dai_clks()
2201 ret = of_clk_add_hw_provider(dev->of_node, of_clk_hw_onecell_get, in da7219_register_dai_clks()
2202 da7219->clk_hw_data); in da7219_register_dai_clks()
2213 if (da7219->dai_clks_lookup[i]) in da7219_register_dai_clks()
2214 clkdev_drop(da7219->dai_clks_lookup[i]); in da7219_register_dai_clks()
2216 clk_hw_unregister(&da7219->dai_clks_hw[i]); in da7219_register_dai_clks()
2217 } while (i-- > 0); in da7219_register_dai_clks()
2220 kfree(da7219->clk_hw_data); in da7219_register_dai_clks()
2228 struct device_node *np = component->dev->of_node; in da7219_free_dai_clks()
2234 for (i = DA7219_DAI_NUM_CLKS - 1; i >= 0; --i) { in da7219_free_dai_clks()
2235 if (da7219->dai_clks_lookup[i]) in da7219_free_dai_clks()
2236 clkdev_drop(da7219->dai_clks_lookup[i]); in da7219_free_dai_clks()
2238 clk_hw_unregister(&da7219->dai_clks_hw[i]); in da7219_free_dai_clks()
2242 kfree(da7219->clk_hw_data); in da7219_free_dai_clks()
2256 struct da7219_pdata *pdata = da7219->pdata; in da7219_handle_pdata()
2261 da7219->wakeup_source = pdata->wakeup_source; in da7219_handle_pdata()
2264 switch (pdata->micbias_lvl) { in da7219_handle_pdata()
2271 micbias_lvl |= (pdata->micbias_lvl << in da7219_handle_pdata()
2282 da7219->mic_pga_delay = DA7219_MIC_PGA_BASE_DELAY + in da7219_handle_pdata()
2283 (pdata->micbias_lvl * in da7219_handle_pdata()
2287 switch (pdata->mic_amp_in_sel) { in da7219_handle_pdata()
2292 pdata->mic_amp_in_sel); in da7219_handle_pdata()
2445 da7219->component = component; in da7219_probe()
2446 mutex_init(&da7219->ctrl_lock); in da7219_probe()
2447 mutex_init(&da7219->pll_lock); in da7219_probe()
2454 regcache_cache_bypass(da7219->regmap, true); in da7219_probe()
2457 regmap_read(da7219->regmap, DA7219_SYSTEM_ACTIVE, &system_active); in da7219_probe()
2459 regmap_write(da7219->regmap, DA7219_GAIN_RAMP_CTRL, in da7219_probe()
2461 regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_INPUT, 0x00); in da7219_probe()
2462 regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_OUTPUT, 0x01); in da7219_probe()
2465 regmap_read(da7219->regmap, DA7219_SYSTEM_STATUS, in da7219_probe()
2475 regmap_write_bits(da7219->regmap, DA7219_ACCDET_CONFIG_1, in da7219_probe()
2477 regmap_write_bits(da7219->regmap, DA7219_CIF_CTRL, in da7219_probe()
2480 regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, in da7219_probe()
2482 regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, in da7219_probe()
2485 regcache_cache_bypass(da7219->regmap, false); in da7219_probe()
2486 regmap_reinit_cache(da7219->regmap, &da7219_regmap_config); in da7219_probe()
2491 ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev); in da7219_probe()
2493 dev_err(component->dev, "Failed to read chip revision: %d\n", ret); in da7219_probe()
2499 ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch, in da7219_probe()
2502 dev_err(component->dev, "Failed to register AA patch: %d\n", in da7219_probe()
2515 da7219->mclk = clk_get(component->dev, "mclk"); in da7219_probe()
2516 if (IS_ERR(da7219->mclk)) { in da7219_probe()
2517 if (PTR_ERR(da7219->mclk) != -ENOENT) { in da7219_probe()
2518 ret = PTR_ERR(da7219->mclk); in da7219_probe()
2521 da7219->mclk = NULL; in da7219_probe()
2530 /* Default PC counter to free-running */ in da7219_probe()
2573 clk_put(da7219->mclk); in da7219_probe()
2576 regulator_bulk_disable(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_probe()
2577 regulator_bulk_free(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_probe()
2589 clk_put(da7219->mclk); in da7219_remove()
2592 regulator_bulk_disable(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_remove()
2593 regulator_bulk_free(DA7219_NUM_SUPPLIES, da7219->supplies); in da7219_remove()
2601 /* Suspend AAD if we're not a wake-up source */ in da7219_suspend()
2602 if (!da7219->wakeup_source) in da7219_suspend()
2617 if (!da7219->wakeup_source) in da7219_resume()
2653 struct device *dev = &i2c->dev; in da7219_i2c_probe()
2660 return -ENOMEM; in da7219_i2c_probe()
2664 da7219->regmap = devm_regmap_init_i2c(i2c, &da7219_regmap_config); in da7219_i2c_probe()
2665 if (IS_ERR(da7219->regmap)) { in da7219_i2c_probe()
2666 ret = PTR_ERR(da7219->regmap); in da7219_i2c_probe()
2672 da7219->pdata = dev_get_platdata(dev); in da7219_i2c_probe()
2673 if (!da7219->pdata) in da7219_i2c_probe()
2674 da7219->pdata = da7219_fw_to_pdata(dev); in da7219_i2c_probe()