Lines Matching refs:sta350

39 #include <sound/sta350.h>
40 #include "sta350.h"
306 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
312 mutex_lock(&sta350->coeff_lock);
315 regmap_read(sta350->regmap, STA350_CFUD, &cfud);
321 regmap_write(sta350->regmap, STA350_CFUD, cfud);
323 regmap_write(sta350->regmap, STA350_CFADDR2, index);
325 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x04);
327 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x08);
334 regmap_read(sta350->regmap, STA350_B1CF1 + i, &val);
339 mutex_unlock(&sta350->coeff_lock);
348 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
355 regmap_read(sta350->regmap, STA350_CFUD, &cfud);
361 regmap_write(sta350->regmap, STA350_CFUD, cfud);
363 regmap_write(sta350->regmap, STA350_CFADDR2, index);
365 sta350->coef_shadow[index + i] =
370 regmap_write(sta350->regmap, STA350_B1CF1 + i,
373 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x01);
375 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x02);
384 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
389 regmap_read(sta350->regmap, STA350_CFUD, &cfud);
393 regmap_write(sta350->regmap, STA350_CFADDR2, i);
394 regmap_write(sta350->regmap, STA350_B1CF1,
395 (sta350->coef_shadow[i] >> 16) & 0xff);
396 regmap_write(sta350->regmap, STA350_B1CF2,
397 (sta350->coef_shadow[i] >> 8) & 0xff);
398 regmap_write(sta350->regmap, STA350_B1CF3,
399 (sta350->coef_shadow[i]) & 0xff);
404 regmap_write(sta350->regmap, STA350_CFUD, cfud);
405 regmap_write(sta350->regmap, STA350_CFUD, cfud | 0x01);
412 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
417 regmap_read(sta350->regmap, STA350_CFUD, &mute);
418 regmap_write(sta350->regmap, STA350_MMUTE, mute | STA350_MMUTE_MMUTE);
420 rc = regcache_sync(sta350->regmap);
421 regmap_write(sta350->regmap, STA350_MMUTE, mute);
610 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
613 sta350->mclk = freq;
630 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
644 sta350->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
661 return regmap_update_bits(sta350->regmap, STA350_CONFB,
679 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
685 if (!sta350->mclk) {
687 "sta350->mclk is unset. Unable to determine ratio\n");
692 ratio = sta350->mclk / rate;
729 switch (sta350->format) {
744 switch (sta350->format) {
759 switch (sta350->format) {
774 switch (sta350->format) {
791 ret = regmap_update_bits(sta350->regmap, STA350_CONFA,
797 ret = regmap_update_bits(sta350->regmap, STA350_CONFB,
806 static int sta350_startup_sequence(struct sta350_priv *sta350)
808 if (sta350->gpiod_power_down)
809 gpiod_set_value(sta350->gpiod_power_down, 1);
811 if (sta350->gpiod_nreset) {
812 gpiod_set_value(sta350->gpiod_nreset, 0);
814 gpiod_set_value(sta350->gpiod_nreset, 1);
833 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
843 regmap_update_bits(sta350->regmap, STA350_CONFF,
851 ARRAY_SIZE(sta350->supplies),
852 sta350->supplies);
859 sta350_startup_sequence(sta350);
864 regmap_update_bits(sta350->regmap, STA350_CONFF,
872 regmap_update_bits(sta350->regmap, STA350_CONFF,
876 if (sta350->gpiod_power_down)
877 gpiod_set_value(sta350->gpiod_power_down, 0);
879 if (sta350->gpiod_nreset)
880 gpiod_set_value(sta350->gpiod_nreset, 0);
882 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies),
883 sta350->supplies);
896 .name = "sta350-hifi",
909 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
910 struct sta350_platform_data *pdata = sta350->pdata;
913 ret = regulator_bulk_enable(ARRAY_SIZE(sta350->supplies),
914 sta350->supplies);
920 ret = sta350_startup_sequence(sta350);
933 regmap_update_bits(sta350->regmap, STA350_CONFA,
939 regmap_update_bits(sta350->regmap, STA350_CONFC,
943 regmap_update_bits(sta350->regmap, STA350_CONFC,
947 regmap_update_bits(sta350->regmap,
954 regmap_update_bits(sta350->regmap, STA350_CONFE,
958 regmap_update_bits(sta350->regmap, STA350_CONFE,
962 regmap_update_bits(sta350->regmap, STA350_CONFE,
966 regmap_update_bits(sta350->regmap, STA350_CONFE,
970 regmap_update_bits(sta350->regmap, STA350_CONFE,
975 regmap_update_bits(sta350->regmap, STA350_CONFF,
979 regmap_update_bits(sta350->regmap, STA350_CONFF,
985 regmap_update_bits(sta350->regmap, STA350_C1CFG,
989 regmap_update_bits(sta350->regmap, STA350_C2CFG,
993 regmap_update_bits(sta350->regmap, STA350_C3CFG,
999 regmap_update_bits(sta350->regmap, STA350_MISC1,
1003 regmap_update_bits(sta350->regmap, STA350_MISC1,
1007 regmap_update_bits(sta350->regmap, STA350_MISC1,
1011 regmap_update_bits(sta350->regmap, STA350_MISC1,
1016 regmap_update_bits(sta350->regmap, STA350_MISC2,
1023 sta350->coef_shadow[i] = 0x400000;
1025 sta350->coef_shadow[i] = 0x7fffff;
1026 sta350->coef_shadow[55] = 0x5a9df7;
1027 sta350->coef_shadow[56] = 0x7fffff;
1028 sta350->coef_shadow[59] = 0x7fffff;
1029 sta350->coef_shadow[60] = 0x400000;
1030 sta350->coef_shadow[61] = 0x400000;
1034 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies), sta350->supplies);
1041 struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
1043 regulator_bulk_disable(ARRAY_SIZE(sta350->supplies), sta350->supplies);
1076 { .compatible = "st,sta350", },
1088 static int sta350_probe_dt(struct device *dev, struct sta350_priv *sta350)
1173 sta350->pdata = pdata;
1182 struct sta350_priv *sta350;
1185 sta350 = devm_kzalloc(dev, sizeof(struct sta350_priv), GFP_KERNEL);
1186 if (!sta350)
1189 mutex_init(&sta350->coeff_lock);
1190 sta350->pdata = dev_get_platdata(dev);
1194 ret = sta350_probe_dt(dev, sta350);
1201 sta350->gpiod_nreset = devm_gpiod_get_optional(dev, "reset",
1203 if (IS_ERR(sta350->gpiod_nreset))
1204 return PTR_ERR(sta350->gpiod_nreset);
1206 sta350->gpiod_power_down = devm_gpiod_get_optional(dev, "power-down",
1208 if (IS_ERR(sta350->gpiod_power_down))
1209 return PTR_ERR(sta350->gpiod_power_down);
1212 for (i = 0; i < ARRAY_SIZE(sta350->supplies); i++)
1213 sta350->supplies[i].supply = sta350_supply_names[i];
1215 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(sta350->supplies),
1216 sta350->supplies);
1222 sta350->regmap = devm_regmap_init_i2c(i2c, &sta350_regmap);
1223 if (IS_ERR(sta350->regmap)) {
1224 ret = PTR_ERR(sta350->regmap);
1229 i2c_set_clientdata(i2c, sta350);
1242 { "sta350", 0 },
1249 .name = "sta350",