summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/tlv320aic32x4-spi.c
diff options
context:
space:
mode:
authorClaudius Heine <ch@denx.de>2021-06-17 11:52:28 +0300
committerMark Brown <broonie@kernel.org>2021-06-23 13:49:34 +0300
commit688d47cdd9344b1485eb28c2a7aa99743ed529a3 (patch)
tree4cd24756aed57cb21c14343fb3cf51e82466dd2f /sound/soc/codecs/tlv320aic32x4-spi.c
parent70585216fe7730d9fb5453d3e2804e149d0fe201 (diff)
downloadlinux-688d47cdd9344b1485eb28c2a7aa99743ed529a3.tar.xz
ASoC: tlv320aic32x4: add type to device private data struct
While this driver can already handle different device variants, the variant information cannot be used in the driver code and therefor cannot have different code paths depending on the device variant. This change adds a `type` value into the `aic32x4_priv` structure, that contains a device variant identifier, which was set when the driver was bound to the device. Signed-off-by: Claudius Heine <ch@denx.de> Link: https://lore.kernel.org/r/20210617085230.1851503-2-ch@denx.de Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs/tlv320aic32x4-spi.c')
-rw-r--r--sound/soc/codecs/tlv320aic32x4-spi.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/sound/soc/codecs/tlv320aic32x4-spi.c b/sound/soc/codecs/tlv320aic32x4-spi.c
index a22e7700bfc8..e81c72958a82 100644
--- a/sound/soc/codecs/tlv320aic32x4-spi.c
+++ b/sound/soc/codecs/tlv320aic32x4-spi.c
@@ -16,6 +16,8 @@
#include "tlv320aic32x4.h"
+static const struct of_device_id aic32x4_of_id[];
+
static int aic32x4_spi_probe(struct spi_device *spi)
{
struct regmap *regmap;
@@ -28,6 +30,19 @@ static int aic32x4_spi_probe(struct spi_device *spi)
config.read_flag_mask = 0x01;
regmap = devm_regmap_init_spi(spi, &config);
+
+ if (spi->dev.of_node) {
+ const struct of_device_id *oid;
+
+ oid = of_match_node(aic32x4_of_id, spi->dev.of_node);
+ dev_set_drvdata(&spi->dev, (void *)oid->data);
+ } else {
+ const struct spi_device_id *id_entry;
+
+ id_entry = spi_get_device_id(spi);
+ dev_set_drvdata(&spi->dev, (void *)id_entry->driver_data);
+ }
+
return aic32x4_probe(&spi->dev, regmap);
}
@@ -37,15 +52,15 @@ static int aic32x4_spi_remove(struct spi_device *spi)
}
static const struct spi_device_id aic32x4_spi_id[] = {
- { "tlv320aic32x4", 0 },
- { "tlv320aic32x6", 1 },
+ { "tlv320aic32x4", (kernel_ulong_t)AIC32X4_TYPE_AIC32X4 },
+ { "tlv320aic32x6", (kernel_ulong_t)AIC32X4_TYPE_AIC32X6 },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(spi, aic32x4_spi_id);
static const struct of_device_id aic32x4_of_id[] = {
- { .compatible = "ti,tlv320aic32x4", },
- { .compatible = "ti,tlv320aic32x6", },
+ { .compatible = "ti,tlv320aic32x4", .data = (void *)AIC32X4_TYPE_AIC32X4 },
+ { .compatible = "ti,tlv320aic32x6", .data = (void *)AIC32X4_TYPE_AIC32X6 },
{ /* senitel */ }
};
MODULE_DEVICE_TABLE(of, aic32x4_of_id);