Lines Matching defs:aw_dev

17 static int aw_dev_dsp_write_16bit(struct aw_device *aw_dev,
22 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, dsp_addr);
24 dev_err(aw_dev->dev, "%s write addr error, ret=%d", __func__, ret);
28 ret = regmap_write(aw_dev->regmap, AW88395_DSPMDAT_REG, (u16)dsp_data);
30 dev_err(aw_dev->dev, "%s write data error, ret=%d", __func__, ret);
37 static int aw_dev_dsp_write_32bit(struct aw_device *aw_dev,
43 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, dsp_addr);
45 dev_err(aw_dev->dev, "%s write addr error, ret=%d", __func__, ret);
50 ret = regmap_write(aw_dev->regmap, AW88395_DSPMDAT_REG, (u16)temp_data);
52 dev_err(aw_dev->dev, "%s write datal error, ret=%d", __func__, ret);
57 ret = regmap_write(aw_dev->regmap, AW88395_DSPMDAT_REG, (u16)temp_data);
59 dev_err(aw_dev->dev, "%s write datah error, ret=%d", __func__, ret);
66 static int aw_dev_dsp_write(struct aw_device *aw_dev,
72 mutex_lock(&aw_dev->dsp_lock);
75 ret = aw_dev_dsp_write_16bit(aw_dev, dsp_addr, dsp_data);
77 dev_err(aw_dev->dev, "write dsp_addr[0x%x] 16-bit dsp_data[0x%x] failed",
81 ret = aw_dev_dsp_write_32bit(aw_dev, dsp_addr, dsp_data);
83 dev_err(aw_dev->dev, "write dsp_addr[0x%x] 32-bit dsp_data[0x%x] failed",
87 dev_err(aw_dev->dev, "data type[%d] unsupported", data_type);
93 if (regmap_read(aw_dev->regmap, AW88395_ID_REG, &reg_value))
94 dev_err(aw_dev->dev, "%s fail to clear chip state. Err=%d\n", __func__, ret);
95 mutex_unlock(&aw_dev->dsp_lock);
100 static int aw_dev_dsp_read_16bit(struct aw_device *aw_dev,
106 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, dsp_addr);
108 dev_err(aw_dev->dev, "%s write error, ret=%d", __func__, ret);
112 ret = regmap_read(aw_dev->regmap, AW88395_DSPMDAT_REG, &temp_data);
114 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret);
122 static int aw_dev_dsp_read_32bit(struct aw_device *aw_dev,
128 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, dsp_addr);
130 dev_err(aw_dev->dev, "%s write error, ret=%d", __func__, ret);
134 ret = regmap_read(aw_dev->regmap, AW88395_DSPMDAT_REG, &temp_data);
136 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret);
141 ret = regmap_read(aw_dev->regmap, AW88395_DSPMDAT_REG, &temp_data);
143 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret);
151 static int aw_dev_dsp_read(struct aw_device *aw_dev,
157 mutex_lock(&aw_dev->dsp_lock);
160 ret = aw_dev_dsp_read_16bit(aw_dev, dsp_addr, dsp_data);
162 dev_err(aw_dev->dev, "read dsp_addr[0x%x] 16-bit dsp_data[0x%x] failed",
166 ret = aw_dev_dsp_read_32bit(aw_dev, dsp_addr, dsp_data);
168 dev_err(aw_dev->dev, "read dsp_addr[0x%x] 32r-bit dsp_data[0x%x] failed",
172 dev_err(aw_dev->dev, "data type[%d] unsupported", data_type);
178 if (regmap_read(aw_dev->regmap, AW88395_ID_REG, &reg_value))
179 dev_err(aw_dev->dev, "%s fail to clear chip state. Err=%d\n", __func__, ret);
180 mutex_unlock(&aw_dev->dsp_lock);
186 static int aw_dev_read_chipid(struct aw_device *aw_dev, u16 *chip_id)
191 ret = regmap_read(aw_dev->regmap, AW88395_CHIP_ID_REG, &reg_val);
193 dev_err(aw_dev->dev, "%s read chipid error. ret = %d", __func__, ret);
197 dev_info(aw_dev->dev, "chip id = %x\n", reg_val);
215 static int aw_dev_dsp_fw_check(struct aw_device *aw_dev)
225 ret = aw88395_dev_get_prof_data(aw_dev, aw_dev->prof_cur, &set_prof_desc);
233 ret = aw_dev_dsp_read(aw_dev, addr, &dsp_val, AW88395_DSP_16_DATA);
235 dev_err(aw_dev->dev, "dsp read failed");
242 dev_err(aw_dev->dev, "fw check failed, addr[0x%x], read[0x%x] != bindata[0x%x]",
249 dev_err(aw_dev->dev, "fw check failed, addr[0x%x] too large", addr);
257 static int aw_dev_set_volume(struct aw_device *aw_dev, unsigned int value)
259 struct aw_volume_desc *vol_desc = &aw_dev->volume_desc;
268 ret = regmap_read(aw_dev->regmap, AW88395_SYSCTRL2_REG, &reg_value);
272 dev_dbg(aw_dev->dev, "value 0x%x , reg:0x%x", value, real_value);
278 ret = regmap_write(aw_dev->regmap, AW88395_SYSCTRL2_REG, real_value);
283 void aw88395_dev_set_volume(struct aw_device *aw_dev, unsigned short set_vol)
287 ret = aw_dev_set_volume(aw_dev, set_vol);
289 dev_dbg(aw_dev->dev, "set volume failed");
293 static void aw_dev_fade_in(struct aw_device *aw_dev)
295 struct aw_volume_desc *desc = &aw_dev->volume_desc;
297 int fade_step = aw_dev->fade_step;
300 if (fade_step == 0 || aw_dev->fade_in_time == 0) {
301 aw_dev_set_volume(aw_dev, fade_in_vol);
306 aw_dev_set_volume(aw_dev, i);
307 usleep_range(aw_dev->fade_in_time, aw_dev->fade_in_time + 10);
311 aw_dev_set_volume(aw_dev, fade_in_vol);
314 static void aw_dev_fade_out(struct aw_device *aw_dev)
316 struct aw_volume_desc *desc = &aw_dev->volume_desc;
317 int fade_step = aw_dev->fade_step;
320 if (fade_step == 0 || aw_dev->fade_out_time == 0) {
321 aw_dev_set_volume(aw_dev, AW88395_MUTE_VOL);
326 aw_dev_set_volume(aw_dev, i);
327 usleep_range(aw_dev->fade_out_time, aw_dev->fade_out_time + 10);
331 aw_dev_set_volume(aw_dev, AW88395_MUTE_VOL);
332 usleep_range(aw_dev->fade_out_time, aw_dev->fade_out_time + 10);
336 static int aw_dev_modify_dsp_cfg(struct aw_device *aw_dev,
339 struct aw_sec_data_desc *crc_dsp_cfg = &aw_dev->crc_dsp_cfg;
344 dev_dbg(aw_dev->dev, "addr:0x%x, dsp_data:0x%x", addr, dsp_data);
348 dev_err(aw_dev->dev, "addr_offset[%d] > crc_dsp_cfg->len[%d]",
362 dev_err(aw_dev->dev, "data type[%d] unsupported", data_type);
369 static int aw_dev_dsp_set_cali_re(struct aw_device *aw_dev)
374 cali_re = AW88395_SHOW_RE_TO_DSP_RE((aw_dev->cali_desc.cali_re +
375 aw_dev->cali_desc.ra), AW88395_DSP_RE_SHIFT);
378 ret = aw_dev_dsp_write(aw_dev,
381 dev_err(aw_dev->dev, "set cali re error");
385 ret = aw_dev_modify_dsp_cfg(aw_dev, AW88395_DSP_REG_CFG_ADPZ_RE,
388 dev_err(aw_dev->dev, "modify dsp cfg failed");
393 static void aw_dev_i2s_tx_enable(struct aw_device *aw_dev, bool flag)
398 ret = regmap_update_bits(aw_dev->regmap, AW88395_I2SCFG1_REG,
401 ret = regmap_update_bits(aw_dev->regmap, AW88395_I2SCFG1_REG,
406 dev_dbg(aw_dev->dev, "%s failed", __func__);
409 static int aw_dev_dsp_set_crc32(struct aw_device *aw_dev)
411 struct aw_sec_data_desc *crc_dsp_cfg = &aw_dev->crc_dsp_cfg;
417 dev_err(aw_dev->dev, "crc data len :%d > cfg_data len:%d",
423 dev_err(aw_dev->dev, "The crc data len :%d unsupport", crc_data_len);
429 return aw_dev_dsp_write(aw_dev, AW88395_DSP_REG_CRC_ADDR, crc_value,
433 static void aw_dev_dsp_check_crc_enable(struct aw_device *aw_dev, bool flag)
438 ret = regmap_update_bits(aw_dev->regmap, AW88395_HAGCCFG7_REG,
441 ret = regmap_update_bits(aw_dev->regmap, AW88395_HAGCCFG7_REG,
445 dev_dbg(aw_dev->dev, "%s failed", __func__);
448 static int aw_dev_dsp_check_st(struct aw_device *aw_dev)
455 ret = regmap_read(aw_dev->regmap, AW88395_SYSST_REG, &reg_val);
457 dev_err(aw_dev->dev, "read reg0x%x failed", AW88395_SYSST_REG);
462 dev_err(aw_dev->dev, "check dsp st fail,reg_val:0x%04x", reg_val);
466 dev_dbg(aw_dev->dev, "dsp st check ok, reg_val:0x%04x", reg_val);
474 static void aw_dev_dsp_enable(struct aw_device *aw_dev, bool is_enable)
479 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
482 dev_dbg(aw_dev->dev, "enable dsp failed");
484 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
487 dev_dbg(aw_dev->dev, "disable dsp failed");
491 static int aw_dev_dsp_check_crc32(struct aw_device *aw_dev)
495 if (aw_dev->dsp_cfg == AW88395_DEV_DSP_BYPASS) {
496 dev_info(aw_dev->dev, "dsp bypass");
500 ret = aw_dev_dsp_set_crc32(aw_dev);
502 dev_err(aw_dev->dev, "set dsp crc32 failed");
506 aw_dev_dsp_check_crc_enable(aw_dev, true);
509 aw_dev_dsp_enable(aw_dev, true);
512 ret = aw_dev_dsp_check_st(aw_dev);
514 dev_err(aw_dev->dev, "check crc32 fail");
516 aw_dev_dsp_check_crc_enable(aw_dev, false);
517 aw_dev->dsp_crc_st = AW88395_DSP_CRC_OK;
523 static void aw_dev_pwd(struct aw_device *aw_dev, bool pwd)
528 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
531 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
535 dev_dbg(aw_dev->dev, "%s failed", __func__);
538 static void aw_dev_amppd(struct aw_device *aw_dev, bool amppd)
543 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
546 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
550 dev_dbg(aw_dev->dev, "%s failed", __func__);
553 void aw88395_dev_mute(struct aw_device *aw_dev, bool is_mute)
558 aw_dev_fade_out(aw_dev);
559 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
562 ret = regmap_update_bits(aw_dev->regmap, AW88395_SYSCTRL_REG,
564 aw_dev_fade_in(aw_dev);
568 dev_dbg(aw_dev->dev, "%s failed", __func__);
572 static int aw_dev_get_icalk(struct aw_device *aw_dev, int16_t *icalk)
578 ret = regmap_read(aw_dev->regmap, AW88395_EFRM2_REG, &reg_val);
592 static int aw_dev_get_vcalk(struct aw_device *aw_dev, int16_t *vcalk)
598 ret = regmap_read(aw_dev->regmap, AW88395_EFRH_REG, &reg_val);
614 static int aw_dev_get_vcalk_dac(struct aw_device *aw_dev, int16_t *vcalk)
620 ret = regmap_read(aw_dev->regmap, AW88395_EFRM2_REG, &reg_val);
634 static int aw_dev_vsense_select(struct aw_device *aw_dev, int *vsense_select)
639 ret = regmap_read(aw_dev->regmap, AW88395_I2SCFG3_REG, &vsense_reg_val);
641 dev_err(aw_dev->dev, "read vsense_reg_val failed");
644 dev_dbg(aw_dev->dev, "vsense_reg = 0x%x", vsense_reg_val);
648 dev_dbg(aw_dev->dev, "vsense outside");
651 dev_dbg(aw_dev->dev, "vsense inside");
657 static int aw_dev_set_vcalb(struct aw_device *aw_dev)
665 ret = aw_dev_dsp_read(aw_dev, AW88395_DSP_REG_VCALB, &vcalb_adj, AW88395_DSP_16_DATA);
667 dev_err(aw_dev->dev, "read vcalb_adj failed");
671 ret = aw_dev_vsense_select(aw_dev, &vsense_select);
674 dev_dbg(aw_dev->dev, "vsense_select = %d", vsense_select);
676 ret = aw_dev_get_icalk(aw_dev, &icalk_val);
683 ret = aw_dev_get_vcalk(aw_dev, &vcalk_val);
690 dev_dbg(aw_dev->dev, "vcalk_factor=%d, vscal_factor=%d, icalk=%d, vcalk=%d",
694 ret = aw_dev_get_vcalk_dac(aw_dev, &vcalk_val);
701 dev_dbg(aw_dev->dev, "vcalk_dac_factor=%d, vscal_dac_factor=%d, icalk=%d, vcalk=%d",
706 dev_err(aw_dev->dev, "unsupport vsense status");
711 dev_err(aw_dev->dev, "vcalk:%d or desc->iscal_factor:%d unsupported",
719 dev_dbg(aw_dev->dev, "vcalb=%d, reg_val=0x%x, vcalb_adj =0x%x",
722 ret = aw_dev_dsp_write(aw_dev, AW88395_DSP_REG_VCALB, reg_val, AW88395_DSP_16_DATA);
724 dev_err(aw_dev->dev, "write vcalb failed");
728 ret = aw_dev_modify_dsp_cfg(aw_dev, AW88395_DSP_REG_VCALB,
731 dev_err(aw_dev->dev, "modify dsp cfg failed");
736 static int aw_dev_get_cali_f0_delay(struct aw_device *aw_dev)
738 struct aw_cali_delay_desc *desc = &aw_dev->cali_delay_desc;
742 ret = aw_dev_dsp_read(aw_dev,
745 dev_err(aw_dev->dev, "read cali delay failed, ret=%d", ret);
749 dev_dbg(aw_dev->dev, "read cali delay: %d ms", desc->delay);
754 static void aw_dev_get_int_status(struct aw_device *aw_dev, unsigned short *int_status)
759 ret = regmap_read(aw_dev->regmap, AW88395_SYSINT_REG, &reg_val);
761 dev_err(aw_dev->dev, "read interrupt reg fail, ret=%d", ret);
765 dev_dbg(aw_dev->dev, "read interrupt reg = 0x%04x", *int_status);
768 static void aw_dev_clear_int_status(struct aw_device *aw_dev)
773 aw_dev_get_int_status(aw_dev, &int_status);
775 aw_dev_get_int_status(aw_dev, &int_status);
777 dev_info(aw_dev->dev, "int status(%d) is not cleaned.\n", int_status);
780 static int aw_dev_get_iis_status(struct aw_device *aw_dev)
785 ret = regmap_read(aw_dev->regmap, AW88395_SYSST_REG, &reg_val);
789 dev_err(aw_dev->dev, "check pll lock fail,reg_val:0x%04x", reg_val);
796 static int aw_dev_check_mode1_pll(struct aw_device *aw_dev)
801 ret = aw_dev_get_iis_status(aw_dev);
803 dev_err(aw_dev->dev, "mode1 iis signal check error");
813 static int aw_dev_check_mode2_pll(struct aw_device *aw_dev)
818 ret = regmap_read(aw_dev->regmap, AW88395_PLLCTRL1_REG, &reg_val);
824 dev_dbg(aw_dev->dev, "CCO_MUX is already divider");
829 ret = regmap_update_bits(aw_dev->regmap, AW88395_PLLCTRL1_REG,
835 ret = aw_dev_get_iis_status(aw_dev);
837 dev_err(aw_dev->dev, "mode2 iis signal check error");
845 ret = regmap_update_bits(aw_dev->regmap, AW88395_PLLCTRL1_REG,
850 ret = aw_dev_check_mode1_pll(aw_dev);
852 dev_err(aw_dev->dev, "mode2 switch to mode1, iis signal check error");
863 static int aw_dev_check_syspll(struct aw_device *aw_dev)
867 ret = aw_dev_check_mode1_pll(aw_dev);
869 dev_dbg(aw_dev->dev, "mode1 check iis failed try switch to mode2 check");
870 ret = aw_dev_check_mode2_pll(aw_dev);
872 dev_err(aw_dev->dev, "mode2 check iis failed");
880 static int aw_dev_check_sysst(struct aw_device *aw_dev)
887 ret = regmap_read(aw_dev->regmap, AW88395_SYSST_REG, &reg_val);
894 dev_err(aw_dev->dev, "check sysst fail, cnt=%d, reg_val=0x%04x, check:0x%x",
905 static int aw_dev_check_sysint(struct aw_device *aw_dev)
909 aw_dev_get_int_status(aw_dev, &reg_val);
912 dev_err(aw_dev->dev, "pa stop check fail:0x%04x", reg_val);
919 static void aw_dev_get_cur_mode_st(struct aw_device *aw_dev)
921 struct aw_profctrl_desc *profctrl_desc = &aw_dev->profctrl_desc;
925 ret = regmap_read(aw_dev->regmap, AW88395_SYSCTRL_REG, &reg_val);
927 dev_dbg(aw_dev->dev, "%s failed", __func__);
936 static void aw_dev_get_dsp_config(struct aw_device *aw_dev, unsigned char *dsp_cfg)
941 ret = regmap_read(aw_dev->regmap, AW88395_SYSCTRL_REG, &reg_val);
943 dev_dbg(aw_dev->dev, "%s failed", __func__);
952 static void aw_dev_select_memclk(struct aw_device *aw_dev, unsigned char flag)
958 ret = regmap_update_bits(aw_dev->regmap, AW88395_DBGCTRL_REG,
962 dev_err(aw_dev->dev, "memclk select pll failed");
965 ret = regmap_update_bits(aw_dev->regmap, AW88395_DBGCTRL_REG,
969 dev_err(aw_dev->dev, "memclk select OSC failed");
972 dev_err(aw_dev->dev, "unknown memclk config, flag=0x%x", flag);
977 static int aw_dev_get_dsp_status(struct aw_device *aw_dev)
982 ret = regmap_read(aw_dev->regmap, AW88395_WDT_REG, &reg_val);
991 static int aw_dev_get_vmax(struct aw_device *aw_dev, unsigned int *vmax)
993 return aw_dev_dsp_read(aw_dev, AW88395_DSP_REG_VMAX, vmax, AW88395_DSP_16_DATA);
996 static int aw_dev_update_reg_container(struct aw_device *aw_dev,
999 struct aw_volume_desc *vol_desc = &aw_dev->volume_desc;
1012 dev_err(aw_dev->dev, "data len:%d unsupported", data_len);
1021 ret = regmap_read(aw_dev->regmap, reg_addr, &read_val);
1040 aw_dev->volume_desc.init_volume =
1043 ret = regmap_write(aw_dev->regmap, reg_addr, reg_val);
1049 aw_dev_get_cur_mode_st(aw_dev);
1051 if (aw_dev->prof_cur != aw_dev->prof_index) {
1056 aw_dev_set_volume(aw_dev, vol_desc->ctl_volume);
1059 aw_dev_get_dsp_config(aw_dev, &aw_dev->dsp_cfg);
1064 static int aw_dev_reg_update(struct aw_device *aw_dev,
1070 dev_err(aw_dev->dev, "reg data is null or len is 0");
1074 ret = aw_dev_update_reg_container(aw_dev, data, len);
1076 dev_err(aw_dev->dev, "reg update failed");
1085 struct aw_device *aw_dev =
1090 ret = aw_dev_dsp_read(aw_dev, AW88395_DSP_REG_CFG_ADPZ_RA,
1093 dev_err(aw_dev->dev, "read ra error");
1103 static int aw_dev_dsp_update_container(struct aw_device *aw_dev,
1111 mutex_lock(&aw_dev->dsp_lock);
1112 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, base);
1122 ret = regmap_raw_write(aw_dev->regmap, AW88395_DSPMDAT_REG,
1127 mutex_unlock(&aw_dev->dsp_lock);
1131 mutex_lock(&aw_dev->dsp_lock);
1133 ret = regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, base);
1138 ret = regmap_write(aw_dev->regmap, AW88395_DSPMDAT_REG,
1143 mutex_unlock(&aw_dev->dsp_lock);
1149 mutex_unlock(&aw_dev->dsp_lock);
1153 static int aw_dev_dsp_update_fw(struct aw_device *aw_dev,
1157 dev_dbg(aw_dev->dev, "dsp firmware len:%d", len);
1160 dev_err(aw_dev->dev, "dsp firmware data is null or len is 0");
1163 aw_dev_dsp_update_container(aw_dev, data, len, AW88395_DSP_FW_ADDR);
1164 aw_dev->dsp_fw_len = len;
1169 static int aw_dev_copy_to_crc_dsp_cfg(struct aw_device *aw_dev,
1172 struct aw_sec_data_desc *crc_dsp_cfg = &aw_dev->crc_dsp_cfg;
1175 crc_dsp_cfg->data = devm_kzalloc(aw_dev->dev, size, GFP_KERNEL);
1180 devm_kfree(aw_dev->dev, crc_dsp_cfg->data);
1181 crc_dsp_cfg->data = devm_kzalloc(aw_dev->dev, size, GFP_KERNEL);
1192 static int aw_dev_dsp_update_cfg(struct aw_device *aw_dev,
1197 dev_dbg(aw_dev->dev, "dsp config len:%d", len);
1200 dev_err(aw_dev->dev, "dsp config data is null or len is 0");
1204 aw_dev_dsp_update_container(aw_dev, data, len, AW88395_DSP_CFG_ADDR);
1205 aw_dev->dsp_cfg_len = len;
1207 ret = aw_dev_copy_to_crc_dsp_cfg(aw_dev, data, len);
1211 ret = aw_dev_set_vcalb(aw_dev);
1214 ret = aw_dev_get_ra(&aw_dev->cali_desc);
1217 ret = aw_dev_get_cali_f0_delay(aw_dev);
1221 ret = aw_dev_get_vmax(aw_dev, &aw_dev->vmax_desc.init_vmax);
1223 dev_err(aw_dev->dev, "get vmax failed");
1226 dev_dbg(aw_dev->dev, "get init vmax:0x%x", aw_dev->vmax_desc.init_vmax);
1227 aw_dev->dsp_crc_st = AW88395_DSP_CRC_NA;
1232 static int aw_dev_check_sram(struct aw_device *aw_dev)
1236 mutex_lock(&aw_dev->dsp_lock);
1238 regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, AW88395_DSP_ODD_NUM_BIT_TEST);
1239 regmap_read(aw_dev->regmap, AW88395_DSPMADD_REG, &reg_val);
1241 dev_err(aw_dev->dev, "check reg 0x40 odd bit failed, read[0x%x] != write[0x%x]",
1247 regmap_write(aw_dev->regmap, AW88395_DSPMADD_REG, AW88395_DSP_EVEN_NUM_BIT_TEST);
1248 regmap_read(aw_dev->regmap, AW88395_DSPMADD_REG, &reg_val);
1250 dev_err(aw_dev->dev, "check reg 0x40 even bit failed, read[0x%x] != write[0x%x]",
1256 aw_dev_dsp_write_16bit(aw_dev, AW88395_DSP_FW_ADDR, AW88395_DSP_EVEN_NUM_BIT_TEST);
1257 aw_dev_dsp_read_16bit(aw_dev, AW88395_DSP_FW_ADDR, &reg_val);
1259 dev_err(aw_dev->dev, "check dsp fw addr failed, read[0x%x] != write[0x%x]",
1265 aw_dev_dsp_write_16bit(aw_dev, AW88395_DSP_CFG_ADDR, AW88395_DSP_ODD_NUM_BIT_TEST);
1266 aw_dev_dsp_read_16bit(aw_dev, AW88395_DSP_CFG_ADDR, &reg_val);
1268 dev_err(aw_dev->dev, "check dsp cfg failed, read[0x%x] != write[0x%x]",
1272 mutex_unlock(&aw_dev->dsp_lock);
1277 mutex_unlock(&aw_dev->dsp_lock);
1281 int aw88395_dev_fw_update(struct aw_device *aw_dev, bool up_dsp_fw_en, bool force_up_en)
1288 if ((aw_dev->prof_cur == aw_dev->prof_index) &&
1290 dev_dbg(aw_dev->dev, "scene no change, not update");
1294 if (aw_dev->fw_status == AW88395_DEV_FW_FAILED) {
1295 dev_err(aw_dev->dev, "fw status[%d] error", aw_dev->fw_status);
1299 ret = aw88395_dev_get_prof_name(aw_dev, aw_dev->prof_index, &prof_name);
1303 dev_dbg(aw_dev->dev, "start update %s", prof_name);
1305 ret = aw88395_dev_get_prof_data(aw_dev, aw_dev->prof_index, &prof_index_desc);
1311 ret = aw_dev_reg_update(aw_dev, sec_desc[AW88395_DATA_TYPE_REG].data,
1314 dev_err(aw_dev->dev, "update reg failed");
1318 aw88395_dev_mute(aw_dev, true);
1320 if (aw_dev->dsp_cfg == AW88395_DEV_DSP_WORK)
1321 aw_dev_dsp_enable(aw_dev, false);
1323 aw_dev_select_memclk(aw_dev, AW88395_DEV_MEMCLK_OSC);
1326 ret = aw_dev_check_sram(aw_dev);
1328 dev_err(aw_dev->dev, "check sram failed");
1333 dev_dbg(aw_dev->dev, "fw_ver: [%x]", prof_index_desc->fw_ver);
1334 ret = aw_dev_dsp_update_fw(aw_dev, sec_desc[AW88395_DATA_TYPE_DSP_FW].data,
1337 dev_err(aw_dev->dev, "update dsp fw failed");
1343 ret = aw_dev_dsp_update_cfg(aw_dev, sec_desc[AW88395_DATA_TYPE_DSP_CFG].data,
1346 dev_err(aw_dev->dev, "update dsp cfg failed");
1350 aw_dev_select_memclk(aw_dev, AW88395_DEV_MEMCLK_PLL);
1352 aw_dev->prof_cur = aw_dev->prof_index;
1357 aw_dev_select_memclk(aw_dev, AW88395_DEV_MEMCLK_PLL);
1362 static int aw_dev_dsp_check(struct aw_device *aw_dev)
1366 switch (aw_dev->dsp_cfg) {
1368 dev_dbg(aw_dev->dev, "dsp bypass");
1372 aw_dev_dsp_enable(aw_dev, false);
1373 aw_dev_dsp_enable(aw_dev, true);
1376 ret = aw_dev_get_dsp_status(aw_dev);
1378 dev_err(aw_dev->dev, "dsp wdt status error=%d", ret);
1384 dev_err(aw_dev->dev, "unknown dsp cfg=%d", aw_dev->dsp_cfg);
1394 struct aw_device *aw_dev =
1398 if ((aw_dev->cali_desc.cali_re < AW88395_CALI_RE_MAX) &&
1399 (aw_dev->cali_desc.cali_re > AW88395_CALI_RE_MIN)) {
1401 ret = aw_dev_dsp_set_cali_re(aw_dev);
1403 dev_err(aw_dev->dev, "set cali re failed");
1407 int aw88395_dev_start(struct aw_device *aw_dev)
1411 if (aw_dev->status == AW88395_DEV_PW_ON) {
1412 dev_info(aw_dev->dev, "already power on");
1416 aw_dev_pwd(aw_dev, false);
1419 ret = aw_dev_check_syspll(aw_dev);
1421 dev_err(aw_dev->dev, "pll check failed cannot start");
1426 aw_dev_amppd(aw_dev, false);
1430 ret = aw_dev_check_sysst(aw_dev);
1432 dev_err(aw_dev->dev, "sysst check failed");
1436 if (aw_dev->dsp_cfg == AW88395_DEV_DSP_WORK) {
1438 aw_dev_dsp_enable(aw_dev, false);
1439 ret = aw_dev_dsp_fw_check(aw_dev);
1443 aw_dev_update_cali_re(&aw_dev->cali_desc);
1445 if (aw_dev->dsp_crc_st != AW88395_DSP_CRC_OK) {
1446 ret = aw_dev_dsp_check_crc32(aw_dev);
1448 dev_err(aw_dev->dev, "dsp crc check failed");
1453 ret = aw_dev_dsp_check(aw_dev);
1455 dev_err(aw_dev->dev, "dsp status check failed");
1459 dev_dbg(aw_dev->dev, "start pa with dsp bypass");
1463 aw_dev_i2s_tx_enable(aw_dev, true);
1466 aw88395_dev_mute(aw_dev, false);
1468 aw_dev_clear_int_status(aw_dev);
1469 aw_dev->status = AW88395_DEV_PW_ON;
1475 aw_dev_dsp_enable(aw_dev, false);
1478 aw_dev_clear_int_status(aw_dev);
1479 aw_dev_amppd(aw_dev, true);
1481 aw_dev_pwd(aw_dev, true);
1482 aw_dev->status = AW88395_DEV_PW_OFF;
1488 int aw88395_dev_stop(struct aw_device *aw_dev)
1491 &aw_dev->prof_info.prof_desc[aw_dev->prof_cur].sec_desc[AW88395_DATA_TYPE_DSP_CFG];
1493 &aw_dev->prof_info.prof_desc[aw_dev->prof_cur].sec_desc[AW88395_DATA_TYPE_DSP_FW];
1497 if (aw_dev->status == AW88395_DEV_PW_OFF) {
1498 dev_info(aw_dev->dev, "already power off");
1502 aw_dev->status = AW88395_DEV_PW_OFF;
1505 aw88395_dev_mute(aw_dev, true);
1509 aw_dev_i2s_tx_enable(aw_dev, false);
1513 int_st = aw_dev_check_sysint(aw_dev);
1516 aw_dev_dsp_enable(aw_dev, false);
1519 aw_dev_amppd(aw_dev, true);
1523 aw_dev_select_memclk(aw_dev, AW88395_DEV_MEMCLK_OSC);
1524 ret = aw_dev_dsp_update_fw(aw_dev, dsp_fw->data, dsp_fw->len);
1526 dev_err(aw_dev->dev, "update dsp fw failed");
1527 ret = aw_dev_dsp_update_cfg(aw_dev, dsp_cfg->data, dsp_cfg->len);
1529 dev_err(aw_dev->dev, "update dsp cfg failed");
1530 aw_dev_select_memclk(aw_dev, AW88395_DEV_MEMCLK_PLL);
1534 aw_dev_pwd(aw_dev, true);
1540 int aw88395_dev_init(struct aw_device *aw_dev, struct aw_container *aw_cfg)
1544 if ((!aw_dev) || (!aw_cfg)) {
1545 pr_err("aw_dev is NULL or aw_cfg is NULL");
1548 ret = aw88395_dev_cfg_load(aw_dev, aw_cfg);
1550 dev_err(aw_dev->dev, "aw_dev acf parse failed");
1553 aw_dev->fade_in_time = AW88395_1000_US / 10;
1554 aw_dev->fade_out_time = AW88395_1000_US >> 1;
1555 aw_dev->prof_cur = aw_dev->prof_info.prof_desc[0].id;
1556 aw_dev->prof_index = aw_dev->prof_info.prof_desc[0].id;
1558 ret = aw88395_dev_fw_update(aw_dev, AW88395_FORCE_UPDATE_ON, AW88395_DSP_FW_UPDATE_ON);
1560 dev_err(aw_dev->dev, "fw update failed ret = %d\n", ret);
1565 aw88395_dev_mute(aw_dev, true);
1569 aw_dev_i2s_tx_enable(aw_dev, false);
1573 aw_dev_dsp_enable(aw_dev, false);
1575 aw_dev_amppd(aw_dev, true);
1577 aw_dev_pwd(aw_dev, true);
1583 static void aw88395_parse_channel_dt(struct aw_device *aw_dev)
1585 struct device_node *np = aw_dev->dev->of_node;
1591 dev_dbg(aw_dev->dev,
1593 aw_dev->channel = AW88395_DEV_DEFAULT_CH;
1597 dev_dbg(aw_dev->dev, "read audio-channel value is: %d",
1599 aw_dev->channel = channel_value;
1602 static int aw_dev_init(struct aw_device *aw_dev)
1604 aw_dev->chip_id = AW88395_CHIP_ID;
1606 aw_dev->acf = NULL;
1607 aw_dev->prof_info.prof_desc = NULL;
1608 aw_dev->prof_info.count = 0;
1609 aw_dev->prof_info.prof_type = AW88395_DEV_NONE_TYPE_ID;
1610 aw_dev->channel = 0;
1611 aw_dev->fw_status = AW88395_DEV_FW_FAILED;
1613 aw_dev->fade_step = AW88395_VOLUME_STEP_DB;
1614 aw_dev->volume_desc.ctl_volume = AW88395_VOL_DEFAULT_VALUE;
1615 aw88395_parse_channel_dt(aw_dev);
1620 int aw88395_dev_get_profile_count(struct aw_device *aw_dev)
1622 return aw_dev->prof_info.count;
1626 int aw88395_dev_get_profile_index(struct aw_device *aw_dev)
1628 return aw_dev->prof_index;
1632 int aw88395_dev_set_profile_index(struct aw_device *aw_dev, int index)
1635 if ((index >= aw_dev->prof_info.count) || (index < 0))
1638 if (aw_dev->prof_index == index)
1641 aw_dev->prof_index = index;
1642 dev_dbg(aw_dev->dev, "set prof[%s]",
1643 aw_dev->prof_info.prof_name_list[aw_dev->prof_info.prof_desc[index].id]);
1649 int aw88395_dev_get_prof_name(struct aw_device *aw_dev, int index, char **prof_name)
1651 struct aw_prof_info *prof_info = &aw_dev->prof_info;
1654 if ((index >= aw_dev->prof_info.count) || (index < 0)) {
1655 dev_err(aw_dev->dev, "index[%d] overflow count[%d]",
1656 index, aw_dev->prof_info.count);
1660 prof_desc = &aw_dev->prof_info.prof_desc[index];
1668 int aw88395_dev_get_prof_data(struct aw_device *aw_dev, int index,
1671 if ((index >= aw_dev->prof_info.count) || (index < 0)) {
1672 dev_err(aw_dev->dev, "%s: index[%d] overflow count[%d]\n",
1673 __func__, index, aw_dev->prof_info.count);
1677 *prof_desc = &aw_dev->prof_info.prof_desc[index];
1683 int aw88395_init(struct aw_device **aw_dev, struct i2c_client *i2c, struct regmap *regmap)
1688 if (*aw_dev) {
1691 *aw_dev = devm_kzalloc(&i2c->dev, sizeof(struct aw_device), GFP_KERNEL);
1692 if (!(*aw_dev))
1696 (*aw_dev)->i2c = i2c;
1697 (*aw_dev)->dev = &i2c->dev;
1698 (*aw_dev)->regmap = regmap;
1699 mutex_init(&(*aw_dev)->dsp_lock);
1702 ret = aw_dev_read_chipid((*aw_dev), &chip_id);
1710 ret = aw_dev_init((*aw_dev));
1714 dev_err((*aw_dev)->dev, "unsupported device");