Lines Matching full:tas2764

3 // Driver for the Texas Instruments TAS2764 CODEC
26 #include "tas2764.h"
39 static void tas2764_reset(struct tas2764_priv *tas2764) in tas2764_reset() argument
41 if (tas2764->reset_gpio) { in tas2764_reset()
42 gpiod_set_value_cansleep(tas2764->reset_gpio, 0); in tas2764_reset()
44 gpiod_set_value_cansleep(tas2764->reset_gpio, 1); in tas2764_reset()
47 snd_soc_component_write(tas2764->component, TAS2764_SW_RST, in tas2764_reset()
54 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_set_bias_level() local
75 dev_err(tas2764->dev, in tas2764_set_bias_level()
86 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_codec_suspend() local
96 if (tas2764->sdz_gpio) in tas2764_codec_suspend()
97 gpiod_set_value_cansleep(tas2764->sdz_gpio, 0); in tas2764_codec_suspend()
99 regcache_cache_only(tas2764->regmap, true); in tas2764_codec_suspend()
100 regcache_mark_dirty(tas2764->regmap); in tas2764_codec_suspend()
107 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_codec_resume() local
110 if (tas2764->sdz_gpio) in tas2764_codec_resume()
111 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1); in tas2764_codec_resume()
120 regcache_cache_only(tas2764->regmap, false); in tas2764_codec_resume()
122 return regcache_sync(tas2764->regmap); in tas2764_codec_resume()
143 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_dac_event() local
158 dev_err(tas2764->dev, "Unsupported event\n"); in tas2764_dac_event()
213 static int tas2764_set_bitwidth(struct tas2764_priv *tas2764, int bitwidth) in tas2764_set_bitwidth() argument
215 struct snd_soc_component *component = tas2764->component; in tas2764_set_bitwidth()
247 val = snd_soc_component_read(tas2764->component, TAS2764_PWR_CTRL); in tas2764_set_bitwidth()
256 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5, in tas2764_set_bitwidth()
267 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6, in tas2764_set_bitwidth()
276 static int tas2764_set_samplerate(struct tas2764_priv *tas2764, int samplerate) in tas2764_set_samplerate() argument
278 struct snd_soc_component *component = tas2764->component; in tas2764_set_samplerate()
318 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_hw_params() local
321 ret = tas2764_set_bitwidth(tas2764, params_format(params)); in tas2764_hw_params()
325 return tas2764_set_samplerate(tas2764, params_rate(params)); in tas2764_hw_params()
331 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_set_fmt() local
344 dev_err(tas2764->dev, "ASI format Inverse is not found\n"); in tas2764_set_fmt()
366 dev_err(tas2764->dev, in tas2764_set_fmt()
391 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_set_dai_tdm_slot() local
447 tas2764->v_sense_slot); in tas2764_set_dai_tdm_slot()
453 tas2764->i_sense_slot); in tas2764_set_dai_tdm_slot()
476 .name = "tas2764 ASI1",
499 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); in tas2764_codec_probe() local
502 tas2764->component = component; in tas2764_codec_probe()
504 if (tas2764->sdz_gpio) in tas2764_codec_probe()
505 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1); in tas2764_codec_probe()
507 tas2764_reset(tas2764); in tas2764_codec_probe()
509 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5, in tas2764_codec_probe()
514 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6, in tas2764_codec_probe()
590 static int tas2764_parse_dt(struct device *dev, struct tas2764_priv *tas2764) in tas2764_parse_dt() argument
594 tas2764->reset_gpio = devm_gpiod_get_optional(tas2764->dev, "reset", in tas2764_parse_dt()
596 if (IS_ERR(tas2764->reset_gpio)) { in tas2764_parse_dt()
597 if (PTR_ERR(tas2764->reset_gpio) == -EPROBE_DEFER) { in tas2764_parse_dt()
598 tas2764->reset_gpio = NULL; in tas2764_parse_dt()
603 tas2764->sdz_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); in tas2764_parse_dt()
604 if (IS_ERR(tas2764->sdz_gpio)) { in tas2764_parse_dt()
605 if (PTR_ERR(tas2764->sdz_gpio) == -EPROBE_DEFER) in tas2764_parse_dt()
608 tas2764->sdz_gpio = NULL; in tas2764_parse_dt()
612 &tas2764->i_sense_slot); in tas2764_parse_dt()
614 tas2764->i_sense_slot = 0; in tas2764_parse_dt()
617 &tas2764->v_sense_slot); in tas2764_parse_dt()
619 tas2764->v_sense_slot = 2; in tas2764_parse_dt()
627 struct tas2764_priv *tas2764; in tas2764_i2c_probe() local
630 tas2764 = devm_kzalloc(&client->dev, sizeof(struct tas2764_priv), in tas2764_i2c_probe()
632 if (!tas2764) in tas2764_i2c_probe()
635 tas2764->dev = &client->dev; in tas2764_i2c_probe()
636 i2c_set_clientdata(client, tas2764); in tas2764_i2c_probe()
637 dev_set_drvdata(&client->dev, tas2764); in tas2764_i2c_probe()
639 tas2764->regmap = devm_regmap_init_i2c(client, &tas2764_i2c_regmap); in tas2764_i2c_probe()
640 if (IS_ERR(tas2764->regmap)) { in tas2764_i2c_probe()
641 result = PTR_ERR(tas2764->regmap); in tas2764_i2c_probe()
648 result = tas2764_parse_dt(&client->dev, tas2764); in tas2764_i2c_probe()
650 dev_err(tas2764->dev, "%s: Failed to parse devicetree\n", in tas2764_i2c_probe()
656 return devm_snd_soc_register_component(tas2764->dev, in tas2764_i2c_probe()
663 { "tas2764", 0},
670 { .compatible = "ti,tas2764" },
678 .name = "tas2764",
687 MODULE_DESCRIPTION("TAS2764 I2C Smart Amplifier driver");