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