diff options
author | Peter Li | 2017-05-03 12:33:28 -0500 |
---|---|---|
committer | Peter Li | 2017-05-03 12:33:28 -0500 |
commit | 9c8f871b47a324c7e0d729143c8b6bc4df63e788 (patch) | |
tree | c883e2b2c8f5658d3e34842f530a5db7ea7ccfbe | |
parent | 30d6b526559bd99881bf335cdd681044f732f92c (diff) | |
download | tas2559-android-driver-9c8f871b47a324c7e0d729143c8b6bc4df63e788.tar.gz tas2559-android-driver-9c8f871b47a324c7e0d729143c8b6bc4df63e788.tar.xz tas2559-android-driver-9c8f871b47a324c7e0d729143c8b6bc4df63e788.zip |
update channel control
-rwxr-xr-x | tas2559-core.c | 79 | ||||
-rwxr-xr-x | tas2559.h | 16 |
2 files changed, 75 insertions, 20 deletions
diff --git a/tas2559-core.c b/tas2559-core.c index f10be70..149ae0e 100755 --- a/tas2559-core.c +++ b/tas2559-core.c | |||
@@ -292,9 +292,67 @@ int tas2559_configIRQ(struct tas2559_priv *pTAS2559, enum channel dev) | |||
292 | int tas2559_SA_DevChnSetup(struct tas2559_priv *pTAS2559, unsigned int mode) | 292 | int tas2559_SA_DevChnSetup(struct tas2559_priv *pTAS2559, unsigned int mode) |
293 | { | 293 | { |
294 | int nResult = 0; | 294 | int nResult = 0; |
295 | /* | 295 | struct TProgram *pProgram; |
296 | * TODO | 296 | unsigned char buf_mute[16] = {0}; |
297 | */ | 297 | unsigned char buf_DevA_Left_DevB_Right[16] = {0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x40, 0, 0, 0}; |
298 | unsigned char buf_DevA_Right_DevB_Left[16] = {0, 0, 0, 0, 0x40, 0, 0, 0, 0x40, 0, 0, 0, 0, 0, 0, 0}; | ||
299 | unsigned char buf_DevA_MonoMix_DevB_MonoMix[16] = {0x20, 0, 0, 0, 0x20, 0, 0, 0, 0x20, 0, 0, 0, 0x20, 0, 0, 0}; | ||
300 | unsigned char *pDevBuf = NULL; | ||
301 | |||
302 | dev_dbg(pTAS2559->dev, "%s, mode %d\n", __func__, mode); | ||
303 | if ((pTAS2559->mpFirmware->mnPrograms == 0) | ||
304 | || (pTAS2559->mpFirmware->mnConfigurations == 0)) { | ||
305 | dev_err(pTAS2559->dev, "%s, firmware not loaded\n", __func__); | ||
306 | goto end; | ||
307 | } | ||
308 | |||
309 | pProgram = &(pTAS2559->mpFirmware->mpPrograms[pTAS2559->mnCurrentProgram]); | ||
310 | if (pProgram->mnAppMode != TAS2559_APP_TUNINGMODE) { | ||
311 | dev_err(pTAS2559->dev, "%s, not tuning mode\n", __func__); | ||
312 | goto end; | ||
313 | } | ||
314 | |||
315 | if (pTAS2559->mbLoadConfigurationPrePowerUp) { | ||
316 | dev_dbg(pTAS2559->dev, "%s, setup channel after coeff update\n", __func__); | ||
317 | pTAS2559->mnChannelState = mode; | ||
318 | goto end; | ||
319 | } | ||
320 | |||
321 | switch (mode) { | ||
322 | case TAS2559_AD_BD: | ||
323 | pDevBuf = pTAS2559->mnDefaultChlData; | ||
324 | break; | ||
325 | |||
326 | case TAS2559_AM_BM: | ||
327 | pDevBuf = buf_mute; | ||
328 | break; | ||
329 | |||
330 | case TAS2559_AL_BR: | ||
331 | pDevBuf = buf_DevA_Left_DevB_Right; | ||
332 | break; | ||
333 | |||
334 | case TAS2559_AR_BL: | ||
335 | pDevBuf = buf_DevA_Right_DevB_Left; | ||
336 | break; | ||
337 | |||
338 | case TAS2559_AH_BH: | ||
339 | pDevBuf = buf_DevA_MonoMix_DevB_MonoMix; | ||
340 | break; | ||
341 | |||
342 | default: | ||
343 | goto end; | ||
344 | break; | ||
345 | } | ||
346 | |||
347 | if (pDevBuf) { | ||
348 | nResult = pTAS2559->bulk_write(pTAS2559, DevA, | ||
349 | TAS2559_SA_CHL_CTRL_REG, pDevBuf, 16); | ||
350 | if (nResult < 0) | ||
351 | goto end; | ||
352 | pTAS2559->mnChannelState = mode; | ||
353 | } | ||
354 | |||
355 | end: | ||
298 | return nResult; | 356 | return nResult; |
299 | } | 357 | } |
300 | 358 | ||
@@ -496,8 +554,6 @@ int tas2559_load_platdata(struct tas2559_priv *pTAS2559) | |||
496 | if (nResult < 0) | 554 | if (nResult < 0) |
497 | goto end; | 555 | goto end; |
498 | 556 | ||
499 | nResult = tas2559_SA_DevChnSetup(pTAS2559, pTAS2559->mnChannelState); | ||
500 | |||
501 | end: | 557 | end: |
502 | 558 | ||
503 | return nResult; | 559 | return nResult; |
@@ -655,21 +711,20 @@ prog_coefficient: | |||
655 | TAS2559_BLOCK_CFG_COEFF_DEV_A); | 711 | TAS2559_BLOCK_CFG_COEFF_DEV_A); |
656 | if (nResult < 0) | 712 | if (nResult < 0) |
657 | goto end; | 713 | goto end; |
658 | if (pTAS2559->mnChannelState == TAS2559_DM_AD_BD) { | ||
659 | /* TODO */ | ||
660 | } | ||
661 | } | 714 | } |
662 | if (pNewConfiguration->mnDevices & DevB) { | 715 | if (pNewConfiguration->mnDevices & DevB) { |
663 | nResult = tas2559_load_data(pTAS2559, &(pNewConfiguration->mData), | 716 | nResult = tas2559_load_data(pTAS2559, &(pNewConfiguration->mData), |
664 | TAS2559_BLOCK_CFG_COEFF_DEV_B); | 717 | TAS2559_BLOCK_CFG_COEFF_DEV_B); |
665 | if (nResult < 0) | 718 | if (nResult < 0) |
666 | goto end; | 719 | goto end; |
667 | if (pTAS2559->mnChannelState == TAS2559_DM_AD_BD) { | ||
668 | /* TODO */ | ||
669 | } | ||
670 | } | 720 | } |
671 | 721 | ||
672 | if (pTAS2559->mnChannelState != TAS2559_DM_AD_BD) { | 722 | if (pTAS2559->mnChannelState == TAS2559_AD_BD) { |
723 | nResult = pTAS2559->bulk_read(pTAS2559, | ||
724 | DevA, TAS2559_SA_CHL_CTRL_REG, pTAS2559->mnDefaultChlData, 16); | ||
725 | if (nResult < 0) | ||
726 | goto end; | ||
727 | } else { | ||
673 | nResult = tas2559_SA_DevChnSetup(pTAS2559, pTAS2559->mnChannelState); | 728 | nResult = tas2559_SA_DevChnSetup(pTAS2559, pTAS2559->mnChannelState); |
674 | if (nResult < 0) | 729 | if (nResult < 0) |
675 | goto end; | 730 | goto end; |
@@ -170,8 +170,9 @@ | |||
170 | #define TAS2559_BOOSTOFF_EFFICIENCY TAS2559_REG(0, 51, 20) | 170 | #define TAS2559_BOOSTOFF_EFFICIENCY TAS2559_REG(0, 51, 20) |
171 | #define TAS2559_BOOST_HEADROOM TAS2559_REG(0, 51, 24) | 171 | #define TAS2559_BOOST_HEADROOM TAS2559_REG(0, 51, 24) |
172 | #define TAS2559_THERMAL_FOLDBACK_REG TAS2559_REG(0, 51, 100) | 172 | #define TAS2559_THERMAL_FOLDBACK_REG TAS2559_REG(0, 51, 100) |
173 | #define TAS2559_VPRED_COMP_REG TAS2559_REG(0, 53, 24) | ||
174 | 173 | ||
174 | #define TAS2559_SA_CHL_CTRL_REG TAS2559_REG(0, 53, 20) /* B0_P0x35_R0x14 */ | ||
175 | #define TAS2559_VPRED_COMP_REG TAS2559_REG(0, 53, 24) | ||
175 | #define TAS2559_SA_COEFF_SWAP_REG TAS2559_REG(0, 53, 44) /* B0_P0x35_R0x2c */ | 176 | #define TAS2559_SA_COEFF_SWAP_REG TAS2559_REG(0, 53, 44) /* B0_P0x35_R0x2c */ |
176 | 177 | ||
177 | #define TAS2559_TEST_MODE_REG TAS2559_REG(0, 253, 13) | 178 | #define TAS2559_TEST_MODE_REG TAS2559_REG(0, 253, 13) |
@@ -304,11 +305,11 @@ | |||
304 | #define TAS2559_BOOST_DEVB 2 | 305 | #define TAS2559_BOOST_DEVB 2 |
305 | #define TAS2559_BOOST_BOTH 3 | 306 | #define TAS2559_BOOST_BOTH 3 |
306 | 307 | ||
307 | #define TAS2559_DM_AD_BD 0 /* DevA default, DevB default */ | 308 | #define TAS2559_AD_BD 0 /* DevA default, DevB default */ |
308 | #define TAS2559_DM_AM_BM 1 /* DevA mute, DevB mute */ | 309 | #define TAS2559_AM_BM 1 /* DevA mute, DevB mute */ |
309 | #define TAS2559_DM_AL_BR 2 /* DevA left channel, DevB right channel */ | 310 | #define TAS2559_AL_BR 2 /* DevA left channel, DevB right channel */ |
310 | #define TAS2559_DM_AR_BL 3 /* DevA right channel, DevB left channel */ | 311 | #define TAS2559_AR_BL 3 /* DevA right channel, DevB left channel */ |
311 | #define TAS2559_DM_AH_BH 4 /* DevA (L+R)/2, DevB (L+R)/2 */ | 312 | #define TAS2559_AH_BH 4 /* DevA (L+R)/2, DevB (L+R)/2 */ |
312 | 313 | ||
313 | #define TAS2559_VBST_DEFAULT 0 /* firmware default */ | 314 | #define TAS2559_VBST_DEFAULT 0 /* firmware default */ |
314 | #define TAS2559_VBST_A_ON 1 /* DevA always 8.5V, DevB default */ | 315 | #define TAS2559_VBST_A_ON 1 /* DevA always 8.5V, DevB default */ |
@@ -491,8 +492,7 @@ struct tas2559_priv { | |||
491 | struct work_struct mtimerwork; | 492 | struct work_struct mtimerwork; |
492 | 493 | ||
493 | unsigned int mnChannelState; | 494 | unsigned int mnChannelState; |
494 | unsigned char mnDevAChlData[16]; | 495 | unsigned char mnDefaultChlData[16]; |
495 | unsigned char mnDevBChlData[16]; | ||
496 | 496 | ||
497 | unsigned int mnErrCode; | 497 | unsigned int mnErrCode; |
498 | 498 | ||