Symbol: aw88081
sound/soc/codecs/aw88081.c
1007
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
1009
ucontrol->value.integer.value[0] = aw88081->aw_pa->fade_step;
sound/soc/codecs/aw88081.c
1018
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
1027
if (aw88081->aw_pa->fade_step != value) {
sound/soc/codecs/aw88081.c
1028
aw88081->aw_pa->fade_step = value;
sound/soc/codecs/aw88081.c
1049
static void aw88081_parse_channel_dt(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
1051
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
1056
aw88081->phase_sync = of_property_read_bool(np, "awinic,sync-flag");
sound/soc/codecs/aw88081.c
1061
static int aw88081_init(struct aw88081 *aw88081, struct i2c_client *i2c, struct regmap *regmap)
sound/soc/codecs/aw88081.c
1090
aw88081->aw_pa = aw_dev;
sound/soc/codecs/aw88081.c
1100
aw88081_parse_channel_dt(aw88081);
sound/soc/codecs/aw88081.c
1105
static int aw88081_dev_init(struct aw88081 *aw88081, struct aw_container *aw_cfg)
sound/soc/codecs/aw88081.c
1107
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
1125
ret = aw88081_dev_fw_update(aw88081);
sound/soc/codecs/aw88081.c
1132
aw88081_stop(aw88081);
sound/soc/codecs/aw88081.c
1137
static int aw88081_request_firmware_file(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
1142
aw88081->aw_pa->fw_status = AW88081_DEV_FW_FAILED;
sound/soc/codecs/aw88081.c
1144
ret = request_firmware(&cont, AW88081_ACF_FILE, aw88081->aw_pa->dev);
sound/soc/codecs/aw88081.c
1148
dev_dbg(aw88081->aw_pa->dev, "loaded %s - size: %zu\n",
sound/soc/codecs/aw88081.c
1151
aw88081->aw_cfg = devm_kzalloc(aw88081->aw_pa->dev, cont->size + sizeof(int), GFP_KERNEL);
sound/soc/codecs/aw88081.c
1152
if (!aw88081->aw_cfg) {
sound/soc/codecs/aw88081.c
1156
aw88081->aw_cfg->len = (int)cont->size;
sound/soc/codecs/aw88081.c
1157
memcpy(aw88081->aw_cfg->data, cont->data, cont->size);
sound/soc/codecs/aw88081.c
1160
ret = aw88395_dev_load_acf_check(aw88081->aw_pa, aw88081->aw_cfg);
sound/soc/codecs/aw88081.c
1164
mutex_lock(&aw88081->lock);
sound/soc/codecs/aw88081.c
1165
ret = aw88081_dev_init(aw88081, aw88081->aw_cfg);
sound/soc/codecs/aw88081.c
1166
mutex_unlock(&aw88081->lock);
sound/soc/codecs/aw88081.c
1175
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
1177
mutex_lock(&aw88081->lock);
sound/soc/codecs/aw88081.c
1180
aw88081_start(aw88081, AW88081_ASYNC_START);
sound/soc/codecs/aw88081.c
1183
aw88081_stop(aw88081);
sound/soc/codecs/aw88081.c
1188
mutex_unlock(&aw88081->lock);
sound/soc/codecs/aw88081.c
1212
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
1215
INIT_DELAYED_WORK(&aw88081->start_work, aw88081_startup_work);
sound/soc/codecs/aw88081.c
1217
ret = aw88081_request_firmware_file(aw88081);
sound/soc/codecs/aw88081.c
1219
dev_err(aw88081->aw_pa->dev, "%s: request firmware failed\n", __func__);
sound/soc/codecs/aw88081.c
1226
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(aw_codec);
sound/soc/codecs/aw88081.c
1228
cancel_delayed_work_sync(&aw88081->start_work);
sound/soc/codecs/aw88081.c
1253
struct aw88081 *aw88081;
sound/soc/codecs/aw88081.c
1260
aw88081 = devm_kzalloc(&i2c->dev, sizeof(*aw88081), GFP_KERNEL);
sound/soc/codecs/aw88081.c
1261
if (!aw88081)
sound/soc/codecs/aw88081.c
1265
aw88081->devtype = id->driver_data;
sound/soc/codecs/aw88081.c
1267
mutex_init(&aw88081->lock);
sound/soc/codecs/aw88081.c
1269
i2c_set_clientdata(i2c, aw88081);
sound/soc/codecs/aw88081.c
1271
switch (aw88081->devtype) {
sound/soc/codecs/aw88081.c
1282
aw88081->regmap = devm_regmap_init_i2c(i2c, regmap_config);
sound/soc/codecs/aw88081.c
1283
if (IS_ERR(aw88081->regmap))
sound/soc/codecs/aw88081.c
1284
return dev_err_probe(&i2c->dev, PTR_ERR(aw88081->regmap),
sound/soc/codecs/aw88081.c
1288
ret = aw88081_init(aw88081, i2c, aw88081->regmap);
sound/soc/codecs/aw88081.c
212
static void aw88083_i2c_wen(struct aw88081 *aw88081, bool flag)
sound/soc/codecs/aw88081.c
214
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
216
if (aw88081->devtype != AW88083)
sound/soc/codecs/aw88081.c
392
static int aw88081_reg_value_check(struct aw88081 *aw88081,
sound/soc/codecs/aw88081.c
395
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
398
switch (aw88081->devtype) {
sound/soc/codecs/aw88081.c
414
static int aw88081_dev_reg_update(struct aw88081 *aw88081,
sound/soc/codecs/aw88081.c
417
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
441
ret = aw88081_reg_value_check(aw88081, reg_addr, &reg_val);
sound/soc/codecs/aw88081.c
491
static int aw88081_dev_fw_update(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
493
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
513
ret = aw88081_dev_reg_update(aw88081, sec_desc[AW88395_DATA_TYPE_REG].data,
sound/soc/codecs/aw88081.c
525
static int aw88081_dev_start(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
527
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
582
static int aw88083_dev_start(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
584
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
591
aw88083_i2c_wen(aw88081, true);
sound/soc/codecs/aw88081.c
605
aw88083_i2c_wen(aw88081, false);
sound/soc/codecs/aw88081.c
612
static int aw88081_device_start(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
616
switch (aw88081->devtype) {
sound/soc/codecs/aw88081.c
618
ret = aw88081_dev_start(aw88081);
sound/soc/codecs/aw88081.c
621
ret = aw88083_dev_start(aw88081);
sound/soc/codecs/aw88081.c
625
dev_err(aw88081->aw_pa->dev, "unsupported device\n");
sound/soc/codecs/aw88081.c
632
static int aw88081_dev_stop(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
634
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
663
static int aw88083_dev_stop(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
665
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
674
aw88083_i2c_wen(aw88081, true);
sound/soc/codecs/aw88081.c
688
aw88083_i2c_wen(aw88081, false);
sound/soc/codecs/aw88081.c
693
static int aw88081_stop(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
697
switch (aw88081->devtype) {
sound/soc/codecs/aw88081.c
699
ret = aw88081_dev_stop(aw88081);
sound/soc/codecs/aw88081.c
702
ret = aw88083_dev_stop(aw88081);
sound/soc/codecs/aw88081.c
705
dev_err(aw88081->aw_pa->dev, "unsupported device\n");
sound/soc/codecs/aw88081.c
713
static int aw88081_reg_update(struct aw88081 *aw88081, bool force)
sound/soc/codecs/aw88081.c
715
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
724
ret = aw88081_dev_fw_update(aw88081);
sound/soc/codecs/aw88081.c
729
ret = aw88081_dev_fw_update(aw88081);
sound/soc/codecs/aw88081.c
740
static void aw88081_start_pa(struct aw88081 *aw88081)
sound/soc/codecs/aw88081.c
745
ret = aw88081_reg_update(aw88081, aw88081->phase_sync);
sound/soc/codecs/aw88081.c
747
dev_err(aw88081->aw_pa->dev, "fw update failed, cnt:%d\n", i);
sound/soc/codecs/aw88081.c
750
ret = aw88081_device_start(aw88081);
sound/soc/codecs/aw88081.c
752
dev_err(aw88081->aw_pa->dev, "aw88081 device start failed. retry = %d", i);
sound/soc/codecs/aw88081.c
755
dev_dbg(aw88081->aw_pa->dev, "start success\n");
sound/soc/codecs/aw88081.c
763
struct aw88081 *aw88081 =
sound/soc/codecs/aw88081.c
764
container_of(work, struct aw88081, start_work.work);
sound/soc/codecs/aw88081.c
766
mutex_lock(&aw88081->lock);
sound/soc/codecs/aw88081.c
767
aw88081_start_pa(aw88081);
sound/soc/codecs/aw88081.c
768
mutex_unlock(&aw88081->lock);
sound/soc/codecs/aw88081.c
771
static void aw88081_start(struct aw88081 *aw88081, bool sync_start)
sound/soc/codecs/aw88081.c
773
if (aw88081->aw_pa->fw_status != AW88081_DEV_FW_OK)
sound/soc/codecs/aw88081.c
776
if (aw88081->aw_pa->status == AW88081_DEV_PW_ON)
sound/soc/codecs/aw88081.c
780
aw88081_start_pa(aw88081);
sound/soc/codecs/aw88081.c
783
&aw88081->start_work,
sound/soc/codecs/aw88081.c
812
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
813
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
824
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
827
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
847
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
848
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
859
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(component);
sound/soc/codecs/aw88081.c
862
struct aw_device *aw_dev = aw88081->aw_pa;
sound/soc/codecs/aw88081.c
895
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
902
count = aw88081->aw_pa->prof_info.count;
sound/soc/codecs/aw88081.c
915
ret = aw88081_dev_get_prof_name(aw88081->aw_pa, count, &prof_name);
sound/soc/codecs/aw88081.c
930
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
932
ucontrol->value.integer.value[0] = aw88081->aw_pa->prof_index;
sound/soc/codecs/aw88081.c
941
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
945
mutex_lock(&aw88081->lock);
sound/soc/codecs/aw88081.c
946
ret = aw88081_dev_set_profile_index(aw88081->aw_pa, ucontrol->value.integer.value[0]);
sound/soc/codecs/aw88081.c
949
mutex_unlock(&aw88081->lock);
sound/soc/codecs/aw88081.c
953
if (aw88081->aw_pa->status) {
sound/soc/codecs/aw88081.c
954
aw88081_stop(aw88081);
sound/soc/codecs/aw88081.c
955
aw88081_start(aw88081, AW88081_SYNC_START);
sound/soc/codecs/aw88081.c
958
mutex_unlock(&aw88081->lock);
sound/soc/codecs/aw88081.c
967
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
968
struct aw_volume_desc *vol_desc = &aw88081->aw_pa->volume_desc;
sound/soc/codecs/aw88081.c
979
struct aw88081 *aw88081 = snd_soc_component_get_drvdata(codec);
sound/soc/codecs/aw88081.c
980
struct aw_volume_desc *vol_desc = &aw88081->aw_pa->volume_desc;
sound/soc/codecs/aw88081.c
990
aw88083_i2c_wen(aw88081, true);
sound/soc/codecs/aw88081.c
994
aw88081_dev_set_volume(aw88081->aw_pa, vol_desc->ctl_volume);
sound/soc/codecs/aw88081.c
998
aw88083_i2c_wen(aw88081, false);