#include <sound/soc.h>
 #include <sound/soc-dai.h>
 #include <linux/dma-mapping.h>
+#include <linux/bitfield.h>
 
 #include "amd.h"
 
 #define DRV_NAME "acp_i2s_playcap"
+#define        I2S_MASTER_MODE_ENABLE          1
+#define        I2S_MODE_ENABLE                 0
+#define        I2S_FORMAT_MODE                 GENMASK(1, 1)
+#define        LRCLK_DIV_FIELD                 GENMASK(10, 2)
+#define        BCLK_DIV_FIELD                  GENMASK(23, 11)
+
+static inline void acp_set_i2s_clk(struct acp_dev_data *adata, int dai_id)
+{
+       u32 i2s_clk_reg, val;
+
+       switch (dai_id) {
+       case I2S_SP_INSTANCE:
+               i2s_clk_reg = ACP_I2STDM0_MSTRCLKGEN;
+               break;
+       case I2S_BT_INSTANCE:
+               i2s_clk_reg = ACP_I2STDM1_MSTRCLKGEN;
+               break;
+       case I2S_HS_INSTANCE:
+               i2s_clk_reg = ACP_I2STDM2_MSTRCLKGEN;
+               break;
+       default:
+               i2s_clk_reg = ACP_I2STDM0_MSTRCLKGEN;
+               break;
+       }
+
+       val  = I2S_MASTER_MODE_ENABLE;
+       val |= I2S_MODE_ENABLE & BIT(1);
+       val |= FIELD_PREP(LRCLK_DIV_FIELD, adata->lrclk_div);
+       val |= FIELD_PREP(BCLK_DIV_FIELD, adata->bclk_div);
+       writel(val, adata->acp_base + i2s_clk_reg);
+}
 
 static int acp_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
                           unsigned int fmt)
 
        u32 xfer_rx_resolution[3];
 };
 
-union acp_i2stdm_mstrclkgen {
-       struct {
-               u32 i2stdm_master_mode : 1;
-               u32 i2stdm_format_mode : 1;
-               u32 i2stdm_lrclk_div_val : 9;
-               u32 i2stdm_bclk_div_val : 11;
-               u32:10;
-       } bitfields, bits;
-       u32  u32_all;
-};
-
 extern const struct snd_soc_dai_ops asoc_acp_cpu_dai_ops;
 extern const struct snd_soc_dai_ops acp_dmic_dai_ops;
 
 POINTER_RETURN_BYTES:
        return byte_count;
 }
-
-static inline void acp_set_i2s_clk(struct acp_dev_data *adata, int dai_id)
-{
-       union acp_i2stdm_mstrclkgen mclkgen;
-       u32 master_reg;
-
-       switch (dai_id) {
-       case I2S_SP_INSTANCE:
-               master_reg = ACP_I2STDM0_MSTRCLKGEN;
-               break;
-       case I2S_BT_INSTANCE:
-               master_reg = ACP_I2STDM1_MSTRCLKGEN;
-               break;
-       case I2S_HS_INSTANCE:
-               master_reg = ACP_I2STDM2_MSTRCLKGEN;
-               break;
-       default:
-               master_reg = ACP_I2STDM0_MSTRCLKGEN;
-               break;
-       }
-
-       mclkgen.bits.i2stdm_master_mode = 0x1;
-       mclkgen.bits.i2stdm_format_mode = 0x00;
-
-       mclkgen.bits.i2stdm_bclk_div_val = adata->bclk_div;
-       mclkgen.bits.i2stdm_lrclk_div_val = adata->lrclk_div;
-       writel(mclkgen.u32_all, adata->acp_base + master_reg);
-}
 #endif