OSDN Git Service

ASoC: cirrus: Add helper function for reading the device ID
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Mon, 10 May 2021 13:13:48 +0000 (14:13 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 10 May 2021 16:27:46 +0000 (17:27 +0100)
Many of the older Cirrus devices share very similar code for reading the
device ID, and frequently this code is generating cppcheck warnings such
as:

sound/soc/codecs/cs42l42.c:1886:6: style: Variable 'ret' is reassigned
a value before the old one has been used. [redundantAssignment]
 ret = regmap_read(cs42l42->regmap, CS42L42_DEVID_CD, &reg);

Add a small helper function that older Cirrus devices can use to read
the device ID, which should help correct these issues.

Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20210510131357.17170-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cirrus_legacy.h [new file with mode: 0644]

diff --git a/sound/soc/codecs/cirrus_legacy.h b/sound/soc/codecs/cirrus_legacy.h
new file mode 100644 (file)
index 0000000..87c6fd7
--- /dev/null
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Some small helpers for older Cirrus Logic parts.
+ *
+ * Copyright (C) 2021 Cirrus Logic, Inc. and
+ *                    Cirrus Logic International Semiconductor Ltd.
+ */
+
+static inline int cirrus_read_device_id(struct regmap *regmap, unsigned int reg)
+{
+       u8 devid[3];
+       int ret;
+
+       ret = regmap_bulk_read(regmap, reg, devid, ARRAY_SIZE(devid));
+       if (ret < 0)
+               return ret;
+
+       return ((devid[0] & 0xFF) << 12) |
+              ((devid[1] & 0xFF) <<  4) |
+              ((devid[2] & 0xF0) >>  4);
+}