xref: /linux/sound/soc/codecs/aw88261.c (revision 789a3f8c914fde0b4a865acc210bcc0bf8b54c2b)
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, &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, &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, &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, &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, &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, &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, &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, &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