Lines Matching defs:aw88261
3 // aw88261.c -- AW88261 ALSA SoC Audio driver
16 #include "aw88261.h"
282 static void aw88261_reg_force_set(struct aw88261 *aw88261)
284 if (aw88261->frcset_en == AW88261_FRCSET_ENABLE) {
286 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL3_REG,
289 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL5_REG,
292 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL6_REG,
295 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL7_REG,
298 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL8_REG,
301 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL9_REG,
304 dev_dbg(aw88261->aw_pa->dev, "needn't set reg value");
393 static int aw88261_dev_reg_update(struct aw88261 *aw88261,
396 struct aw_device *aw_dev = aw88261->aw_pa;
422 aw88261->amppd_st = reg_val & (~AW88261_AMPPD_MASK);
440 aw88261->efuse_check = AW88261_EF_OR_CHECK;
442 aw88261->efuse_check = AW88261_EF_AND_CHECK;
510 static int aw88261_dev_fw_update(struct aw88261 *aw88261)
512 struct aw_device *aw_dev = aw88261->aw_pa;
532 ret = aw88261_dev_reg_update(aw88261, sec_desc[AW88395_DATA_TYPE_REG].data,
544 static int aw88261_dev_start(struct aw88261 *aw88261)
546 struct aw_device *aw_dev = aw88261->aw_pa;
578 if (aw88261->amppd_st)
581 aw88261_reg_force_set(aw88261);
587 if (!aw88261->mute_st)
636 static int aw88261_reg_update(struct aw88261 *aw88261, bool force)
638 struct aw_device *aw_dev = aw88261->aw_pa;
647 ret = aw88261_dev_fw_update(aw88261);
652 ret = aw88261_dev_fw_update(aw88261);
665 static void aw88261_start_pa(struct aw88261 *aw88261)
670 ret = aw88261_reg_update(aw88261, aw88261->phase_sync);
672 dev_err(aw88261->aw_pa->dev, "fw update failed, cnt:%d\n", i);
675 ret = aw88261_dev_start(aw88261);
677 dev_err(aw88261->aw_pa->dev, "aw88261 device start failed. retry = %d", i);
680 dev_info(aw88261->aw_pa->dev, "start success\n");
688 struct aw88261 *aw88261 =
689 container_of(work, struct aw88261, start_work.work);
691 mutex_lock(&aw88261->lock);
692 aw88261_start_pa(aw88261);
693 mutex_unlock(&aw88261->lock);
696 static void aw88261_start(struct aw88261 *aw88261, bool sync_start)
698 if (aw88261->aw_pa->fw_status != AW88261_DEV_FW_OK)
701 if (aw88261->aw_pa->status == AW88261_DEV_PW_ON)
705 aw88261_start_pa(aw88261);
708 &aw88261->start_work,
714 .name = "aw88261-aif",
737 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
738 struct aw_device *aw_dev = aw88261->aw_pa;
749 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
752 struct aw_device *aw_dev = aw88261->aw_pa;
772 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
773 struct aw_device *aw_dev = aw88261->aw_pa;
784 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
787 struct aw_device *aw_dev = aw88261->aw_pa;
820 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
828 count = aw88261->aw_pa->prof_info.count;
842 prof_name = aw88261_dev_get_prof_name(aw88261->aw_pa, count);
858 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
860 ucontrol->value.integer.value[0] = aw88261->aw_pa->prof_index;
869 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
873 mutex_lock(&aw88261->lock);
874 ret = aw88261_dev_set_profile_index(aw88261->aw_pa, ucontrol->value.integer.value[0]);
877 mutex_unlock(&aw88261->lock);
881 if (aw88261->aw_pa->status) {
882 aw88261_dev_stop(aw88261->aw_pa);
883 aw88261_start(aw88261, AW88261_SYNC_START);
886 mutex_unlock(&aw88261->lock);
895 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
896 struct aw_volume_desc *vol_desc = &aw88261->aw_pa->volume_desc;
907 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
908 struct aw_volume_desc *vol_desc = &aw88261->aw_pa->volume_desc;
920 aw88261_dev_set_volume(aw88261->aw_pa, vol_desc->ctl_volume);
932 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
934 ucontrol->value.integer.value[0] = aw88261->aw_pa->fade_step;
943 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
952 if (aw88261->aw_pa->fade_step != value) {
953 aw88261->aw_pa->fade_step = value;
978 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
980 mutex_lock(&aw88261->lock);
983 aw88261_start(aw88261, AW88261_ASYNC_START);
986 aw88261_dev_stop(aw88261->aw_pa);
991 mutex_unlock(&aw88261->lock);
1013 static int aw88261_frcset_check(struct aw88261 *aw88261)
1019 ret = regmap_read(aw88261->regmap, AW88261_EFRH3_REG, ®_val);
1024 ret = regmap_read(aw88261->regmap, AW88261_EFRL3_REG, ®_val);
1029 if (aw88261->efuse_check == AW88261_EF_OR_CHECK)
1035 aw88261->frcset_en = AW88261_FRCSET_ENABLE;
1037 aw88261->frcset_en = AW88261_FRCSET_DISABLE;
1039 dev_dbg(aw88261->aw_pa->dev, "tem is 0x%04x, frcset_en is %d",
1040 tem, aw88261->frcset_en);
1045 static int aw88261_dev_init(struct aw88261 *aw88261, struct aw_container *aw_cfg)
1047 struct aw_device *aw_dev = aw88261->aw_pa;
1065 ret = aw88261_dev_fw_update(aw88261);
1071 ret = aw88261_frcset_check(aw88261);
1094 static int aw88261_request_firmware_file(struct aw88261 *aw88261)
1099 aw88261->aw_pa->fw_status = AW88261_DEV_FW_FAILED;
1101 ret = request_firmware(&cont, AW88261_ACF_FILE, aw88261->aw_pa->dev);
1103 return dev_err_probe(aw88261->aw_pa->dev, ret,
1106 dev_info(aw88261->aw_pa->dev, "loaded %s - size: %zu\n",
1109 aw88261->aw_cfg = devm_kzalloc(aw88261->aw_pa->dev, cont->size + sizeof(int), GFP_KERNEL);
1110 if (!aw88261->aw_cfg) {
1114 aw88261->aw_cfg->len = (int)cont->size;
1115 memcpy(aw88261->aw_cfg->data, cont->data, cont->size);
1118 ret = aw88395_dev_load_acf_check(aw88261->aw_pa, aw88261->aw_cfg);
1120 dev_err(aw88261->aw_pa->dev, "load [%s] failed !", AW88261_ACF_FILE);
1124 mutex_lock(&aw88261->lock);
1126 ret = aw88261_dev_init(aw88261, aw88261->aw_cfg);
1128 dev_err(aw88261->aw_pa->dev, "dev init failed");
1129 mutex_unlock(&aw88261->lock);
1137 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
1140 INIT_DELAYED_WORK(&aw88261->start_work, aw88261_startup_work);
1142 ret = aw88261_request_firmware_file(aw88261);
1144 return dev_err_probe(aw88261->aw_pa->dev, ret,
1167 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(aw_codec);
1169 cancel_delayed_work_sync(&aw88261->start_work);
1177 static void aw88261_hw_reset(struct aw88261 *aw88261)
1179 gpiod_set_value_cansleep(aw88261->reset_gpio, 0);
1181 gpiod_set_value_cansleep(aw88261->reset_gpio, 1);
1185 static void aw88261_parse_channel_dt(struct aw88261 *aw88261)
1187 struct aw_device *aw_dev = aw88261->aw_pa;
1196 aw88261->phase_sync = sync_enable;
1199 static int aw88261_init(struct aw88261 **aw88261, struct i2c_client *i2c, struct regmap *regmap)
1222 (*aw88261)->aw_pa = aw_dev;
1236 aw88261_parse_channel_dt(*aw88261);
1243 struct aw88261 *aw88261;
1250 aw88261 = devm_kzalloc(&i2c->dev, sizeof(*aw88261), GFP_KERNEL);
1251 if (!aw88261)
1254 mutex_init(&aw88261->lock);
1256 i2c_set_clientdata(i2c, aw88261);
1258 aw88261->reset_gpio = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_LOW);
1259 if (IS_ERR(aw88261->reset_gpio))
1262 aw88261_hw_reset(aw88261);
1264 aw88261->regmap = devm_regmap_init_i2c(i2c, &aw88261_remap_config);
1265 if (IS_ERR(aw88261->regmap)) {
1266 ret = PTR_ERR(aw88261->regmap);
1271 ret = aw88261_init(&aw88261, i2c, aw88261->regmap);
1279 dev_err(&i2c->dev, "failed to register aw88261: %d", ret);