All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support
@ 2021-04-06 10:50 Jiri Prchal
  2021-04-06 10:50 ` [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file Jiri Prchal
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

This patches add support of SPI to TLV320AIC3X codecs.

Jiri Prchal (5):
  SOC Codecs: TLV320AIC3X add SPI: move thinks to header file
  SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI
  SOC Codecs: TLV320AIC3X add SPI: I2C code
  SOC Codecs: TLV320AIC3X add SPI: SPI code
  SOC Codecs: TLV320AIC3X add SPI: configuration and compile

 sound/soc/codecs/Kconfig           |  11 +++
 sound/soc/codecs/Makefile          |   4 ++
 sound/soc/codecs/tlv320aic3x-i2c.c |  72 ++++++++++++++++++++
 sound/soc/codecs/tlv320aic3x-spi.c |  77 +++++++++++++++++++++
 sound/soc/codecs/tlv320aic3x.c     | 105 ++++++++---------------------
 sound/soc/codecs/tlv320aic3x.h     |  13 ++++
 6 files changed, 204 insertions(+), 78 deletions(-)
 create mode 100644 sound/soc/codecs/tlv320aic3x-i2c.c
 create mode 100644 sound/soc/codecs/tlv320aic3x-spi.c

-- 
2.25.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
@ 2021-04-06 10:50 ` Jiri Prchal
  2021-04-06 12:00   ` Mark Brown
  2021-04-06 10:50 ` [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI Jiri Prchal
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

Move shered definitions and defines to header file.

Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
 sound/soc/codecs/tlv320aic3x.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/sound/soc/codecs/tlv320aic3x.h b/sound/soc/codecs/tlv320aic3x.h
index 66d3580cf2b1..5d2195f009a9 100644
--- a/sound/soc/codecs/tlv320aic3x.h
+++ b/sound/soc/codecs/tlv320aic3x.h
@@ -9,6 +9,19 @@
 #ifndef _AIC3X_H
 #define _AIC3X_H
 
+struct device;
+struct regmap_config;
+
+extern const struct regmap_config aic3x_regmap_config;
+int aic3x_probe(struct device *dev, struct regmap *regmap, kernel_ulong_t driver_data);
+int aic3x_remove(struct device *dev);
+
+#define AIC3X_MODEL_3X 0
+#define AIC3X_MODEL_33 1
+#define AIC3X_MODEL_3007 2
+#define AIC3X_MODEL_3104 3
+#define AIC3X_MODEL_3106 4
+
 /* AIC3X register space */
 #define AIC3X_CACHEREGNUM		110
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
  2021-04-06 10:50 ` [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file Jiri Prchal
@ 2021-04-06 10:50 ` Jiri Prchal
  2021-04-06 12:12   ` Mark Brown
  2021-04-06 10:50 ` [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code Jiri Prchal
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

Removed things which are in header file.
Renamed functions and removed their I2C related code.
Moved I2C code to separate file.

Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
 sound/soc/codecs/tlv320aic3x.c | 105 +++++++++------------------------
 1 file changed, 27 insertions(+), 78 deletions(-)

diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index db1444127444..727e3cc78d88 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -82,10 +82,6 @@ struct aic3x_priv {
 	int master;
 	int gpio_reset;
 	int power;
-#define AIC3X_MODEL_3X 0
-#define AIC3X_MODEL_33 1
-#define AIC3X_MODEL_3007 2
-#define AIC3X_MODEL_3104 3
 	u16 model;
 
 	/* Selects the micbias voltage */
@@ -135,10 +131,7 @@ static bool aic3x_volatile_reg(struct device *dev, unsigned int reg)
 	}
 }
 
-static const struct regmap_config aic3x_regmap = {
-	.reg_bits = 8,
-	.val_bits = 8,
-
+const struct regmap_config aic3x_regmap_config = {
 	.max_register = DAC_ICC_ADJ,
 	.reg_defaults = aic3x_reg,
 	.num_reg_defaults = ARRAY_SIZE(aic3x_reg),
@@ -147,6 +140,7 @@ static const struct regmap_config aic3x_regmap = {
 
 	.cache_type = REGCACHE_RBTREE,
 };
+EXPORT_SYMBOL(aic3x_regmap_config);
 
 #define SOC_DAPM_SINGLE_AIC3X(xname, reg, shift, mask, invert) \
 	SOC_SINGLE_EXT(xname, reg, shift, mask, invert, \
@@ -1614,7 +1608,7 @@ static bool aic3x_is_shared_reset(struct aic3x_priv *aic3x)
 	return false;
 }
 
-static int aic3x_probe(struct snd_soc_component *component)
+static int aic3x_component_probe(struct snd_soc_component *component)
 {
 	struct aic3x_priv *aic3x = snd_soc_component_get_drvdata(component);
 	int ret, i;
@@ -1693,7 +1687,7 @@ static int aic3x_probe(struct snd_soc_component *component)
 
 static const struct snd_soc_component_driver soc_component_dev_aic3x = {
 	.set_bias_level		= aic3x_set_bias_level,
-	.probe			= aic3x_probe,
+	.probe			= aic3x_component_probe,
 	.controls		= aic3x_snd_controls,
 	.num_controls		= ARRAY_SIZE(aic3x_snd_controls),
 	.dapm_widgets		= aic3x_dapm_widgets,
@@ -1705,10 +1699,9 @@ static const struct snd_soc_component_driver soc_component_dev_aic3x = {
 	.non_legacy_dai_naming	= 1,
 };
 
-static void aic3x_configure_ocmv(struct i2c_client *client)
+static void aic3x_configure_ocmv(struct device *dev, struct aic3x_priv *aic3x)
 {
-	struct device_node *np = client->dev.of_node;
-	struct aic3x_priv *aic3x = i2c_get_clientdata(client);
+	struct device_node *np = dev->of_node;
 	u32 value;
 	int dvdd, avdd;
 
@@ -1724,7 +1717,7 @@ static void aic3x_configure_ocmv(struct i2c_client *client)
 	avdd = regulator_get_voltage(aic3x->supplies[2].consumer);
 
 	if (avdd > 3600000 || dvdd > 1950000) {
-		dev_warn(&client->dev,
+		dev_warn(dev,
 			 "Too high supply voltage(s) AVDD: %d, DVDD: %d\n",
 			 avdd, dvdd);
 	} else if (avdd == 3600000 && dvdd == 1950000) {
@@ -1736,26 +1729,12 @@ static void aic3x_configure_ocmv(struct i2c_client *client)
 	} else if (avdd >= 2700000 && dvdd >= 1525000) {
 		aic3x->ocmv = HPOUT_SC_OCMV_1_35V;
 	} else {
-		dev_warn(&client->dev,
+		dev_warn(dev,
 			 "Invalid supply voltage(s) AVDD: %d, DVDD: %d\n",
 			 avdd, dvdd);
 	}
 }
 
-/*
- * AIC3X 2 wire address can be up to 4 devices with device addresses
- * 0x18, 0x19, 0x1A, 0x1B
- */
-
-static const struct i2c_device_id aic3x_i2c_id[] = {
-	{ "tlv320aic3x", AIC3X_MODEL_3X },
-	{ "tlv320aic33", AIC3X_MODEL_33 },
-	{ "tlv320aic3007", AIC3X_MODEL_3007 },
-	{ "tlv320aic3106", AIC3X_MODEL_3X },
-	{ "tlv320aic3104", AIC3X_MODEL_3104 },
-	{ }
-};
-MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
 
 static const struct reg_sequence aic3007_class_d[] = {
 	/* Class-D speaker driver init; datasheet p. 46 */
@@ -1767,25 +1746,20 @@ static const struct reg_sequence aic3007_class_d[] = {
 	{ AIC3X_PAGE_SELECT, 0x00 },
 };
 
-/*
- * If the i2c layer weren't so broken, we could pass this kind of data
- * around
- */
-static int aic3x_i2c_probe(struct i2c_client *i2c,
-			   const struct i2c_device_id *id)
+int aic3x_probe(struct device *dev, struct regmap *regmap, kernel_ulong_t driver_data)
 {
-	struct aic3x_pdata *pdata = i2c->dev.platform_data;
+	struct aic3x_pdata *pdata = dev->platform_data;
 	struct aic3x_priv *aic3x;
 	struct aic3x_setup_data *ai3x_setup;
-	struct device_node *np = i2c->dev.of_node;
+	struct device_node *np = dev->of_node;
 	int ret, i;
 	u32 value;
 
-	aic3x = devm_kzalloc(&i2c->dev, sizeof(struct aic3x_priv), GFP_KERNEL);
+	aic3x = devm_kzalloc(dev, sizeof(struct aic3x_priv), GFP_KERNEL);
 	if (!aic3x)
 		return -ENOMEM;
 
-	aic3x->regmap = devm_regmap_init_i2c(i2c, &aic3x_regmap);
+	aic3x->regmap = regmap;
 	if (IS_ERR(aic3x->regmap)) {
 		ret = PTR_ERR(aic3x->regmap);
 		return ret;
@@ -1793,14 +1767,13 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 
 	regcache_cache_only(aic3x->regmap, true);
 
-	i2c_set_clientdata(i2c, aic3x);
+	dev_set_drvdata(dev, aic3x);
 	if (pdata) {
 		aic3x->gpio_reset = pdata->gpio_reset;
 		aic3x->setup = pdata->setup;
 		aic3x->micbias_vg = pdata->micbias_vg;
 	} else if (np) {
-		ai3x_setup = devm_kzalloc(&i2c->dev, sizeof(*ai3x_setup),
-								GFP_KERNEL);
+		ai3x_setup = devm_kzalloc(dev, sizeof(*ai3x_setup), GFP_KERNEL);
 		if (!ai3x_setup)
 			return -ENOMEM;
 
@@ -1810,7 +1783,7 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 		} else {
 			ret = of_get_named_gpio(np, "gpio-reset", 0);
 			if (ret > 0) {
-				dev_warn(&i2c->dev, "Using deprecated property \"gpio-reset\", please update your DT");
+				dev_warn(dev, "Using deprecated property \"gpio-reset\", please update your DT");
 				aic3x->gpio_reset = ret;
 			} else {
 				aic3x->gpio_reset = -1;
@@ -1835,7 +1808,7 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 				break;
 			default :
 				aic3x->micbias_vg = AIC3X_MICBIAS_OFF;
-				dev_err(&i2c->dev, "Unsuitable MicBias voltage "
+				dev_err(dev, "Unsuitable MicBias voltage "
 							"found in DT\n");
 			}
 		} else {
@@ -1846,7 +1819,7 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 		aic3x->gpio_reset = -1;
 	}
 
-	aic3x->model = id->driver_data;
+	aic3x->model = driver_data;
 
 	if (gpio_is_valid(aic3x->gpio_reset) &&
 	    !aic3x_is_shared_reset(aic3x)) {
@@ -1859,25 +1832,24 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 	for (i = 0; i < ARRAY_SIZE(aic3x->supplies); i++)
 		aic3x->supplies[i].supply = aic3x_supply_names[i];
 
-	ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(aic3x->supplies),
+	ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(aic3x->supplies),
 				      aic3x->supplies);
 	if (ret != 0) {
-		dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
+		dev_err(dev, "Failed to request supplies: %d\n", ret);
 		goto err_gpio;
 	}
 
-	aic3x_configure_ocmv(i2c);
+	aic3x_configure_ocmv(dev, aic3x);
 
 	if (aic3x->model == AIC3X_MODEL_3007) {
 		ret = regmap_register_patch(aic3x->regmap, aic3007_class_d,
 					    ARRAY_SIZE(aic3007_class_d));
 		if (ret != 0)
-			dev_err(&i2c->dev, "Failed to init class D: %d\n",
+			dev_err(dev, "Failed to init class D: %d\n",
 				ret);
 	}
 
-	ret = devm_snd_soc_register_component(&i2c->dev,
-			&soc_component_dev_aic3x, &aic3x_dai, 1);
+	ret = devm_snd_soc_register_component(dev, &soc_component_dev_aic3x, &aic3x_dai, 1);
 
 	if (ret != 0)
 		goto err_gpio;
@@ -1894,10 +1866,11 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 err:
 	return ret;
 }
+EXPORT_SYMBOL(aic3x_probe);
 
-static int aic3x_i2c_remove(struct i2c_client *client)
+int aic3x_remove(struct device *dev)
 {
-	struct aic3x_priv *aic3x = i2c_get_clientdata(client);
+	struct aic3x_priv *aic3x = dev_get_drvdata(dev);
 
 	list_del(&aic3x->list);
 
@@ -1908,31 +1881,7 @@ static int aic3x_i2c_remove(struct i2c_client *client)
 	}
 	return 0;
 }
-
-#if defined(CONFIG_OF)
-static const struct of_device_id tlv320aic3x_of_match[] = {
-	{ .compatible = "ti,tlv320aic3x", },
-	{ .compatible = "ti,tlv320aic33" },
-	{ .compatible = "ti,tlv320aic3007" },
-	{ .compatible = "ti,tlv320aic3106" },
-	{ .compatible = "ti,tlv320aic3104" },
-	{},
-};
-MODULE_DEVICE_TABLE(of, tlv320aic3x_of_match);
-#endif
-
-/* machine i2c codec control layer */
-static struct i2c_driver aic3x_i2c_driver = {
-	.driver = {
-		.name = "tlv320aic3x-codec",
-		.of_match_table = of_match_ptr(tlv320aic3x_of_match),
-	},
-	.probe	= aic3x_i2c_probe,
-	.remove = aic3x_i2c_remove,
-	.id_table = aic3x_i2c_id,
-};
-
-module_i2c_driver(aic3x_i2c_driver);
+EXPORT_SYMBOL(aic3x_remove);
 
 MODULE_DESCRIPTION("ASoC TLV320AIC3X codec driver");
 MODULE_AUTHOR("Vladimir Barinov");
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
  2021-04-06 10:50 ` [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file Jiri Prchal
  2021-04-06 10:50 ` [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI Jiri Prchal
@ 2021-04-06 10:50 ` Jiri Prchal
  2021-04-06 12:13   ` Mark Brown
  2021-04-06 10:50 ` [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code Jiri Prchal
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

Things related to I2C in separate file.

Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
 sound/soc/codecs/tlv320aic3x-i2c.c | 72 ++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 sound/soc/codecs/tlv320aic3x-i2c.c

diff --git a/sound/soc/codecs/tlv320aic3x-i2c.c b/sound/soc/codecs/tlv320aic3x-i2c.c
new file mode 100644
index 000000000000..f77c76d25112
--- /dev/null
+++ b/sound/soc/codecs/tlv320aic3x-i2c.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * ALSA SoC TLV320AIC3x codec driver I2C interface
+ *
+ * Author:      Arun KS, <arunks@mistralsolutions.com>
+ * Copyright:   (C) 2008 Mistral Solutions Pvt Ltd.,
+ *
+ * Based on sound/soc/codecs/wm8731.c by Richard Purdie
+ *
+ */
+
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+#include <sound/soc.h>
+
+#include "tlv320aic3x.h"
+
+static int aic3x_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
+{
+	struct regmap *regmap;
+	struct regmap_config config;
+
+	config = aic3x_regmap_config;
+	config.reg_bits = 8;
+	config.val_bits = 8;
+
+	regmap = devm_regmap_init_i2c(i2c, &config);
+	return aic3x_probe(&i2c->dev, regmap, id->driver_data);
+}
+
+static int aic3x_i2c_remove(struct i2c_client *i2c)
+{
+	return aic3x_remove(&i2c->dev);
+}
+
+static const struct i2c_device_id aic3x_i2c_id[] = {
+	{ "tlv320aic3x", AIC3X_MODEL_3X },
+	{ "tlv320aic33", AIC3X_MODEL_33 },
+	{ "tlv320aic3007", AIC3X_MODEL_3007 },
+	{ "tlv320aic3104", AIC3X_MODEL_3104 },
+	{ "tlv320aic3106", AIC3X_MODEL_3106 },
+	{ }
+};
+MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
+
+static const struct of_device_id aic3x_of_id[] = {
+	{ .compatible = "ti,tlv320aic3x", },
+	{ .compatible = "ti,tlv320aic33" },
+	{ .compatible = "ti,tlv320aic3007" },
+	{ .compatible = "ti,tlv320aic3104" },
+	{ .compatible = "ti,tlv320aic3106" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, aic3x_of_id);
+
+static struct i2c_driver aic3x_i2c_driver = {
+	.driver = {
+		.name = "tlv320aic3x",
+		.of_match_table = aic3x_of_id),
+	},
+	.probe = aic3x_i2c_probe,
+	.remove = aic3x_i2c_remove,
+	.id_table = aic3x_i2c_id,
+};
+
+module_i2c_driver(aic3x_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC TLV320AIC3x codec driver I2C");
+MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>");
+MODULE_LICENSE("GPL");
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
                   ` (2 preceding siblings ...)
  2021-04-06 10:50 ` [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code Jiri Prchal
@ 2021-04-06 10:50 ` Jiri Prchal
  2021-04-06 12:21   ` Mark Brown
  2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
  2021-04-06 11:56 ` [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Mark Brown
  5 siblings, 1 reply; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

Things related to SPI in separate file.
Please help with getting model value, line 34. I didn't find out where to get "driver_data".

Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
 sound/soc/codecs/tlv320aic3x-spi.c | 77 ++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 sound/soc/codecs/tlv320aic3x-spi.c

diff --git a/sound/soc/codecs/tlv320aic3x-spi.c b/sound/soc/codecs/tlv320aic3x-spi.c
new file mode 100644
index 000000000000..611d53e1bdf2
--- /dev/null
+++ b/sound/soc/codecs/tlv320aic3x-spi.c
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * ALSA SoC TLV320AIC3x codec driver SPI interface
+ *
+ * Author:      Arun KS, <arunks@mistralsolutions.com>
+ * Copyright:   (C) 2008 Mistral Solutions Pvt Ltd.,
+ *
+ * Based on sound/soc/codecs/wm8731.c by Richard Purdie
+ *
+ */
+
+#include <linux/spi/spi.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+#include <sound/soc.h>
+
+#include "tlv320aic3x.h"
+
+static int aic3x_spi_probe(struct spi_device *spi)
+{
+	struct regmap *regmap;
+	struct regmap_config config;
+
+	config = aic3x_regmap_config;
+	config.reg_bits = 7;
+	config.pad_bits = 1;
+	config.val_bits = 8;
+	config.read_flag_mask = 0x01;
+
+	dev_dbg(&spi->dev, "probing tlv320aic3x spi device\n");
+
+	regmap = devm_regmap_init_spi(spi, &config);
+	return aic3x_probe(&spi->dev, regmap, AIC3X_MODEL_3X); /*FIXME: where to get id->driver_data?*/
+}
+
+static int aic3x_spi_remove(struct spi_device *spi)
+{
+	return aic3x_remove(&spi->dev);
+}
+
+static const struct spi_device_id aic3x_spi_id[] = {
+	{ "tlv320aic3x", AIC3X_MODEL_3X },
+	{ "tlv320aic33", AIC3X_MODEL_33 },
+	{ "tlv320aic3007", AIC3X_MODEL_3007 },
+	{ "tlv320aic3104", AIC3X_MODEL_3104 },
+	{ "tlv320aic3106", AIC3X_MODEL_3106 },
+	{ }
+};
+MODULE_DEVICE_TABLE(spi, aic3x_spi_id);
+
+static const struct of_device_id aic3x_of_id[] = {
+	{ .compatible = "ti,tlv320aic3x", },
+	{ .compatible = "ti,tlv320aic33" },
+	{ .compatible = "ti,tlv320aic3007" },
+	{ .compatible = "ti,tlv320aic3104" },
+	{ .compatible = "ti,tlv320aic3106" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, aic3x_of_id);
+
+static struct spi_driver aic3x_spi_driver = {
+	.driver = {
+		.name = "tlv320aic3x",
+		.owner = THIS_MODULE,
+		.of_match_table = aic3x_of_id,
+	},
+	.probe = aic3x_spi_probe,
+	.remove = aic3x_spi_remove,
+	.id_table = aic3x_spi_id,
+};
+
+module_spi_driver(aic3x_spi_driver);
+
+MODULE_DESCRIPTION("ASoC TLV320AIC3x codec driver SPI");
+MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>");
+MODULE_LICENSE("GPL");
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
                   ` (3 preceding siblings ...)
  2021-04-06 10:50 ` [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code Jiri Prchal
@ 2021-04-06 10:50 ` Jiri Prchal
  2021-04-06 12:23   ` Mark Brown
                     ` (2 more replies)
  2021-04-06 11:56 ` [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Mark Brown
  5 siblings, 3 replies; 18+ messages in thread
From: Jiri Prchal @ 2021-04-06 10:50 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Mark Brown, Jiri Prchal, Liam Girdwood

Adds configuration option for SPI.
Compile new sources.

Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
 sound/soc/codecs/Kconfig  | 11 +++++++++++
 sound/soc/codecs/Makefile |  4 ++++
 2 files changed, 15 insertions(+)

diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 1c87b42606c9..d1fecf3b17c6 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -215,6 +215,8 @@ config SND_SOC_ALL_CODECS
 	imply SND_SOC_TLV320AIC32X4_I2C
 	imply SND_SOC_TLV320AIC32X4_SPI
 	imply SND_SOC_TLV320AIC3X
+	imply SND_SOC_TLV320AIC3X_I2C
+	imply SND_SOC_TLV320AIC3X_SPI
 	imply SND_SOC_TPA6130A2
 	imply SND_SOC_TLV320DAC33
 	imply SND_SOC_TSCS42XX
@@ -1420,7 +1422,16 @@ config SND_SOC_TLV320AIC32X4_SPI
 
 config SND_SOC_TLV320AIC3X
 	tristate "Texas Instruments TLV320AIC3x CODECs"
+
+config SND_SOC_TLV320AIC3X_I2C
+	tristate "Texas Instruments TLV320AIC3x audio CODECs - I2C"
 	depends on I2C
+	select SND_SOC_TLV320AIC3X
+
+config SND_SOC_TLV320AIC3X_SPI
+	tristate "Texas Instruments TLV320AIC3x audio CODECs - SPI"
+	depends on SPI_MASTER
+	select SND_SOC_TLV320AIC3X
 
 config SND_SOC_TLV320DAC33
 	tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 81357dc62ea0..022b3801d964 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -233,6 +233,8 @@ snd-soc-tlv320aic32x4-objs := tlv320aic32x4.o tlv320aic32x4-clk.o
 snd-soc-tlv320aic32x4-i2c-objs := tlv320aic32x4-i2c.o
 snd-soc-tlv320aic32x4-spi-objs := tlv320aic32x4-spi.o
 snd-soc-tlv320aic3x-objs := tlv320aic3x.o
+snd-soc-tlv320aic3x-i2c-objs := tlv320aic3x-i2c.o
+snd-soc-tlv320aic3x-spi-objs := tlv320aic3x-spi.o
 snd-soc-tlv320dac33-objs := tlv320dac33.o
 snd-soc-tlv320adcx140-objs := tlv320adcx140.o
 snd-soc-tscs42xx-objs := tscs42xx.o
@@ -548,6 +550,8 @@ obj-$(CONFIG_SND_SOC_TLV320AIC32X4)     += snd-soc-tlv320aic32x4.o
 obj-$(CONFIG_SND_SOC_TLV320AIC32X4_I2C)	+= snd-soc-tlv320aic32x4-i2c.o
 obj-$(CONFIG_SND_SOC_TLV320AIC32X4_SPI)	+= snd-soc-tlv320aic32x4-spi.o
 obj-$(CONFIG_SND_SOC_TLV320AIC3X)	+= snd-soc-tlv320aic3x.o
+obj-$(CONFIG_SND_SOC_TLV320AIC3X_I2C)	+= snd-soc-tlv320aic3x-i2c.o
+obj-$(CONFIG_SND_SOC_TLV320AIC3X_SPI)	+= snd-soc-tlv320aic3x-spi.o
 obj-$(CONFIG_SND_SOC_TLV320DAC33)	+= snd-soc-tlv320dac33.o
 obj-$(CONFIG_SND_SOC_TLV320ADCX140)	+= snd-soc-tlv320adcx140.o
 obj-$(CONFIG_SND_SOC_TSCS42XX)	+= snd-soc-tscs42xx.o
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support
  2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
                   ` (4 preceding siblings ...)
  2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
@ 2021-04-06 11:56 ` Mark Brown
  5 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 11:56 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 775 bytes --]

On Tue, Apr 06, 2021 at 12:50:13PM +0200, Jiri Prchal wrote:
> This patches add support of SPI to TLV320AIC3X codecs.
> 
> Jiri Prchal (5):
>   SOC Codecs: TLV320AIC3X add SPI: move thinks to header file
>   SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI
>   SOC Codecs: TLV320AIC3X add SPI: I2C code
>   SOC Codecs: TLV320AIC3X add SPI: SPI code
>   SOC Codecs: TLV320AIC3X add SPI: configuration and compile

Please submit patches using subject lines reflecting the style for the
subsystem, this makes it easier for people to identify relevant patches.
Look at what existing commits in the area you're changing are doing and
make sure your subject lines visually resemble what they're doing.
There's no need to resubmit to fix this alone.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file
  2021-04-06 10:50 ` [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file Jiri Prchal
@ 2021-04-06 12:00   ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 12:00 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 448 bytes --]

On Tue, Apr 06, 2021 at 12:50:14PM +0200, Jiri Prchal wrote:
> Move shered definitions and defines to header file.
> 
> Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
> ---
>  sound/soc/codecs/tlv320aic3x.h | 13 +++++++++++++
>  1 file changed, 13 insertions(+)

This isn't moving things, this is copying the definitions into the
header file without removing the original copies.  There's also typos in
the subject and commit log.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI
  2021-04-06 10:50 ` [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI Jiri Prchal
@ 2021-04-06 12:12   ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 12:12 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 1179 bytes --]

On Tue, Apr 06, 2021 at 12:50:15PM +0200, Jiri Prchal wrote:
> Removed things which are in header file.
> Renamed functions and removed their I2C related code.
> Moved I2C code to separate file.
> 
> Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
> ---
>  sound/soc/codecs/tlv320aic3x.c | 105 +++++++++------------------------
>  1 file changed, 27 insertions(+), 78 deletions(-)

This is not moving the I2C code, this is just plain deleting it which
will leave things broken after this patch - things should build and run
after each patch in the series.  As covered in submitting-patches.rst
each commit should do one thing as a standalone patch, and the changelog
for the patch should clearly describe what the patch does.

You probably want something like a patch to factor the I2C stuff out to
a separate file and another to add the SPI support.  Look at how other
drivers have done this transition.

> @@ -147,6 +140,7 @@ static const struct regmap_config aic3x_regmap = {
>  
>  	.cache_type = REGCACHE_RBTREE,
>  };
> +EXPORT_SYMBOL(aic3x_regmap_config);
>  

Everything else in ASoC is EXPORT_SYMBOL_GPL(), why is this
EXPORT_SYMBOL()?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code
  2021-04-06 10:50 ` [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code Jiri Prchal
@ 2021-04-06 12:13   ` Mark Brown
  2021-04-06 14:05     ` Jiří Prchal
  0 siblings, 1 reply; 18+ messages in thread
From: Mark Brown @ 2021-04-06 12:13 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 302 bytes --]

On Tue, Apr 06, 2021 at 12:50:16PM +0200, Jiri Prchal wrote:
> +++ b/sound/soc/codecs/tlv320aic3x-i2c.c
> @@ -0,0 +1,72 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * ALSA SoC TLV320AIC3x codec driver I2C interface

Please make the entire comment a C++ one so things look more
intentional.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code
  2021-04-06 10:50 ` [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code Jiri Prchal
@ 2021-04-06 12:21   ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 12:21 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 254 bytes --]

On Tue, Apr 06, 2021 at 12:50:17PM +0200, Jiri Prchal wrote:
> Things related to SPI in separate file.
> Please help with getting model value, line 34. I didn't find out where to get "driver_data".

Look at how adau1977 does this - spi_get_devicde_id().

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
  2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
@ 2021-04-06 12:23   ` Mark Brown
  2021-04-06 14:22     ` kernel test robot
  2021-04-06 18:52     ` kernel test robot
  2 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 12:23 UTC (permalink / raw)
  To: Jiri Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 315 bytes --]

On Tue, Apr 06, 2021 at 12:50:18PM +0200, Jiri Prchal wrote:

>  config SND_SOC_TLV320AIC3X
>  	tristate "Texas Instruments TLV320AIC3x CODECs"
> +
> +config SND_SOC_TLV320AIC3X_I2C

The old single option should not be user selectable when there are bus
specific options so the help text should be removed from it.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code
  2021-04-06 12:13   ` Mark Brown
@ 2021-04-06 14:05     ` Jiří Prchal
  2021-04-06 14:44       ` Mark Brown
  0 siblings, 1 reply; 18+ messages in thread
From: Jiří Prchal @ 2021-04-06 14:05 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood



On 06. 04. 21 14:13, Mark Brown wrote:
> On Tue, Apr 06, 2021 at 12:50:16PM +0200, Jiri Prchal wrote:
>> +++ b/sound/soc/codecs/tlv320aic3x-i2c.c
>> @@ -0,0 +1,72 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * ALSA SoC TLV320AIC3x codec driver I2C interface
> 
> Please make the entire comment a C++ one so things look more
> intentional.
> 
OK,
but coding style checker complains:
WARNING: Improper SPDX comment style for 
'sound/soc/codecs/tlv320aic3x-i2c.c', please use '//' instead
#64: FILE: sound/soc/codecs/tlv320aic3x-i2c.c:1:
+/* SPDX-License-Identifier: GPL-2.0-only

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
  2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
@ 2021-04-06 14:22     ` kernel test robot
  2021-04-06 14:22     ` kernel test robot
  2021-04-06 18:52     ` kernel test robot
  2 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2021-04-06 14:22 UTC (permalink / raw)
  To: Jiri Prchal, alsa-devel
  Cc: Jiri Prchal, Takashi Iwai, Liam Girdwood, clang-built-linux,
	Mark Brown, kbuild-all

[-- Attachment #1: Type: text/plain, Size: 7787 bytes --]

Hi Jiri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on asoc/for-next]
[also build test ERROR on v5.12-rc6 next-20210406]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
config: s390-randconfig-r011-20210406 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project a46f59a747a7273cc439efaf3b4f98d8b63d2f20)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # https://github.com/0day-ci/linux/commit/8001328cfb49d6387002a8314bc25241e46a969d
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
        git checkout 8001328cfb49d6387002a8314bc25241e46a969d
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __raw_readb(PCI_IOBASE + addr);
                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu'
   #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
                                                             ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
                                                        ^
   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
   #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
                                                        ^
   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsb(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsw(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsl(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesb(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesw(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesl(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}'
                   .of_match_table = aic3x_of_id),
                                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:59:12: note: to match this '{'
           .driver = {
                     ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:62:3: error: expected ';' at end of declaration
           },
            ^
            ;
>> sound/soc/codecs/tlv320aic3x-i2c.c:63:2: error: expected identifier or '('
           .probe = aic3x_i2c_probe,
           ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:66:1: error: extraneous closing brace ('}')
   };
   ^
   12 warnings and 4 errors generated.


vim +61 sound/soc/codecs/tlv320aic3x-i2c.c

eab5358b511ef2 Jiri Prchal 2021-04-06  57  
eab5358b511ef2 Jiri Prchal 2021-04-06  58  static struct i2c_driver aic3x_i2c_driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  59  	.driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  60  		.name = "tlv320aic3x",
eab5358b511ef2 Jiri Prchal 2021-04-06 @61  		.of_match_table = aic3x_of_id),
eab5358b511ef2 Jiri Prchal 2021-04-06 @62  	},
eab5358b511ef2 Jiri Prchal 2021-04-06 @63  	.probe = aic3x_i2c_probe,
eab5358b511ef2 Jiri Prchal 2021-04-06  64  	.remove = aic3x_i2c_remove,
eab5358b511ef2 Jiri Prchal 2021-04-06  65  	.id_table = aic3x_i2c_id,
eab5358b511ef2 Jiri Prchal 2021-04-06 @66  };
eab5358b511ef2 Jiri Prchal 2021-04-06  67  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31070 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
@ 2021-04-06 14:22     ` kernel test robot
  0 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2021-04-06 14:22 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 7919 bytes --]

Hi Jiri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on asoc/for-next]
[also build test ERROR on v5.12-rc6 next-20210406]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
config: s390-randconfig-r011-20210406 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project a46f59a747a7273cc439efaf3b4f98d8b63d2f20)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # https://github.com/0day-ci/linux/commit/8001328cfb49d6387002a8314bc25241e46a969d
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
        git checkout 8001328cfb49d6387002a8314bc25241e46a969d
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __raw_readb(PCI_IOBASE + addr);
                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu'
   #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
                                                             ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
                                                        ^
   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
   #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
                                                        ^
   In file included from sound/soc/codecs/tlv320aic3x-i2c.c:15:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:13:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsb(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsw(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsl(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesb(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesw(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesl(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}'
                   .of_match_table = aic3x_of_id),
                                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:59:12: note: to match this '{'
           .driver = {
                     ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:62:3: error: expected ';' at end of declaration
           },
            ^
            ;
>> sound/soc/codecs/tlv320aic3x-i2c.c:63:2: error: expected identifier or '('
           .probe = aic3x_i2c_probe,
           ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:66:1: error: extraneous closing brace ('}')
   };
   ^
   12 warnings and 4 errors generated.


vim +61 sound/soc/codecs/tlv320aic3x-i2c.c

eab5358b511ef2 Jiri Prchal 2021-04-06  57  
eab5358b511ef2 Jiri Prchal 2021-04-06  58  static struct i2c_driver aic3x_i2c_driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  59  	.driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  60  		.name = "tlv320aic3x",
eab5358b511ef2 Jiri Prchal 2021-04-06 @61  		.of_match_table = aic3x_of_id),
eab5358b511ef2 Jiri Prchal 2021-04-06 @62  	},
eab5358b511ef2 Jiri Prchal 2021-04-06 @63  	.probe = aic3x_i2c_probe,
eab5358b511ef2 Jiri Prchal 2021-04-06  64  	.remove = aic3x_i2c_remove,
eab5358b511ef2 Jiri Prchal 2021-04-06  65  	.id_table = aic3x_i2c_id,
eab5358b511ef2 Jiri Prchal 2021-04-06 @66  };
eab5358b511ef2 Jiri Prchal 2021-04-06  67  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 31070 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code
  2021-04-06 14:05     ` Jiří Prchal
@ 2021-04-06 14:44       ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2021-04-06 14:44 UTC (permalink / raw)
  To: Jiří Prchal; +Cc: alsa-devel, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 748 bytes --]

On Tue, Apr 06, 2021 at 04:05:21PM +0200, Jiří Prchal wrote:
> On 06. 04. 21 14:13, Mark Brown wrote:
> > On Tue, Apr 06, 2021 at 12:50:16PM +0200, Jiri Prchal wrote:

> > > +++ b/sound/soc/codecs/tlv320aic3x-i2c.c
> > > @@ -0,0 +1,72 @@
> > > +// SPDX-License-Identifier: GPL-2.0-only
> > > +/*
> > > + * ALSA SoC TLV320AIC3x codec driver I2C interface

> > Please make the entire comment a C++ one so things look more
> > intentional.

> OK,
> but coding style checker complains:
> WARNING: Improper SPDX comment style for
> 'sound/soc/codecs/tlv320aic3x-i2c.c', please use '//' instead
> #64: FILE: sound/soc/codecs/tlv320aic3x-i2c.c:1:
> +/* SPDX-License-Identifier: GPL-2.0-only

That's a C style comment not a C++ one.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
  2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
@ 2021-04-06 18:52     ` kernel test robot
  2021-04-06 14:22     ` kernel test robot
  2021-04-06 18:52     ` kernel test robot
  2 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2021-04-06 18:52 UTC (permalink / raw)
  To: Jiri Prchal, alsa-devel
  Cc: Jiri Prchal, Mark Brown, kbuild-all, Takashi Iwai, Liam Girdwood

[-- Attachment #1: Type: text/plain, Size: 3901 bytes --]

Hi Jiri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on asoc/for-next]
[also build test ERROR on v5.12-rc6 next-20210406]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/8001328cfb49d6387002a8314bc25241e46a969d
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
        git checkout 8001328cfb49d6387002a8314bc25241e46a969d
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:59:12: note: to match this '{'
      59 |  .driver = {
         |            ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:58:45: note: to match this '{'
      58 | static struct i2c_driver aic3x_i2c_driver = {
         |                                             ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected ',' or ';' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:62:3: error: expected identifier or '(' before ',' token
      62 |  },
         |   ^
   sound/soc/codecs/tlv320aic3x-i2c.c:38:35: warning: 'aic3x_i2c_id' defined but not used [-Wunused-const-variable=]
      38 | static const struct i2c_device_id aic3x_i2c_id[] = {
         |                                   ^~~~~~~~~~~~
   sound/soc/codecs/tlv320aic3x-i2c.c:33:12: warning: 'aic3x_i2c_remove' defined but not used [-Wunused-function]
      33 | static int aic3x_i2c_remove(struct i2c_client *i2c)
         |            ^~~~~~~~~~~~~~~~
   sound/soc/codecs/tlv320aic3x-i2c.c:20:12: warning: 'aic3x_i2c_probe' defined but not used [-Wunused-function]
      20 | static int aic3x_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
         |            ^~~~~~~~~~~~~~~


vim +61 sound/soc/codecs/tlv320aic3x-i2c.c

eab5358b511ef2 Jiri Prchal 2021-04-06  57  
eab5358b511ef2 Jiri Prchal 2021-04-06  58  static struct i2c_driver aic3x_i2c_driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  59  	.driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  60  		.name = "tlv320aic3x",
eab5358b511ef2 Jiri Prchal 2021-04-06 @61  		.of_match_table = aic3x_of_id),
eab5358b511ef2 Jiri Prchal 2021-04-06 @62  	},
eab5358b511ef2 Jiri Prchal 2021-04-06  63  	.probe = aic3x_i2c_probe,
eab5358b511ef2 Jiri Prchal 2021-04-06  64  	.remove = aic3x_i2c_remove,
eab5358b511ef2 Jiri Prchal 2021-04-06  65  	.id_table = aic3x_i2c_id,
eab5358b511ef2 Jiri Prchal 2021-04-06  66  };
eab5358b511ef2 Jiri Prchal 2021-04-06  67  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 67521 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile
@ 2021-04-06 18:52     ` kernel test robot
  0 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2021-04-06 18:52 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 3978 bytes --]

Hi Jiri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on asoc/for-next]
[also build test ERROR on v5.12-rc6 next-20210406]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/8001328cfb49d6387002a8314bc25241e46a969d
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jiri-Prchal/SOC-Codecs-TLV320AIC3X-add-SPI-support/20210406-185528
        git checkout 8001328cfb49d6387002a8314bc25241e46a969d
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:59:12: note: to match this '{'
      59 |  .driver = {
         |            ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected '}' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
   sound/soc/codecs/tlv320aic3x-i2c.c:58:45: note: to match this '{'
      58 | static struct i2c_driver aic3x_i2c_driver = {
         |                                             ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:61:32: error: expected ',' or ';' before ')' token
      61 |   .of_match_table = aic3x_of_id),
         |                                ^
>> sound/soc/codecs/tlv320aic3x-i2c.c:62:3: error: expected identifier or '(' before ',' token
      62 |  },
         |   ^
   sound/soc/codecs/tlv320aic3x-i2c.c:38:35: warning: 'aic3x_i2c_id' defined but not used [-Wunused-const-variable=]
      38 | static const struct i2c_device_id aic3x_i2c_id[] = {
         |                                   ^~~~~~~~~~~~
   sound/soc/codecs/tlv320aic3x-i2c.c:33:12: warning: 'aic3x_i2c_remove' defined but not used [-Wunused-function]
      33 | static int aic3x_i2c_remove(struct i2c_client *i2c)
         |            ^~~~~~~~~~~~~~~~
   sound/soc/codecs/tlv320aic3x-i2c.c:20:12: warning: 'aic3x_i2c_probe' defined but not used [-Wunused-function]
      20 | static int aic3x_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
         |            ^~~~~~~~~~~~~~~


vim +61 sound/soc/codecs/tlv320aic3x-i2c.c

eab5358b511ef2 Jiri Prchal 2021-04-06  57  
eab5358b511ef2 Jiri Prchal 2021-04-06  58  static struct i2c_driver aic3x_i2c_driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  59  	.driver = {
eab5358b511ef2 Jiri Prchal 2021-04-06  60  		.name = "tlv320aic3x",
eab5358b511ef2 Jiri Prchal 2021-04-06 @61  		.of_match_table = aic3x_of_id),
eab5358b511ef2 Jiri Prchal 2021-04-06 @62  	},
eab5358b511ef2 Jiri Prchal 2021-04-06  63  	.probe = aic3x_i2c_probe,
eab5358b511ef2 Jiri Prchal 2021-04-06  64  	.remove = aic3x_i2c_remove,
eab5358b511ef2 Jiri Prchal 2021-04-06  65  	.id_table = aic3x_i2c_id,
eab5358b511ef2 Jiri Prchal 2021-04-06  66  };
eab5358b511ef2 Jiri Prchal 2021-04-06  67  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 67521 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2021-04-06 18:54 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-06 10:50 [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Jiri Prchal
2021-04-06 10:50 ` [PATCH 1/5] SOC Codecs: TLV320AIC3X add SPI: move thinks to header file Jiri Prchal
2021-04-06 12:00   ` Mark Brown
2021-04-06 10:50 ` [PATCH 2/5] SOC Codecs: TLV320AIC3X add SPI: main source code for I2C and SPI Jiri Prchal
2021-04-06 12:12   ` Mark Brown
2021-04-06 10:50 ` [PATCH 3/5] SOC Codecs: TLV320AIC3X add SPI: I2C code Jiri Prchal
2021-04-06 12:13   ` Mark Brown
2021-04-06 14:05     ` Jiří Prchal
2021-04-06 14:44       ` Mark Brown
2021-04-06 10:50 ` [PATCH 4/5] SOC Codecs: TLV320AIC3X add SPI: SPI code Jiri Prchal
2021-04-06 12:21   ` Mark Brown
2021-04-06 10:50 ` [PATCH 5/5] SOC Codecs: TLV320AIC3X add SPI: configuration and compile Jiri Prchal
2021-04-06 12:23   ` Mark Brown
2021-04-06 14:22   ` kernel test robot
2021-04-06 14:22     ` kernel test robot
2021-04-06 18:52   ` kernel test robot
2021-04-06 18:52     ` kernel test robot
2021-04-06 11:56 ` [PATCH 0/5] SOC Codecs: TLV320AIC3X add SPI support Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.