Lines Matching +full:reset +full:- +full:assert +full:- +full:ms

1 // SPDX-License-Identifier: GPL-2.0-only
12 #include <linux/reset.h>
16 #include <linux/clk-provider.h>
23 #include <sound/soc-component.h>
62 struct reset_control *reset; member
66 static const DECLARE_TLV_DB_SCALE(ntp8918_master_vol_scale, -12550, 50, 0);
78 * /RESET signal low during power up for at least 0.1us. The sequence is, in ntp8918_reset_gpio()
80 * Deassert for T2 >= 1ms... in ntp8918_reset_gpio()
82 reset_control_deassert(ntp8918->reset); in ntp8918_reset_gpio()
85 /* ...Assert for T3 >= 0.1us... */ in ntp8918_reset_gpio()
86 reset_control_assert(ntp8918->reset); in ntp8918_reset_gpio()
89 /* ...Deassert, and wait for T4 >= 0.5ms before sound on sequence. */ in ntp8918_reset_gpio()
90 reset_control_deassert(ntp8918->reset); in ntp8918_reset_gpio()
106 ret = ntpfw_load(ntp8918->i2c, NTP8918_FW_NAME, NTP8918_FW_MAGIC); in ntp8918_load_firmware()
107 if (ret == -ENOENT) { in ntp8918_load_firmware()
108 dev_warn_once(&ntp8918->i2c->dev, "Could not find firmware %s\n", in ntp8918_load_firmware()
120 regcache_cache_only(component->regmap, true); in ntp8918_snd_suspend()
122 regmap_multi_reg_write_bypassed(component->regmap, in ntp8918_snd_suspend()
128 * wait after sound off for T6 >= 0.5ms in ntp8918_snd_suspend()
131 reset_control_assert(ntp8918->reset); in ntp8918_snd_suspend()
133 regcache_mark_dirty(component->regmap); in ntp8918_snd_suspend()
134 clk_disable_unprepare(ntp8918->bck); in ntp8918_snd_suspend()
144 ret = clk_prepare_enable(ntp8918->bck); in ntp8918_snd_resume()
150 regmap_multi_reg_write_bypassed(component->regmap, in ntp8918_snd_resume()
156 dev_err(&ntp8918->i2c->dev, "Failed to load firmware\n"); in ntp8918_snd_resume()
160 regcache_cache_only(component->regmap, false); in ntp8918_snd_resume()
170 struct device *dev = component->dev; in ntp8918_probe()
210 struct snd_soc_component *component = dai->component; in ntp8918_hw_params()
232 return -EINVAL; in ntp8918_hw_params()
240 switch (ntp8918->format) { in ntp8918_hw_params()
274 return -EINVAL; in ntp8918_hw_params()
286 struct snd_soc_component *component = dai->component; in ntp8918_set_fmt()
293 ntp8918->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK; in ntp8918_set_fmt()
296 return -EINVAL; in ntp8918_set_fmt()
306 return snd_soc_component_update_bits(dai->component, NTP8918_SOFT_MUTE, in ntp8918_digital_mute()
317 .name = "ntp8918-amplifier",
341 ntp8918 = devm_kzalloc(&i2c->dev, sizeof(*ntp8918), GFP_KERNEL); in ntp8918_i2c_probe()
343 return -ENOMEM; in ntp8918_i2c_probe()
345 ntp8918->i2c = i2c; in ntp8918_i2c_probe()
347 ntp8918->reset = devm_reset_control_get_shared(&i2c->dev, NULL); in ntp8918_i2c_probe()
348 if (IS_ERR(ntp8918->reset)) in ntp8918_i2c_probe()
349 return dev_err_probe(&i2c->dev, PTR_ERR(ntp8918->reset), "Failed to get reset\n"); in ntp8918_i2c_probe()
351 dev_set_drvdata(&i2c->dev, ntp8918); in ntp8918_i2c_probe()
357 return dev_err_probe(&i2c->dev, PTR_ERR(regmap), in ntp8918_i2c_probe()
360 ret = devm_snd_soc_register_component(&i2c->dev, &soc_component_ntp8918, in ntp8918_i2c_probe()
363 return dev_err_probe(&i2c->dev, ret, in ntp8918_i2c_probe()
366 ntp8918->bck = devm_clk_get_enabled(&i2c->dev, "bck"); in ntp8918_i2c_probe()
367 if (IS_ERR(ntp8918->bck)) in ntp8918_i2c_probe()
368 return dev_err_probe(&i2c->dev, PTR_ERR(ntp8918->bck), "failed to get bck clock\n"); in ntp8918_i2c_probe()