Звук. Исходники от Toshiba
Исходники от Toshiba
if (pin_config[0].func == TEGRA_MUX_PLLA_OUT) ClockFreqInKHz = NvRmPrivGetClockSourceFreq(NvRmClockSource_PllA0); else if (pin_config[0].func == TEGRA_MUX_OSC) ClockFreqInKHz = NvRmPrivGetClockSourceFreq(NvRmClockSource_ClkM); break;
https://gitorious.org/ac100/kernel/blobs/toshiba_froyo/arch/arm/mach-tegra/nvrm/core/ap20/ap20rm_pinmux_tables.c#line101 NvRmPrivAp20EnableExternalClockSource
https://gitorious.org/ac100/kernel/blobs/toshiba_froyo/arch/arm/mach-tegra/include/nvodm_query_pins_ap20.h#line74 NvOdmPinRegister_Ap20_PadCtrl_CDEV1CFGPADCTRL = 0x20000878UL,
https://gitorious.org/ac100/kernel/blobs/toshiba_froyo/arch/arm/mach-tegra/include/ap20/arapb_misc.h
kernel\arch\arm\mach-tegra\odm_kit\query\paz00\subboards\nvodm_query_discovery_e1162_addresses.h
// Audio Codec on GEN1_I2C (I2C_1) static const NvOdmIoAddress s_AudioCodecAddressesI2C_1[] = { { NvOdmIoModule_ExternalClock, 0, 0 }, /* Codec MCLK -> APxx DAP_MCLK1 */ { NvOdmIoModule_I2c, 0x00, 0x3C }, /* Codec I2C -> APxx PMU I2C, segment 0 */ /* Codec I2C address is 0x3C */ { NvOdmIoModule_Gpio, (NvU32)'w'-'a', 0x02 }, /* GPIO Port W and Pin 2 for HP_DET */ };
kernel\arch\arm\mach-tegra\odm_kit\query\paz00\nvodm_query_pinmux.c ...
kernel\arch\arm\mach-tegra\nvrm\core\ap20\ap20rm_clocks_info.c
{ /* I2S1 controller module */ NvRmModuleID_I2s, 0, 0, { NvRmClockSource_PllA0, NvRmClockSource_AudioSync, NvRmClockSource_PllP0, NvRmClockSource_ClkM }, NvRmClockDivider_Fractional_2, NV_COMMON_CLK_RST_FIELDS_INFO(I2S1, L), NvRmDiagModuleID_I2s }, { /* I2S2 controller module */ NvRmModuleID_I2s, 1, 0, { NvRmClockSource_PllA0, NvRmClockSource_AudioSync, NvRmClockSource_PllP0, NvRmClockSource_ClkM }, NvRmClockDivider_Fractional_2, NV_COMMON_CLK_RST_FIELDS_INFO(I2S2, L), NvRmDiagModuleID_I2s },
{ /* AC97 controller module */ NvRmModuleID_Ac97, 0, 0, { NvRmClockSource_Apb }, NvRmClockDivider_None, 0, 0, 0, 0, 0, CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0, CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0_CLK_ENB_AC97_FIELD, CLK_RST_CONTROLLER_RST_DEVICES_L_0, CLK_RST_CONTROLLER_RST_DEVICES_L_0_SWR_AC97_RST_FIELD, NvRmDiagModuleID_Ac97 },
static const NvRmSelectorClockInfo s_Ap20SelectorClockTable[] = { { NvRmClockSource_AudioSync, { NvRmClockSource_ExtSpdf, NvRmClockSource_ExtI2s1, NvRmClockSource_ExtI2s2, NvRmClockSource_ExtAc97, NvRmClockSource_PllA0, NvRmClockSource_ExtAudio2, NvRmClockSource_ExtAudio1, NvRmClockSource_ExtVi }, CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_RATE_0, CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_RATE_0_SYNC_CLK_RATE_DEFAULT_MASK, CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_RATE_0_SYNC_CLK_RATE_SHIFT, CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0, CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0_SYNC_CLK_DOUBLER_ENB_FIELD }, }; static const NvU32 s_Ap20SelectorClockTableSize = NV_ARRAY_SIZE(s_Ap20SelectorClockTable);
arch\arm\mach-tegra\nvrm\core\ap20\ap20rm_clocks_info.c
* Notation clarification: in h/w documentation PLL base outputs (except PLLA * output) are denoted as PllX_OUT0, and the seconadry PLL outputs (if any) * after fractional dividers are denoted as PllX_OUT1, PllX_OUT2, .... However, * no h/w name is defined for the base PLLA output, and the output of the PLLA * secondary divider is marked as PllA_OUT0 (not PllA_OUT1). Threfore, we use * PllA1 (not PllA0) to denote base PLLA clock.
arch\arm\mach-tegra\include\ap20\arclk_rst.h
#define CLK_RST_CONTROLLER_PLLA_BASE_0 _MK_ADDR_CONST(0xb0) ... #define CLK_RST_CONTROLLER_PLLA_OUT_0 _MK_ADDR_CONST(0xb4)