]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SDCA: Add SDCA Control Range data access helper
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Wed, 12 Mar 2025 17:22:04 +0000 (17:22 +0000)
committerMark Brown <broonie@kernel.org>
Sun, 16 Mar 2025 23:27:57 +0000 (23:27 +0000)
SDCA Ranges are two dimensional arrays of data associated with controls,
add a helper to provide an x,y access mechanism to the data and a helper
to locate a specific value inside a range.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20250312172205.4152686-6-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/sdca_function.h

index ca0376903e87c1262f5b46ea083cbbd929e4ca0c..d7489e3c7e4719394b141b198b757fe345a3fa65 100644 (file)
@@ -1136,6 +1136,25 @@ struct sdca_function_data {
        unsigned int busy_max_delay;
 };
 
+static inline u32 sdca_range(struct sdca_control_range *range,
+                            unsigned int col, unsigned int row)
+{
+       return range->data[(row * range->cols) + col];
+}
+
+static inline u32 sdca_range_search(struct sdca_control_range *range,
+                                   int search_col, int value, int result_col)
+{
+       int i;
+
+       for (i = 0; i < range->rows; i++) {
+               if (sdca_range(range, search_col, i) == value)
+                       return sdca_range(range, result_col, i);
+       }
+
+       return 0;
+}
+
 int sdca_parse_function(struct device *dev,
                        struct sdca_function_desc *desc,
                        struct sdca_function_data *function);