]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 Aug 2023 08:53:03 +0000 (10:53 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 Aug 2023 08:53:03 +0000 (10:53 +0200)
added patches:
asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch

queue-4.19/asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch b/queue-4.19/asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch
new file mode 100644 (file)
index 0000000..8793505
--- /dev/null
@@ -0,0 +1,86 @@
+From e51df4f81b02bcdd828a04de7c1eb6a92988b61e Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Date: Thu, 13 Jul 2023 13:21:12 +0200
+Subject: ASoC: cs42l51: fix driver to properly autoload with automatic module loading
+
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+
+commit e51df4f81b02bcdd828a04de7c1eb6a92988b61e upstream.
+
+In commit 2cb1e0259f50 ("ASoC: cs42l51: re-hook of_match_table
+pointer"), 9 years ago, some random guy fixed the cs42l51 after it was
+split into a core part and an I2C part to properly match based on a
+Device Tree compatible string.
+
+However, the fix in this commit is wrong: the MODULE_DEVICE_TABLE(of,
+....) is in the core part of the driver, not the I2C part. Therefore,
+automatic module loading based on module.alias, based on matching with
+the DT compatible string, loads the core part of the driver, but not
+the I2C part. And threfore, the i2c_driver is not registered, and the
+codec is not known to the system, nor matched with a DT node with the
+corresponding compatible string.
+
+In order to fix that, we move the MODULE_DEVICE_TABLE(of, ...) into
+the I2C part of the driver. The cs42l51_of_match[] array is also moved
+as well, as it is not possible to have this definition in one file,
+and the MODULE_DEVICE_TABLE(of, ...) invocation in another file, due
+to how MODULE_DEVICE_TABLE works.
+
+Thanks to this commit, the I2C part of the driver now properly
+autoloads, and thanks to its dependency on the core part, the core
+part gets autoloaded as well, resulting in a functional sound card
+without having to manually load kernel modules.
+
+Fixes: 2cb1e0259f50 ("ASoC: cs42l51: re-hook of_match_table pointer")
+Cc: stable@vger.kernel.org
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Link: https://lore.kernel.org/r/20230713112112.778576-1-thomas.petazzoni@bootlin.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/codecs/cs42l51-i2c.c |    6 ++++++
+ sound/soc/codecs/cs42l51.c     |    7 -------
+ sound/soc/codecs/cs42l51.h     |    1 -
+ 3 files changed, 6 insertions(+), 8 deletions(-)
+
+--- a/sound/soc/codecs/cs42l51-i2c.c
++++ b/sound/soc/codecs/cs42l51-i2c.c
+@@ -23,6 +23,12 @@ static struct i2c_device_id cs42l51_i2c_
+ };
+ MODULE_DEVICE_TABLE(i2c, cs42l51_i2c_id);
++const struct of_device_id cs42l51_of_match[] = {
++      { .compatible = "cirrus,cs42l51", },
++      { }
++};
++MODULE_DEVICE_TABLE(of, cs42l51_of_match);
++
+ static int cs42l51_i2c_probe(struct i2c_client *i2c,
+                            const struct i2c_device_id *id)
+ {
+--- a/sound/soc/codecs/cs42l51.c
++++ b/sound/soc/codecs/cs42l51.c
+@@ -563,13 +563,6 @@ error:
+ }
+ EXPORT_SYMBOL_GPL(cs42l51_probe);
+-const struct of_device_id cs42l51_of_match[] = {
+-      { .compatible = "cirrus,cs42l51", },
+-      { }
+-};
+-MODULE_DEVICE_TABLE(of, cs42l51_of_match);
+-EXPORT_SYMBOL_GPL(cs42l51_of_match);
+-
+ MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
+ MODULE_DESCRIPTION("Cirrus Logic CS42L51 ALSA SoC Codec Driver");
+ MODULE_LICENSE("GPL");
+--- a/sound/soc/codecs/cs42l51.h
++++ b/sound/soc/codecs/cs42l51.h
+@@ -22,7 +22,6 @@ struct device;
+ extern const struct regmap_config cs42l51_regmap;
+ int cs42l51_probe(struct device *dev, struct regmap *regmap);
+-extern const struct of_device_id cs42l51_of_match[];
+ #define CS42L51_CHIP_ID                       0x1B
+ #define CS42L51_CHIP_REV_A            0x00
index 3b1391a46e2dfae46b578eb5777a3608b7380abf..aebba10a4df5812958d24b682fa0196bedee5caa 100644 (file)
@@ -282,3 +282,4 @@ dm-cache-policy-smq-ensure-io-doesn-t-prevent-cleaner-policy-progress.patch
 drm-client-fix-memory-leak-in-drm_client_target_cloned.patch
 net-sched-cls_fw-fix-improper-refcount-update-leads-to-use-after-free.patch
 net-sched-sch_qfq-account-for-stab-overhead-in-qfq_enqueue.patch
+asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch