Lines Matching refs:cs53l30
3 * cs53l30.c -- CS53l30 ALSA Soc Audio driver
22 #include "cs53l30.h"
863 .name = "cs53l30",
922 struct cs53l30_private *cs53l30;
928 cs53l30 = devm_kzalloc(dev, sizeof(*cs53l30), GFP_KERNEL);
929 if (!cs53l30)
932 for (i = 0; i < ARRAY_SIZE(cs53l30->supplies); i++)
933 cs53l30->supplies[i].supply = cs53l30_supply_names[i];
935 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(cs53l30->supplies),
936 cs53l30->supplies);
942 ret = regulator_bulk_enable(ARRAY_SIZE(cs53l30->supplies),
943 cs53l30->supplies);
950 cs53l30->reset_gpio = devm_gpiod_get_optional(dev, "reset",
952 if (IS_ERR(cs53l30->reset_gpio)) {
953 ret = PTR_ERR(cs53l30->reset_gpio);
957 gpiod_set_value_cansleep(cs53l30->reset_gpio, 1);
959 i2c_set_clientdata(client, cs53l30);
961 cs53l30->mclk_rate = 0;
963 cs53l30->regmap = devm_regmap_init_i2c(client, &cs53l30_regmap);
964 if (IS_ERR(cs53l30->regmap)) {
965 ret = PTR_ERR(cs53l30->regmap);
971 ret = regmap_read(cs53l30->regmap, CS53L30_DEVID_AB, ®);
974 ret = regmap_read(cs53l30->regmap, CS53L30_DEVID_CD, ®);
977 ret = regmap_read(cs53l30->regmap, CS53L30_DEVID_E, ®);
987 ret = regmap_read(cs53l30->regmap, CS53L30_REVID, ®);
994 cs53l30->mclk = devm_clk_get(dev, "mclk");
995 if (IS_ERR(cs53l30->mclk)) {
996 if (PTR_ERR(cs53l30->mclk) != -ENOENT) {
997 ret = PTR_ERR(cs53l30->mclk);
1001 cs53l30->mclk = NULL;
1005 cs53l30->mute_gpio = devm_gpiod_get_optional(dev, "mute",
1007 if (IS_ERR(cs53l30->mute_gpio)) {
1008 ret = PTR_ERR(cs53l30->mute_gpio);
1012 if (cs53l30->mute_gpio) {
1014 regmap_write(cs53l30->regmap, CS53L30_MUTEP_CTL1,
1017 if (gpiod_is_active_low(cs53l30->mute_gpio))
1018 regmap_update_bits(cs53l30->regmap, CS53L30_MUTEP_CTL2,
1023 regmap_update_bits(cs53l30->regmap, CS53L30_MICBIAS_CTL,
1027 cs53l30->use_sdout2 = true;
1040 regulator_bulk_disable(ARRAY_SIZE(cs53l30->supplies),
1041 cs53l30->supplies);
1047 struct cs53l30_private *cs53l30 = i2c_get_clientdata(client);
1050 gpiod_set_value_cansleep(cs53l30->reset_gpio, 0);
1052 regulator_bulk_disable(ARRAY_SIZE(cs53l30->supplies),
1053 cs53l30->supplies);
1061 struct cs53l30_private *cs53l30 = dev_get_drvdata(dev);
1063 regcache_cache_only(cs53l30->regmap, true);
1066 gpiod_set_value_cansleep(cs53l30->reset_gpio, 0);
1068 regulator_bulk_disable(ARRAY_SIZE(cs53l30->supplies),
1069 cs53l30->supplies);
1076 struct cs53l30_private *cs53l30 = dev_get_drvdata(dev);
1079 ret = regulator_bulk_enable(ARRAY_SIZE(cs53l30->supplies),
1080 cs53l30->supplies);
1086 gpiod_set_value_cansleep(cs53l30->reset_gpio, 1);
1088 regcache_cache_only(cs53l30->regmap, false);
1089 ret = regcache_sync(cs53l30->regmap);
1105 { .compatible = "cirrus,cs53l30", },
1112 { "cs53l30", 0 },
1120 .name = "cs53l30",