From 7f609a3ca0638a546a9f6548e94d8fa60f177091 Mon Sep 17 00:00:00 2001 From: Karthikeyan Mani Date: Fri, 17 May 2019 16:59:53 -0700 Subject: [PATCH] asoc: codecs: Add support for class ab low power modes Add codec enable and disable sequences for class ab low power modes. Change-Id: If5b54075985c2d4d1a24423c03e78bee119862bc Signed-off-by: Karthikeyan Mani --- asoc/codecs/wcd-clsh.c | 12 +++++++++--- include/asoc/wcd-clsh.h | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/asoc/codecs/wcd-clsh.c b/asoc/codecs/wcd-clsh.c index 0f403ac7a7e5..bda389381101 100644 --- a/asoc/codecs/wcd-clsh.c +++ b/asoc/codecs/wcd-clsh.c @@ -34,6 +34,10 @@ static const char *mode_to_str(int mode) return WCD_CLSH_STRINGIFY(CLS_AB); case CLS_AB_HIFI: return WCD_CLSH_STRINGIFY(CLS_AB_HIFI); + case CLS_AB_LP: + return WCD_CLSH_STRINGIFY(CLS_AB_LP); + case CLS_AB_LOHIFI: + return WCD_CLSH_STRINGIFY(CLS_AB_LOHIFI); default: return WCD_CLSH_STRINGIFY(CLS_H_INVALID); }; @@ -107,7 +111,7 @@ static inline void wcd_clsh_set_buck_mode(struct snd_soc_component *component, int mode) { if (mode == CLS_H_HIFI || mode == CLS_H_LOHIFI || - mode == CLS_AB_HIFI) + mode == CLS_AB_HIFI || mode == CLS_AB_LOHIFI) snd_soc_component_update_bits(component, WCD9XXX_ANA_RX_SUPPLIES, 0x08, 0x08); /* set to HIFI */ @@ -122,7 +126,7 @@ static inline void wcd_clsh_set_flyback_mode( int mode) { if (mode == CLS_H_HIFI || mode == CLS_H_LOHIFI || - mode == CLS_AB_HIFI) { + mode == CLS_AB_HIFI || mode == CLS_AB_LOHIFI) { snd_soc_component_update_bits(component, WCD9XXX_ANA_RX_SUPPLIES, 0x04, 0x04); @@ -154,7 +158,7 @@ static inline void wcd_clsh_force_iq_ctl(struct snd_soc_component *component, snd_soc_component_update_bits(component, WCD9XXX_CLASSH_MODE_2, 0xFF, 0x1C); - if (mode == CLS_H_LOHIFI) { + if (mode == CLS_H_LOHIFI || mode == CLS_AB_LOHIFI) { snd_soc_component_update_bits(component, WCD9XXX_HPH_NEW_INT_PA_MISC2, 0x20, 0x20); @@ -258,6 +262,8 @@ static void wcd_clsh_set_hph_mode(struct snd_soc_component *component, break; case CLS_H_LP: case CLS_H_LOHIFI: + case CLS_AB_LP: + case CLS_AB_LOHIFI: val = 0x04; break; default: diff --git a/include/asoc/wcd-clsh.h b/include/asoc/wcd-clsh.h index 64250e1b6323..c8e49fd0b904 100644 --- a/include/asoc/wcd-clsh.h +++ b/include/asoc/wcd-clsh.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. */ #ifndef _WCD_CLSH @@ -62,6 +62,8 @@ enum { CLS_H_LOHIFI, /* LoHIFI */ CLS_H_ULP, /* Ultra Low power */ CLS_AB_HIFI, /* Class-AB */ + CLS_AB_LP, /* Class-AB Low Power */ + CLS_AB_LOHIFI, /* Class-AB Low HIFI */ CLS_NONE, /* None of the above modes */ };