* @addr: pci ioremap address
  * @reg_range: ACP reigister range
  * @acp_rev: ACP PCI revision id
+ * @acp_sw_pad_keeper_en: store acp SoundWire pad keeper enable register value
+ * @acp_pad_pulldown_ctrl: store acp pad pulldown control register value
  * @acp63_sdw0-dma_intr_stat: DMA interrupt status array for ACP6.3 platform SoundWire
  * manager-SW0 instance
  * @acp63_sdw_dma_intr_stat: DMA interrupt status array for ACP6.3 platform SoundWire
        u32 addr;
        u32 reg_range;
        u32 acp_rev;
+       u32 acp_sw_pad_keeper_en;
+       u32 acp_pad_pulldown_ctrl;
        u16 acp63_sdw0_dma_intr_stat[ACP63_SDW0_DMA_MAX_STREAMS];
        u16 acp63_sdw1_dma_intr_stat[ACP63_SDW1_DMA_MAX_STREAMS];
        u16 acp70_sdw0_dma_intr_stat[ACP70_SDW0_DMA_MAX_STREAMS];
 
 
        adata = dev_get_drvdata(dev);
        if (adata->is_sdw_dev) {
+               adata->acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+               adata->acp_pad_pulldown_ctrl = readl(adata->acp63_base + ACP_PAD_PULLDOWN_CTRL);
                adata->sdw_en_stat = check_acp_sdw_enable_status(adata);
                if (adata->sdw_en_stat) {
                        writel(1, adata->acp63_base + ACP_ZSC_DSP_CTRL);
 static int __maybe_unused snd_acp63_resume(struct device *dev)
 {
        struct acp63_dev_data *adata;
+       u32 acp_sw_pad_keeper_en;
        int ret;
 
        adata = dev_get_drvdata(dev);
        if (ret)
                dev_err(dev, "ACP init failed\n");
 
+       acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+       dev_dbg(dev, "ACP_SW0_PAD_KEEPER_EN:0x%x\n", acp_sw_pad_keeper_en);
+       if (!acp_sw_pad_keeper_en) {
+               writel(adata->acp_sw_pad_keeper_en, adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+               writel(adata->acp_pad_pulldown_ctrl, adata->acp63_base + ACP_PAD_PULLDOWN_CTRL);
+       }
        return ret;
 }
 
 
        adata = dev_get_drvdata(dev);
        if (adata->is_sdw_dev) {
+               adata->acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+               adata->acp_pad_pulldown_ctrl = readl(adata->acp63_base + ACP_PAD_PULLDOWN_CTRL);
                adata->sdw_en_stat = check_acp_sdw_enable_status(adata);
                if (adata->sdw_en_stat) {
                        writel(1, adata->acp63_base + ACP_ZSC_DSP_CTRL);
 static int __maybe_unused snd_acp70_resume(struct device *dev)
 {
        struct acp63_dev_data *adata;
+       u32 acp_sw_pad_keeper_en;
        int ret;
 
        adata = dev_get_drvdata(dev);
        if (ret)
                dev_err(dev, "ACP init failed\n");
 
+       acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+       dev_dbg(dev, "ACP_SW0_PAD_KEEPER_EN:0x%x\n", acp_sw_pad_keeper_en);
+       if (!acp_sw_pad_keeper_en) {
+               writel(adata->acp_sw_pad_keeper_en, adata->acp63_base + ACP_SW0_PAD_KEEPER_EN);
+               writel(adata->acp_pad_pulldown_ctrl, adata->acp63_base + ACP_PAD_PULLDOWN_CTRL);
+       }
        return ret;
 }