1 // SPDX-License-Identifier: GPL-2.0-only 2 // 3 // aw88166.c -- ALSA SoC AW88166 codec support 4 // 5 // Copyright (c) 2025 AWINIC Technology CO., LTD 6 // 7 // Author: Weidong Wang <wangweidong.a@awinic.com> 8 // 9 10 #include <linux/crc32.h> 11 #include <linux/firmware.h> 12 #include <linux/gpio/consumer.h> 13 #include <linux/i2c.h> 14 #include <linux/regmap.h> 15 #include <sound/soc.h> 16 #include "aw88166.h" 17 #include "aw88395/aw88395_device.h" 18 19 struct aw88166 { 20 struct aw_device *aw_pa; 21 struct mutex lock; 22 struct gpio_desc *reset_gpio; 23 struct delayed_work start_work; 24 struct regmap *regmap; 25 struct aw_container *aw_cfg; 26 27 unsigned int check_val; 28 unsigned int crc_init_val; 29 unsigned int vcalb_init_val; 30 unsigned int re_init_val; 31 unsigned int dither_st; 32 bool phase_sync; 33 }; 34 35 static const struct regmap_config aw88166_remap_config = { 36 .val_bits = 16, 37 .reg_bits = 8, 38 .max_register = AW88166_REG_MAX, 39 .reg_format_endian = REGMAP_ENDIAN_LITTLE, 40 .val_format_endian = REGMAP_ENDIAN_BIG, 41 }; 42 43 static int aw_dev_dsp_write_16bit(struct aw_device *aw_dev, 44 unsigned short dsp_addr, unsigned int dsp_data) 45 { 46 int ret; 47 48 ret = regmap_write(aw_dev->regmap, AW88166_DSPMADD_REG, dsp_addr); 49 if (ret) { 50 dev_err(aw_dev->dev, "%s write addr error, ret=%d", __func__, ret); 51 return ret; 52 } 53 54 ret = regmap_write(aw_dev->regmap, AW88166_DSPMDAT_REG, (u16)dsp_data); 55 if (ret) { 56 dev_err(aw_dev->dev, "%s write data error, ret=%d", __func__, ret); 57 return ret; 58 } 59 60 return 0; 61 } 62 63 static int aw_dev_dsp_read_16bit(struct aw_device *aw_dev, 64 unsigned short dsp_addr, unsigned int *dsp_data) 65 { 66 unsigned int temp_data; 67 int ret; 68 69 ret = regmap_write(aw_dev->regmap, AW88166_DSPMADD_REG, dsp_addr); 70 if (ret) { 71 dev_err(aw_dev->dev, "%s write error, ret=%d", __func__, ret); 72 return ret; 73 } 74 75 ret = regmap_read(aw_dev->regmap, AW88166_DSPMDAT_REG, &temp_data); 76 if (ret) { 77 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret); 78 return ret; 79 } 80 *dsp_data = temp_data; 81 82 return 0; 83 } 84 85 static int aw_dev_dsp_read_32bit(struct aw_device *aw_dev, 86 unsigned short dsp_addr, unsigned int *dsp_data) 87 { 88 unsigned int temp_data; 89 int ret; 90 91 ret = regmap_write(aw_dev->regmap, AW88166_DSPMADD_REG, dsp_addr); 92 if (ret) { 93 dev_err(aw_dev->dev, "%s write error, ret=%d", __func__, ret); 94 return ret; 95 } 96 97 ret = regmap_read(aw_dev->regmap, AW88166_DSPMDAT_REG, &temp_data); 98 if (ret) { 99 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret); 100 return ret; 101 } 102 *dsp_data = temp_data; 103 104 ret = regmap_read(aw_dev->regmap, AW88166_DSPMDAT_REG, &temp_data); 105 if (ret) { 106 dev_err(aw_dev->dev, "%s read error, ret=%d", __func__, ret); 107 return ret; 108 } 109 *dsp_data |= (temp_data << 16); 110 111 return 0; 112 } 113 114 static int aw_dev_dsp_read(struct aw_device *aw_dev, 115 unsigned short dsp_addr, unsigned int *dsp_data, unsigned char data_type) 116 { 117 u32 reg_value; 118 int ret; 119 120 mutex_lock(&aw_dev->dsp_lock); 121 switch (data_type) { 122 case AW88166_DSP_16_DATA: 123 ret = aw_dev_dsp_read_16bit(aw_dev, dsp_addr, dsp_data); 124 if (ret) 125 dev_err(aw_dev->dev, "read dsp_addr[0x%x] 16-bit failed", (u32)dsp_addr); 126 break; 127 case AW88166_DSP_32_DATA: 128 ret = aw_dev_dsp_read_32bit(aw_dev, dsp_addr, dsp_data); 129 if (ret) 130 dev_err(aw_dev->dev, "read dsp_addr[0x%x] 32-bit failed", (u32)dsp_addr); 131 break; 132 default: 133 dev_err(aw_dev->dev, "data type[%d] unsupported", data_type); 134 ret = -EINVAL; 135 break; 136 } 137 138 /* clear dsp chip select state */ 139 if (regmap_read(aw_dev->regmap, AW88166_ID_REG, ®_value)) 140 dev_err(aw_dev->dev, "%s fail to clear chip state. ret=%d\n", __func__, ret); 141 mutex_unlock(&aw_dev->dsp_lock); 142 143 return ret; 144 } 145 146 static void aw_dev_pwd(struct aw_device *aw_dev, bool pwd) 147 { 148 int ret; 149 150 if (pwd) 151 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 152 ~AW88166_PWDN_MASK, AW88166_PWDN_POWER_DOWN_VALUE); 153 else 154 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 155 ~AW88166_PWDN_MASK, AW88166_PWDN_WORKING_VALUE); 156 157 if (ret) 158 dev_dbg(aw_dev->dev, "%s failed", __func__); 159 } 160 161 static void aw_dev_get_int_status(struct aw_device *aw_dev, unsigned short *int_status) 162 { 163 unsigned int reg_val; 164 int ret; 165 166 ret = regmap_read(aw_dev->regmap, AW88166_SYSINT_REG, ®_val); 167 if (ret) 168 dev_err(aw_dev->dev, "read interrupt reg fail, ret=%d", ret); 169 else 170 *int_status = reg_val; 171 172 dev_dbg(aw_dev->dev, "read interrupt reg=0x%04x", *int_status); 173 } 174 175 static void aw_dev_clear_int_status(struct aw_device *aw_dev) 176 { 177 u16 int_status; 178 179 /* read int status and clear */ 180 aw_dev_get_int_status(aw_dev, &int_status); 181 /* make sure int status is clear */ 182 aw_dev_get_int_status(aw_dev, &int_status); 183 if (int_status) 184 dev_dbg(aw_dev->dev, "int status(%d) is not cleaned.\n", int_status); 185 } 186 187 static int aw_dev_get_iis_status(struct aw_device *aw_dev) 188 { 189 unsigned int reg_val; 190 int ret; 191 192 ret = regmap_read(aw_dev->regmap, AW88166_SYSST_REG, ®_val); 193 if (ret) 194 return ret; 195 if ((reg_val & AW88166_BIT_PLL_CHECK) != AW88166_BIT_PLL_CHECK) { 196 dev_err(aw_dev->dev, "check pll lock fail, reg_val:0x%04x", reg_val); 197 return -EINVAL; 198 } 199 200 return 0; 201 } 202 203 static int aw_dev_check_mode1_pll(struct aw_device *aw_dev) 204 { 205 int ret, i; 206 207 for (i = 0; i < AW88166_DEV_SYSST_CHECK_MAX; i++) { 208 ret = aw_dev_get_iis_status(aw_dev); 209 if (ret) { 210 dev_err(aw_dev->dev, "mode1 iis signal check error"); 211 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 212 } else { 213 return 0; 214 } 215 } 216 217 return -EPERM; 218 } 219 220 static int aw_dev_check_mode2_pll(struct aw_device *aw_dev) 221 { 222 unsigned int reg_val; 223 int ret, i; 224 225 ret = regmap_read(aw_dev->regmap, AW88166_PLLCTRL2_REG, ®_val); 226 if (ret) 227 return ret; 228 229 reg_val &= (~AW88166_CCO_MUX_MASK); 230 if (reg_val == AW88166_CCO_MUX_DIVIDED_VALUE) { 231 dev_dbg(aw_dev->dev, "CCO_MUX is already divider"); 232 return -EPERM; 233 } 234 235 /* change mode2 */ 236 ret = regmap_update_bits(aw_dev->regmap, AW88166_PLLCTRL2_REG, 237 ~AW88166_CCO_MUX_MASK, AW88166_CCO_MUX_DIVIDED_VALUE); 238 if (ret) 239 return ret; 240 241 for (i = 0; i < AW88166_DEV_SYSST_CHECK_MAX; i++) { 242 ret = aw_dev_get_iis_status(aw_dev); 243 if (ret) { 244 dev_err(aw_dev->dev, "mode2 iis signal check error"); 245 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 246 } else { 247 break; 248 } 249 } 250 251 /* change mode1 */ 252 regmap_update_bits(aw_dev->regmap, AW88166_PLLCTRL2_REG, 253 ~AW88166_CCO_MUX_MASK, AW88166_CCO_MUX_BYPASS_VALUE); 254 if (ret == 0) { 255 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 256 for (i = 0; i < AW88166_DEV_SYSST_CHECK_MAX; i++) { 257 ret = aw_dev_get_iis_status(aw_dev); 258 if (ret) { 259 dev_err(aw_dev->dev, "mode2 switch to mode1, iis signal check error"); 260 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 261 } else { 262 break; 263 } 264 } 265 } 266 267 return ret; 268 } 269 270 static int aw_dev_check_syspll(struct aw_device *aw_dev) 271 { 272 int ret; 273 274 ret = aw_dev_check_mode1_pll(aw_dev); 275 if (ret) { 276 dev_dbg(aw_dev->dev, "mode1 check iis failed try switch to mode2 check"); 277 ret = aw_dev_check_mode2_pll(aw_dev); 278 if (ret) { 279 dev_err(aw_dev->dev, "mode2 check iis failed"); 280 return ret; 281 } 282 } 283 284 return 0; 285 } 286 287 static int aw_dev_check_sysst(struct aw_device *aw_dev) 288 { 289 unsigned int check_val; 290 unsigned int reg_val; 291 int ret, i; 292 293 ret = regmap_read(aw_dev->regmap, AW88166_PWMCTRL3_REG, ®_val); 294 if (ret) 295 return ret; 296 297 if (reg_val & (~AW88166_NOISE_GATE_EN_MASK)) 298 check_val = AW88166_BIT_SYSST_NOSWS_CHECK; 299 else 300 check_val = AW88166_BIT_SYSST_SWS_CHECK; 301 302 for (i = 0; i < AW88166_DEV_SYSST_CHECK_MAX; i++) { 303 ret = regmap_read(aw_dev->regmap, AW88166_SYSST_REG, ®_val); 304 if (ret) 305 return ret; 306 307 if ((reg_val & (~AW88166_BIT_SYSST_CHECK_MASK) & check_val) != check_val) { 308 dev_err(aw_dev->dev, "check sysst fail, cnt=%d, reg_val=0x%04x, check:0x%x", 309 i, reg_val, AW88166_BIT_SYSST_NOSWS_CHECK); 310 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 311 } else { 312 return 0; 313 } 314 } 315 316 return -EPERM; 317 } 318 319 static void aw_dev_amppd(struct aw_device *aw_dev, bool amppd) 320 { 321 int ret; 322 323 if (amppd) 324 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 325 ~AW88166_AMPPD_MASK, AW88166_AMPPD_POWER_DOWN_VALUE); 326 else 327 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 328 ~AW88166_AMPPD_MASK, AW88166_AMPPD_WORKING_VALUE); 329 330 if (ret) 331 dev_dbg(aw_dev->dev, "%s failed", __func__); 332 } 333 334 static void aw_dev_dsp_enable(struct aw_device *aw_dev, bool is_enable) 335 { 336 int ret; 337 338 if (is_enable) 339 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 340 ~AW88166_DSPBY_MASK, AW88166_DSPBY_WORKING_VALUE); 341 else 342 ret = regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 343 ~AW88166_DSPBY_MASK, AW88166_DSPBY_BYPASS_VALUE); 344 345 if (ret) 346 dev_dbg(aw_dev->dev, "%s failed\n", __func__); 347 } 348 349 static int aw88166_dev_get_icalk(struct aw88166 *aw88166, int16_t *icalk) 350 { 351 struct aw_device *aw_dev = aw88166->aw_pa; 352 unsigned int efrm_reg_val, efrl_reg_val; 353 uint16_t ef_isn_geslp, ef_isn_h5bits; 354 uint16_t icalk_val; 355 int ret; 356 357 ret = regmap_read(aw_dev->regmap, AW88166_EFRM2_REG, &efrm_reg_val); 358 if (ret) 359 return ret; 360 361 ef_isn_geslp = (efrm_reg_val & (~AW88166_EF_ISN_GESLP_MASK)) >> 362 AW88166_EF_ISN_GESLP_SHIFT; 363 364 ret = regmap_read(aw_dev->regmap, AW88166_EFRL_REG, &efrl_reg_val); 365 if (ret) 366 return ret; 367 368 ef_isn_h5bits = (efrl_reg_val & (~AW88166_EF_ISN_H5BITS_MASK)) >> 369 AW88166_EF_ISN_H5BITS_SHIFT; 370 371 if (aw88166->check_val == AW_EF_AND_CHECK) 372 icalk_val = ef_isn_geslp & (ef_isn_h5bits | AW88166_EF_ISN_H5BITS_SIGN_MASK); 373 else 374 icalk_val = ef_isn_geslp | (ef_isn_h5bits & (~AW88166_EF_ISN_H5BITS_SIGN_MASK)); 375 376 if (icalk_val & (~AW88166_ICALK_SIGN_MASK)) 377 icalk_val = icalk_val | AW88166_ICALK_NEG_MASK; 378 *icalk = (int16_t)icalk_val; 379 380 return 0; 381 } 382 383 static int aw88166_dev_get_vcalk(struct aw88166 *aw88166, int16_t *vcalk) 384 { 385 struct aw_device *aw_dev = aw88166->aw_pa; 386 unsigned int efrm_reg_val, efrl_reg_val; 387 uint16_t ef_vsn_geslp, ef_vsn_h3bits; 388 uint16_t vcalk_val; 389 int ret; 390 391 ret = regmap_read(aw_dev->regmap, AW88166_EFRM2_REG, &efrm_reg_val); 392 if (ret) 393 return ret; 394 395 ef_vsn_geslp = (efrm_reg_val & (~AW88166_EF_VSN_GESLP_MASK)) >> 396 AW88166_EF_VSN_GESLP_SHIFT; 397 398 ret = regmap_read(aw_dev->regmap, AW88166_EFRL_REG, &efrl_reg_val); 399 if (ret) 400 return ret; 401 402 ef_vsn_h3bits = (efrl_reg_val & (~AW88166_EF_VSN_H3BITS_MASK)) >> 403 AW88166_EF_VSN_H3BITS_SHIFT; 404 405 if (aw88166->check_val == AW_EF_AND_CHECK) 406 vcalk_val = ef_vsn_geslp & (ef_vsn_h3bits | AW88166_EF_VSN_H3BITS_SIGN_MASK); 407 else 408 vcalk_val = ef_vsn_geslp | (ef_vsn_h3bits & (~AW88166_EF_VSN_H3BITS_SIGN_MASK)); 409 410 if (vcalk_val & (~AW88166_VCALK_SIGN_MASK)) 411 vcalk_val = vcalk_val | AW88166_VCALK_NEG_MASK; 412 *vcalk = (int16_t)vcalk_val; 413 414 return 0; 415 } 416 417 static int aw88166_dev_set_vcalb(struct aw88166 *aw88166) 418 { 419 struct aw_device *aw_dev = aw88166->aw_pa; 420 int32_t ical_k, vcal_k, vcalb; 421 int16_t icalk, vcalk; 422 unsigned int reg_val; 423 int ret; 424 425 ret = aw88166_dev_get_icalk(aw88166, &icalk); 426 if (ret) { 427 dev_err(aw_dev->dev, "get icalk failed\n"); 428 return ret; 429 } 430 ical_k = icalk * AW88166_ICABLK_FACTOR + AW88166_CABL_BASE_VALUE; 431 432 ret = aw88166_dev_get_vcalk(aw88166, &vcalk); 433 if (ret) { 434 dev_err(aw_dev->dev, "get vbcalk failed\n"); 435 return ret; 436 } 437 vcal_k = vcalk * AW88166_VCABLK_FACTOR + AW88166_CABL_BASE_VALUE; 438 439 vcalb = AW88166_VCALB_ACCURACY * AW88166_VSCAL_FACTOR / 440 AW88166_ISCAL_FACTOR * ical_k / vcal_k * aw88166->vcalb_init_val; 441 442 vcalb = vcalb >> AW88166_VCALB_ADJ_FACTOR; 443 reg_val = (uint32_t)vcalb; 444 445 regmap_write(aw_dev->regmap, AW88166_DSPVCALB_REG, reg_val); 446 447 return 0; 448 } 449 450 static int aw_dev_init_vcalb_update(struct aw88166 *aw88166, int flag) 451 { 452 struct aw_device *aw_dev = aw88166->aw_pa; 453 int ret; 454 455 switch (flag) { 456 case AW88166_RECOVERY_SEC_DATA: 457 ret = regmap_write(aw_dev->regmap, AW88166_DSPVCALB_REG, aw88166->vcalb_init_val); 458 break; 459 case AW88166_RECORD_SEC_DATA: 460 ret = regmap_read(aw_dev->regmap, AW88166_DSPVCALB_REG, &aw88166->vcalb_init_val); 461 break; 462 default: 463 dev_err(aw_dev->dev, "unsupported type:%d\n", flag); 464 ret = -EINVAL; 465 break; 466 } 467 468 return ret; 469 } 470 471 static int aw_dev_init_re_update(struct aw88166 *aw88166, int flag) 472 { 473 struct aw_device *aw_dev = aw88166->aw_pa; 474 unsigned int re_temp_h, re_temp_l; 475 int ret; 476 477 switch (flag) { 478 case AW88166_RECOVERY_SEC_DATA: 479 ret = regmap_write(aw_dev->regmap, AW88166_ACR1_REG, aw88166->re_init_val >> 16); 480 if (ret) 481 return ret; 482 ret = regmap_write(aw_dev->regmap, AW88166_ACR2_REG, 483 (uint16_t)aw88166->re_init_val); 484 if (ret) 485 return ret; 486 break; 487 case AW88166_RECORD_SEC_DATA: 488 ret = regmap_read(aw_dev->regmap, AW88166_ACR1_REG, &re_temp_h); 489 if (ret) 490 return ret; 491 ret = regmap_read(aw_dev->regmap, AW88166_ACR2_REG, &re_temp_l); 492 if (ret) 493 return ret; 494 aw88166->re_init_val = (re_temp_h << 16) + re_temp_l; 495 break; 496 default: 497 dev_err(aw_dev->dev, "unsupported type:%d\n", flag); 498 ret = -EINVAL; 499 break; 500 } 501 502 return ret; 503 } 504 505 static void aw_dev_backup_sec_record(struct aw88166 *aw88166) 506 { 507 aw_dev_init_vcalb_update(aw88166, AW88166_RECORD_SEC_DATA); 508 aw_dev_init_re_update(aw88166, AW88166_RECOVERY_SEC_DATA); 509 } 510 511 static void aw_dev_backup_sec_recovery(struct aw88166 *aw88166) 512 { 513 aw_dev_init_vcalb_update(aw88166, AW88166_RECOVERY_SEC_DATA); 514 aw_dev_init_re_update(aw88166, AW88166_RECOVERY_SEC_DATA); 515 } 516 517 static int aw_dev_update_cali_re(struct aw_cali_desc *cali_desc) 518 { 519 struct aw_device *aw_dev = 520 container_of(cali_desc, struct aw_device, cali_desc); 521 uint16_t re_lbits, re_hbits; 522 u32 cali_re; 523 int ret; 524 525 if ((aw_dev->cali_desc.cali_re >= AW88166_CALI_RE_MAX) || 526 (aw_dev->cali_desc.cali_re <= AW88166_CALI_RE_MIN)) 527 return -EINVAL; 528 529 cali_re = AW88166_SHOW_RE_TO_DSP_RE((aw_dev->cali_desc.cali_re + 530 aw_dev->cali_desc.ra), AW88166_DSP_RE_SHIFT); 531 532 re_hbits = (cali_re & (~AW88166_CALI_RE_HBITS_MASK)) >> AW88166_CALI_RE_HBITS_SHIFT; 533 re_lbits = (cali_re & (~AW88166_CALI_RE_LBITS_MASK)) >> AW88166_CALI_RE_LBITS_SHIFT; 534 535 ret = regmap_write(aw_dev->regmap, AW88166_ACR1_REG, re_hbits); 536 if (ret) { 537 dev_err(aw_dev->dev, "set cali re error"); 538 return ret; 539 } 540 541 ret = regmap_write(aw_dev->regmap, AW88166_ACR2_REG, re_lbits); 542 if (ret) 543 dev_err(aw_dev->dev, "set cali re error"); 544 545 return ret; 546 } 547 548 static int aw_dev_fw_crc_check(struct aw_device *aw_dev) 549 { 550 uint16_t check_val, fw_len_val; 551 unsigned int reg_val; 552 int ret; 553 554 /* calculate fw_end_addr */ 555 fw_len_val = ((aw_dev->dsp_fw_len / AW_FW_ADDR_LEN) - 1) + AW88166_CRC_FW_BASE_ADDR; 556 557 /* write fw_end_addr to crc_end_addr */ 558 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 559 ~AW88166_CRC_END_ADDR_MASK, fw_len_val); 560 if (ret) 561 return ret; 562 /* enable fw crc check */ 563 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 564 ~AW88166_CRC_CODE_EN_MASK, AW88166_CRC_CODE_EN_ENABLE_VALUE); 565 566 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 567 568 /* read crc check result */ 569 regmap_read(aw_dev->regmap, AW88166_HAGCST_REG, ®_val); 570 if (ret) 571 return ret; 572 573 check_val = (reg_val & (~AW88166_CRC_CHECK_BITS_MASK)) >> AW88166_CRC_CHECK_START_BIT; 574 575 /* disable fw crc check */ 576 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 577 ~AW88166_CRC_CODE_EN_MASK, AW88166_CRC_CODE_EN_DISABLE_VALUE); 578 if (ret) 579 return ret; 580 581 if (check_val != AW88166_CRC_CHECK_PASS_VAL) { 582 dev_err(aw_dev->dev, "%s failed, check_val 0x%x != 0x%x\n", 583 __func__, check_val, AW88166_CRC_CHECK_PASS_VAL); 584 ret = -EINVAL; 585 } 586 587 return ret; 588 } 589 590 static int aw_dev_cfg_crc_check(struct aw_device *aw_dev) 591 { 592 uint16_t check_val, cfg_len_val; 593 unsigned int reg_val; 594 int ret; 595 596 /* calculate cfg end addr */ 597 cfg_len_val = ((aw_dev->dsp_cfg_len / AW_FW_ADDR_LEN) - 1) + AW88166_CRC_CFG_BASE_ADDR; 598 599 /* write cfg_end_addr to crc_end_addr */ 600 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 601 ~AW88166_CRC_END_ADDR_MASK, cfg_len_val); 602 if (ret) 603 return ret; 604 605 /* enable cfg crc check */ 606 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 607 ~AW88166_CRC_CFG_EN_MASK, AW88166_CRC_CFG_EN_ENABLE_VALUE); 608 if (ret) 609 return ret; 610 611 usleep_range(AW88166_1000_US, AW88166_1000_US + 10); 612 613 /* read crc check result */ 614 ret = regmap_read(aw_dev->regmap, AW88166_HAGCST_REG, ®_val); 615 if (ret) 616 return ret; 617 618 check_val = (reg_val & (~AW88166_CRC_CHECK_BITS_MASK)) >> AW88166_CRC_CHECK_START_BIT; 619 620 /* disable cfg crc check */ 621 ret = regmap_update_bits(aw_dev->regmap, AW88166_CRCCTRL_REG, 622 ~AW88166_CRC_CFG_EN_MASK, AW88166_CRC_CFG_EN_DISABLE_VALUE); 623 if (ret) 624 return ret; 625 626 if (check_val != AW88166_CRC_CHECK_PASS_VAL) { 627 dev_err(aw_dev->dev, "crc_check failed, check val 0x%x != 0x%x\n", 628 check_val, AW88166_CRC_CHECK_PASS_VAL); 629 ret = -EINVAL; 630 } 631 632 return ret; 633 } 634 635 static int aw_dev_hw_crc_check(struct aw88166 *aw88166) 636 { 637 struct aw_device *aw_dev = aw88166->aw_pa; 638 int ret; 639 640 ret = regmap_update_bits(aw_dev->regmap, AW88166_I2SCFG1_REG, 641 ~AW88166_RAM_CG_BYP_MASK, AW88166_RAM_CG_BYP_BYPASS_VALUE); 642 if (ret) 643 return ret; 644 645 ret = aw_dev_fw_crc_check(aw_dev); 646 if (ret) { 647 dev_err(aw_dev->dev, "fw_crc_check failed\n"); 648 goto crc_check_failed; 649 } 650 651 ret = aw_dev_cfg_crc_check(aw_dev); 652 if (ret) { 653 dev_err(aw_dev->dev, "cfg_crc_check failed\n"); 654 goto crc_check_failed; 655 } 656 657 ret = regmap_write(aw_dev->regmap, AW88166_CRCCTRL_REG, aw88166->crc_init_val); 658 if (ret) 659 return ret; 660 661 ret = regmap_update_bits(aw_dev->regmap, AW88166_I2SCFG1_REG, 662 ~AW88166_RAM_CG_BYP_MASK, AW88166_RAM_CG_BYP_WORK_VALUE); 663 664 return ret; 665 666 crc_check_failed: 667 regmap_update_bits(aw_dev->regmap, AW88166_I2SCFG1_REG, 668 ~AW88166_RAM_CG_BYP_MASK, AW88166_RAM_CG_BYP_WORK_VALUE); 669 return ret; 670 } 671 672 static void aw_dev_i2s_tx_enable(struct aw_device *aw_dev, bool flag) 673 { 674 int ret; 675 676 if (flag) 677 ret = regmap_update_bits(aw_dev->regmap, AW88166_I2SCTRL3_REG, 678 ~AW88166_I2STXEN_MASK, AW88166_I2STXEN_ENABLE_VALUE); 679 else 680 ret = regmap_update_bits(aw_dev->regmap, AW88166_I2SCTRL3_REG, 681 ~AW88166_I2STXEN_MASK, AW88166_I2STXEN_DISABLE_VALUE); 682 683 if (ret) 684 dev_dbg(aw_dev->dev, "%s failed", __func__); 685 } 686 687 static int aw_dev_get_dsp_status(struct aw_device *aw_dev) 688 { 689 unsigned int reg_val; 690 int ret; 691 692 ret = regmap_read(aw_dev->regmap, AW88166_WDT_REG, ®_val); 693 if (ret) 694 return ret; 695 if (!(reg_val & (~AW88166_WDT_CNT_MASK))) 696 return -EPERM; 697 698 return 0; 699 } 700 701 static int aw_dev_dsp_check(struct aw_device *aw_dev) 702 { 703 int ret, i; 704 705 switch (aw_dev->dsp_cfg) { 706 case AW88166_DEV_DSP_BYPASS: 707 dev_dbg(aw_dev->dev, "dsp bypass"); 708 ret = 0; 709 break; 710 case AW88166_DEV_DSP_WORK: 711 aw_dev_dsp_enable(aw_dev, false); 712 aw_dev_dsp_enable(aw_dev, true); 713 usleep_range(AW88166_1000_US, AW88166_1000_US + 10); 714 for (i = 0; i < AW88166_DEV_DSP_CHECK_MAX; i++) { 715 ret = aw_dev_get_dsp_status(aw_dev); 716 if (ret) { 717 dev_err(aw_dev->dev, "dsp wdt status error=%d", ret); 718 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 719 } 720 } 721 break; 722 default: 723 dev_err(aw_dev->dev, "unknown dsp cfg=%d", aw_dev->dsp_cfg); 724 ret = -EINVAL; 725 break; 726 } 727 728 return ret; 729 } 730 731 static int aw_dev_set_volume(struct aw_device *aw_dev, unsigned int value) 732 { 733 struct aw_volume_desc *vol_desc = &aw_dev->volume_desc; 734 unsigned int reg_value; 735 u16 real_value; 736 int ret; 737 738 real_value = min((value + vol_desc->init_volume), (unsigned int)AW88166_MUTE_VOL); 739 740 ret = regmap_read(aw_dev->regmap, AW88166_SYSCTRL2_REG, ®_value); 741 if (ret) 742 return ret; 743 744 dev_dbg(aw_dev->dev, "value 0x%x , reg:0x%x", value, real_value); 745 746 real_value = (real_value << AW88166_VOL_START_BIT) | (reg_value & AW88166_VOL_MASK); 747 748 ret = regmap_write(aw_dev->regmap, AW88166_SYSCTRL2_REG, real_value); 749 750 return ret; 751 } 752 753 static void aw_dev_fade_in(struct aw_device *aw_dev) 754 { 755 struct aw_volume_desc *desc = &aw_dev->volume_desc; 756 u16 fade_in_vol = desc->ctl_volume; 757 int fade_step = aw_dev->fade_step; 758 int i; 759 760 if (fade_step == 0 || aw_dev->fade_in_time == 0) { 761 aw_dev_set_volume(aw_dev, fade_in_vol); 762 return; 763 } 764 765 for (i = AW88166_MUTE_VOL; i >= fade_in_vol; i -= fade_step) { 766 aw_dev_set_volume(aw_dev, i); 767 usleep_range(aw_dev->fade_in_time, aw_dev->fade_in_time + 10); 768 } 769 770 if (i != fade_in_vol) 771 aw_dev_set_volume(aw_dev, fade_in_vol); 772 } 773 774 static void aw_dev_fade_out(struct aw_device *aw_dev) 775 { 776 struct aw_volume_desc *desc = &aw_dev->volume_desc; 777 int fade_step = aw_dev->fade_step; 778 int i; 779 780 if (fade_step == 0 || aw_dev->fade_out_time == 0) { 781 aw_dev_set_volume(aw_dev, AW88166_MUTE_VOL); 782 return; 783 } 784 785 for (i = desc->ctl_volume; i <= AW88166_MUTE_VOL; i += fade_step) { 786 aw_dev_set_volume(aw_dev, i); 787 usleep_range(aw_dev->fade_out_time, aw_dev->fade_out_time + 10); 788 } 789 790 if (i != AW88166_MUTE_VOL) { 791 aw_dev_set_volume(aw_dev, AW88166_MUTE_VOL); 792 usleep_range(aw_dev->fade_out_time, aw_dev->fade_out_time + 10); 793 } 794 } 795 796 static void aw88166_dev_mute(struct aw_device *aw_dev, bool is_mute) 797 { 798 if (is_mute) { 799 aw_dev_fade_out(aw_dev); 800 regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 801 ~AW88166_HMUTE_MASK, AW88166_HMUTE_ENABLE_VALUE); 802 } else { 803 regmap_update_bits(aw_dev->regmap, AW88166_SYSCTRL_REG, 804 ~AW88166_HMUTE_MASK, AW88166_HMUTE_DISABLE_VALUE); 805 aw_dev_fade_in(aw_dev); 806 } 807 } 808 809 static void aw88166_dev_set_dither(struct aw88166 *aw88166, bool dither) 810 { 811 struct aw_device *aw_dev = aw88166->aw_pa; 812 813 if (dither) 814 regmap_update_bits(aw_dev->regmap, AW88166_DBGCTRL_REG, 815 ~AW88166_DITHER_EN_MASK, AW88166_DITHER_EN_ENABLE_VALUE); 816 else 817 regmap_update_bits(aw_dev->regmap, AW88166_DBGCTRL_REG, 818 ~AW88166_DITHER_EN_MASK, AW88166_DITHER_EN_DISABLE_VALUE); 819 } 820 821 static int aw88166_dev_start(struct aw88166 *aw88166) 822 { 823 struct aw_device *aw_dev = aw88166->aw_pa; 824 int ret; 825 826 if (aw_dev->status == AW88166_DEV_PW_ON) { 827 dev_dbg(aw_dev->dev, "already power on"); 828 return 0; 829 } 830 831 aw88166_dev_set_dither(aw88166, false); 832 833 /* power on */ 834 aw_dev_pwd(aw_dev, false); 835 usleep_range(AW88166_2000_US, AW88166_2000_US + 10); 836 837 ret = aw_dev_check_syspll(aw_dev); 838 if (ret) { 839 dev_err(aw_dev->dev, "pll check failed cannot start\n"); 840 goto pll_check_fail; 841 } 842 843 /* amppd on */ 844 aw_dev_amppd(aw_dev, false); 845 usleep_range(AW88166_1000_US, AW88166_1000_US + 50); 846 847 /* check i2s status */ 848 ret = aw_dev_check_sysst(aw_dev); 849 if (ret) { 850 dev_err(aw_dev->dev, "sysst check failed\n"); 851 goto sysst_check_fail; 852 } 853 854 if (aw_dev->dsp_cfg == AW88166_DEV_DSP_WORK) { 855 aw_dev_backup_sec_recovery(aw88166); 856 ret = aw_dev_hw_crc_check(aw88166); 857 if (ret) { 858 dev_err(aw_dev->dev, "dsp crc check failed\n"); 859 goto crc_check_fail; 860 } 861 aw_dev_dsp_enable(aw_dev, false); 862 aw88166_dev_set_vcalb(aw88166); 863 aw_dev_update_cali_re(&aw_dev->cali_desc); 864 ret = aw_dev_dsp_check(aw_dev); 865 if (ret) { 866 dev_err(aw_dev->dev, "dsp status check failed\n"); 867 goto dsp_check_fail; 868 } 869 } else { 870 dev_dbg(aw_dev->dev, "start pa with dsp bypass"); 871 } 872 873 /* enable tx feedback */ 874 aw_dev_i2s_tx_enable(aw_dev, true); 875 876 if (aw88166->dither_st == AW88166_DITHER_EN_ENABLE_VALUE) 877 aw88166_dev_set_dither(aw88166, true); 878 879 /* close mute */ 880 aw88166_dev_mute(aw_dev, false); 881 /* clear inturrupt */ 882 aw_dev_clear_int_status(aw_dev); 883 aw_dev->status = AW88166_DEV_PW_ON; 884 885 return 0; 886 887 dsp_check_fail: 888 crc_check_fail: 889 aw_dev_dsp_enable(aw_dev, false); 890 sysst_check_fail: 891 aw_dev_clear_int_status(aw_dev); 892 aw_dev_amppd(aw_dev, true); 893 pll_check_fail: 894 aw_dev_pwd(aw_dev, true); 895 aw_dev->status = AW88166_DEV_PW_OFF; 896 897 return ret; 898 } 899 900 static int aw_dev_dsp_update_container(struct aw_device *aw_dev, 901 unsigned char *data, unsigned int len, unsigned short base) 902 { 903 u32 tmp_len; 904 int i, ret; 905 906 mutex_lock(&aw_dev->dsp_lock); 907 ret = regmap_write(aw_dev->regmap, AW88166_DSPMADD_REG, base); 908 if (ret) 909 goto error_operation; 910 911 for (i = 0; i < len; i += AW88166_MAX_RAM_WRITE_BYTE_SIZE) { 912 if ((len - i) < AW88166_MAX_RAM_WRITE_BYTE_SIZE) 913 tmp_len = len - i; 914 else 915 tmp_len = AW88166_MAX_RAM_WRITE_BYTE_SIZE; 916 917 ret = regmap_raw_write(aw_dev->regmap, AW88166_DSPMDAT_REG, 918 &data[i], tmp_len); 919 if (ret) 920 goto error_operation; 921 } 922 mutex_unlock(&aw_dev->dsp_lock); 923 924 return 0; 925 926 error_operation: 927 mutex_unlock(&aw_dev->dsp_lock); 928 return ret; 929 } 930 931 static int aw_dev_get_ra(struct aw_cali_desc *cali_desc) 932 { 933 struct aw_device *aw_dev = 934 container_of(cali_desc, struct aw_device, cali_desc); 935 u32 dsp_ra; 936 int ret; 937 938 ret = aw_dev_dsp_read(aw_dev, AW88166_DSP_REG_CFG_ADPZ_RA, 939 &dsp_ra, AW88166_DSP_32_DATA); 940 if (ret) { 941 dev_err(aw_dev->dev, "read ra error\n"); 942 return ret; 943 } 944 945 cali_desc->ra = AW88166_DSP_RE_TO_SHOW_RE(dsp_ra, 946 AW88166_DSP_RE_SHIFT); 947 948 return 0; 949 } 950 951 static int aw_dev_dsp_update_cfg(struct aw_device *aw_dev, 952 unsigned char *data, unsigned int len) 953 { 954 int ret; 955 956 dev_dbg(aw_dev->dev, "dsp config len:%d", len); 957 958 if (!len || !data) { 959 dev_err(aw_dev->dev, "dsp config data is null or len is 0\n"); 960 return -EINVAL; 961 } 962 963 ret = aw_dev_dsp_update_container(aw_dev, data, len, AW88166_DSP_CFG_ADDR); 964 if (ret) 965 return ret; 966 967 aw_dev->dsp_cfg_len = len; 968 969 ret = aw_dev_get_ra(&aw_dev->cali_desc); 970 971 return ret; 972 } 973 974 static int aw_dev_dsp_update_fw(struct aw_device *aw_dev, 975 unsigned char *data, unsigned int len) 976 { 977 int ret; 978 979 dev_dbg(aw_dev->dev, "dsp firmware len:%d", len); 980 981 if (!len || !data) { 982 dev_err(aw_dev->dev, "dsp firmware data is null or len is 0\n"); 983 return -EINVAL; 984 } 985 986 aw_dev->dsp_fw_len = len; 987 ret = aw_dev_dsp_update_container(aw_dev, data, len, AW88166_DSP_FW_ADDR); 988 989 return ret; 990 } 991 992 static int aw_dev_check_sram(struct aw_device *aw_dev) 993 { 994 unsigned int reg_val; 995 996 mutex_lock(&aw_dev->dsp_lock); 997 /* read dsp_rom_check_reg */ 998 aw_dev_dsp_read_16bit(aw_dev, AW88166_DSP_ROM_CHECK_ADDR, ®_val); 999 if (reg_val != AW88166_DSP_ROM_CHECK_DATA) { 1000 dev_err(aw_dev->dev, "check dsp rom failed, read[0x%x] != check[0x%x]\n", 1001 reg_val, AW88166_DSP_ROM_CHECK_DATA); 1002 goto error; 1003 } 1004 1005 /* check dsp_cfg_base_addr */ 1006 aw_dev_dsp_write_16bit(aw_dev, AW88166_DSP_CFG_ADDR, AW88166_DSP_ODD_NUM_BIT_TEST); 1007 aw_dev_dsp_read_16bit(aw_dev, AW88166_DSP_CFG_ADDR, ®_val); 1008 if (reg_val != AW88166_DSP_ODD_NUM_BIT_TEST) { 1009 dev_err(aw_dev->dev, "check dsp cfg failed, read[0x%x] != write[0x%x]\n", 1010 reg_val, AW88166_DSP_ODD_NUM_BIT_TEST); 1011 goto error; 1012 } 1013 mutex_unlock(&aw_dev->dsp_lock); 1014 1015 return 0; 1016 error: 1017 mutex_unlock(&aw_dev->dsp_lock); 1018 return -EPERM; 1019 } 1020 1021 static void aw_dev_select_memclk(struct aw_device *aw_dev, unsigned char flag) 1022 { 1023 int ret; 1024 1025 switch (flag) { 1026 case AW88166_DEV_MEMCLK_PLL: 1027 ret = regmap_update_bits(aw_dev->regmap, AW88166_DBGCTRL_REG, 1028 ~AW88166_MEM_CLKSEL_MASK, 1029 AW88166_MEM_CLKSEL_DAPHCLK_VALUE); 1030 if (ret) 1031 dev_err(aw_dev->dev, "memclk select pll failed\n"); 1032 break; 1033 case AW88166_DEV_MEMCLK_OSC: 1034 ret = regmap_update_bits(aw_dev->regmap, AW88166_DBGCTRL_REG, 1035 ~AW88166_MEM_CLKSEL_MASK, 1036 AW88166_MEM_CLKSEL_OSCCLK_VALUE); 1037 if (ret) 1038 dev_err(aw_dev->dev, "memclk select OSC failed\n"); 1039 break; 1040 default: 1041 dev_err(aw_dev->dev, "unknown memclk config, flag=0x%x\n", flag); 1042 break; 1043 } 1044 } 1045 1046 static int aw_dev_update_reg_container(struct aw88166 *aw88166, 1047 unsigned char *data, unsigned int len) 1048 { 1049 struct aw_device *aw_dev = aw88166->aw_pa; 1050 struct aw_volume_desc *vol_desc = &aw_dev->volume_desc; 1051 u16 read_vol, reg_val; 1052 int data_len, i, ret; 1053 int16_t *reg_data; 1054 u8 reg_addr; 1055 1056 reg_data = (int16_t *)data; 1057 data_len = len >> 1; 1058 1059 if (data_len & 0x1) { 1060 dev_err(aw_dev->dev, "data len:%d unsupported\n", data_len); 1061 return -EINVAL; 1062 } 1063 1064 for (i = 0; i < data_len; i += 2) { 1065 reg_addr = reg_data[i]; 1066 reg_val = reg_data[i + 1]; 1067 1068 if (reg_addr == AW88166_DSPVCALB_REG) { 1069 aw88166->vcalb_init_val = reg_val; 1070 continue; 1071 } 1072 1073 if (reg_addr == AW88166_SYSCTRL_REG) { 1074 if (reg_val & (~AW88166_DSPBY_MASK)) 1075 aw_dev->dsp_cfg = AW88166_DEV_DSP_BYPASS; 1076 else 1077 aw_dev->dsp_cfg = AW88166_DEV_DSP_WORK; 1078 1079 reg_val &= (AW88166_HMUTE_MASK | AW88166_PWDN_MASK | 1080 AW88166_DSPBY_MASK); 1081 reg_val |= (AW88166_HMUTE_ENABLE_VALUE | AW88166_PWDN_POWER_DOWN_VALUE | 1082 AW88166_DSPBY_BYPASS_VALUE); 1083 } 1084 1085 if (reg_addr == AW88166_I2SCTRL3_REG) { 1086 reg_val &= AW88166_I2STXEN_MASK; 1087 reg_val |= AW88166_I2STXEN_DISABLE_VALUE; 1088 } 1089 1090 if (reg_addr == AW88166_SYSCTRL2_REG) { 1091 read_vol = (reg_val & (~AW88166_VOL_MASK)) >> 1092 AW88166_VOL_START_BIT; 1093 aw_dev->volume_desc.init_volume = read_vol; 1094 } 1095 1096 if (reg_addr == AW88166_DBGCTRL_REG) { 1097 if ((reg_val & (~AW88166_EF_DBMD_MASK)) == AW88166_EF_DBMD_OR_VALUE) 1098 aw88166->check_val = AW_EF_OR_CHECK; 1099 else 1100 aw88166->check_val = AW_EF_AND_CHECK; 1101 1102 aw88166->dither_st = reg_val & (~AW88166_DITHER_EN_MASK); 1103 } 1104 1105 if (reg_addr == AW88166_ACR1_REG) { 1106 aw88166->re_init_val |= (uint32_t)reg_val << 16; 1107 continue; 1108 } 1109 1110 if (reg_addr == AW88166_ACR2_REG) { 1111 aw88166->re_init_val |= (uint32_t)reg_val; 1112 continue; 1113 } 1114 1115 if (reg_addr == AW88166_CRCCTRL_REG) 1116 aw88166->crc_init_val = reg_val; 1117 1118 ret = regmap_write(aw_dev->regmap, reg_addr, reg_val); 1119 if (ret) 1120 return ret; 1121 } 1122 1123 aw_dev_pwd(aw_dev, false); 1124 usleep_range(AW88166_1000_US, AW88166_1000_US + 10); 1125 1126 if (aw_dev->prof_cur != aw_dev->prof_index) 1127 vol_desc->ctl_volume = 0; 1128 else 1129 aw_dev_set_volume(aw_dev, vol_desc->ctl_volume); 1130 1131 return 0; 1132 } 1133 1134 static int aw_dev_reg_update(struct aw88166 *aw88166, 1135 unsigned char *data, unsigned int len) 1136 { 1137 int ret; 1138 1139 if (!len || !data) { 1140 dev_err(aw88166->aw_pa->dev, "reg data is null or len is 0\n"); 1141 return -EINVAL; 1142 } 1143 1144 ret = aw_dev_update_reg_container(aw88166, data, len); 1145 if (ret) 1146 dev_err(aw88166->aw_pa->dev, "reg update failed\n"); 1147 1148 return ret; 1149 } 1150 1151 static int aw88166_dev_get_prof_name(struct aw_device *aw_dev, int index, char **prof_name) 1152 { 1153 struct aw_prof_info *prof_info = &aw_dev->prof_info; 1154 struct aw_prof_desc *prof_desc; 1155 1156 if ((index >= aw_dev->prof_info.count) || (index < 0)) { 1157 dev_err(aw_dev->dev, "index[%d] overflow count[%d]\n", 1158 index, aw_dev->prof_info.count); 1159 return -EINVAL; 1160 } 1161 1162 prof_desc = &aw_dev->prof_info.prof_desc[index]; 1163 1164 *prof_name = prof_info->prof_name_list[prof_desc->id]; 1165 1166 return 0; 1167 } 1168 1169 static int aw88166_dev_get_prof_data(struct aw_device *aw_dev, int index, 1170 struct aw_prof_desc **prof_desc) 1171 { 1172 if ((index >= aw_dev->prof_info.count) || (index < 0)) { 1173 dev_err(aw_dev->dev, "%s: index[%d] overflow count[%d]\n", 1174 __func__, index, aw_dev->prof_info.count); 1175 return -EINVAL; 1176 } 1177 1178 *prof_desc = &aw_dev->prof_info.prof_desc[index]; 1179 1180 return 0; 1181 } 1182 1183 static int aw88166_dev_fw_update(struct aw88166 *aw88166, bool up_dsp_fw_en, bool force_up_en) 1184 { 1185 struct aw_device *aw_dev = aw88166->aw_pa; 1186 struct aw_prof_desc *prof_index_desc; 1187 struct aw_sec_data_desc *sec_desc; 1188 char *prof_name; 1189 int ret; 1190 1191 if ((aw_dev->prof_cur == aw_dev->prof_index) && 1192 (force_up_en == AW88166_FORCE_UPDATE_OFF)) { 1193 dev_dbg(aw_dev->dev, "scene no change, not update"); 1194 return 0; 1195 } 1196 1197 if (aw_dev->fw_status == AW88166_DEV_FW_FAILED) { 1198 dev_err(aw_dev->dev, "fw status[%d] error\n", aw_dev->fw_status); 1199 return -EPERM; 1200 } 1201 1202 ret = aw88166_dev_get_prof_name(aw_dev, aw_dev->prof_index, &prof_name); 1203 if (ret) 1204 return ret; 1205 1206 dev_dbg(aw_dev->dev, "start update %s", prof_name); 1207 1208 ret = aw88166_dev_get_prof_data(aw_dev, aw_dev->prof_index, &prof_index_desc); 1209 if (ret) 1210 return ret; 1211 1212 /* update reg */ 1213 sec_desc = prof_index_desc->sec_desc; 1214 ret = aw_dev_reg_update(aw88166, sec_desc[AW88395_DATA_TYPE_REG].data, 1215 sec_desc[AW88395_DATA_TYPE_REG].len); 1216 if (ret) { 1217 dev_err(aw_dev->dev, "update reg failed\n"); 1218 return ret; 1219 } 1220 1221 aw88166_dev_mute(aw_dev, true); 1222 1223 if (aw_dev->dsp_cfg == AW88166_DEV_DSP_WORK) 1224 aw_dev_dsp_enable(aw_dev, false); 1225 1226 aw_dev_select_memclk(aw_dev, AW88166_DEV_MEMCLK_OSC); 1227 1228 ret = aw_dev_check_sram(aw_dev); 1229 if (ret) { 1230 dev_err(aw_dev->dev, "check sram failed\n"); 1231 goto error; 1232 } 1233 1234 aw_dev_backup_sec_recovery(aw88166); 1235 1236 if (up_dsp_fw_en) { 1237 dev_dbg(aw_dev->dev, "fw_ver: [%x]", prof_index_desc->fw_ver); 1238 ret = aw_dev_dsp_update_fw(aw_dev, sec_desc[AW88395_DATA_TYPE_DSP_FW].data, 1239 sec_desc[AW88395_DATA_TYPE_DSP_FW].len); 1240 if (ret) { 1241 dev_err(aw_dev->dev, "update dsp fw failed\n"); 1242 goto error; 1243 } 1244 } 1245 1246 /* update dsp config */ 1247 ret = aw_dev_dsp_update_cfg(aw_dev, sec_desc[AW88395_DATA_TYPE_DSP_CFG].data, 1248 sec_desc[AW88395_DATA_TYPE_DSP_CFG].len); 1249 if (ret) { 1250 dev_err(aw_dev->dev, "update dsp cfg failed\n"); 1251 goto error; 1252 } 1253 1254 aw_dev_backup_sec_record(aw88166); 1255 1256 aw_dev_select_memclk(aw_dev, AW88166_DEV_MEMCLK_PLL); 1257 1258 aw_dev->prof_cur = aw_dev->prof_index; 1259 1260 return 0; 1261 1262 error: 1263 aw_dev_select_memclk(aw_dev, AW88166_DEV_MEMCLK_PLL); 1264 return ret; 1265 } 1266 1267 static void aw88166_start_pa(struct aw88166 *aw88166) 1268 { 1269 int ret, i; 1270 1271 for (i = 0; i < AW88166_START_RETRIES; i++) { 1272 ret = aw88166_dev_start(aw88166); 1273 if (ret) { 1274 dev_err(aw88166->aw_pa->dev, "aw88166 device start failed. retry = %d", i); 1275 ret = aw88166_dev_fw_update(aw88166, AW88166_DSP_FW_UPDATE_ON, true); 1276 if (ret) { 1277 dev_err(aw88166->aw_pa->dev, "fw update failed"); 1278 continue; 1279 } 1280 } else { 1281 dev_dbg(aw88166->aw_pa->dev, "start success\n"); 1282 break; 1283 } 1284 } 1285 } 1286 1287 static void aw88166_startup_work(struct work_struct *work) 1288 { 1289 struct aw88166 *aw88166 = 1290 container_of(work, struct aw88166, start_work.work); 1291 1292 mutex_lock(&aw88166->lock); 1293 aw88166_start_pa(aw88166); 1294 mutex_unlock(&aw88166->lock); 1295 } 1296 1297 static void aw88166_start(struct aw88166 *aw88166, bool sync_start) 1298 { 1299 int ret; 1300 1301 if (aw88166->aw_pa->fw_status != AW88166_DEV_FW_OK) 1302 return; 1303 1304 if (aw88166->aw_pa->status == AW88166_DEV_PW_ON) 1305 return; 1306 1307 ret = aw88166_dev_fw_update(aw88166, AW88166_DSP_FW_UPDATE_OFF, aw88166->phase_sync); 1308 if (ret) { 1309 dev_err(aw88166->aw_pa->dev, "fw update failed\n"); 1310 return; 1311 } 1312 1313 if (sync_start == AW88166_SYNC_START) 1314 aw88166_start_pa(aw88166); 1315 else 1316 queue_delayed_work(system_wq, 1317 &aw88166->start_work, 1318 AW88166_START_WORK_DELAY_MS); 1319 } 1320 1321 static int aw_dev_check_sysint(struct aw_device *aw_dev) 1322 { 1323 u16 reg_val; 1324 1325 aw_dev_get_int_status(aw_dev, ®_val); 1326 if (reg_val & AW88166_BIT_SYSINT_CHECK) { 1327 dev_err(aw_dev->dev, "pa stop check fail:0x%04x\n", reg_val); 1328 return -EINVAL; 1329 } 1330 1331 return 0; 1332 } 1333 1334 static int aw88166_stop(struct aw_device *aw_dev) 1335 { 1336 struct aw_sec_data_desc *dsp_cfg = 1337 &aw_dev->prof_info.prof_desc[aw_dev->prof_cur].sec_desc[AW88395_DATA_TYPE_DSP_CFG]; 1338 struct aw_sec_data_desc *dsp_fw = 1339 &aw_dev->prof_info.prof_desc[aw_dev->prof_cur].sec_desc[AW88395_DATA_TYPE_DSP_FW]; 1340 int int_st; 1341 1342 if (aw_dev->status == AW88166_DEV_PW_OFF) { 1343 dev_dbg(aw_dev->dev, "already power off"); 1344 return 0; 1345 } 1346 1347 aw_dev->status = AW88166_DEV_PW_OFF; 1348 1349 aw88166_dev_mute(aw_dev, true); 1350 usleep_range(AW88166_4000_US, AW88166_4000_US + 100); 1351 1352 aw_dev_i2s_tx_enable(aw_dev, false); 1353 usleep_range(AW88166_1000_US, AW88166_1000_US + 100); 1354 1355 int_st = aw_dev_check_sysint(aw_dev); 1356 1357 aw_dev_dsp_enable(aw_dev, false); 1358 1359 aw_dev_amppd(aw_dev, true); 1360 1361 if (int_st) { 1362 aw_dev_select_memclk(aw_dev, AW88166_DEV_MEMCLK_OSC); 1363 aw_dev_dsp_update_fw(aw_dev, dsp_fw->data, dsp_fw->len); 1364 aw_dev_dsp_update_cfg(aw_dev, dsp_cfg->data, dsp_cfg->len); 1365 aw_dev_select_memclk(aw_dev, AW88166_DEV_MEMCLK_PLL); 1366 } 1367 1368 aw_dev_pwd(aw_dev, true); 1369 1370 return 0; 1371 } 1372 1373 static struct snd_soc_dai_driver aw88166_dai[] = { 1374 { 1375 .name = "aw88166-aif", 1376 .id = 1, 1377 .playback = { 1378 .stream_name = "Speaker_Playback", 1379 .channels_min = 1, 1380 .channels_max = 2, 1381 .rates = AW88166_RATES, 1382 .formats = AW88166_FORMATS, 1383 }, 1384 .capture = { 1385 .stream_name = "Speaker_Capture", 1386 .channels_min = 1, 1387 .channels_max = 2, 1388 .rates = AW88166_RATES, 1389 .formats = AW88166_FORMATS, 1390 }, 1391 }, 1392 }; 1393 1394 static int aw88166_get_fade_in_time(struct snd_kcontrol *kcontrol, 1395 struct snd_ctl_elem_value *ucontrol) 1396 { 1397 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); 1398 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1399 struct aw_device *aw_dev = aw88166->aw_pa; 1400 1401 ucontrol->value.integer.value[0] = aw_dev->fade_in_time; 1402 1403 return 0; 1404 } 1405 1406 static int aw88166_set_fade_in_time(struct snd_kcontrol *kcontrol, 1407 struct snd_ctl_elem_value *ucontrol) 1408 { 1409 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); 1410 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1411 struct soc_mixer_control *mc = 1412 (struct soc_mixer_control *)kcontrol->private_value; 1413 struct aw_device *aw_dev = aw88166->aw_pa; 1414 int time; 1415 1416 time = ucontrol->value.integer.value[0]; 1417 1418 if (time < mc->min || time > mc->max) 1419 return -EINVAL; 1420 1421 if (time != aw_dev->fade_in_time) { 1422 aw_dev->fade_in_time = time; 1423 return 1; 1424 } 1425 1426 return 0; 1427 } 1428 1429 static int aw88166_get_fade_out_time(struct snd_kcontrol *kcontrol, 1430 struct snd_ctl_elem_value *ucontrol) 1431 { 1432 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); 1433 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1434 struct aw_device *aw_dev = aw88166->aw_pa; 1435 1436 ucontrol->value.integer.value[0] = aw_dev->fade_out_time; 1437 1438 return 0; 1439 } 1440 1441 static int aw88166_set_fade_out_time(struct snd_kcontrol *kcontrol, 1442 struct snd_ctl_elem_value *ucontrol) 1443 { 1444 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); 1445 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1446 struct soc_mixer_control *mc = 1447 (struct soc_mixer_control *)kcontrol->private_value; 1448 struct aw_device *aw_dev = aw88166->aw_pa; 1449 int time; 1450 1451 time = ucontrol->value.integer.value[0]; 1452 if (time < mc->min || time > mc->max) 1453 return -EINVAL; 1454 1455 if (time != aw_dev->fade_out_time) { 1456 aw_dev->fade_out_time = time; 1457 return 1; 1458 } 1459 1460 return 0; 1461 } 1462 1463 static int aw88166_dev_set_profile_index(struct aw_device *aw_dev, int index) 1464 { 1465 /* check the index whether is valid */ 1466 if ((index >= aw_dev->prof_info.count) || (index < 0)) 1467 return -EINVAL; 1468 /* check the index whether change */ 1469 if (aw_dev->prof_index == index) 1470 return -EINVAL; 1471 1472 aw_dev->prof_index = index; 1473 dev_dbg(aw_dev->dev, "set prof[%s]", 1474 aw_dev->prof_info.prof_name_list[aw_dev->prof_info.prof_desc[index].id]); 1475 1476 return 0; 1477 } 1478 1479 static int aw88166_profile_info(struct snd_kcontrol *kcontrol, 1480 struct snd_ctl_elem_info *uinfo) 1481 { 1482 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1483 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1484 char *prof_name, *name; 1485 int count, ret; 1486 1487 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1488 uinfo->count = 1; 1489 1490 count = aw88166->aw_pa->prof_info.count; 1491 if (count <= 0) { 1492 uinfo->value.enumerated.items = 0; 1493 return 0; 1494 } 1495 1496 uinfo->value.enumerated.items = count; 1497 1498 if (uinfo->value.enumerated.item >= count) 1499 uinfo->value.enumerated.item = count - 1; 1500 1501 name = uinfo->value.enumerated.name; 1502 count = uinfo->value.enumerated.item; 1503 1504 ret = aw88166_dev_get_prof_name(aw88166->aw_pa, count, &prof_name); 1505 if (ret) { 1506 strscpy(uinfo->value.enumerated.name, "null", 1507 strlen("null") + 1); 1508 return 0; 1509 } 1510 1511 strscpy(name, prof_name, sizeof(uinfo->value.enumerated.name)); 1512 1513 return 0; 1514 } 1515 1516 static int aw88166_profile_get(struct snd_kcontrol *kcontrol, 1517 struct snd_ctl_elem_value *ucontrol) 1518 { 1519 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1520 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1521 1522 ucontrol->value.integer.value[0] = aw88166->aw_pa->prof_index; 1523 1524 return 0; 1525 } 1526 1527 static int aw88166_profile_set(struct snd_kcontrol *kcontrol, 1528 struct snd_ctl_elem_value *ucontrol) 1529 { 1530 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1531 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1532 int ret; 1533 1534 mutex_lock(&aw88166->lock); 1535 ret = aw88166_dev_set_profile_index(aw88166->aw_pa, ucontrol->value.integer.value[0]); 1536 if (ret) { 1537 dev_dbg(codec->dev, "profile index does not change"); 1538 mutex_unlock(&aw88166->lock); 1539 return 0; 1540 } 1541 1542 if (aw88166->aw_pa->status) { 1543 aw88166_stop(aw88166->aw_pa); 1544 aw88166_start(aw88166, AW88166_SYNC_START); 1545 } 1546 1547 mutex_unlock(&aw88166->lock); 1548 1549 return 1; 1550 } 1551 1552 static int aw88166_volume_get(struct snd_kcontrol *kcontrol, 1553 struct snd_ctl_elem_value *ucontrol) 1554 { 1555 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1556 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1557 struct aw_volume_desc *vol_desc = &aw88166->aw_pa->volume_desc; 1558 1559 ucontrol->value.integer.value[0] = vol_desc->ctl_volume; 1560 1561 return 0; 1562 } 1563 1564 static int aw88166_volume_set(struct snd_kcontrol *kcontrol, 1565 struct snd_ctl_elem_value *ucontrol) 1566 { 1567 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1568 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1569 struct aw_volume_desc *vol_desc = &aw88166->aw_pa->volume_desc; 1570 struct soc_mixer_control *mc = 1571 (struct soc_mixer_control *)kcontrol->private_value; 1572 int value; 1573 1574 value = ucontrol->value.integer.value[0]; 1575 if (value < mc->min || value > mc->max) 1576 return -EINVAL; 1577 1578 if (vol_desc->ctl_volume != value) { 1579 vol_desc->ctl_volume = value; 1580 aw_dev_set_volume(aw88166->aw_pa, vol_desc->ctl_volume); 1581 1582 return 1; 1583 } 1584 1585 return 0; 1586 } 1587 1588 static int aw88166_get_fade_step(struct snd_kcontrol *kcontrol, 1589 struct snd_ctl_elem_value *ucontrol) 1590 { 1591 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1592 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1593 1594 ucontrol->value.integer.value[0] = aw88166->aw_pa->fade_step; 1595 1596 return 0; 1597 } 1598 1599 static int aw88166_set_fade_step(struct snd_kcontrol *kcontrol, 1600 struct snd_ctl_elem_value *ucontrol) 1601 { 1602 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1603 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1604 struct soc_mixer_control *mc = 1605 (struct soc_mixer_control *)kcontrol->private_value; 1606 int value; 1607 1608 value = ucontrol->value.integer.value[0]; 1609 if (value < mc->min || value > mc->max) 1610 return -EINVAL; 1611 1612 if (aw88166->aw_pa->fade_step != value) { 1613 aw88166->aw_pa->fade_step = value; 1614 return 1; 1615 } 1616 1617 return 0; 1618 } 1619 1620 static int aw88166_re_get(struct snd_kcontrol *kcontrol, 1621 struct snd_ctl_elem_value *ucontrol) 1622 { 1623 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1624 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1625 struct aw_device *aw_dev = aw88166->aw_pa; 1626 1627 ucontrol->value.integer.value[0] = aw_dev->cali_desc.cali_re; 1628 1629 return 0; 1630 } 1631 1632 static int aw88166_re_set(struct snd_kcontrol *kcontrol, 1633 struct snd_ctl_elem_value *ucontrol) 1634 { 1635 struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol); 1636 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec); 1637 struct soc_mixer_control *mc = 1638 (struct soc_mixer_control *)kcontrol->private_value; 1639 struct aw_device *aw_dev = aw88166->aw_pa; 1640 int value; 1641 1642 value = ucontrol->value.integer.value[0]; 1643 if (value < mc->min || value > mc->max) 1644 return -EINVAL; 1645 1646 if (aw_dev->cali_desc.cali_re != value) { 1647 aw_dev->cali_desc.cali_re = value; 1648 return 1; 1649 } 1650 1651 return 0; 1652 } 1653 1654 static int aw88166_dev_init(struct aw88166 *aw88166, struct aw_container *aw_cfg) 1655 { 1656 struct aw_device *aw_dev = aw88166->aw_pa; 1657 int ret; 1658 1659 ret = aw88395_dev_cfg_load(aw_dev, aw_cfg); 1660 if (ret) { 1661 dev_err(aw_dev->dev, "aw_dev acf parse failed\n"); 1662 return -EINVAL; 1663 } 1664 aw_dev->fade_in_time = AW88166_1000_US / 10; 1665 aw_dev->fade_out_time = AW88166_1000_US >> 1; 1666 aw_dev->prof_cur = aw_dev->prof_info.prof_desc[0].id; 1667 aw_dev->prof_index = aw_dev->prof_info.prof_desc[0].id; 1668 1669 ret = aw88166_dev_fw_update(aw88166, AW88166_FORCE_UPDATE_ON, AW88166_DSP_FW_UPDATE_ON); 1670 if (ret) { 1671 dev_err(aw_dev->dev, "fw update failed ret = %d\n", ret); 1672 return ret; 1673 } 1674 1675 aw88166_dev_mute(aw_dev, true); 1676 1677 /* close tx feedback */ 1678 aw_dev_i2s_tx_enable(aw_dev, false); 1679 usleep_range(AW88166_1000_US, AW88166_1000_US + 100); 1680 1681 /* enable amppd */ 1682 aw_dev_amppd(aw_dev, true); 1683 1684 /* close dsp */ 1685 aw_dev_dsp_enable(aw_dev, false); 1686 /* set power down */ 1687 aw_dev_pwd(aw_dev, true); 1688 1689 return 0; 1690 } 1691 1692 static int aw88166_request_firmware_file(struct aw88166 *aw88166) 1693 { 1694 const struct firmware *cont = NULL; 1695 int ret; 1696 1697 aw88166->aw_pa->fw_status = AW88166_DEV_FW_FAILED; 1698 1699 ret = request_firmware(&cont, AW88166_ACF_FILE, aw88166->aw_pa->dev); 1700 if (ret) { 1701 dev_err(aw88166->aw_pa->dev, "request [%s] failed!\n", AW88166_ACF_FILE); 1702 return ret; 1703 } 1704 1705 dev_dbg(aw88166->aw_pa->dev, "loaded %s - size: %zu\n", 1706 AW88166_ACF_FILE, cont ? cont->size : 0); 1707 1708 aw88166->aw_cfg = devm_kzalloc(aw88166->aw_pa->dev, 1709 struct_size(aw88166->aw_cfg, data, cont->size), GFP_KERNEL); 1710 if (!aw88166->aw_cfg) { 1711 release_firmware(cont); 1712 return -ENOMEM; 1713 } 1714 aw88166->aw_cfg->len = (int)cont->size; 1715 memcpy(aw88166->aw_cfg->data, cont->data, cont->size); 1716 release_firmware(cont); 1717 1718 ret = aw88395_dev_load_acf_check(aw88166->aw_pa, aw88166->aw_cfg); 1719 if (ret) { 1720 dev_err(aw88166->aw_pa->dev, "load [%s] failed!\n", AW88166_ACF_FILE); 1721 return ret; 1722 } 1723 1724 mutex_lock(&aw88166->lock); 1725 /* aw device init */ 1726 ret = aw88166_dev_init(aw88166, aw88166->aw_cfg); 1727 if (ret) 1728 dev_err(aw88166->aw_pa->dev, "dev init failed\n"); 1729 mutex_unlock(&aw88166->lock); 1730 1731 return ret; 1732 } 1733 1734 static const struct snd_kcontrol_new aw88166_controls[] = { 1735 SOC_SINGLE_EXT("PCM Playback Volume", AW88166_SYSCTRL2_REG, 1736 6, AW88166_MUTE_VOL, 0, aw88166_volume_get, 1737 aw88166_volume_set), 1738 SOC_SINGLE_EXT("Fade Step", 0, 0, AW88166_MUTE_VOL, 0, 1739 aw88166_get_fade_step, aw88166_set_fade_step), 1740 SOC_SINGLE_EXT("Volume Ramp Up Step", 0, 0, FADE_TIME_MAX, FADE_TIME_MIN, 1741 aw88166_get_fade_in_time, aw88166_set_fade_in_time), 1742 SOC_SINGLE_EXT("Volume Ramp Down Step", 0, 0, FADE_TIME_MAX, FADE_TIME_MIN, 1743 aw88166_get_fade_out_time, aw88166_set_fade_out_time), 1744 SOC_SINGLE_EXT("Calib", 0, 0, AW88166_CALI_RE_MAX, 0, 1745 aw88166_re_get, aw88166_re_set), 1746 AW88166_PROFILE_EXT("AW88166 Profile Set", aw88166_profile_info, 1747 aw88166_profile_get, aw88166_profile_set), 1748 }; 1749 1750 static int aw88166_playback_event(struct snd_soc_dapm_widget *w, 1751 struct snd_kcontrol *k, int event) 1752 { 1753 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); 1754 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1755 1756 mutex_lock(&aw88166->lock); 1757 switch (event) { 1758 case SND_SOC_DAPM_PRE_PMU: 1759 aw88166_start(aw88166, AW88166_ASYNC_START); 1760 break; 1761 case SND_SOC_DAPM_POST_PMD: 1762 aw88166_stop(aw88166->aw_pa); 1763 break; 1764 default: 1765 break; 1766 } 1767 mutex_unlock(&aw88166->lock); 1768 1769 return 0; 1770 } 1771 1772 static const struct snd_soc_dapm_widget aw88166_dapm_widgets[] = { 1773 /* playback */ 1774 SND_SOC_DAPM_AIF_IN_E("AIF_RX", "Speaker_Playback", 0, SND_SOC_NOPM, 0, 0, 1775 aw88166_playback_event, 1776 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 1777 SND_SOC_DAPM_OUTPUT("DAC Output"), 1778 1779 /* capture */ 1780 SND_SOC_DAPM_AIF_OUT("AIF_TX", "Speaker_Capture", 0, SND_SOC_NOPM, 0, 0), 1781 SND_SOC_DAPM_INPUT("ADC Input"), 1782 }; 1783 1784 static const struct snd_soc_dapm_route aw88166_audio_map[] = { 1785 {"DAC Output", NULL, "AIF_RX"}, 1786 {"AIF_TX", NULL, "ADC Input"}, 1787 }; 1788 1789 static int aw88166_codec_probe(struct snd_soc_component *component) 1790 { 1791 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(component); 1792 int ret; 1793 1794 INIT_DELAYED_WORK(&aw88166->start_work, aw88166_startup_work); 1795 1796 ret = aw88166_request_firmware_file(aw88166); 1797 if (ret) 1798 dev_err(aw88166->aw_pa->dev, "%s failed\n", __func__); 1799 1800 return ret; 1801 } 1802 1803 static void aw88166_codec_remove(struct snd_soc_component *aw_codec) 1804 { 1805 struct aw88166 *aw88166 = snd_soc_component_get_drvdata(aw_codec); 1806 1807 cancel_delayed_work_sync(&aw88166->start_work); 1808 } 1809 1810 static const struct snd_soc_component_driver soc_codec_dev_aw88166 = { 1811 .probe = aw88166_codec_probe, 1812 .remove = aw88166_codec_remove, 1813 .dapm_widgets = aw88166_dapm_widgets, 1814 .num_dapm_widgets = ARRAY_SIZE(aw88166_dapm_widgets), 1815 .dapm_routes = aw88166_audio_map, 1816 .num_dapm_routes = ARRAY_SIZE(aw88166_audio_map), 1817 .controls = aw88166_controls, 1818 .num_controls = ARRAY_SIZE(aw88166_controls), 1819 }; 1820 1821 static void aw88166_hw_reset(struct aw88166 *aw88166) 1822 { 1823 if (aw88166->reset_gpio) { 1824 gpiod_set_value_cansleep(aw88166->reset_gpio, 1); 1825 usleep_range(AW88166_1000_US, AW88166_1000_US + 10); 1826 gpiod_set_value_cansleep(aw88166->reset_gpio, 0); 1827 usleep_range(AW88166_1000_US, AW88166_1000_US + 10); 1828 } 1829 } 1830 1831 static void aw88166_parse_channel_dt(struct aw88166 *aw88166) 1832 { 1833 struct aw_device *aw_dev = aw88166->aw_pa; 1834 struct device_node *np = aw_dev->dev->of_node; 1835 u32 channel_value; 1836 1837 of_property_read_u32(np, "awinic,audio-channel", &channel_value); 1838 aw_dev->channel = channel_value; 1839 aw88166->phase_sync = of_property_read_bool(np, "awinic,sync-flag"); 1840 } 1841 1842 static int aw88166_init(struct aw88166 *aw88166, struct i2c_client *i2c, struct regmap *regmap) 1843 { 1844 struct aw_device *aw_dev; 1845 unsigned int chip_id; 1846 int ret; 1847 1848 ret = regmap_read(regmap, AW88166_ID_REG, &chip_id); 1849 if (ret) { 1850 dev_err(&i2c->dev, "%s read chipid error. ret = %d\n", __func__, ret); 1851 return ret; 1852 } 1853 1854 aw_dev = devm_kzalloc(&i2c->dev, sizeof(*aw_dev), GFP_KERNEL); 1855 if (!aw_dev) 1856 return -ENOMEM; 1857 aw88166->aw_pa = aw_dev; 1858 1859 aw_dev->i2c = i2c; 1860 aw_dev->dev = &i2c->dev; 1861 aw_dev->regmap = regmap; 1862 mutex_init(&aw_dev->dsp_lock); 1863 1864 aw_dev->chip_id = chip_id; 1865 aw_dev->acf = NULL; 1866 aw_dev->prof_info.prof_desc = NULL; 1867 aw_dev->prof_info.count = 0; 1868 aw_dev->prof_info.prof_type = AW88395_DEV_NONE_TYPE_ID; 1869 aw_dev->channel = AW88166_DEV_DEFAULT_CH; 1870 aw_dev->fw_status = AW88166_DEV_FW_FAILED; 1871 1872 aw_dev->fade_step = AW88166_VOLUME_STEP_DB; 1873 aw_dev->volume_desc.ctl_volume = AW88166_VOL_DEFAULT_VALUE; 1874 1875 aw88166_parse_channel_dt(aw88166); 1876 1877 return 0; 1878 } 1879 1880 static int aw88166_i2c_probe(struct i2c_client *i2c) 1881 { 1882 struct aw88166 *aw88166; 1883 int ret; 1884 1885 if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C)) 1886 return dev_err_probe(&i2c->dev, -ENXIO, "check_functionality failed\n"); 1887 1888 aw88166 = devm_kzalloc(&i2c->dev, sizeof(*aw88166), GFP_KERNEL); 1889 if (!aw88166) 1890 return -ENOMEM; 1891 1892 mutex_init(&aw88166->lock); 1893 1894 i2c_set_clientdata(i2c, aw88166); 1895 1896 aw88166->reset_gpio = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_LOW); 1897 if (IS_ERR(aw88166->reset_gpio)) 1898 return dev_err_probe(&i2c->dev, PTR_ERR(aw88166->reset_gpio), 1899 "reset gpio not defined\n"); 1900 aw88166_hw_reset(aw88166); 1901 1902 aw88166->regmap = devm_regmap_init_i2c(i2c, &aw88166_remap_config); 1903 if (IS_ERR(aw88166->regmap)) 1904 return dev_err_probe(&i2c->dev, PTR_ERR(aw88166->regmap), 1905 "failed to init regmap\n"); 1906 1907 /* aw pa init */ 1908 ret = aw88166_init(aw88166, i2c, aw88166->regmap); 1909 if (ret) 1910 return ret; 1911 1912 return devm_snd_soc_register_component(&i2c->dev, 1913 &soc_codec_dev_aw88166, 1914 aw88166_dai, ARRAY_SIZE(aw88166_dai)); 1915 } 1916 1917 static const struct i2c_device_id aw88166_i2c_id[] = { 1918 { AW88166_I2C_NAME }, 1919 { } 1920 }; 1921 MODULE_DEVICE_TABLE(i2c, aw88166_i2c_id); 1922 1923 static struct i2c_driver aw88166_i2c_driver = { 1924 .driver = { 1925 .name = AW88166_I2C_NAME, 1926 }, 1927 .probe = aw88166_i2c_probe, 1928 .id_table = aw88166_i2c_id, 1929 }; 1930 module_i2c_driver(aw88166_i2c_driver); 1931 1932 MODULE_DESCRIPTION("ASoC AW88166 Smart PA Driver"); 1933 MODULE_LICENSE("GPL v2"); 1934