Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: meson: axg-fifo: use FIELD helpers

Use FIELD_GET() and FIELD_PREP() helpers instead of doing it manually.

Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Link: https://msgid.link/r/20240227150826.573581-1-jbrunet@baylibre.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Jerome Brunet and committed by
Mark Brown
9e6f3953 cb9d8a2c

+31 -33
+13 -12
sound/soc/meson/axg-fifo.c
··· 3 3 // Copyright (c) 2018 BayLibre, SAS. 4 4 // Author: Jerome Brunet <jbrunet@baylibre.com> 5 5 6 + #include <linux/bitfield.h> 6 7 #include <linux/clk.h> 7 8 #include <linux/of_irq.h> 8 9 #include <linux/of_platform.h> ··· 146 145 /* Enable irq if necessary */ 147 146 irq_en = runtime->no_period_wakeup ? 0 : FIFO_INT_COUNT_REPEAT; 148 147 regmap_update_bits(fifo->map, FIFO_CTRL0, 149 - CTRL0_INT_EN(FIFO_INT_COUNT_REPEAT), 150 - CTRL0_INT_EN(irq_en)); 148 + CTRL0_INT_EN, 149 + FIELD_PREP(CTRL0_INT_EN, irq_en)); 151 150 152 151 return 0; 153 152 } ··· 177 176 { 178 177 struct axg_fifo *fifo = axg_fifo_data(ss); 179 178 180 - /* Disable the block count irq */ 179 + /* Disable irqs */ 181 180 regmap_update_bits(fifo->map, FIFO_CTRL0, 182 - CTRL0_INT_EN(FIFO_INT_COUNT_REPEAT), 0); 181 + CTRL0_INT_EN, 0); 183 182 184 183 return 0; 185 184 } ··· 188 187 static void axg_fifo_ack_irq(struct axg_fifo *fifo, u8 mask) 189 188 { 190 189 regmap_update_bits(fifo->map, FIFO_CTRL1, 191 - CTRL1_INT_CLR(FIFO_INT_MASK), 192 - CTRL1_INT_CLR(mask)); 190 + CTRL1_INT_CLR, 191 + FIELD_PREP(CTRL1_INT_CLR, mask)); 193 192 194 193 /* Clear must also be cleared */ 195 194 regmap_update_bits(fifo->map, FIFO_CTRL1, 196 - CTRL1_INT_CLR(FIFO_INT_MASK), 197 - 0); 195 + CTRL1_INT_CLR, 196 + FIELD_PREP(CTRL1_INT_CLR, 0)); 198 197 } 199 198 200 199 static irqreturn_t axg_fifo_pcm_irq_block(int irq, void *dev_id) ··· 205 204 206 205 regmap_read(fifo->map, FIFO_STATUS1, &status); 207 206 208 - status = STATUS1_INT_STS(status) & FIFO_INT_MASK; 207 + status = FIELD_GET(STATUS1_INT_STS, status); 209 208 if (status & FIFO_INT_COUNT_REPEAT) 210 209 snd_pcm_period_elapsed(ss); 211 210 else ··· 255 254 256 255 /* Setup status2 so it reports the memory pointer */ 257 256 regmap_update_bits(fifo->map, FIFO_CTRL1, 258 - CTRL1_STATUS2_SEL_MASK, 259 - CTRL1_STATUS2_SEL(STATUS2_SEL_DDR_READ)); 257 + CTRL1_STATUS2_SEL, 258 + FIELD_PREP(CTRL1_STATUS2_SEL, STATUS2_SEL_DDR_READ)); 260 259 261 260 /* Make sure the dma is initially disabled */ 262 261 __dma_enable(fifo, false); 263 262 264 263 /* Disable irqs until params are ready */ 265 264 regmap_update_bits(fifo->map, FIFO_CTRL0, 266 - CTRL0_INT_EN(FIFO_INT_MASK), 0); 265 + CTRL0_INT_EN, 0); 267 266 268 267 /* Clear any pending interrupt */ 269 268 axg_fifo_ack_irq(fifo, FIFO_INT_MASK);
+5 -7
sound/soc/meson/axg-fifo.h
··· 40 40 41 41 #define FIFO_CTRL0 0x00 42 42 #define CTRL0_DMA_EN BIT(31) 43 - #define CTRL0_INT_EN(x) ((x) << 16) 43 + #define CTRL0_INT_EN GENMASK(23, 16) 44 44 #define CTRL0_SEL_MASK GENMASK(2, 0) 45 45 #define CTRL0_SEL_SHIFT 0 46 46 #define FIFO_CTRL1 0x04 47 - #define CTRL1_INT_CLR(x) ((x) << 0) 48 - #define CTRL1_STATUS2_SEL_MASK GENMASK(11, 8) 49 - #define CTRL1_STATUS2_SEL(x) ((x) << 8) 47 + #define CTRL1_INT_CLR GENMASK(7, 0) 48 + #define CTRL1_STATUS2_SEL GENMASK(11, 8) 50 49 #define STATUS2_SEL_DDR_READ 0 51 - #define CTRL1_FRDDR_DEPTH_MASK GENMASK(31, 24) 52 - #define CTRL1_FRDDR_DEPTH(x) ((x) << 24) 50 + #define CTRL1_FRDDR_DEPTH GENMASK(31, 24) 53 51 #define FIFO_START_ADDR 0x08 54 52 #define FIFO_FINISH_ADDR 0x0c 55 53 #define FIFO_INT_ADDR 0x10 56 54 #define FIFO_STATUS1 0x14 57 - #define STATUS1_INT_STS(x) ((x) << 0) 55 + #define STATUS1_INT_STS GENMASK(7, 0) 58 56 #define FIFO_STATUS2 0x18 59 57 #define FIFO_INIT_ADDR 0x24 60 58 #define FIFO_CTRL2 0x28
+3 -2
sound/soc/meson/axg-frddr.c
··· 7 7 * This driver implements the frontend playback DAI of AXG and G12A based SoCs 8 8 */ 9 9 10 + #include <linux/bitfield.h> 10 11 #include <linux/clk.h> 11 12 #include <linux/regmap.h> 12 13 #include <linux/module.h> ··· 60 59 /* Trim the FIFO depth if the period is small to improve latency */ 61 60 depth = min(period, fifo->depth); 62 61 val = (depth / AXG_FIFO_BURST) - 1; 63 - regmap_update_bits(fifo->map, FIFO_CTRL1, CTRL1_FRDDR_DEPTH_MASK, 64 - CTRL1_FRDDR_DEPTH(val)); 62 + regmap_update_bits(fifo->map, FIFO_CTRL1, CTRL1_FRDDR_DEPTH, 63 + FIELD_PREP(CTRL1_FRDDR_DEPTH, val)); 65 64 66 65 return 0; 67 66 }
+10 -12
sound/soc/meson/axg-toddr.c
··· 5 5 6 6 /* This driver implements the frontend capture DAI of AXG based SoCs */ 7 7 8 + #include <linux/bitfield.h> 8 9 #include <linux/clk.h> 9 10 #include <linux/regmap.h> 10 11 #include <linux/module.h> ··· 20 19 #define CTRL0_TODDR_EXT_SIGNED BIT(29) 21 20 #define CTRL0_TODDR_PP_MODE BIT(28) 22 21 #define CTRL0_TODDR_SYNC_CH BIT(27) 23 - #define CTRL0_TODDR_TYPE_MASK GENMASK(15, 13) 24 - #define CTRL0_TODDR_TYPE(x) ((x) << 13) 25 - #define CTRL0_TODDR_MSB_POS_MASK GENMASK(12, 8) 26 - #define CTRL0_TODDR_MSB_POS(x) ((x) << 8) 27 - #define CTRL0_TODDR_LSB_POS_MASK GENMASK(7, 3) 28 - #define CTRL0_TODDR_LSB_POS(x) ((x) << 3) 22 + #define CTRL0_TODDR_TYPE GENMASK(15, 13) 23 + #define CTRL0_TODDR_MSB_POS GENMASK(12, 8) 24 + #define CTRL0_TODDR_LSB_POS GENMASK(7, 3) 29 25 #define CTRL1_TODDR_FORCE_FINISH BIT(25) 30 26 #define CTRL1_SEL_SHIFT 28 31 27 ··· 74 76 width = params_width(params); 75 77 76 78 regmap_update_bits(fifo->map, FIFO_CTRL0, 77 - CTRL0_TODDR_TYPE_MASK | 78 - CTRL0_TODDR_MSB_POS_MASK | 79 - CTRL0_TODDR_LSB_POS_MASK, 80 - CTRL0_TODDR_TYPE(type) | 81 - CTRL0_TODDR_MSB_POS(TODDR_MSB_POS) | 82 - CTRL0_TODDR_LSB_POS(TODDR_MSB_POS - (width - 1))); 79 + CTRL0_TODDR_TYPE | 80 + CTRL0_TODDR_MSB_POS | 81 + CTRL0_TODDR_LSB_POS, 82 + FIELD_PREP(CTRL0_TODDR_TYPE, type) | 83 + FIELD_PREP(CTRL0_TODDR_MSB_POS, TODDR_MSB_POS) | 84 + FIELD_PREP(CTRL0_TODDR_LSB_POS, TODDR_MSB_POS - (width - 1))); 83 85 84 86 return 0; 85 87 }