Skip to content
Snippets Groups Projects
Commit a0f1788e authored by Sjoerd Simons's avatar Sjoerd Simons Committed by Apertis package maintainers
Browse files

Add patches for audio on sabre AI

parent 52e5fb50
No related branches found
No related tags found
No related merge requests found
From 43e689eafb4979f4ada8e266291cdc3561017f12 Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Wed, 5 Jun 2019 16:42:01 +0200
Subject: [PATCH] cs42xx8-i2c: Fix module auto-loading
Move the OF match table from the core driver module to the module
actually implementing the i2c driver. Otherwise for cs42xx8 device in
device-tree only the cs42xx8.ko gets loaded rather then cs42xx8-i2c.ko.
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
---
sound/soc/codecs/cs42xx8-i2c.c | 21 +++++++++++++++++++--
sound/soc/codecs/cs42xx8.c | 22 +++-------------------
sound/soc/codecs/cs42xx8.h | 4 ++--
3 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/sound/soc/codecs/cs42xx8-i2c.c b/sound/soc/codecs/cs42xx8-i2c.c
index 0214e3ab9da0..6e63cf0212d3 100644
--- a/sound/soc/codecs/cs42xx8-i2c.c
+++ b/sound/soc/codecs/cs42xx8-i2c.c
@@ -17,11 +17,27 @@
#include "cs42xx8.h"
+const struct of_device_id cs42xx8_of_match[] = {
+ { .compatible = "cirrus,cs42448", .data = &cs42448_data, },
+ { .compatible = "cirrus,cs42888", .data = &cs42888_data, },
+ { /* sentinel */ }
+};
+
static int cs42xx8_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
{
- int ret = cs42xx8_probe(&i2c->dev,
- devm_regmap_init_i2c(i2c, &cs42xx8_regmap_config));
+ const struct of_device_id *of_id;
+ int ret;
+
+ of_id = i2c_of_match_device(cs42xx8_of_match, i2c);
+ if (!of_id || !of_id->data) {
+ dev_err(&i2c->dev, "failed to find driver data\n");
+ return -EINVAL;
+ }
+
+ ret = cs42xx8_probe(&i2c->dev,
+ devm_regmap_init_i2c(i2c, &cs42xx8_regmap_config),
+ of_id->data);
if (ret)
return ret;
@@ -44,6 +60,7 @@ static struct i2c_device_id cs42xx8_i2c_id[] = {
{}
};
MODULE_DEVICE_TABLE(i2c, cs42xx8_i2c_id);
+MODULE_DEVICE_TABLE(of, cs42xx8_of_match);
static struct i2c_driver cs42xx8_i2c_driver = {
.driver = {
diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
index ebb9e0cf8364..8c9cb46b34ec 100644
--- a/sound/soc/codecs/cs42xx8.c
+++ b/sound/soc/codecs/cs42xx8.c
@@ -431,17 +431,9 @@ const struct cs42xx8_driver_data cs42888_data = {
};
EXPORT_SYMBOL_GPL(cs42888_data);
-const struct of_device_id cs42xx8_of_match[] = {
- { .compatible = "cirrus,cs42448", .data = &cs42448_data, },
- { .compatible = "cirrus,cs42888", .data = &cs42888_data, },
- { /* sentinel */ }
-};
-MODULE_DEVICE_TABLE(of, cs42xx8_of_match);
-EXPORT_SYMBOL_GPL(cs42xx8_of_match);
-
-int cs42xx8_probe(struct device *dev, struct regmap *regmap)
+int cs42xx8_probe(struct device *dev, struct regmap *regmap,
+ const struct cs42xx8_driver_data *data)
{
- const struct of_device_id *of_id;
struct cs42xx8_priv *cs42xx8;
int ret, val, i;
@@ -457,15 +449,7 @@ int cs42xx8_probe(struct device *dev, struct regmap *regmap)
cs42xx8->regmap = regmap;
dev_set_drvdata(dev, cs42xx8);
-
- of_id = of_match_device(cs42xx8_of_match, dev);
- if (of_id)
- cs42xx8->drvdata = of_id->data;
-
- if (!cs42xx8->drvdata) {
- dev_err(dev, "failed to find driver data\n");
- return -EINVAL;
- }
+ cs42xx8->drvdata = data;
cs42xx8->clk = devm_clk_get(dev, "mclk");
if (IS_ERR(cs42xx8->clk)) {
diff --git a/sound/soc/codecs/cs42xx8.h b/sound/soc/codecs/cs42xx8.h
index d36c61b6df74..b6247ab4c52d 100644
--- a/sound/soc/codecs/cs42xx8.h
+++ b/sound/soc/codecs/cs42xx8.h
@@ -22,8 +22,8 @@ extern const struct dev_pm_ops cs42xx8_pm;
extern const struct cs42xx8_driver_data cs42448_data;
extern const struct cs42xx8_driver_data cs42888_data;
extern const struct regmap_config cs42xx8_regmap_config;
-extern const struct of_device_id cs42xx8_of_match[];
-int cs42xx8_probe(struct device *dev, struct regmap *regmap);
+int cs42xx8_probe(struct device *dev, struct regmap *regmap,
+ const struct cs42xx8_driver_data *data);
/* CS42888 register map */
#define CS42XX8_CHIPID 0x01 /* Chip ID */
--
2.20.1
From 9501feecbe560cb3588903f97957ebaf277b5d99 Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Thu, 6 Jun 2019 22:25:31 +0200
Subject: [PATCH] Hack: hardcode to sample rates usable on sabre AI
The codec on the Sabre AI has a fixed rate clock as input, this means
the codec can only cope with samplerates that are at supported ratios
compared to that clock rate. Hardcode those for now.
An upstreamable solution would dynamical determine them instead.
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
---
sound/soc/codecs/cs42xx8.c | 6 ++++--
sound/soc/fsl/fsl-asoc-card.c | 1 +
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
index 8c9cb46b34ec..3a94143b2234 100644
--- a/sound/soc/codecs/cs42xx8.c
+++ b/sound/soc/codecs/cs42xx8.c
@@ -308,13 +308,15 @@ static struct snd_soc_dai_driver cs42xx8_dai = {
.stream_name = "Playback",
.channels_min = 1,
.channels_max = 8,
- .rates = SNDRV_PCM_RATE_8000_192000,
+ //.rates = SNDRV_PCM_RATE_8000_192000,
+ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000,
.formats = CS42XX8_FORMATS,
},
.capture = {
.stream_name = "Capture",
.channels_min = 1,
- .rates = SNDRV_PCM_RATE_8000_192000,
+ //.rates = SNDRV_PCM_RATE_8000_192000,
+ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000,
.formats = CS42XX8_FORMATS,
},
.ops = &cs42xx8_dai_ops,
diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c
index 44433b20435c..9b935334e3c5 100644
--- a/sound/soc/fsl/fsl-asoc-card.c
+++ b/sound/soc/fsl/fsl-asoc-card.c
@@ -533,6 +533,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
priv->cpu_priv.sysclk_dir[RX] = SND_SOC_CLOCK_OUT;
priv->cpu_priv.slot_width = 32;
priv->dai_fmt |= SND_SOC_DAIFMT_CBS_CFS;
+ priv->sample_rate = 48000;
} else if (of_device_is_compatible(np, "fsl,imx-audio-cs427x")) {
codec_dai_name = "cs4271-hifi";
priv->codec_priv.mclk_id = CS427x_SYSCLK_MCLK;
--
2.20.1
......@@ -202,3 +202,7 @@ apparmor/0003-apparmor-fix-use-after-free-in-sk_peer_label.patch
# RaspberryPi support
rpi/ARM-dts-add-Raspberry-Pi-Compute-Module-3-and-IO-boa.patch
# Apertis support/fixes for sabre ai audio
apertis/sabreai-audio/0001-cs42xx8-i2c-Fix-module-auto-loading.patch
apertis/sabreai-audio/0002-Hack-hardcode-to-sample-rates-usable-on-sabre-AI.patch
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment