From b5be3aacceef8be15a5ae1aed15686acd9d8c610 Mon Sep 17 00:00:00 2001 From: Sasirekaa Madhesu Date: Mon, 12 Mar 2018 17:10:42 +0530 Subject: [PATCH] ipq40xx: Disable audio clock registers in u-boot Change-Id: I83f208324c00b775ef518b69494317f2b44a4aba Signed-off-by: Sasirekaa Madhesu --- board/qca/arm/common/board_init.c | 6 ++++++ board/qca/arm/ipq40xx/ipq40xx.c | 28 ++++++++++++++++++++++++++++ board/qca/arm/ipq40xx/ipq40xx.h | 2 ++ 3 files changed, 36 insertions(+) diff --git a/board/qca/arm/common/board_init.c b/board/qca/arm/common/board_init.c index 55fc612f32..fb295f00e3 100644 --- a/board/qca/arm/common/board_init.c +++ b/board/qca/arm/common/board_init.c @@ -56,6 +56,11 @@ void board_pci_deinit(void) { return 0; } +__weak +void disable_audio_clks(void) +{ + return 0; +} int board_init(void) { @@ -172,6 +177,7 @@ int board_init(void) } aquantia_phy_reset_init(); + disable_audio_clks(); return 0; } diff --git a/board/qca/arm/ipq40xx/ipq40xx.c b/board/qca/arm/ipq40xx/ipq40xx.c index c29dc3ea83..eb436f75e4 100644 --- a/board/qca/arm/ipq40xx/ipq40xx.c +++ b/board/qca/arm/ipq40xx/ipq40xx.c @@ -45,6 +45,15 @@ qca_mmc mmc_host; struct sdhci_host mmc_host; #endif +#define ADSS_AUDIO_RXM_CBCR_REG 0x0770012C +#define ADSS_AUDIO_RXB_CBCR_REG 0x0770010C +#define ADSS_AUDIO_TXB_CBCR_REG 0x0770014C +#define ADSS_AUDIO_SPDIF_CBCR_REG 0x07700154 +#define ADSS_AUDIO_SPDIF_DIV2_CBCR_REG 0x0770015C +#define ADSS_AUDIO_TXM_CBCR_REG 0x0770016C +#define ADSS_AUDIO_PCM_CBCR_REG 0x077001AC +#define ADSS_AUDIO_SPDIF_IN_FAST_CBCR_REG 0x077001EC + const char *rsvd_node = "/reserved-memory"; const char *del_node[] = {"rsvd1", "rsvd2", @@ -349,6 +358,25 @@ void board_pci_deinit(void) pcie_clock_disable(GCC_PCIE_AHB_CBCR); } +/* + * The audio block is out of reset by default due to which the + * audio clock blocks are also turned on. When audio TLMM is + * enabled in kernel, the clocks will also be available at the + * pins which causes pop noise during kernel bootup. + * To avoid this, the clocks are turned off in u-boot. + */ +void disable_audio_clks(void) +{ + writel(0, ADSS_AUDIO_RXM_CBCR_REG); + writel(0, ADSS_AUDIO_RXB_CBCR_REG); + writel(0, ADSS_AUDIO_TXB_CBCR_REG); + writel(0, ADSS_AUDIO_SPDIF_CBCR_REG); + writel(0, ADSS_AUDIO_SPDIF_DIV2_CBCR_REG); + writel(0, ADSS_AUDIO_TXM_CBCR_REG); + writel(0, ADSS_AUDIO_PCM_CBCR_REG); + writel(0, ADSS_AUDIO_SPDIF_IN_FAST_CBCR_REG); +} + void ipq_fdt_fixup_socinfo(void *blob) { return; diff --git a/board/qca/arm/ipq40xx/ipq40xx.h b/board/qca/arm/ipq40xx/ipq40xx.h index a14231de1f..30aa757355 100644 --- a/board/qca/arm/ipq40xx/ipq40xx.h +++ b/board/qca/arm/ipq40xx/ipq40xx.h @@ -81,6 +81,8 @@ __weak int ipq_get_tz_version(char *version_name, int buf_size) return 1; } +void disable_audio_clks(void); + /* Board specific parameters */ typedef struct { unsigned int machid;