Lines Matching full:wsa883x
1001 static void wsa883x_init(struct wsa883x_priv *wsa883x) in wsa883x_init() argument
1003 struct regmap *regmap = wsa883x->regmap; in wsa883x_init()
1007 wsa883x->variant = variant & WSA883X_ID_MASK; in wsa883x_init()
1010 wsa883x->version = version; in wsa883x_init()
1012 switch (wsa883x->variant) { in wsa883x_init()
1014 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8830\n", in wsa883x_init()
1015 wsa883x->version); in wsa883x_init()
1018 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8835\n", in wsa883x_init()
1019 wsa883x->version); in wsa883x_init()
1022 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8832\n", in wsa883x_init()
1023 wsa883x->version); in wsa883x_init()
1026 dev_info(wsa883x->dev, "WSA883X Version 1_%d, Variant: WSA8835_V2\n", in wsa883x_init()
1027 wsa883x->version); in wsa883x_init()
1033 wsa883x->comp_offset = COMP_OFFSET2; in wsa883x_init()
1038 if (wsa883x->variant == WSA8830 || wsa883x->variant == WSA8832) { in wsa883x_init()
1039 wsa883x->comp_offset = COMP_OFFSET3; in wsa883x_init()
1042 wsa883x->comp_offset); in wsa883x_init()
1049 struct wsa883x_priv *wsa883x = dev_get_drvdata(&slave->dev); in wsa883x_update_status() local
1052 wsa883x_init(wsa883x); in wsa883x_update_status()
1061 struct wsa883x_priv *wsa883x = dev_get_drvdata(&slave->dev); in wsa883x_port_prep() local
1064 wsa883x->port_prepared[prepare_ch->num - 1] = true; in wsa883x_port_prep()
1066 wsa883x->port_prepared[prepare_ch->num - 1] = false; in wsa883x_port_prep()
1080 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component); in wsa_dev_mode_get() local
1082 ucontrol->value.enumerated.item[0] = wsa883x->dev_mode; in wsa_dev_mode_get()
1091 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component); in wsa_dev_mode_put() local
1093 if (wsa883x->dev_mode == ucontrol->value.enumerated.item[0]) in wsa_dev_mode_put()
1096 wsa883x->dev_mode = ucontrol->value.enumerated.item[0]; in wsa_dev_mode_put()
1143 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component); in wsa883x_get_comp_offset() local
1145 ucontrol->value.integer.value[0] = wsa883x->comp_offset; in wsa883x_get_comp_offset()
1154 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component); in wsa883x_set_comp_offset() local
1156 if (wsa883x->comp_offset == ucontrol->value.integer.value[0]) in wsa883x_set_comp_offset()
1159 wsa883x->comp_offset = ucontrol->value.integer.value[0]; in wsa883x_set_comp_offset()
1166 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(comp); in wsa883x_codec_probe() local
1168 snd_soc_component_init_regmap(comp, wsa883x->regmap); in wsa883x_codec_probe()
1177 struct wsa883x_priv *wsa883x = snd_soc_component_get_drvdata(component); in wsa883x_spkr_event() local
1181 switch (wsa883x->dev_mode) { in wsa883x_spkr_event()
1209 if (wsa883x->port_enable[WSA883X_PORT_COMP]) in wsa883x_spkr_event()
1212 wsa883x->comp_offset); in wsa883x_spkr_event()
1268 .name = "WSA883x",
1282 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev); in wsa883x_hw_params() local
1285 wsa883x->active_ports = 0; in wsa883x_hw_params()
1287 if (!wsa883x->port_enable[i]) in wsa883x_hw_params()
1290 wsa883x->port_config[wsa883x->active_ports] = wsa883x_pconfig[i]; in wsa883x_hw_params()
1291 wsa883x->active_ports++; in wsa883x_hw_params()
1294 wsa883x->sconfig.frame_rate = params_rate(params); in wsa883x_hw_params()
1296 return sdw_stream_add_slave(wsa883x->slave, &wsa883x->sconfig, in wsa883x_hw_params()
1297 wsa883x->port_config, wsa883x->active_ports, in wsa883x_hw_params()
1298 wsa883x->sruntime); in wsa883x_hw_params()
1304 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev); in wsa883x_hw_free() local
1306 sdw_stream_remove_slave(wsa883x->slave, wsa883x->sruntime); in wsa883x_hw_free()
1314 struct wsa883x_priv *wsa883x = dev_get_drvdata(dai->dev); in wsa883x_set_sdw_stream() local
1316 wsa883x->sruntime = stream; in wsa883x_set_sdw_stream()
1370 struct wsa883x_priv *wsa883x; in wsa883x_probe() local
1374 wsa883x = devm_kzalloc(dev, sizeof(*wsa883x), GFP_KERNEL); in wsa883x_probe()
1375 if (!wsa883x) in wsa883x_probe()
1378 wsa883x->vdd = devm_regulator_get(dev, "vdd"); in wsa883x_probe()
1379 if (IS_ERR(wsa883x->vdd)) in wsa883x_probe()
1380 return dev_err_probe(dev, PTR_ERR(wsa883x->vdd), in wsa883x_probe()
1383 ret = regulator_enable(wsa883x->vdd); in wsa883x_probe()
1387 wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown", in wsa883x_probe()
1389 if (IS_ERR(wsa883x->sd_n)) { in wsa883x_probe()
1390 ret = dev_err_probe(dev, PTR_ERR(wsa883x->sd_n), in wsa883x_probe()
1395 dev_set_drvdata(dev, wsa883x); in wsa883x_probe()
1396 wsa883x->slave = pdev; in wsa883x_probe()
1397 wsa883x->dev = dev; in wsa883x_probe()
1398 wsa883x->sconfig.ch_count = 1; in wsa883x_probe()
1399 wsa883x->sconfig.bps = 1; in wsa883x_probe()
1400 wsa883x->sconfig.direction = SDW_DATA_DIR_RX; in wsa883x_probe()
1401 wsa883x->sconfig.type = SDW_STREAM_PDM; in wsa883x_probe()
1407 gpiod_direction_output(wsa883x->sd_n, 0); in wsa883x_probe()
1409 wsa883x->regmap = devm_regmap_init_sdw(pdev, &wsa883x_regmap_config); in wsa883x_probe()
1410 if (IS_ERR(wsa883x->regmap)) { in wsa883x_probe()
1411 gpiod_direction_output(wsa883x->sd_n, 1); in wsa883x_probe()
1412 ret = dev_err_probe(dev, PTR_ERR(wsa883x->regmap), in wsa883x_probe()
1428 regulator_disable(wsa883x->vdd); in wsa883x_probe()
1467 .name = "wsa883x-codec",
1478 MODULE_DESCRIPTION("WSA883x codec driver");