Lines Matching refs:tas2764
26 #include "tas2764.h"
42 static void tas2764_reset(struct tas2764_priv *tas2764)
44 if (tas2764->reset_gpio) {
45 gpiod_set_value_cansleep(tas2764->reset_gpio, 0);
47 gpiod_set_value_cansleep(tas2764->reset_gpio, 1);
51 snd_soc_component_write(tas2764->component, TAS2764_SW_RST,
56 static int tas2764_update_pwr_ctrl(struct tas2764_priv *tas2764)
58 struct snd_soc_component *component = tas2764->component;
62 if (tas2764->dac_powered)
63 val = tas2764->unmuted ?
79 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
89 if (tas2764->sdz_gpio)
90 gpiod_set_value_cansleep(tas2764->sdz_gpio, 0);
92 regcache_cache_only(tas2764->regmap, true);
93 regcache_mark_dirty(tas2764->regmap);
100 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
103 if (tas2764->sdz_gpio) {
104 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1);
108 ret = tas2764_update_pwr_ctrl(tas2764);
113 regcache_cache_only(tas2764->regmap, false);
115 return regcache_sync(tas2764->regmap);
137 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
142 tas2764->dac_powered = true;
143 ret = tas2764_update_pwr_ctrl(tas2764);
146 tas2764->dac_powered = false;
147 ret = tas2764_update_pwr_ctrl(tas2764);
150 dev_err(tas2764->dev, "Unsupported event\n");
192 struct tas2764_priv *tas2764 =
195 tas2764->unmuted = !mute;
196 return tas2764_update_pwr_ctrl(tas2764);
199 static int tas2764_set_bitwidth(struct tas2764_priv *tas2764, int bitwidth)
201 struct snd_soc_component *component = tas2764->component;
233 val = snd_soc_component_read(tas2764->component, TAS2764_PWR_CTRL);
242 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5,
253 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6,
262 static int tas2764_set_samplerate(struct tas2764_priv *tas2764, int samplerate)
264 struct snd_soc_component *component = tas2764->component;
304 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
307 ret = tas2764_set_bitwidth(tas2764, params_format(params));
311 return tas2764_set_samplerate(tas2764, params_rate(params));
317 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
354 dev_err(tas2764->dev,
380 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
429 tas2764->v_sense_slot);
435 tas2764->i_sense_slot);
458 .name = "tas2764 ASI1",
481 struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component);
484 tas2764->component = component;
486 if (tas2764->sdz_gpio) {
487 gpiod_set_value_cansleep(tas2764->sdz_gpio, 1);
491 tas2764_reset(tas2764);
493 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG5,
498 ret = snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG6,
567 static int tas2764_parse_dt(struct device *dev, struct tas2764_priv *tas2764)
571 tas2764->reset_gpio = devm_gpiod_get_optional(tas2764->dev, "reset",
573 if (IS_ERR(tas2764->reset_gpio)) {
574 if (PTR_ERR(tas2764->reset_gpio) == -EPROBE_DEFER) {
575 tas2764->reset_gpio = NULL;
580 tas2764->sdz_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
581 if (IS_ERR(tas2764->sdz_gpio)) {
582 if (PTR_ERR(tas2764->sdz_gpio) == -EPROBE_DEFER)
585 tas2764->sdz_gpio = NULL;
589 &tas2764->i_sense_slot);
591 tas2764->i_sense_slot = 0;
594 &tas2764->v_sense_slot);
596 tas2764->v_sense_slot = 2;
604 struct tas2764_priv *tas2764;
607 tas2764 = devm_kzalloc(&client->dev, sizeof(struct tas2764_priv),
609 if (!tas2764)
612 tas2764->dev = &client->dev;
613 i2c_set_clientdata(client, tas2764);
614 dev_set_drvdata(&client->dev, tas2764);
616 tas2764->regmap = devm_regmap_init_i2c(client, &tas2764_i2c_regmap);
617 if (IS_ERR(tas2764->regmap)) {
618 result = PTR_ERR(tas2764->regmap);
625 result = tas2764_parse_dt(&client->dev, tas2764);
627 dev_err(tas2764->dev, "%s: Failed to parse devicetree\n",
633 return devm_snd_soc_register_component(tas2764->dev,
640 { "tas2764", 0},
647 { .compatible = "ti,tas2764" },
655 .name = "tas2764",