Skip to content

Commit 7b16e60

Browse files
charleskeepaxbroonie
authored andcommitted
soundwire: SDCA: Add additional SDCA address macros
Compliment the existing macro to construct an SDCA control address with macros to extract the constituent parts, and validation of such an address. Also update the masks for the original macro to use GENMASK to make mental comparisons with the included comment on the address format easier. Acked-by: Vinod Koul <vkoul@kernel.org> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20250107154408.814455-2-ckeepax@opensource.cirrus.com Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev> Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 9d89551 commit 7b16e60

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

include/linux/soundwire/sdw_registers.h

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
#ifndef __SDW_REGISTERS_H
55
#define __SDW_REGISTERS_H
66

7+
#include <linux/bitfield.h>
8+
#include <linux/bits.h>
9+
710
/*
811
* SDW registers as defined by MIPI 1.2 Spec
912
*/
@@ -329,16 +332,27 @@
329332
* 2:0 Control Number[2:0]
330333
*/
331334

332-
#define SDW_SDCA_CTL(fun, ent, ctl, ch) (BIT(30) | \
333-
(((fun) & 0x7) << 22) | \
334-
(((ent) & 0x40) << 15) | \
335-
(((ent) & 0x3f) << 7) | \
336-
(((ctl) & 0x30) << 15) | \
337-
(((ctl) & 0x0f) << 3) | \
338-
(((ch) & 0x38) << 12) | \
339-
((ch) & 0x07))
335+
#define SDW_SDCA_CTL(fun, ent, ctl, ch) (BIT(30) | \
336+
(((fun) & GENMASK(2, 0)) << 22) | \
337+
(((ent) & BIT(6)) << 15) | \
338+
(((ent) & GENMASK(5, 0)) << 7) | \
339+
(((ctl) & GENMASK(5, 4)) << 15) | \
340+
(((ctl) & GENMASK(3, 0)) << 3) | \
341+
(((ch) & GENMASK(5, 3)) << 12) | \
342+
((ch) & GENMASK(2, 0)))
343+
344+
#define SDW_SDCA_CTL_FUNC(reg) FIELD_GET(GENMASK(24, 22), (reg))
345+
#define SDW_SDCA_CTL_ENT(reg) ((FIELD_GET(BIT(21), (reg)) << 6) | \
346+
FIELD_GET(GENMASK(12, 7), (reg)))
347+
#define SDW_SDCA_CTL_CSEL(reg) ((FIELD_GET(GENMASK(20, 19), (reg)) << 4) | \
348+
FIELD_GET(GENMASK(6, 3), (reg)))
349+
#define SDW_SDCA_CTL_CNUM(reg) ((FIELD_GET(GENMASK(17, 15), (reg)) << 3) | \
350+
FIELD_GET(GENMASK(2, 0), (reg)))
340351

341352
#define SDW_SDCA_MBQ_CTL(reg) ((reg) | BIT(13))
342353
#define SDW_SDCA_NEXT_CTL(reg) ((reg) | BIT(14))
343354

355+
/* Check the reserved and fixed bits in address */
356+
#define SDW_SDCA_VALID_CTL(reg) (((reg) & (GENMASK(31, 25) | BIT(18) | BIT(13))) == BIT(30))
357+
344358
#endif /* __SDW_REGISTERS_H */

0 commit comments

Comments
 (0)