Lines Matching full:wsa883x
1041 static int wsa883x_init(struct wsa883x_priv *wsa883x)
1043 struct regmap *regmap = wsa883x->regmap;
1057 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8830\n",
1061 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8835\n",
1065 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8832\n",
1069 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8835_V2\n",
1076 wsa883x->comp_offset = COMP_OFFSET2;
1082 wsa883x->comp_offset = COMP_OFFSET3;
1085 wsa883x->comp_offset);
1094 struct wsa883x_priv *wsa883x = dev_get_drvdata(&slave->dev);
1097 return wsa883x_init(wsa883x);
1106 struct wsa883x_priv *wsa883x = dev_get_drvdata(&slave->dev);
1109 wsa883x->port_prepared[prepare_ch->num - 1] = true;
1111 wsa883x->port_prepared[prepare_ch->num - 1] = false;
1125 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component);
1127 ucontrol->value.enumerated.item[0] = wsa883x->dev_mode;
1136 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component);
1138 if (wsa883x->dev_mode == ucontrol->value.enumerated.item[0])
1141 wsa883x->dev_mode = ucontrol->value.enumerated.item[0];
1192 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component);
1194 ucontrol->value.integer.value[0] = wsa883x->comp_offset;
1203 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component);
1205 if (wsa883x->comp_offset == ucontrol->value.integer.value[0])
1208 wsa883x->comp_offset = ucontrol->value.integer.value[0];
1215 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(comp);
1217 snd_soc_component_init_regmap(comp, wsa883x->regmap);
1226 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component);
1230 mutex_lock(&wsa883x->sp_lock);
1231 wsa883x->pa_on = true;
1232 mutex_unlock(&wsa883x->sp_lock);
1234 switch (wsa883x->dev_mode) {
1259 if (wsa883x->port_enable[WSA883X_PORT_COMP])
1262 wsa883x->comp_offset);
1283 mutex_lock(&wsa883x->sp_lock);
1284 wsa883x->pa_on = false;
1285 mutex_unlock(&wsa883x->sp_lock);
1318 .name = "WSA883x",
1332 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev);
1335 wsa883x->active_ports = 0;
1337 if (!wsa883x->port_enable[i])
1340 wsa883x->port_config[wsa883x->active_ports] = wsa883x_pconfig[i];
1341 wsa883x->active_ports++;
1344 wsa883x->sconfig.frame_rate = params_rate(params);
1346 return sdw_stream_add_slave(wsa883x->slave, &wsa883x->sconfig,
1347 wsa883x->port_config, wsa883x->active_ports,
1348 wsa883x->sruntime);
1354 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev);
1356 sdw_stream_remove_slave(wsa883x->slave, wsa883x->sruntime);
1364 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev);
1366 wsa883x->sruntime = stream;
1418 static int wsa883x_get_temp(struct wsa883x_priv *wsa883x, long *temp)
1427 guard(mutex)(&wsa883x->sp_lock);
1429 if (wsa883x->pa_on) {
1434 *temp = wsa883x->temperature * 1000;
1438 ret = pm_runtime_resume_and_get(wsa883x->dev);
1456 regmap_update_bits(wsa883x->regmap, WSA883X_PA_FSM_BYP, mask, mask);
1458 regmap_update_bits(wsa883x->regmap, WSA883X_TADC_VALUE_CTL,
1462 regmap_read(wsa883x->regmap, WSA883X_TEMP_MSB, &dmeas_msb);
1463 regmap_read(wsa883x->regmap, WSA883X_TEMP_LSB, &dmeas_lsb);
1465 regmap_update_bits(wsa883x->regmap, WSA883X_TADC_VALUE_CTL,
1469 regmap_read(wsa883x->regmap, WSA883X_OTP_REG_1, &d1_msb);
1470 regmap_read(wsa883x->regmap, WSA883X_OTP_REG_2, &d1_lsb);
1471 regmap_read(wsa883x->regmap, WSA883X_OTP_REG_3, &d2_msb);
1472 regmap_read(wsa883x->regmap, WSA883X_OTP_REG_4, &d2_lsb);
1474 regmap_update_bits(wsa883x->regmap, WSA883X_PA_FSM_BYP, mask, 0x0);
1489 wsa883x->temperature = val;
1496 pm_runtime_put_autosuspend(wsa883x->dev);
1553 struct wsa883x_priv *wsa883x = data;
1555 if (wsa883x->sd_reset)
1556 reset_control_assert(wsa883x->sd_reset);
1558 gpiod_direction_output(wsa883x->sd_n, 1);
1561 static void wsa883x_reset_deassert(struct wsa883x_priv *wsa883x)
1563 if (wsa883x->sd_reset)
1564 reset_control_deassert(wsa883x->sd_reset);
1566 gpiod_direction_output(wsa883x->sd_n, 0);
1569 static int wsa883x_get_reset(struct device *dev, struct wsa883x_priv *wsa883x)
1571 wsa883x->sd_reset = devm_reset_control_get_optional_shared(dev, NULL);
1572 if (IS_ERR(wsa883x->sd_reset))
1573 return dev_err_probe(dev, PTR_ERR(wsa883x->sd_reset),
1579 if (!wsa883x->sd_reset) {
1580 wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
1583 if (IS_ERR(wsa883x->sd_n))
1584 return dev_err_probe(dev, PTR_ERR(wsa883x->sd_n),
1594 struct wsa883x_priv *wsa883x;
1598 wsa883x = devm_kzalloc(dev, sizeof(*wsa883x), GFP_KERNEL);
1599 if (!wsa883x)
1602 wsa883x->vdd = devm_regulator_get(dev, "vdd");
1603 if (IS_ERR(wsa883x->vdd))
1604 return dev_err_probe(dev, PTR_ERR(wsa883x->vdd),
1607 ret = regulator_enable(wsa883x->vdd);
1611 ret = wsa883x_get_reset(dev, wsa883x);
1615 dev_set_drvdata(dev, wsa883x);
1616 wsa883x->slave = pdev;
1617 wsa883x->dev = dev;
1618 wsa883x->sconfig.ch_count = 1;
1619 wsa883x->sconfig.bps = 1;
1620 wsa883x->sconfig.direction = SDW_DATA_DIR_RX;
1621 wsa883x->sconfig.type = SDW_STREAM_PDM;
1622 mutex_init(&wsa883x->sp_lock);
1637 wsa883x_reset_deassert(wsa883x);
1638 ret = devm_add_action_or_reset(dev, wsa883x_reset_assert, wsa883x);
1642 wsa883x->regmap = devm_regmap_init_sdw(pdev, &wsa883x_regmap_config);
1643 if (IS_ERR(wsa883x->regmap)) {
1644 ret = dev_err_probe(dev, PTR_ERR(wsa883x->regmap),
1652 hwmon = devm_hwmon_device_register_with_info(dev, "wsa883x",
1653 wsa883x,
1673 regulator_disable(wsa883x->vdd);
1712 .name = "wsa883x-codec",
1723 MODULE_DESCRIPTION("WSA883x codec driver");