Lines Matching defs:wsa884x

1408 static void wsa884x_set_gain_parameters(struct wsa884x_priv *wsa884x)
1410 struct regmap *regmap = wsa884x->regmap;
1422 if (wsa884x->dev_mode == WSA884X_RECEIVER) {
1445 if (wsa884x->port_enable[WSA884X_PORT_COMP]) {
1460 static void wsa884x_init(struct wsa884x_priv *wsa884x)
1465 if (!regmap_read(wsa884x->regmap, WSA884X_OTP_REG_0, &variant))
1466 wsa884x->variant = variant & WSA884X_OTP_REG_0_ID_MASK;
1468 regmap_multi_reg_write(wsa884x->regmap, wsa884x_reg_init,
1475 if (wsa884x->variant == WSA884X_OTP_ID_WSA8845H)
1481 regmap_write(wsa884x->regmap, WSA884X_ANA_WO_CTL_0, wo_ctl_0);
1483 wsa884x_set_gain_parameters(wsa884x);
1485 wsa884x->hw_init = false;
1491 struct wsa884x_priv *wsa884x = dev_get_drvdata(&slave->dev);
1495 wsa884x->hw_init = false;
1496 regcache_cache_only(wsa884x->regmap, true);
1497 regcache_mark_dirty(wsa884x->regmap);
1501 if (wsa884x->hw_init || status != SDW_SLAVE_ATTACHED)
1504 regcache_cache_only(wsa884x->regmap, false);
1505 ret = regcache_sync(wsa884x->regmap);
1511 wsa884x_init(wsa884x);
1520 struct wsa884x_priv *wsa884x = dev_get_drvdata(&slave->dev);
1523 wsa884x->port_prepared[prepare_ch->num - 1] = true;
1525 wsa884x->port_prepared[prepare_ch->num - 1] = false;
1539 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(component);
1541 ucontrol->value.enumerated.item[0] = wsa884x->dev_mode;
1550 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(component);
1552 if (wsa884x->dev_mode == ucontrol->value.enumerated.item[0])
1555 wsa884x->dev_mode = ucontrol->value.enumerated.item[0];
1564 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(comp);
1568 ucontrol->value.integer.value[0] = wsa884x->port_enable[portidx];
1577 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(comp);
1582 if (wsa884x->port_enable[portidx])
1585 wsa884x->port_enable[portidx] = true;
1587 if (!wsa884x->port_enable[portidx])
1590 wsa884x->port_enable[portidx] = false;
1598 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(comp);
1600 snd_soc_component_init_regmap(comp, wsa884x->regmap);
1606 struct wsa884x_priv *wsa884x)
1610 wsa884x_set_gain_parameters(wsa884x);
1611 if (wsa884x->dev_mode == WSA884X_RECEIVER) {
1626 if (wsa884x->port_enable[WSA884X_PORT_PBR]) {
1631 if (wsa884x->dev_mode == WSA884X_RECEIVER)
1648 struct wsa884x_priv *wsa884x = snd_soc_component_get_drvdata(component);
1652 wsa884x_spkr_post_pmu(component, wsa884x);
1721 struct wsa884x_priv *wsa884x = dev_get_drvdata(dai->dev);
1724 wsa884x->active_ports = 0;
1726 if (!wsa884x->port_enable[i])
1729 wsa884x->port_config[wsa884x->active_ports] = wsa884x_pconfig[i];
1730 wsa884x->active_ports++;
1733 wsa884x->sconfig.frame_rate = params_rate(params);
1735 return sdw_stream_add_slave(wsa884x->slave, &wsa884x->sconfig,
1736 wsa884x->port_config, wsa884x->active_ports,
1737 wsa884x->sruntime);
1743 struct wsa884x_priv *wsa884x = dev_get_drvdata(dai->dev);
1745 sdw_stream_remove_slave(wsa884x->slave, wsa884x->sruntime);
1777 struct wsa884x_priv *wsa884x = dev_get_drvdata(dai->dev);
1779 wsa884x->sruntime = stream;
1821 struct wsa884x_priv *wsa884x;
1825 wsa884x = devm_kzalloc(dev, sizeof(*wsa884x), GFP_KERNEL);
1826 if (!wsa884x)
1830 wsa884x->supplies[i].supply = wsa884x_supply_name[i];
1833 wsa884x->supplies);
1837 ret = regulator_bulk_enable(WSA884X_SUPPLIES_NUM, wsa884x->supplies);
1842 wsa884x->supplies);
1846 wsa884x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
1848 if (IS_ERR(wsa884x->sd_n))
1849 return dev_err_probe(dev, PTR_ERR(wsa884x->sd_n),
1852 dev_set_drvdata(dev, wsa884x);
1853 wsa884x->slave = pdev;
1854 wsa884x->dev = dev;
1855 wsa884x->dev_mode = WSA884X_SPEAKER;
1856 wsa884x->sconfig.ch_count = 1;
1857 wsa884x->sconfig.bps = 1;
1858 wsa884x->sconfig.direction = SDW_DATA_DIR_RX;
1859 wsa884x->sconfig.type = SDW_STREAM_PDM;
1867 gpiod_direction_output(wsa884x->sd_n, 0);
1868 ret = devm_add_action_or_reset(dev, wsa884x_gpio_powerdown, wsa884x->sd_n);
1872 wsa884x->regmap = devm_regmap_init_sdw(pdev, &wsa884x_regmap_config);
1873 if (IS_ERR(wsa884x->regmap))
1874 return dev_err_probe(dev, PTR_ERR(wsa884x->regmap),
1878 regcache_cache_only(wsa884x->regmap, true);
1879 wsa884x->hw_init = true;
1925 .name = "wsa884x-codec",