H A D | sta350.c | 43 #include <sound/sta350.h> 44 #include "sta350.h" 313 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_coefficient_get() local 319 mutex_lock(&sta350->coeff_lock); sta350_coefficient_get() 322 regmap_read(sta350->regmap, STA350_CFUD, &cfud); sta350_coefficient_get() 328 regmap_write(sta350->regmap, STA350_CFUD, cfud); sta350_coefficient_get() 330 regmap_write(sta350->regmap, STA350_CFADDR2, index); sta350_coefficient_get() 332 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x04); sta350_coefficient_get() 334 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x08); sta350_coefficient_get() 341 regmap_read(sta350->regmap, STA350_B1CF1 + i, &val); sta350_coefficient_get() 346 mutex_unlock(&sta350->coeff_lock); sta350_coefficient_get() 355 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_coefficient_put() local 362 regmap_read(sta350->regmap, STA350_CFUD, &cfud); sta350_coefficient_put() 368 regmap_write(sta350->regmap, STA350_CFUD, cfud); sta350_coefficient_put() 370 regmap_write(sta350->regmap, STA350_CFADDR2, index); sta350_coefficient_put() 372 sta350->coef_shadow[index + i] = sta350_coefficient_put() 377 regmap_write(sta350->regmap, STA350_B1CF1 + i, sta350_coefficient_put() 380 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x01); sta350_coefficient_put() 382 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x02); sta350_coefficient_put() 391 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_sync_coef_shadow() local 396 regmap_read(sta350->regmap, STA350_CFUD, &cfud); sta350_sync_coef_shadow() 400 regmap_write(sta350->regmap, STA350_CFADDR2, i); sta350_sync_coef_shadow() 401 regmap_write(sta350->regmap, STA350_B1CF1, sta350_sync_coef_shadow() 402 (sta350->coef_shadow[i] >> 16) & 0xff); sta350_sync_coef_shadow() 403 regmap_write(sta350->regmap, STA350_B1CF2, sta350_sync_coef_shadow() 404 (sta350->coef_shadow[i] >> 8) & 0xff); sta350_sync_coef_shadow() 405 regmap_write(sta350->regmap, STA350_B1CF3, sta350_sync_coef_shadow() 406 (sta350->coef_shadow[i]) & 0xff); sta350_sync_coef_shadow() 411 regmap_write(sta350->regmap, STA350_CFUD, cfud); sta350_sync_coef_shadow() 412 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x01); sta350_sync_coef_shadow() 419 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_cache_sync() local 424 regmap_read(sta350->regmap, STA350_CFUD, &mute); sta350_cache_sync() 425 regmap_write(sta350->regmap, STA350_MMUTE, mute | STA350_MMUTE_MMUTE); sta350_cache_sync() 427 rc = regcache_sync(sta350->regmap); sta350_cache_sync() 428 regmap_write(sta350->regmap, STA350_MMUTE, mute); sta350_cache_sync() 617 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_set_dai_sysclk() local 620 sta350->mclk = freq; sta350_set_dai_sysclk() 637 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_set_dai_fmt() local 651 sta350->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK; sta350_set_dai_fmt() 668 return regmap_update_bits(sta350->regmap, STA350_CONFB, sta350_set_dai_fmt() 686 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_hw_params() local 692 if (!sta350->mclk) { sta350_hw_params() 694 "sta350->mclk is unset. Unable to determine ratio\n"); sta350_hw_params() 699 ratio = sta350->mclk / rate; sta350_hw_params() 736 switch (sta350->format) { sta350_hw_params() 751 switch (sta350->format) { sta350_hw_params() 766 switch (sta350->format) { sta350_hw_params() 781 switch (sta350->format) { sta350_hw_params() 798 ret = regmap_update_bits(sta350->regmap, STA350_CONFA, sta350_hw_params() 804 ret = regmap_update_bits(sta350->regmap, STA350_CONFB, sta350_hw_params() 813 static int sta350_startup_sequence(struct sta350_priv *sta350) sta350_startup_sequence() argument 815 if (sta350->gpiod_power_down) sta350_startup_sequence() 816 gpiod_set_value(sta350->gpiod_power_down, 1); sta350_startup_sequence() 818 if (sta350->gpiod_nreset) { sta350_startup_sequence() 819 gpiod_set_value(sta350->gpiod_nreset, 0); sta350_startup_sequence() 821 gpiod_set_value(sta350->gpiod_nreset, 1); sta350_startup_sequence() 840 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_set_bias_level() local 850 regmap_update_bits(sta350->regmap, STA350_CONFF, sta350_set_bias_level() 858 ARRAY_SIZE(sta350->supplies), sta350_set_bias_level() 859 sta350->supplies); sta350_set_bias_level() 866 sta350_startup_sequence(sta350); sta350_set_bias_level() 871 regmap_update_bits(sta350->regmap, STA350_CONFF, sta350_set_bias_level() 879 regmap_update_bits(sta350->regmap, STA350_CONFF, sta350_set_bias_level() 883 if (sta350->gpiod_power_down) sta350_set_bias_level() 884 gpiod_set_value(sta350->gpiod_power_down, 0); sta350_set_bias_level() 886 if (sta350->gpiod_nreset) sta350_set_bias_level() 887 gpiod_set_value(sta350->gpiod_nreset, 0); sta350_set_bias_level() 889 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies), sta350_set_bias_level() 890 sta350->supplies); sta350_set_bias_level() 904 .name = "sta350-hifi", 917 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_probe() local 918 struct sta350_platform_data *pdata = sta350->pdata; sta350_probe() 921 ret = regulator_bulk_enable(ARRAY_SIZE(sta350->supplies), sta350_probe() 922 sta350->supplies); sta350_probe() 928 ret = sta350_startup_sequence(sta350); sta350_probe() 941 regmap_update_bits(sta350->regmap, STA350_CONFA, sta350_probe() 947 regmap_update_bits(sta350->regmap, STA350_CONFC, sta350_probe() 951 regmap_update_bits(sta350->regmap, STA350_CONFC, sta350_probe() 955 regmap_update_bits(sta350->regmap, sta350_probe() 962 regmap_update_bits(sta350->regmap, STA350_CONFE, sta350_probe() 966 regmap_update_bits(sta350->regmap, STA350_CONFE, sta350_probe() 970 regmap_update_bits(sta350->regmap, STA350_CONFE, sta350_probe() 974 regmap_update_bits(sta350->regmap, STA350_CONFE, sta350_probe() 978 regmap_update_bits(sta350->regmap, STA350_CONFE, sta350_probe() 983 regmap_update_bits(sta350->regmap, STA350_CONFF, sta350_probe() 987 regmap_update_bits(sta350->regmap, STA350_CONFF, sta350_probe() 993 regmap_update_bits(sta350->regmap, STA350_C1CFG, sta350_probe() 997 regmap_update_bits(sta350->regmap, STA350_C2CFG, sta350_probe() 1001 regmap_update_bits(sta350->regmap, STA350_C3CFG, sta350_probe() 1007 regmap_update_bits(sta350->regmap, STA350_MISC1, sta350_probe() 1011 regmap_update_bits(sta350->regmap, STA350_MISC1, sta350_probe() 1015 regmap_update_bits(sta350->regmap, STA350_MISC1, sta350_probe() 1019 regmap_update_bits(sta350->regmap, STA350_MISC1, sta350_probe() 1024 regmap_update_bits(sta350->regmap, STA350_MISC2, sta350_probe() 1031 sta350->coef_shadow[i] = 0x400000; sta350_probe() 1033 sta350->coef_shadow[i] = 0x7fffff; sta350_probe() 1034 sta350->coef_shadow[55] = 0x5a9df7; sta350_probe() 1035 sta350->coef_shadow[56] = 0x7fffff; sta350_probe() 1036 sta350->coef_shadow[59] = 0x7fffff; sta350_probe() 1037 sta350->coef_shadow[60] = 0x400000; sta350_probe() 1038 sta350->coef_shadow[61] = 0x400000; sta350_probe() 1042 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies), sta350->supplies); sta350_probe() 1049 struct sta350_priv *sta350 = snd_soc_codec_get_drvdata(codec); sta350_remove() local 1051 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies), sta350->supplies); sta350_remove() 1083 { .compatible = "st,sta350", }, 1095 static int sta350_probe_dt(struct device *dev, struct sta350_priv *sta350) sta350_probe_dt() argument 1187 sta350->pdata = pdata; sta350_probe_dt() 1197 struct sta350_priv *sta350; sta350_i2c_probe() local 1200 sta350 = devm_kzalloc(dev, sizeof(struct sta350_priv), GFP_KERNEL); sta350_i2c_probe() 1201 if (!sta350) sta350_i2c_probe() 1204 mutex_init(&sta350->coeff_lock); sta350_i2c_probe() 1205 sta350->pdata = dev_get_platdata(dev); sta350_i2c_probe() 1209 ret = sta350_probe_dt(dev, sta350); sta350_i2c_probe() 1216 sta350->gpiod_nreset = devm_gpiod_get_optional(dev, "reset", sta350_i2c_probe() 1218 if (IS_ERR(sta350->gpiod_nreset)) sta350_i2c_probe() 1219 return PTR_ERR(sta350->gpiod_nreset); sta350_i2c_probe() 1221 sta350->gpiod_power_down = devm_gpiod_get(dev, "power-down", sta350_i2c_probe() 1223 if (IS_ERR(sta350->gpiod_power_down)) sta350_i2c_probe() 1224 return PTR_ERR(sta350->gpiod_power_down); sta350_i2c_probe() 1227 for (i = 0; i < ARRAY_SIZE(sta350->supplies); i++) sta350_i2c_probe() 1228 sta350->supplies[i].supply = sta350_supply_names[i]; sta350_i2c_probe() 1230 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(sta350->supplies), sta350_i2c_probe() 1231 sta350->supplies); sta350_i2c_probe() 1237 sta350->regmap = devm_regmap_init_i2c(i2c, &sta350_regmap); sta350_i2c_probe() 1238 if (IS_ERR(sta350->regmap)) { sta350_i2c_probe() 1239 ret = PTR_ERR(sta350->regmap); sta350_i2c_probe() 1244 i2c_set_clientdata(i2c, sta350); sta350_i2c_probe() 1260 { "sta350", 0 }, 1267 .name = "sta350",
|