Lines Matching refs:tas2764

26 #include "tas2764.h"
65 struct tas2764_priv *tas2764 = data;
71 latched[i] = snd_soc_component_read(tas2764->component,
76 dev_crit_ratelimited(tas2764->dev, "%s\n",
83 dev_err_ratelimited(tas2764->dev, "other context to the fault: %02x,%02x,%02x,%02x,%02x",
85 snd_soc_component_update_bits(tas2764->component,
94 static void tas2764_reset(struct tas2764_priv *tas2764)
96 if (tas2764->reset_gpio) {
97 gpiod_set_value_cansleep(tas2764->reset_gpio, 0);
99 gpiod_set_value_cansleep(tas2764->reset_gpio, 1);
103 snd_soc_component_write(tas2764->component, TAS2764_SW_RST,
108 static int tas2764_update_pwr_ctrl(struct tas2764_priv *tas2764)
110 struct snd_soc_component *component = tas2764->component;
114 if (tas2764->dac_powered)
115 val = tas2764->unmuted ?
131 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
141 if (tas2764->sdz_gpio)
142 gpiod_set_value_cansleep(tas2764->sdz_gpio, 0);
144 regcache_cache_only(tas2764->regmap, true);
145 regcache_mark_dirty(tas2764->regmap);
152 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
155 if (tas2764->sdz_gpio) {
156 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1);
160 ret = tas2764_update_pwr_ctrl(tas2764);
165 regcache_cache_only(tas2764->regmap, false);
167 return regcache_sync(tas2764->regmap);
189 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
194 tas2764->dac_powered = true;
195 ret = tas2764_update_pwr_ctrl(tas2764);
198 tas2764->dac_powered = false;
199 ret = tas2764_update_pwr_ctrl(tas2764);
202 dev_err(tas2764->dev, "Unsupported event\n");
244 struct tas2764_priv *tas2764 =
247 tas2764->unmuted = !mute;
248 return tas2764_update_pwr_ctrl(tas2764);
251 static int tas2764_set_bitwidth(struct tas2764_priv *tas2764, int bitwidth)
253 struct snd_soc_component *component = tas2764->component;
285 val = snd_soc_component_read(tas2764->component, TAS2764_PWR_CTRL);
294 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5,
305 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6,
314 static int tas2764_set_samplerate(struct tas2764_priv *tas2764, int samplerate)
316 struct snd_soc_component *component = tas2764->component;
356 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
359 ret = tas2764_set_bitwidth(tas2764, params_format(params));
363 return tas2764_set_samplerate(tas2764, params_rate(params));
369 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
406 dev_err(tas2764->dev,
432 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
481 tas2764->v_sense_slot);
487 tas2764->i_sense_slot);
510 .name = "tas2764 ASI1",
533 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
536 tas2764->component = component;
538 if (tas2764->sdz_gpio) {
539 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1);
543 tas2764_reset(tas2764);
545 if (tas2764->irq) {
546 ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK0, 0xff);
550 ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK1, 0xff);
554 ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK2, 0xff);
558 ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK3, 0xff);
562 ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK4, 0xff);
566 ret = devm_request_threaded_irq(tas2764->dev, tas2764->irq, NULL, tas2764_irq,
568 "tas2764", tas2764);
570 dev_warn(tas2764->dev, "failed to request IRQ: %d\n", ret);
573 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5,
578 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6,
668 static int tas2764_parse_dt(struct device *dev, struct tas2764_priv *tas2764)
672 tas2764->reset_gpio = devm_gpiod_get_optional(tas2764->dev, "reset",
674 if (IS_ERR(tas2764->reset_gpio)) {
675 if (PTR_ERR(tas2764->reset_gpio) == -EPROBE_DEFER) {
676 tas2764->reset_gpio = NULL;
681 tas2764->sdz_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
682 if (IS_ERR(tas2764->sdz_gpio)) {
683 if (PTR_ERR(tas2764->sdz_gpio) == -EPROBE_DEFER)
686 tas2764->sdz_gpio = NULL;
690 &tas2764->i_sense_slot);
692 tas2764->i_sense_slot = 0;
695 &tas2764->v_sense_slot);
697 tas2764->v_sense_slot = 2;
704 struct tas2764_priv *tas2764;
707 tas2764 = devm_kzalloc(&client->dev, sizeof(struct tas2764_priv),
709 if (!tas2764)
712 tas2764->dev = &client->dev;
713 tas2764->irq = client->irq;
714 i2c_set_clientdata(client, tas2764);
715 dev_set_drvdata(&client->dev, tas2764);
717 tas2764->regmap = devm_regmap_init_i2c(client, &tas2764_i2c_regmap);
718 if (IS_ERR(tas2764->regmap)) {
719 result = PTR_ERR(tas2764->regmap);
726 result = tas2764_parse_dt(&client->dev, tas2764);
728 dev_err(tas2764->dev, "%s: Failed to parse devicetree\n",
734 return devm_snd_soc_register_component(tas2764->dev,
741 { "tas2764", 0},
748 { .compatible = "ti,tas2764" },
756 .name = "tas2764",