1 // SPDX-License-Identifier: GPL-2.0-only 2 // 3 // aw88261.c -- AW88261 ALSA SoC Audio driver 4 // 5 // Copyright (c) 2023 awinic Technology CO., LTD 6 // 7 // Author: Jimmy Zhang <zhangjianming@awinic.com> 8 // Author: Weidong Wang <wangweidong.a@awinic.com> 9 // 10 11 #include <linux/cleanup.h> 12 #include <linux/i2c.h> 13 #include <linux/firmware.h> 14 #include <linux/bitops.h> 15 #include <linux/regmap.h> 16 #include <linux/regulator/consumer.h> 17 #include <sound/soc.h> 18 #include <sound/pcm_params.h> 19 #include <sound/tlv.h> 20 #include "aw88261.h" 21 #include "aw88395/aw88395_data_type.h" 22 #include "aw88395/aw88395_device.h" 23 24 static const struct regmap_config aw88261_remap_config = { 25 .val_bits = 16, 26 .reg_bits = 8, 27 .max_register = AW88261_REG_MAX, 28 .reg_format_endian = REGMAP_ENDIAN_LITTLE, 29 .val_format_endian = REGMAP_ENDIAN_BIG, 30 }; 31 32 static void aw88261_dev_set_volume(struct aw_device *aw_dev, unsigned int value) 33 { 34 unsigned int volume = min(value, (unsigned int)AW88261_MUTE_VOL); 35 36 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL2_REG, 37 ~AW88261_VOL_MASK, DB_TO_REG_VAL(volume)); 38 } 39 40 static void aw88261_dev_i2s_tx_enable(struct aw_device *aw_dev, bool flag) 41 { 42 if (flag) 43 regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG, 44 ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_ENABLE_VALUE); 45 else 46 regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG, 47 ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_DISABLE_VALUE); 48 } 49 50 static void aw88261_dev_pwd(struct aw_device *aw_dev, bool pwd) 51 { 52 if (pwd) 53 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 54 ~AW88261_PWDN_MASK, AW88261_PWDN_POWER_DOWN_VALUE); 55 else 56 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 57 ~AW88261_PWDN_MASK, AW88261_PWDN_WORKING_VALUE); 58 } 59 60 static void aw88261_dev_amppd(struct aw_device *aw_dev, bool amppd) 61 { 62 if (amppd) 63 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 64 ~AW88261_AMPPD_MASK, AW88261_AMPPD_POWER_DOWN_VALUE); 65 else 66 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 67 ~AW88261_AMPPD_MASK, AW88261_AMPPD_WORKING_VALUE); 68 } 69 70 static void aw88261_dev_mute(struct aw_device *aw_dev, bool is_mute) 71 { 72 if (is_mute) { 73 aw88261_dev_set_volume(aw_dev, AW88261_MUTE_VOL); 74 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 75 ~AW88261_HMUTE_MASK, AW88261_HMUTE_ENABLE_VALUE); 76 } else { 77 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 78 ~AW88261_HMUTE_MASK, AW88261_HMUTE_DISABLE_VALUE); 79 aw88261_dev_set_volume(aw_dev, aw_dev->volume_desc.ctl_volume); 80 } 81 } 82 83 static void aw88261_dev_clear_int_status(struct aw_device *aw_dev) 84 { 85 unsigned int int_status; 86 87 /* read int status and clear */ 88 regmap_read(aw_dev->regmap, AW88261_SYSINT_REG, &int_status); 89 /* make sure int status is clear */ 90 regmap_read(aw_dev->regmap, AW88261_SYSINT_REG, &int_status); 91 92 dev_dbg(aw_dev->dev, "read interrupt reg = 0x%04x", int_status); 93 } 94 95 static int aw88261_dev_get_iis_status(struct aw_device *aw_dev) 96 { 97 unsigned int reg_val; 98 int ret; 99 100 ret = regmap_read(aw_dev->regmap, AW88261_SYSST_REG, ®_val); 101 if (ret) 102 return ret; 103 if ((reg_val & AW88261_BIT_PLL_CHECK) != AW88261_BIT_PLL_CHECK) { 104 dev_dbg(aw_dev->dev, "check pll lock fail,reg_val:0x%04x", reg_val); 105 return -EINVAL; 106 } 107 108 return ret; 109 } 110 111 static int aw88261_dev_check_pll(struct aw_device *aw_dev) 112 { 113 int ret, i; 114 115 for (i = 0; i < AW88261_DEV_SYSST_CHECK_MAX; i++) { 116 ret = aw88261_dev_get_iis_status(aw_dev); 117 if (ret) { 118 dev_dbg(aw_dev->dev, "mode1 iis signal check error"); 119 usleep_range(AW88261_2000_US, AW88261_2000_US + 10); 120 } else { 121 return ret; 122 } 123 } 124 125 return -EPERM; 126 } 127 128 static int aw88261_dev_configure_syspll(struct aw88261 *aw88261) 129 { 130 struct aw_device *aw_dev = aw88261->aw_pa; 131 int ret; 132 133 /* Configure TDM slots (I2S is represented as no slots) */ 134 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL2_REG, 135 ~AW88261_SLOT_NUM_MASK, aw88261->slot_num_value); 136 if (ret) 137 return ret; 138 139 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL2_REG, 140 ~AW88261_I2S_TX_SLOTVLD_MASK, 141 aw88261->tx_slotvld_mask); 142 if (ret) 143 return ret; 144 145 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL2_REG, 146 ~AW88261_I2S_RXL_SLOTVLD_MASK, 147 aw88261->rxl_slotvld_mask); 148 if (ret) 149 return ret; 150 151 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL2_REG, 152 ~AW88261_I2S_RXR_SLOTVLD_MASK, 153 aw88261->rxr_slotvld_mask); 154 if (ret) 155 return ret; 156 157 /* PLL divider must be used for 8/16/32 kHz modes */ 158 ret = regmap_update_bits(aw_dev->regmap, AW88261_PLLCTRL1_REG, 159 ~AW88261_CCO_MUX_MASK, aw88261->cco_mux_value); 160 if (ret) 161 return ret; 162 163 /* The word clock (WCK) defines the beginning of a frame */ 164 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL1_REG, 165 ~AW88261_I2SSR_MASK, aw88261->sr_value); 166 if (ret) 167 return ret; 168 169 /* The bit clock (BCK) defines the length of a frame */ 170 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL1_REG, 171 ~AW88261_I2SBCK_MASK, 172 (aw88261->tdm_bck_value != AW88261_TDM_BCK_UNSET) 173 ? aw88261->tdm_bck_value : aw88261->bck_value); 174 if (ret) 175 return ret; 176 177 /* The logical frame size is the width of data for 1 slot */ 178 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL1_REG, 179 ~AW88261_I2SFS_MASK, aw88261->fs_value); 180 if (ret) 181 return ret; 182 183 /* The I2S interface mode (Philips standard, LSB/MSB justified) */ 184 ret = regmap_update_bits(aw_dev->regmap, AW88261_I2SCTRL1_REG, 185 ~AW88261_I2SMD_MASK, aw88261->md_value); 186 if (ret) 187 return ret; 188 189 /* The polarity of the bit clock (BCK) */ 190 ret = regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 191 ~AW88261_BCKINV_MASK, aw88261->bck_inv_value); 192 if (ret) 193 return ret; 194 195 return aw88261_dev_check_pll(aw_dev); 196 } 197 198 static int aw88261_dev_check_sysst(struct aw_device *aw_dev) 199 { 200 unsigned int check_val; 201 unsigned int reg_val; 202 int ret, i; 203 204 for (i = 0; i < AW88261_DEV_SYSST_CHECK_MAX; i++) { 205 ret = regmap_read(aw_dev->regmap, AW88261_SYSST_REG, ®_val); 206 if (ret) 207 return ret; 208 209 check_val = reg_val & (~AW88261_BIT_SYSST_CHECK_MASK) 210 & AW88261_BIT_PLL_CHECK; 211 if (check_val != AW88261_BIT_PLL_CHECK) { 212 dev_dbg(aw_dev->dev, "check sysst fail, reg_val=0x%04x, check:0x%x", 213 reg_val, AW88261_BIT_PLL_CHECK); 214 usleep_range(AW88261_2000_US, AW88261_2000_US + 10); 215 } else { 216 return 0; 217 } 218 } 219 220 return -EPERM; 221 } 222 223 static void aw88261_dev_uls_hmute(struct aw_device *aw_dev, bool uls_hmute) 224 { 225 if (uls_hmute) 226 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 227 ~AW88261_ULS_HMUTE_MASK, 228 AW88261_ULS_HMUTE_ENABLE_VALUE); 229 else 230 regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG, 231 ~AW88261_ULS_HMUTE_MASK, 232 AW88261_ULS_HMUTE_DISABLE_VALUE); 233 } 234 235 static void aw88261_reg_force_set(struct aw88261 *aw88261) 236 { 237 if (aw88261->frcset_en == AW88261_FRCSET_ENABLE) { 238 /* set FORCE_PWM */ 239 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL3_REG, 240 ~AW88261_FORCE_PWM_MASK, AW88261_FORCE_PWM_FORCEMINUS_PWM_VALUE); 241 /* set BOOST_OS_WIDTH */ 242 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL5_REG, 243 ~AW88261_BST_OS_WIDTH_MASK, AW88261_BST_OS_WIDTH_50NS_VALUE); 244 /* set BURST_LOOPR */ 245 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL6_REG, 246 ~AW88261_BST_LOOPR_MASK, AW88261_BST_LOOPR_340K_VALUE); 247 /* set RSQN_DLY */ 248 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL7_REG, 249 ~AW88261_RSQN_DLY_MASK, AW88261_RSQN_DLY_35NS_VALUE); 250 /* set BURST_SSMODE */ 251 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL8_REG, 252 ~AW88261_BURST_SSMODE_MASK, AW88261_BURST_SSMODE_FAST_VALUE); 253 /* set BST_BURST */ 254 regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL9_REG, 255 ~AW88261_BST_BURST_MASK, AW88261_BST_BURST_30MA_VALUE); 256 } else { 257 dev_dbg(aw88261->aw_pa->dev, "needn't set reg value"); 258 } 259 } 260 261 static int aw88261_dev_get_icalk(struct aw_device *aw_dev, int16_t *icalk) 262 { 263 u16 reg_icalk, reg_icalkl; 264 unsigned int reg_val; 265 int ret; 266 267 ret = regmap_read(aw_dev->regmap, AW88261_EFRH4_REG, ®_val); 268 if (ret) 269 return ret; 270 271 reg_icalk = reg_val & (~AW88261_EF_ISN_GESLP_H_MASK); 272 273 ret = regmap_read(aw_dev->regmap, AW88261_EFRL4_REG, ®_val); 274 if (ret) 275 return ret; 276 277 reg_icalkl = reg_val & (~AW88261_EF_ISN_GESLP_L_MASK); 278 279 reg_icalk = (reg_icalk >> AW88261_ICALK_SHIFT) & (reg_icalkl >> AW88261_ICALKL_SHIFT); 280 281 if (reg_icalk & (~AW88261_EF_ISN_GESLP_SIGN_MASK)) 282 reg_icalk = reg_icalk | ~AW88261_EF_ISN_GESLP_NEG; 283 284 *icalk = (int16_t)reg_icalk; 285 286 return ret; 287 } 288 289 static int aw88261_dev_get_vcalk(struct aw_device *aw_dev, int16_t *vcalk) 290 { 291 u16 reg_vcalk, reg_vcalkl; 292 unsigned int reg_val; 293 int ret; 294 295 ret = regmap_read(aw_dev->regmap, AW88261_EFRH3_REG, ®_val); 296 if (ret) 297 return ret; 298 299 reg_vcalk = (u16)reg_val & (~AW88261_EF_VSN_GESLP_H_MASK); 300 301 ret = regmap_read(aw_dev->regmap, AW88261_EFRL3_REG, ®_val); 302 if (ret) 303 return ret; 304 305 reg_vcalkl = (u16)reg_val & (~AW88261_EF_VSN_GESLP_L_MASK); 306 307 reg_vcalk = (reg_vcalk >> AW88261_VCALK_SHIFT) & (reg_vcalkl >> AW88261_VCALKL_SHIFT); 308 309 if (reg_vcalk & AW88261_EF_VSN_GESLP_SIGN_MASK) 310 reg_vcalk = reg_vcalk | (~AW88261_EF_VSN_GESLP_NEG); 311 *vcalk = (int16_t)reg_vcalk; 312 313 return ret; 314 } 315 316 static int aw88261_dev_set_vcalb(struct aw_device *aw_dev) 317 { 318 int16_t icalk_val, vcalk_val; 319 int icalk, vcalk, vcalb; 320 u32 reg_val; 321 int ret; 322 323 ret = aw88261_dev_get_icalk(aw_dev, &icalk_val); 324 if (ret) 325 return ret; 326 327 ret = aw88261_dev_get_vcalk(aw_dev, &vcalk_val); 328 if (ret) 329 return ret; 330 331 icalk = AW88261_CABL_BASE_VALUE + AW88261_ICABLK_FACTOR * icalk_val; 332 vcalk = AW88261_CABL_BASE_VALUE + AW88261_VCABLK_FACTOR * vcalk_val; 333 if (!vcalk) 334 return -EINVAL; 335 336 vcalb = AW88261_VCAL_FACTOR * icalk / vcalk; 337 reg_val = (unsigned int)vcalb; 338 339 dev_dbg(aw_dev->dev, "icalk=%d, vcalk=%d, vcalb=%d, reg_val=0x%04x", 340 icalk, vcalk, vcalb, reg_val); 341 ret = regmap_write(aw_dev->regmap, AW88261_VSNTM1_REG, reg_val); 342 343 return ret; 344 } 345 346 static int aw88261_dev_reg_update(struct aw88261 *aw88261, 347 unsigned char *data, unsigned int len) 348 { 349 struct aw_device *aw_dev = aw88261->aw_pa; 350 struct aw_volume_desc *vol_desc = &aw_dev->volume_desc; 351 unsigned int read_val, efcheck_val, read_vol; 352 int data_len, i, ret; 353 int16_t *reg_data; 354 u16 reg_val; 355 u8 reg_addr; 356 357 if (!len || !data) { 358 dev_err(aw_dev->dev, "reg data is null or len is 0"); 359 return -EINVAL; 360 } 361 362 reg_data = (int16_t *)data; 363 data_len = len >> 1; 364 365 if (data_len & 0x1) { 366 dev_err(aw_dev->dev, "data len:%d unsupported", data_len); 367 return -EINVAL; 368 } 369 370 for (i = 0; i < data_len; i += 2) { 371 reg_addr = reg_data[i]; 372 reg_val = reg_data[i + 1]; 373 374 if (reg_addr == AW88261_SYSCTRL_REG) { 375 aw88261->amppd_st = reg_val & (~AW88261_AMPPD_MASK); 376 ret = regmap_read(aw_dev->regmap, reg_addr, &read_val); 377 if (ret) 378 break; 379 380 /* keep all three bits from current hw status */ 381 read_val &= (~AW88261_AMPPD_MASK) | (~AW88261_PWDN_MASK) | 382 (~AW88261_HMUTE_MASK); 383 reg_val &= (AW88261_AMPPD_MASK & AW88261_PWDN_MASK & AW88261_HMUTE_MASK); 384 reg_val |= read_val; 385 386 /* enable uls hmute */ 387 reg_val &= AW88261_ULS_HMUTE_MASK; 388 reg_val |= AW88261_ULS_HMUTE_ENABLE_VALUE; 389 } 390 391 if (reg_addr == AW88261_DBGCTRL_REG) { 392 efcheck_val = reg_val & (~AW88261_EF_DBMD_MASK); 393 if (efcheck_val == AW88261_OR_VALUE) 394 aw88261->efuse_check = AW88261_EF_OR_CHECK; 395 else 396 aw88261->efuse_check = AW88261_EF_AND_CHECK; 397 } 398 399 /* i2stxen */ 400 if (reg_addr == AW88261_I2SCTRL3_REG) { 401 /* close tx */ 402 reg_val &= AW88261_I2STXEN_MASK; 403 reg_val |= AW88261_I2STXEN_DISABLE_VALUE; 404 } 405 406 if (reg_addr == AW88261_SYSCTRL2_REG) { 407 read_vol = (reg_val & (~AW88261_VOL_MASK)) >> 408 AW88261_VOL_START_BIT; 409 aw_dev->volume_desc.init_volume = 410 REG_VAL_TO_DB(read_vol); 411 } 412 413 if (reg_addr == AW88261_VSNTM1_REG) 414 continue; 415 416 ret = regmap_write(aw_dev->regmap, reg_addr, reg_val); 417 if (ret) 418 break; 419 } 420 421 ret = aw88261_dev_set_vcalb(aw_dev); 422 if (ret) 423 return ret; 424 425 if (aw_dev->prof_cur != aw_dev->prof_index) 426 vol_desc->ctl_volume = 0; 427 428 /* keep min volume */ 429 aw88261_dev_set_volume(aw_dev, vol_desc->mute_volume); 430 431 return ret; 432 } 433 434 static int aw88261_dev_get_prof_name(struct aw_device *aw_dev, int index, char **prof_name) 435 { 436 struct aw_prof_info *prof_info = &aw_dev->prof_info; 437 struct aw_prof_desc *prof_desc; 438 439 if ((index >= aw_dev->prof_info.count) || (index < 0)) { 440 dev_err(aw_dev->dev, "index[%d] overflow count[%d]", 441 index, aw_dev->prof_info.count); 442 return -EINVAL; 443 } 444 445 prof_desc = &aw_dev->prof_info.prof_desc[index]; 446 447 *prof_name = prof_info->prof_name_list[prof_desc->id]; 448 449 return 0; 450 } 451 452 static int aw88261_dev_get_prof_data(struct aw_device *aw_dev, int index, 453 struct aw_prof_desc **prof_desc) 454 { 455 if ((index >= aw_dev->prof_info.count) || (index < 0)) { 456 dev_err(aw_dev->dev, "%s: index[%d] overflow count[%d]\n", 457 __func__, index, aw_dev->prof_info.count); 458 return -EINVAL; 459 } 460 461 *prof_desc = &aw_dev->prof_info.prof_desc[index]; 462 463 return 0; 464 } 465 466 static int aw88261_dev_fw_update(struct aw88261 *aw88261) 467 { 468 struct aw_device *aw_dev = aw88261->aw_pa; 469 struct aw_prof_desc *prof_index_desc; 470 struct aw_sec_data_desc *sec_desc; 471 char *prof_name; 472 int ret; 473 474 ret = aw88261_dev_get_prof_name(aw_dev, aw_dev->prof_index, &prof_name); 475 if (ret) { 476 dev_err(aw_dev->dev, "get prof name failed"); 477 return -EINVAL; 478 } 479 480 dev_dbg(aw_dev->dev, "start update %s", prof_name); 481 482 ret = aw88261_dev_get_prof_data(aw_dev, aw_dev->prof_index, &prof_index_desc); 483 if (ret) 484 return ret; 485 486 /* update reg */ 487 sec_desc = prof_index_desc->sec_desc; 488 ret = aw88261_dev_reg_update(aw88261, sec_desc[AW88395_DATA_TYPE_REG].data, 489 sec_desc[AW88395_DATA_TYPE_REG].len); 490 if (ret) { 491 dev_err(aw_dev->dev, "update reg failed"); 492 return ret; 493 } 494 495 aw_dev->prof_cur = aw_dev->prof_index; 496 497 return ret; 498 } 499 500 static int aw88261_dev_start(struct aw88261 *aw88261) 501 { 502 struct aw_device *aw_dev = aw88261->aw_pa; 503 int ret; 504 505 if (aw_dev->status == AW88261_DEV_PW_ON) { 506 dev_dbg(aw_dev->dev, "already power on"); 507 return 0; 508 } 509 510 /* power on */ 511 aw88261_dev_pwd(aw_dev, false); 512 usleep_range(AW88261_2000_US, AW88261_2000_US + 10); 513 514 ret = aw88261_dev_configure_syspll(aw88261); 515 if (ret) { 516 dev_dbg(aw_dev->dev, "pll check failed"); 517 goto pll_check_fail; 518 } 519 520 /* amppd on */ 521 aw88261_dev_amppd(aw_dev, false); 522 usleep_range(AW88261_1000_US, AW88261_1000_US + 50); 523 524 /* check i2s status */ 525 ret = aw88261_dev_check_sysst(aw_dev); 526 if (ret) { 527 dev_dbg(aw_dev->dev, "sysst check failed"); 528 goto sysst_check_fail; 529 } 530 531 /* enable tx feedback */ 532 aw88261_dev_i2s_tx_enable(aw_dev, true); 533 534 if (aw88261->amppd_st) 535 aw88261_dev_amppd(aw_dev, true); 536 537 aw88261_reg_force_set(aw88261); 538 539 /* close uls mute */ 540 aw88261_dev_uls_hmute(aw_dev, false); 541 542 /* close mute */ 543 if (!aw88261->mute_st) 544 aw88261_dev_mute(aw_dev, false); 545 546 /* clear inturrupt */ 547 aw88261_dev_clear_int_status(aw_dev); 548 aw_dev->status = AW88261_DEV_PW_ON; 549 550 return 0; 551 552 sysst_check_fail: 553 aw88261_dev_i2s_tx_enable(aw_dev, false); 554 aw88261_dev_clear_int_status(aw_dev); 555 aw88261_dev_amppd(aw_dev, true); 556 pll_check_fail: 557 aw88261_dev_pwd(aw_dev, true); 558 aw_dev->status = AW88261_DEV_PW_OFF; 559 560 return ret; 561 } 562 563 static int aw88261_dev_stop(struct aw_device *aw_dev) 564 { 565 if (aw_dev->status == AW88261_DEV_PW_OFF) { 566 dev_info(aw_dev->dev, "already power off"); 567 return 0; 568 } 569 570 aw_dev->status = AW88261_DEV_PW_OFF; 571 572 /* clear inturrupt */ 573 aw88261_dev_clear_int_status(aw_dev); 574 575 aw88261_dev_uls_hmute(aw_dev, true); 576 /* set mute */ 577 aw88261_dev_mute(aw_dev, true); 578 579 /* close tx feedback */ 580 aw88261_dev_i2s_tx_enable(aw_dev, false); 581 usleep_range(AW88261_1000_US, AW88261_1000_US + 100); 582 583 /* enable amppd */ 584 aw88261_dev_amppd(aw_dev, true); 585 586 /* set power down */ 587 aw88261_dev_pwd(aw_dev, true); 588 589 return 0; 590 } 591 592 static int aw88261_reg_update(struct aw88261 *aw88261, bool force) 593 { 594 struct aw_device *aw_dev = aw88261->aw_pa; 595 int ret; 596 597 if (force) { 598 ret = regmap_write(aw_dev->regmap, 599 AW88261_ID_REG, AW88261_SOFT_RESET_VALUE); 600 if (ret) 601 return ret; 602 603 ret = aw88261_dev_fw_update(aw88261); 604 if (ret) 605 return ret; 606 } else { 607 if (aw_dev->prof_cur != aw_dev->prof_index) { 608 ret = aw88261_dev_fw_update(aw88261); 609 if (ret) 610 return ret; 611 } else { 612 ret = 0; 613 } 614 } 615 616 aw_dev->prof_cur = aw_dev->prof_index; 617 618 return ret; 619 } 620 621 static void aw88261_start_pa(struct aw88261 *aw88261) 622 { 623 int ret, i; 624 625 for (i = 0; i < AW88261_START_RETRIES; i++) { 626 ret = aw88261_reg_update(aw88261, aw88261->phase_sync); 627 if (ret) { 628 dev_dbg(aw88261->aw_pa->dev, 629 "aw88261_reg_update failed, cnt:%d, ret:%d\n", i, ret); 630 continue; 631 } 632 ret = aw88261_dev_start(aw88261); 633 if (ret) { 634 dev_dbg(aw88261->aw_pa->dev, 635 "aw88261_dev_start failed, cnt:%d, ret:%d\n", i, ret); 636 continue; 637 } else { 638 dev_dbg(aw88261->aw_pa->dev, "start success\n"); 639 break; 640 } 641 } 642 if (ret != 0) 643 dev_err(aw88261->aw_pa->dev, "start failure (%d)\n", ret); 644 } 645 646 static void aw88261_start(struct aw88261 *aw88261) 647 { 648 if (aw88261->aw_pa->fw_status != AW88261_DEV_FW_OK) 649 return; 650 651 if (aw88261->aw_pa->status == AW88261_DEV_PW_ON) 652 return; 653 654 aw88261_start_pa(aw88261); 655 } 656 657 static int aw88261_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 658 { 659 struct snd_soc_component *component = dai->component; 660 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component); 661 662 switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 663 case SND_SOC_DAIFMT_NB_NF: 664 aw88261->bck_inv_value = AW88261_BCKINV_NOT_INVERT_VALUE; 665 break; 666 case SND_SOC_DAIFMT_IB_NF: 667 aw88261->bck_inv_value = AW88261_BCKINV_INVERTED_VALUE; 668 break; 669 default: 670 dev_err(aw88261->aw_pa->dev, "unsupported invert mode 0x%x\n", 671 fmt & SND_SOC_DAIFMT_INV_MASK); 672 return -EINVAL; 673 } 674 675 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 676 case SND_SOC_DAIFMT_I2S: 677 case SND_SOC_DAIFMT_DSP_A: 678 aw88261->md_value = AW88261_I2SMD_PHILIPS_STANDARD_VALUE; 679 break; 680 case SND_SOC_DAIFMT_MSB: 681 case SND_SOC_DAIFMT_DSP_B: 682 aw88261->md_value = AW88261_I2SMD_MSB_JUSTIFIED_VALUE; 683 break; 684 case SND_SOC_DAIFMT_LSB: 685 aw88261->md_value = AW88261_I2SMD_LSB_JUSTIFIED_VALUE; 686 break; 687 default: 688 dev_err(aw88261->aw_pa->dev, "unsupported DAI format 0x%x\n", 689 fmt & SND_SOC_DAIFMT_FORMAT_MASK); 690 return -EINVAL; 691 } 692 693 return 0; 694 } 695 696 static int aw88261_hw_params(struct snd_pcm_substream *substream, 697 struct snd_pcm_hw_params *params, 698 struct snd_soc_dai *dai) 699 { 700 struct snd_soc_component *component = dai->component; 701 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component); 702 703 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 704 return 0; 705 706 aw88261->cco_mux_value = AW88261_CCO_MUX_BYPASS_VALUE; 707 switch (params_rate(params)) { 708 case 8000: 709 aw88261->sr_value = AW88261_I2SSR_8KHZ_VALUE; 710 aw88261->cco_mux_value = AW88261_CCO_MUX_DIVIDED_VALUE; 711 break; 712 case 11025: 713 aw88261->sr_value = AW88261_I2SSR_11P025KHZ_VALUE; 714 break; 715 case 12000: 716 aw88261->sr_value = AW88261_I2SSR_12KHZ_VALUE; 717 break; 718 case 16000: 719 aw88261->sr_value = AW88261_I2SSR_16KHZ_VALUE; 720 aw88261->cco_mux_value = AW88261_CCO_MUX_DIVIDED_VALUE; 721 break; 722 case 22050: 723 aw88261->sr_value = AW88261_I2SSR_22P05KHZ_VALUE; 724 break; 725 case 24000: 726 aw88261->sr_value = AW88261_I2SSR_24KHZ_VALUE; 727 break; 728 case 32000: 729 aw88261->sr_value = AW88261_I2SSR_32KHZ_VALUE; 730 aw88261->cco_mux_value = AW88261_CCO_MUX_DIVIDED_VALUE; 731 break; 732 case 44100: 733 aw88261->sr_value = AW88261_I2SSR_44P1KHZ_VALUE; 734 break; 735 case 48000: 736 aw88261->sr_value = AW88261_I2SSR_48KHZ_VALUE; 737 break; 738 case 96000: 739 aw88261->sr_value = AW88261_I2SSR_96KHZ_VALUE; 740 break; 741 case 192000: 742 aw88261->sr_value = AW88261_I2SSR_192KHZ_VALUE; 743 break; 744 default: 745 dev_err(aw88261->aw_pa->dev, "unsupported sample rate %d\n", 746 params_rate(params)); 747 return -EINVAL; 748 } 749 750 switch (params_width(params)) { 751 case 16: 752 aw88261->fs_value = AW88261_I2SFS_16_BITS_VALUE; 753 break; 754 case 20: 755 aw88261->fs_value = AW88261_I2SFS_20_BITS_VALUE; 756 break; 757 case 24: 758 aw88261->fs_value = AW88261_I2SFS_24_BITS_VALUE; 759 break; 760 case 32: 761 aw88261->fs_value = AW88261_I2SFS_32_BITS_VALUE; 762 break; 763 default: 764 dev_err(aw88261->aw_pa->dev, "unsupported bit width %d\n", 765 params_width(params)); 766 return -EINVAL; 767 } 768 769 switch (params_physical_width(params)) { 770 case 16: 771 aw88261->bck_value = AW88261_I2SBCK_32FS_VALUE; 772 break; 773 case 24: 774 aw88261->bck_value = AW88261_I2SBCK_48FS_VALUE; 775 break; 776 case 32: 777 aw88261->bck_value = AW88261_I2SBCK_64FS_VALUE; 778 break; 779 default: 780 dev_err(aw88261->aw_pa->dev, "unsupported physical bit width %d\n", 781 params_physical_width(params)); 782 return -EINVAL; 783 } 784 785 return 0; 786 } 787 788 static int aw88261_set_tdm_slot(struct snd_soc_dai *dai, 789 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 790 { 791 struct snd_soc_component *component = dai->component; 792 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component); 793 int chan; 794 795 switch (slots) { 796 case 0: 797 /* Just reset everything TDM related to I2S values */ 798 aw88261->slot_num_value = AW88261_SLOT_NUM_I2S_MODE_VALUE; 799 aw88261->tdm_bck_value = AW88261_TDM_BCK_UNSET; 800 aw88261->tx_slotvld_mask = 0 << AW88261_I2S_TX_SLOTVLD_START_BIT; 801 aw88261->rxl_slotvld_mask = 0 << AW88261_I2S_RXL_SLOTVLD_START_BIT; 802 aw88261->rxr_slotvld_mask = 1 << AW88261_I2S_RXR_SLOTVLD_START_BIT; 803 return 0; 804 case 1: 805 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM1S_VALUE; 806 break; 807 case 2: 808 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM2S_VALUE; 809 break; 810 case 4: 811 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM4S_VALUE; 812 break; 813 case 6: 814 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM6S_VALUE; 815 break; 816 case 8: 817 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM8S_VALUE; 818 break; 819 case 16: 820 aw88261->slot_num_value = AW88261_SLOT_NUM_TDM16S_VALUE; 821 break; 822 default: 823 dev_err(aw88261->aw_pa->dev, "unsupported slot count %d\n", slots); 824 return -EINVAL; 825 } 826 827 switch (slot_width) { 828 case 16: 829 aw88261->tdm_bck_value = AW88261_I2SBCK_32FS_VALUE; 830 break; 831 case 20: 832 case 24: 833 aw88261->tdm_bck_value = AW88261_I2SBCK_48FS_VALUE; 834 break; 835 case 32: 836 aw88261->tdm_bck_value = AW88261_I2SBCK_64FS_VALUE; 837 break; 838 default: 839 dev_err(aw88261->aw_pa->dev, "unsupported slot width %d\n", 840 slot_width); 841 return -EINVAL; 842 } 843 844 if (tx_mask != 0) { 845 if ((chan = __ffs(tx_mask)) > 16) 846 return -EINVAL; 847 848 aw88261->tx_slotvld_mask = chan << AW88261_I2S_TX_SLOTVLD_START_BIT; 849 } 850 851 if (rx_mask != 0) { 852 if ((chan = __ffs(rx_mask)) > 16) 853 return -EINVAL; 854 855 aw88261->rxl_slotvld_mask = chan << AW88261_I2S_RXL_SLOTVLD_START_BIT; 856 } 857 858 if ((rx_mask & ~BIT(chan)) != 0) { 859 if ((chan = __ffs(rx_mask & ~BIT(chan))) > 16) 860 return -EINVAL; 861 862 aw88261->rxr_slotvld_mask = chan << AW88261_I2S_RXR_SLOTVLD_START_BIT; 863 } 864 865 return 0; 866 } 867 868 static const struct snd_soc_dai_ops aw88261_dai_ops = { 869 .set_fmt = aw88261_set_fmt, 870 .hw_params = aw88261_hw_params, 871 .set_tdm_slot = aw88261_set_tdm_slot, 872 }; 873 874 static struct snd_soc_dai_driver aw88261_dai[] = { 875 { 876 .name = "aw88261-aif", 877 .id = 1, 878 .playback = { 879 .stream_name = "Speaker_Playback", 880 .channels_min = 1, 881 .channels_max = 2, 882 .rates = AW88261_RATES, 883 .formats = AW88261_FORMATS, 884 }, 885 .capture = { 886 .stream_name = "Speaker_Capture", 887 .channels_min = 1, 888 .channels_max = 2, 889 .rates = AW88261_RATES, 890 .formats = AW88261_FORMATS, 891 }, 892 .ops = &aw88261_dai_ops, 893 }, 894 }; 895 896 static int aw88261_dev_set_profile_index(struct aw_device *aw_dev, int index) 897 { 898 /* check the index whether is valid */ 899 if ((index >= aw_dev->prof_info.count) || (index < 0)) 900 return -EINVAL; 901 /* check the index whether change */ 902 if (aw_dev->prof_index == index) 903 return -EPERM; 904 905 aw_dev->prof_index = index; 906 907 return 0; 908 } 909 910 static int aw88261_profile_info(struct snd_kcontrol *kcontrol, 911 struct snd_ctl_elem_info *uinfo) 912 { 913 struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol); 914 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec); 915 char *prof_name; 916 int count, ret; 917 918 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 919 uinfo->count = 1; 920 921 count = aw88261->aw_pa->prof_info.count; 922 if (count <= 0) { 923 uinfo->value.enumerated.items = 0; 924 return 0; 925 } 926 927 uinfo->value.enumerated.items = count; 928 929 if (uinfo->value.enumerated.item >= count) 930 uinfo->value.enumerated.item = count - 1; 931 932 count = uinfo->value.enumerated.item; 933 934 ret = aw88261_dev_get_prof_name(aw88261->aw_pa, count, &prof_name); 935 if (ret) { 936 strscpy(uinfo->value.enumerated.name, "null"); 937 return 0; 938 } 939 940 strscpy(uinfo->value.enumerated.name, prof_name); 941 942 return 0; 943 } 944 945 static int aw88261_profile_get(struct snd_kcontrol *kcontrol, 946 struct snd_ctl_elem_value *ucontrol) 947 { 948 struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol); 949 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec); 950 951 ucontrol->value.integer.value[0] = aw88261->aw_pa->prof_index; 952 953 return 0; 954 } 955 956 static int aw88261_profile_set(struct snd_kcontrol *kcontrol, 957 struct snd_ctl_elem_value *ucontrol) 958 { 959 struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol); 960 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec); 961 int ret; 962 963 /* pa stop or stopping just set profile */ 964 guard(mutex)(&aw88261->lock); 965 ret = aw88261_dev_set_profile_index(aw88261->aw_pa, ucontrol->value.integer.value[0]); 966 if (ret) { 967 dev_dbg(codec->dev, "profile index does not change"); 968 return 0; 969 } 970 971 if (aw88261->aw_pa->status) { 972 aw88261_dev_stop(aw88261->aw_pa); 973 aw88261_start(aw88261); 974 } 975 976 return 1; 977 } 978 979 static int aw88261_volume_get(struct snd_kcontrol *kcontrol, 980 struct snd_ctl_elem_value *ucontrol) 981 { 982 struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol); 983 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec); 984 struct aw_volume_desc *vol_desc = &aw88261->aw_pa->volume_desc; 985 986 ucontrol->value.integer.value[0] = 987 (AW88261_MUTE_VOL - vol_desc->ctl_volume) / 2; 988 989 return 0; 990 } 991 992 static int aw88261_volume_set(struct snd_kcontrol *kcontrol, 993 struct snd_ctl_elem_value *ucontrol) 994 { 995 struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol); 996 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec); 997 struct aw_volume_desc *vol_desc = &aw88261->aw_pa->volume_desc; 998 struct soc_mixer_control *mc = 999 (struct soc_mixer_control *)kcontrol->private_value; 1000 int value = ucontrol->value.integer.value[0]; 1001 1002 if (value < mc->min || value > mc->max) 1003 return -EINVAL; 1004 1005 value = AW88261_MUTE_VOL - (value * 2); 1006 1007 if (vol_desc->ctl_volume != value) { 1008 vol_desc->ctl_volume = value; 1009 aw88261_dev_set_volume(aw88261->aw_pa, vol_desc->ctl_volume); 1010 1011 return 1; 1012 } 1013 1014 return 0; 1015 } 1016 1017 /* 1018 * The field contains 4 bits in units of 6dB + 6 bits in units of 0.125dB 1019 * which is too precise for TLV (!) so we have to multiply the scale by 2. 1020 * 1021 * The range is clamped at -90dB to prevent overflowing the 4-bit part. 1022 */ 1023 static const DECLARE_TLV_DB_SCALE(volume_tlv, -9000, 25, 0); 1024 1025 static const struct snd_kcontrol_new aw88261_controls[] = { 1026 SOC_SINGLE_EXT_TLV("PCM Playback Volume", AW88261_SYSCTRL2_REG, 1027 6, AW88261_CTL_MAX_VOL, 1, 1028 aw88261_volume_get, aw88261_volume_set, volume_tlv), 1029 AW88261_PROFILE_EXT("Profile Set", aw88261_profile_info, 1030 aw88261_profile_get, aw88261_profile_set), 1031 }; 1032 1033 static int aw88261_playback_event(struct snd_soc_dapm_widget *w, 1034 struct snd_kcontrol *k, int event) 1035 { 1036 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); 1037 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component); 1038 1039 guard(mutex)(&aw88261->lock); 1040 switch (event) { 1041 case SND_SOC_DAPM_PRE_PMU: 1042 aw88261_start(aw88261); 1043 break; 1044 case SND_SOC_DAPM_POST_PMD: 1045 aw88261_dev_stop(aw88261->aw_pa); 1046 break; 1047 default: 1048 break; 1049 } 1050 1051 return 0; 1052 } 1053 1054 static const struct snd_soc_dapm_widget aw88261_dapm_widgets[] = { 1055 /* playback */ 1056 SND_SOC_DAPM_AIF_IN_E("AIF_RX", "Speaker_Playback", 0, 0, 0, 0, 1057 aw88261_playback_event, 1058 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 1059 SND_SOC_DAPM_OUTPUT("DAC Output"), 1060 1061 /* capture */ 1062 SND_SOC_DAPM_AIF_OUT("AIF_TX", "Speaker_Capture", 0, SND_SOC_NOPM, 0, 0), 1063 SND_SOC_DAPM_INPUT("ADC Input"), 1064 }; 1065 1066 static const struct snd_soc_dapm_route aw88261_audio_map[] = { 1067 {"DAC Output", NULL, "AIF_RX"}, 1068 {"AIF_TX", NULL, "ADC Input"}, 1069 }; 1070 1071 static int aw88261_frcset_check(struct aw88261 *aw88261) 1072 { 1073 unsigned int reg_val; 1074 u16 temh, teml, tem; 1075 int ret; 1076 1077 ret = regmap_read(aw88261->regmap, AW88261_EFRH3_REG, ®_val); 1078 if (ret) 1079 return ret; 1080 temh = ((u16)reg_val & (~AW88261_TEMH_MASK)); 1081 1082 ret = regmap_read(aw88261->regmap, AW88261_EFRL3_REG, ®_val); 1083 if (ret) 1084 return ret; 1085 teml = ((u16)reg_val & (~AW88261_TEML_MASK)); 1086 1087 if (aw88261->efuse_check == AW88261_EF_OR_CHECK) 1088 tem = (temh | teml); 1089 else 1090 tem = (temh & teml); 1091 1092 if (tem == AW88261_DEFAULT_CFG) 1093 aw88261->frcset_en = AW88261_FRCSET_ENABLE; 1094 else 1095 aw88261->frcset_en = AW88261_FRCSET_DISABLE; 1096 1097 dev_dbg(aw88261->aw_pa->dev, "tem is 0x%04x, frcset_en is %d", 1098 tem, aw88261->frcset_en); 1099 1100 return ret; 1101 } 1102 1103 static int aw88261_dev_init(struct aw88261 *aw88261, struct aw_container *aw_cfg) 1104 { 1105 struct aw_device *aw_dev = aw88261->aw_pa; 1106 int ret; 1107 1108 ret = aw88395_dev_cfg_load(aw_dev, aw_cfg); 1109 if (ret) { 1110 dev_err(aw_dev->dev, "aw_dev acf parse failed"); 1111 return -EINVAL; 1112 } 1113 1114 ret = regmap_write(aw_dev->regmap, AW88261_ID_REG, AW88261_SOFT_RESET_VALUE); 1115 if (ret) 1116 return ret; 1117 1118 aw_dev->prof_cur = AW88261_INIT_PROFILE; 1119 aw_dev->prof_index = AW88261_INIT_PROFILE; 1120 1121 ret = aw88261_dev_fw_update(aw88261); 1122 if (ret) { 1123 dev_err(aw_dev->dev, "fw update failed ret = %d\n", ret); 1124 return ret; 1125 } 1126 1127 ret = aw88261_frcset_check(aw88261); 1128 if (ret) { 1129 dev_err(aw_dev->dev, "aw88261_frcset_check ret = %d\n", ret); 1130 return ret; 1131 } 1132 1133 aw88261_dev_clear_int_status(aw_dev); 1134 1135 aw88261_dev_uls_hmute(aw_dev, true); 1136 1137 aw88261_dev_mute(aw_dev, true); 1138 1139 aw88261_dev_i2s_tx_enable(aw_dev, false); 1140 1141 usleep_range(AW88261_1000_US, AW88261_1000_US + 100); 1142 1143 aw88261_dev_amppd(aw_dev, true); 1144 1145 aw88261_dev_pwd(aw_dev, true); 1146 1147 return 0; 1148 } 1149 1150 static int aw88261_request_firmware_file(struct aw88261 *aw88261) 1151 { 1152 const struct firmware *cont __free(firmware) = NULL; 1153 struct aw_container *aw_cfg; 1154 const char *fw_name; 1155 int ret; 1156 1157 aw88261->aw_pa->fw_status = AW88261_DEV_FW_FAILED; 1158 1159 ret = device_property_read_string(aw88261->aw_pa->dev, "firmware-name", &fw_name); 1160 if (ret) 1161 fw_name = AW88261_ACF_FILE; 1162 1163 ret = request_firmware(&cont, fw_name, aw88261->aw_pa->dev); 1164 if (ret) 1165 return dev_err_probe(aw88261->aw_pa->dev, ret, 1166 "load [%s] failed!", fw_name); 1167 1168 dev_info(aw88261->aw_pa->dev, "loaded %s - size: %zu\n", 1169 fw_name, cont ? cont->size : 0); 1170 1171 aw_cfg = devm_kzalloc(aw88261->aw_pa->dev, struct_size(aw_cfg, data, cont->size), GFP_KERNEL); 1172 if (!aw_cfg) 1173 return -ENOMEM; 1174 1175 aw_cfg->len = (int)cont->size; 1176 memcpy(aw_cfg->data, cont->data, cont->size); 1177 1178 aw88261->aw_cfg = aw_cfg; 1179 1180 ret = aw88395_dev_load_acf_check(aw88261->aw_pa, aw88261->aw_cfg); 1181 if (ret) { 1182 dev_err(aw88261->aw_pa->dev, "load [%s] failed !", fw_name); 1183 return ret; 1184 } 1185 1186 scoped_guard(mutex, &aw88261->lock) { 1187 /* aw device init */ 1188 ret = aw88261_dev_init(aw88261, aw88261->aw_cfg); 1189 if (ret) 1190 dev_err(aw88261->aw_pa->dev, "dev init failed"); 1191 } 1192 1193 return ret; 1194 } 1195 1196 static int aw88261_codec_probe(struct snd_soc_component *component) 1197 { 1198 struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component); 1199 struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component); 1200 int ret; 1201 1202 ret = aw88261_request_firmware_file(aw88261); 1203 if (ret) 1204 return dev_err_probe(aw88261->aw_pa->dev, ret, 1205 "aw88261_request_firmware_file failed\n"); 1206 1207 /* add widgets */ 1208 ret = snd_soc_dapm_new_controls(dapm, aw88261_dapm_widgets, 1209 ARRAY_SIZE(aw88261_dapm_widgets)); 1210 if (ret) 1211 return ret; 1212 1213 /* add route */ 1214 ret = snd_soc_dapm_add_routes(dapm, aw88261_audio_map, 1215 ARRAY_SIZE(aw88261_audio_map)); 1216 if (ret) 1217 return ret; 1218 1219 ret = snd_soc_add_component_controls(component, aw88261_controls, 1220 ARRAY_SIZE(aw88261_controls)); 1221 1222 return ret; 1223 } 1224 1225 static const struct snd_soc_component_driver soc_codec_dev_aw88261 = { 1226 .probe = aw88261_codec_probe, 1227 }; 1228 1229 static void aw88261_parse_channel_dt(struct aw88261 *aw88261) 1230 { 1231 struct aw_device *aw_dev = aw88261->aw_pa; 1232 struct device_node *np = aw_dev->dev->of_node; 1233 u32 channel_value = AW88261_DEV_DEFAULT_CH; 1234 1235 of_property_read_u32(np, "awinic,audio-channel", &channel_value); 1236 aw88261->phase_sync = of_property_read_bool(np, "awinic,sync-flag"); 1237 1238 aw_dev->channel = channel_value; 1239 } 1240 1241 static int aw88261_init(struct aw88261 *aw88261, struct i2c_client *i2c, struct regmap *regmap) 1242 { 1243 struct aw_device *aw_dev; 1244 unsigned int chip_id; 1245 int ret; 1246 1247 ret = devm_regulator_get_enable(&i2c->dev, "dvdd"); 1248 if (ret) 1249 return dev_err_probe(&i2c->dev, ret, "Failed to enable dvdd supply\n"); 1250 1251 /* read chip id */ 1252 ret = regmap_read(regmap, AW88261_ID_REG, &chip_id); 1253 if (ret) { 1254 dev_err(&i2c->dev, "%s read chipid error. ret = %d", __func__, ret); 1255 return ret; 1256 } 1257 if (chip_id != AW88261_CHIP_ID) { 1258 dev_err(&i2c->dev, "unsupported device id = %x", chip_id); 1259 return -ENXIO; 1260 } 1261 1262 dev_info(&i2c->dev, "chip id = %x\n", chip_id); 1263 1264 aw_dev = devm_kzalloc(&i2c->dev, sizeof(*aw_dev), GFP_KERNEL); 1265 if (!aw_dev) 1266 return -ENOMEM; 1267 1268 aw88261->aw_pa = aw_dev; 1269 aw_dev->i2c = i2c; 1270 aw_dev->regmap = regmap; 1271 aw_dev->dev = &i2c->dev; 1272 aw_dev->chip_id = AW88261_CHIP_ID; 1273 aw_dev->acf = NULL; 1274 aw_dev->prof_info.prof_desc = NULL; 1275 aw_dev->prof_info.count = 0; 1276 aw_dev->prof_info.prof_type = AW88395_DEV_NONE_TYPE_ID; 1277 aw_dev->channel = 0; 1278 aw_dev->fw_status = AW88261_DEV_FW_FAILED; 1279 aw_dev->volume_desc.ctl_volume = AW88261_CTL_DEFAULT_VOL; 1280 aw_dev->volume_desc.mute_volume = AW88261_MUTE_VOL; 1281 aw88261_parse_channel_dt(aw88261); 1282 1283 return ret; 1284 } 1285 1286 static int aw88261_i2c_probe(struct i2c_client *i2c) 1287 { 1288 struct aw88261 *aw88261; 1289 int ret; 1290 1291 if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C)) 1292 return dev_err_probe(&i2c->dev, -ENXIO, "check_functionality failed"); 1293 1294 aw88261 = devm_kzalloc(&i2c->dev, sizeof(*aw88261), GFP_KERNEL); 1295 if (!aw88261) 1296 return -ENOMEM; 1297 1298 /* set defaults */ 1299 aw88261->slot_num_value = AW88261_SLOT_NUM_I2S_MODE_VALUE; 1300 aw88261->sr_value = AW88261_I2SSR_48KHZ_VALUE; 1301 aw88261->cco_mux_value = AW88261_CCO_MUX_BYPASS_VALUE; 1302 aw88261->fs_value = AW88261_I2SFS_24_BITS_VALUE; 1303 aw88261->bck_value = AW88261_I2SBCK_64FS_VALUE; 1304 aw88261->bck_inv_value = AW88261_BCKINV_NOT_INVERT_VALUE; 1305 aw88261->tdm_bck_value = AW88261_TDM_BCK_UNSET; 1306 aw88261->md_value = AW88261_I2SMD_PHILIPS_STANDARD_VALUE; 1307 aw88261->rxr_slotvld_mask = 1 << AW88261_I2S_RXR_SLOTVLD_START_BIT; 1308 1309 mutex_init(&aw88261->lock); 1310 1311 i2c_set_clientdata(i2c, aw88261); 1312 1313 aw88261->regmap = devm_regmap_init_i2c(i2c, &aw88261_remap_config); 1314 if (IS_ERR(aw88261->regmap)) { 1315 ret = PTR_ERR(aw88261->regmap); 1316 return dev_err_probe(&i2c->dev, ret, "failed to init regmap: %d\n", ret); 1317 } 1318 1319 /* aw pa init */ 1320 ret = aw88261_init(aw88261, i2c, aw88261->regmap); 1321 if (ret) 1322 return ret; 1323 1324 ret = devm_snd_soc_register_component(&i2c->dev, 1325 &soc_codec_dev_aw88261, 1326 aw88261_dai, ARRAY_SIZE(aw88261_dai)); 1327 if (ret) 1328 dev_err(&i2c->dev, "failed to register aw88261: %d", ret); 1329 1330 return ret; 1331 } 1332 1333 static const struct i2c_device_id aw88261_i2c_id[] = { 1334 { .name = "aw88261" }, 1335 { } 1336 }; 1337 MODULE_DEVICE_TABLE(i2c, aw88261_i2c_id); 1338 1339 static const struct of_device_id aw88261_of_table[] = { 1340 { .compatible = "awinic,aw88261" }, 1341 { } 1342 }; 1343 MODULE_DEVICE_TABLE(of, aw88261_of_table); 1344 1345 static struct i2c_driver aw88261_i2c_driver = { 1346 .driver = { 1347 .name = "aw88261", 1348 .of_match_table = aw88261_of_table, 1349 }, 1350 .probe = aw88261_i2c_probe, 1351 .id_table = aw88261_i2c_id, 1352 }; 1353 module_i2c_driver(aw88261_i2c_driver); 1354 1355 MODULE_DESCRIPTION("ASoC AW88261 Smart PA Driver"); 1356 MODULE_LICENSE("GPL v2"); 1357