source: svn/newcon3bcm2_21bu/magnum/portinginterface/ape/7552/bape_fs_priv.c

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2006-2011, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bape_fs_priv.c $
11 * $brcm_Revision: Hydra_Software_Devel/4 $
12 * $brcm_Date: 11/14/11 3:41p $
13 *
14 * Module Description: Audio Decoder Interface
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/portinginterface/ape/7422/bape_fs_priv.c $
19 *
20 * Hydra_Software_Devel/4   11/14/11 3:41p gskerl
21 * SW7429-18: Merging 7429 changes back to main branch.
22 *
23 * Hydra_Software_Devel/SW7429-18/1   10/21/11 6:29p jgarrett
24 * SW7429-18: Initial compileable version for 7429
25 *
26 * Hydra_Software_Devel/3   7/8/11 4:24p gskerl
27 * SW7552-72: Added support for NCO/Mclkgen audio clock sources
28 *
29 * Hydra_Software_Devel/2   4/20/11 6:59p gskerl
30 * SW7425-384: Refactored BAPE_P_SetFsTiming_isr() to improve PLLCLKSEL
31 * logic and to add support for multiple DACS
32 *
33 * Hydra_Software_Devel/1   12/16/10 4:04p jgarrett
34 * SW7422-146: Initial compilable APE for 7422
35 *
36 ***************************************************************************/
37
38#include "bstd.h"
39#include "bkni.h"
40#include "bape.h"
41#include "bape_priv.h"
42
43BDBG_MODULE(bape_fs_priv);
44
45#ifdef BCHP_AUD_FMM_OP_CTRL_REG_START
46#include "bchp_aud_fmm_op_ctrl.h"
47#include "bchp_aud_fmm_iop_ctrl.h"
48
49unsigned BAPE_P_AllocateFs(BAPE_Handle handle)
50{
51    unsigned i;
52
53    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
54
55    for ( i = 0; i < BAPE_CHIP_MAX_FS; i++ )
56    {
57        if ( !handle->fsAllocated[i] )
58        {
59            handle->fsAllocated[i] = true;
60            return i;
61        }
62    }
63
64    return BAPE_FS_INVALID;
65}
66
67void BAPE_P_FreeFs(BAPE_Handle handle, unsigned fs)
68{
69    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
70    BDBG_ASSERT(fs < BAPE_CHIP_MAX_FS);
71    BDBG_ASSERT(handle->fsAllocated[fs] == true);
72    handle->fsAllocated[fs] = false;
73}
74
75void BAPE_P_SetFsTiming_isr(BAPE_Handle handle, unsigned fsIndex, BAPE_MclkSource mclkSource, unsigned pllChannel, unsigned mclkFreqToFsRatio)
76{
77    uint32_t    regVal, regAddr;
78    uint32_t    pllclksel=0;
79    uint32_t    mclkRate=0;
80
81    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
82    BDBG_ASSERT(fsIndex < BAPE_CHIP_MAX_FS);
83    BDBG_ASSERT(handle->fsAllocated[fsIndex] == true);
84    BDBG_ASSERT(mclkSource < BAPE_MclkSource_eMax);
85    BDBG_ASSERT(pllChannel < BAPE_CHIP_MAX_PLLS );
86
87    switch ( mclkSource )
88    {
89        /* PLL Timing */
90    #if BAPE_CHIP_MAX_PLLS > 0
91        case BAPE_MclkSource_ePll0:
92            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_PLL0_ch1 + pllChannel;
93            break;
94    #endif
95    #if BAPE_CHIP_MAX_PLLS > 1
96        case BAPE_MclkSource_ePll1:
97            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_PLL1_ch1 + pllChannel;
98            break;
99    #endif
100    #if BAPE_CHIP_MAX_PLLS > 2
101        case BAPE_MclkSource_ePll2:
102            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_PLL2_ch1 + pllChannel;
103            break;
104    #endif
105
106        /* DAC Timing (pllChannel doesn't apply for DACs) */
107    #if BAPE_CHIP_MAX_DACS > 0
108        case BAPE_MclkSource_eHifidac0:
109            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Hifidac0;
110            break;
111    #endif
112    #if BAPE_CHIP_MAX_DACS > 1
113        case BAPE_MclkSource_eHifidac1:
114            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Hifidac1;
115            break;
116    #endif
117    #if BAPE_CHIP_MAX_DACS > 2
118        case BAPE_MclkSource_eHifidac2:
119            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Hifidac2;
120            break;
121    #endif
122
123        /* NCO (Mclkgen) Timing (pllChannel doesn't apply for NCOs) */
124    #if BAPE_CHIP_MAX_NCOS > 0
125        case BAPE_MclkSource_eNco0:
126            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Mclk_gen0;
127            break;
128    #endif
129    #if BAPE_CHIP_MAX_NCOS > 1
130        case BAPE_MclkSource_eNco1:
131            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Mclk_gen1;
132            break;
133    #endif
134    #if BAPE_CHIP_MAX_NCOS > 2
135        case BAPE_MclkSource_eNco2:
136            pllclksel = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_PLLCLKSEL_Mclk_gen2;
137            break;
138    #endif
139
140        /* Should never get here */
141        default:
142            BDBG_ERR(("mclkSource (%u) doesn't refer to a valid PLL or DAC", mclkSource));
143            BDBG_ASSERT(false);     /* something went wrong somewhere! */
144            return;
145    }
146
147    mclkRate = mclkFreqToFsRatio / 128;
148
149    regAddr = BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_ARRAY_BASE + ((BCHP_AUD_FMM_OP_CTRL_MCLK_CFG_FSi_ARRAY_ELEMENT_SIZE * fsIndex)/8);
150    regVal = BREG_Read32_isr(handle->regHandle, regAddr);
151
152    regVal &= ~(BCHP_MASK(AUD_FMM_OP_CTRL_MCLK_CFG_FSi, PLLCLKSEL));
153    regVal &= ~(BCHP_MASK(AUD_FMM_OP_CTRL_MCLK_CFG_FSi, MCLK_RATE));
154
155    regVal |= BCHP_FIELD_DATA(AUD_FMM_OP_CTRL_MCLK_CFG_FSi, PLLCLKSEL, pllclksel);
156    regVal |= BCHP_FIELD_DATA(AUD_FMM_OP_CTRL_MCLK_CFG_FSi, MCLK_RATE, mclkRate);       
157
158    BDBG_MSG(("Updated fs %u MCLK_CFG (0x%08X) to 0x%08X", fsIndex, regVal));
159    BREG_Write32_isr(handle->regHandle, regAddr, regVal);
160}
161
162#else
163/* Stubs for newer chips that don't have the FS clock mux */
164unsigned BAPE_P_AllocateFs(BAPE_Handle handle)
165{
166    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
167    BDBG_ERR(("This chipset does not support Fs timing"));
168    BDBG_ASSERT(false);
169    return (unsigned)-1;
170}
171
172void BAPE_P_FreeFs(BAPE_Handle handle, unsigned fs)
173{
174    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
175    BSTD_UNUSED(fs);
176    BDBG_ERR(("This chipset does not support Fs timing"));
177    BDBG_ASSERT(false);
178}
179
180void BAPE_P_SetFsTiming_isr(BAPE_Handle handle, unsigned fsIndex, BAPE_MclkSource mclkSource, unsigned pllChannel, unsigned mclkFreqToFsRatio)
181{
182    BDBG_OBJECT_ASSERT(handle, BAPE_Device);
183    BSTD_UNUSED(fsIndex);
184    BSTD_UNUSED(mclkSource);
185    BSTD_UNUSED(pllChannel);
186    BSTD_UNUSED(mclkFreqToFsRatio);
187    BDBG_ERR(("This chipset does not support Fs timing"));
188    BDBG_ASSERT(false);
189}
190#endif
191
Note: See TracBrowser for help on using the repository browser.