All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	Arnd Bergmann <arnd@arndb.de>, Mark Brown <broonie@kernel.org>,
	alsa-devel@alsa-project.org
Subject: [PATCH 24/46] ARM: pxa: magician: use platform driver for audio
Date: Fri, 18 Oct 2019 17:41:39 +0200	[thread overview]
Message-ID: <20191018154201.1276638-24-arnd@arndb.de> (raw)
In-Reply-To: <20191018154052.1276506-1-arnd@arndb.de>

The magician audio driver creates a codec device and gets
data from a board specific header file, both of which is
a bit suspicious. Move these into the board file itself,
using a gpio lookup table.

Cc: Mark Brown <broonie@kernel.org>
Cc: alsa-devel@alsa-project.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/mach-pxa/magician.c |  50 +++++++++++++
 sound/soc/pxa/magician.c     | 141 +++++++++--------------------------
 2 files changed, 87 insertions(+), 104 deletions(-)

diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index 31037679bf24..48ac4b96e5ce 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -54,6 +54,7 @@
 #include <linux/spi/spi.h>
 #include <linux/spi/pxa2xx_spi.h>
 #include <linux/spi/ads7846.h>
+#include <sound/uda1380.h>
 
 static unsigned long magician_pin_config[] __initdata = {
 
@@ -892,6 +893,53 @@ static struct platform_device strataflash = {
 	},
 };
 
+/*
+ * audio support
+ */
+static struct uda1380_platform_data uda1380_info = {
+	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
+	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
+	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
+};
+
+static struct i2c_board_info magician_audio_i2c_board_info[] = {
+	{
+		I2C_BOARD_INFO("uda1380", 0x18),
+		.platform_data = &uda1380_info,
+	},
+};
+
+static struct gpiod_lookup_table magician_audio_gpio_table = {
+	.dev_id = "magician-audio",
+	.table = {
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_SPK_POWER - MAGICIAN_EGPIO_BASE,
+			    "SPK_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_EP_POWER - MAGICIAN_EGPIO_BASE,
+			    "EP_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_MIC_POWER - MAGICIAN_EGPIO_BASE,
+			    "MIC_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL0 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL0", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL1 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL1", GPIO_ACTIVE_HIGH),
+		{ },
+	},
+};
+
+static void magician_audio_init(void)
+{
+	i2c_register_board_info(0,
+		ARRAY_AND_SIZE(magician_audio_i2c_board_info));
+
+	gpiod_add_lookup_table(&magician_audio_gpio_table);
+	platform_device_register_simple("magician-audio", -1, NULL, 0);
+}
+
 /*
  * PXA I2C main controller
  */
@@ -1033,6 +1081,8 @@ static void __init magician_init(void)
 
 	gpiod_add_lookup_table(&bq24022_gpiod_table);
 	platform_add_devices(ARRAY_AND_SIZE(devices));
+
+	magician_audio_init();
 }
 
 MACHINE_START(MAGICIAN, "HTC Magician")
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
index 6483cff5b73d..c5993a532cf0 100644
--- a/sound/soc/pxa/magician.c
+++ b/sound/soc/pxa/magician.c
@@ -14,16 +14,14 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
-#include <sound/uda1380.h>
 
-#include <mach/magician.h>
 #include <asm/mach-types.h>
 #include "../codecs/uda1380.h"
 #include "pxa2xx-i2s.h"
@@ -36,6 +34,9 @@ static int magician_hp_switch;
 static int magician_spk_switch = 1;
 static int magician_in_sel = MAGICIAN_MIC;
 
+static struct gpio_desc *gpiod_spk_power, *gpiod_ep_power, *gpiod_mic_power;
+static struct gpio_desc *gpiod_in_sel0, *gpiod_in_sel1;
+
 static void magician_ext_control(struct snd_soc_dapm_context *dapm)
 {
 
@@ -215,10 +216,10 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 
 	switch (magician_in_sel) {
 	case MAGICIAN_MIC:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 1);
+		gpiod_set_value(gpiod_in_sel1, 1);
 		break;
 	case MAGICIAN_MIC_EXT:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 0);
+		gpiod_set_value(gpiod_in_sel1, 0);
 	}
 
 	return 1;
@@ -227,21 +228,21 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 static int magician_spk_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_spk_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_hp_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_ep_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_mic_bias(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_mic_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
@@ -328,106 +329,38 @@ static struct snd_soc_card snd_soc_card_magician = {
 	.fully_routed = true,
 };
 
-static struct platform_device *magician_snd_device;
-
-/*
- * FIXME: move into magician board file once merged into the pxa tree
- */
-static struct uda1380_platform_data uda1380_info = {
-	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
-	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
-	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
-};
-
-static struct i2c_board_info i2c_board_info[] = {
-	{
-		I2C_BOARD_INFO("uda1380", 0x18),
-		.platform_data = &uda1380_info,
-	},
-};
-
-static int __init magician_init(void)
-{
-	int ret;
-	struct i2c_adapter *adapter;
-	struct i2c_client *client;
-
-	if (!machine_is_magician())
-		return -ENODEV;
-
-	adapter = i2c_get_adapter(0);
-	if (!adapter)
-		return -ENODEV;
-	client = i2c_new_device(adapter, i2c_board_info);
-	i2c_put_adapter(adapter);
-	if (!client)
-		return -ENODEV;
-
-	ret = gpio_request(EGPIO_MAGICIAN_SPK_POWER, "SPK_POWER");
-	if (ret)
-		goto err_request_spk;
-	ret = gpio_request(EGPIO_MAGICIAN_EP_POWER, "EP_POWER");
-	if (ret)
-		goto err_request_ep;
-	ret = gpio_request(EGPIO_MAGICIAN_MIC_POWER, "MIC_POWER");
-	if (ret)
-		goto err_request_mic;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL0, "IN_SEL0");
-	if (ret)
-		goto err_request_in_sel0;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL1, "IN_SEL1");
-	if (ret)
-		goto err_request_in_sel1;
-
-	gpio_set_value(EGPIO_MAGICIAN_IN_SEL0, 0);
-
-	magician_snd_device = platform_device_alloc("soc-audio", -1);
-	if (!magician_snd_device) {
-		ret = -ENOMEM;
-		goto err_pdev;
-	}
-
-	platform_set_drvdata(magician_snd_device, &snd_soc_card_magician);
-	ret = platform_device_add(magician_snd_device);
-	if (ret) {
-		platform_device_put(magician_snd_device);
-		goto err_pdev;
-	}
-
-	return 0;
-
-err_pdev:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-err_request_in_sel1:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-err_request_in_sel0:
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-err_request_mic:
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-err_request_ep:
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
-err_request_spk:
-	return ret;
-}
-
-static void __exit magician_exit(void)
+static int magician_audio_probe(struct platform_device *pdev)
 {
-	platform_device_unregister(magician_snd_device);
-
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, 0);
-
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
+	struct device *dev = &pdev->dev;
+
+	gpiod_spk_power = devm_gpiod_get(dev, "SPK_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_spk_power))
+		return PTR_ERR(gpiod_spk_power);
+	gpiod_ep_power = devm_gpiod_get(dev, "EP_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_ep_power))
+		return PTR_ERR(gpiod_ep_power);
+	gpiod_mic_power = devm_gpiod_get(dev, "MIC_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_mic_power))
+		return PTR_ERR(gpiod_mic_power);
+	gpiod_in_sel0 = devm_gpiod_get(dev, "IN_SEL0", GPIOD_OUT_HIGH);
+	if (IS_ERR(gpiod_in_sel0))
+		return PTR_ERR(gpiod_in_sel0);
+	gpiod_in_sel1 = devm_gpiod_get(dev, "IN_SEL1", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_in_sel1))
+		return PTR_ERR(gpiod_in_sel1);
+
+	snd_soc_card_magician.dev = &pdev->dev;
+	return devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_magician);
 }
 
-module_init(magician_init);
-module_exit(magician_exit);
+static struct platform_driver magician_audio_driver = {
+	.driver.name = "magician-audio",
+	.driver.pm = &snd_soc_pm_ops,
+	.probe = magician_audio_probe,
+};
+module_platform_driver(magician_audio_driver);
 
 MODULE_AUTHOR("Philipp Zabel");
 MODULE_DESCRIPTION("ALSA SoC Magician");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:magician-audio");
-- 
2.20.0


WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de>
To: Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Cc: alsa-devel@alsa-project.org, Arnd Bergmann <arnd@arndb.de>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [alsa-devel] [PATCH 24/46] ARM: pxa: magician: use platform driver for audio
Date: Fri, 18 Oct 2019 17:41:39 +0200	[thread overview]
Message-ID: <20191018154201.1276638-24-arnd@arndb.de> (raw)
In-Reply-To: <20191018154052.1276506-1-arnd@arndb.de>

The magician audio driver creates a codec device and gets
data from a board specific header file, both of which is
a bit suspicious. Move these into the board file itself,
using a gpio lookup table.

Cc: Mark Brown <broonie@kernel.org>
Cc: alsa-devel@alsa-project.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/mach-pxa/magician.c |  50 +++++++++++++
 sound/soc/pxa/magician.c     | 141 +++++++++--------------------------
 2 files changed, 87 insertions(+), 104 deletions(-)

diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index 31037679bf24..48ac4b96e5ce 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -54,6 +54,7 @@
 #include <linux/spi/spi.h>
 #include <linux/spi/pxa2xx_spi.h>
 #include <linux/spi/ads7846.h>
+#include <sound/uda1380.h>
 
 static unsigned long magician_pin_config[] __initdata = {
 
@@ -892,6 +893,53 @@ static struct platform_device strataflash = {
 	},
 };
 
+/*
+ * audio support
+ */
+static struct uda1380_platform_data uda1380_info = {
+	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
+	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
+	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
+};
+
+static struct i2c_board_info magician_audio_i2c_board_info[] = {
+	{
+		I2C_BOARD_INFO("uda1380", 0x18),
+		.platform_data = &uda1380_info,
+	},
+};
+
+static struct gpiod_lookup_table magician_audio_gpio_table = {
+	.dev_id = "magician-audio",
+	.table = {
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_SPK_POWER - MAGICIAN_EGPIO_BASE,
+			    "SPK_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_EP_POWER - MAGICIAN_EGPIO_BASE,
+			    "EP_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_MIC_POWER - MAGICIAN_EGPIO_BASE,
+			    "MIC_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL0 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL0", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL1 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL1", GPIO_ACTIVE_HIGH),
+		{ },
+	},
+};
+
+static void magician_audio_init(void)
+{
+	i2c_register_board_info(0,
+		ARRAY_AND_SIZE(magician_audio_i2c_board_info));
+
+	gpiod_add_lookup_table(&magician_audio_gpio_table);
+	platform_device_register_simple("magician-audio", -1, NULL, 0);
+}
+
 /*
  * PXA I2C main controller
  */
@@ -1033,6 +1081,8 @@ static void __init magician_init(void)
 
 	gpiod_add_lookup_table(&bq24022_gpiod_table);
 	platform_add_devices(ARRAY_AND_SIZE(devices));
+
+	magician_audio_init();
 }
 
 MACHINE_START(MAGICIAN, "HTC Magician")
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
index 6483cff5b73d..c5993a532cf0 100644
--- a/sound/soc/pxa/magician.c
+++ b/sound/soc/pxa/magician.c
@@ -14,16 +14,14 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
-#include <sound/uda1380.h>
 
-#include <mach/magician.h>
 #include <asm/mach-types.h>
 #include "../codecs/uda1380.h"
 #include "pxa2xx-i2s.h"
@@ -36,6 +34,9 @@ static int magician_hp_switch;
 static int magician_spk_switch = 1;
 static int magician_in_sel = MAGICIAN_MIC;
 
+static struct gpio_desc *gpiod_spk_power, *gpiod_ep_power, *gpiod_mic_power;
+static struct gpio_desc *gpiod_in_sel0, *gpiod_in_sel1;
+
 static void magician_ext_control(struct snd_soc_dapm_context *dapm)
 {
 
@@ -215,10 +216,10 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 
 	switch (magician_in_sel) {
 	case MAGICIAN_MIC:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 1);
+		gpiod_set_value(gpiod_in_sel1, 1);
 		break;
 	case MAGICIAN_MIC_EXT:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 0);
+		gpiod_set_value(gpiod_in_sel1, 0);
 	}
 
 	return 1;
@@ -227,21 +228,21 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 static int magician_spk_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_spk_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_hp_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_ep_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_mic_bias(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_mic_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
@@ -328,106 +329,38 @@ static struct snd_soc_card snd_soc_card_magician = {
 	.fully_routed = true,
 };
 
-static struct platform_device *magician_snd_device;
-
-/*
- * FIXME: move into magician board file once merged into the pxa tree
- */
-static struct uda1380_platform_data uda1380_info = {
-	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
-	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
-	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
-};
-
-static struct i2c_board_info i2c_board_info[] = {
-	{
-		I2C_BOARD_INFO("uda1380", 0x18),
-		.platform_data = &uda1380_info,
-	},
-};
-
-static int __init magician_init(void)
-{
-	int ret;
-	struct i2c_adapter *adapter;
-	struct i2c_client *client;
-
-	if (!machine_is_magician())
-		return -ENODEV;
-
-	adapter = i2c_get_adapter(0);
-	if (!adapter)
-		return -ENODEV;
-	client = i2c_new_device(adapter, i2c_board_info);
-	i2c_put_adapter(adapter);
-	if (!client)
-		return -ENODEV;
-
-	ret = gpio_request(EGPIO_MAGICIAN_SPK_POWER, "SPK_POWER");
-	if (ret)
-		goto err_request_spk;
-	ret = gpio_request(EGPIO_MAGICIAN_EP_POWER, "EP_POWER");
-	if (ret)
-		goto err_request_ep;
-	ret = gpio_request(EGPIO_MAGICIAN_MIC_POWER, "MIC_POWER");
-	if (ret)
-		goto err_request_mic;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL0, "IN_SEL0");
-	if (ret)
-		goto err_request_in_sel0;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL1, "IN_SEL1");
-	if (ret)
-		goto err_request_in_sel1;
-
-	gpio_set_value(EGPIO_MAGICIAN_IN_SEL0, 0);
-
-	magician_snd_device = platform_device_alloc("soc-audio", -1);
-	if (!magician_snd_device) {
-		ret = -ENOMEM;
-		goto err_pdev;
-	}
-
-	platform_set_drvdata(magician_snd_device, &snd_soc_card_magician);
-	ret = platform_device_add(magician_snd_device);
-	if (ret) {
-		platform_device_put(magician_snd_device);
-		goto err_pdev;
-	}
-
-	return 0;
-
-err_pdev:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-err_request_in_sel1:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-err_request_in_sel0:
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-err_request_mic:
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-err_request_ep:
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
-err_request_spk:
-	return ret;
-}
-
-static void __exit magician_exit(void)
+static int magician_audio_probe(struct platform_device *pdev)
 {
-	platform_device_unregister(magician_snd_device);
-
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, 0);
-
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
+	struct device *dev = &pdev->dev;
+
+	gpiod_spk_power = devm_gpiod_get(dev, "SPK_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_spk_power))
+		return PTR_ERR(gpiod_spk_power);
+	gpiod_ep_power = devm_gpiod_get(dev, "EP_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_ep_power))
+		return PTR_ERR(gpiod_ep_power);
+	gpiod_mic_power = devm_gpiod_get(dev, "MIC_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_mic_power))
+		return PTR_ERR(gpiod_mic_power);
+	gpiod_in_sel0 = devm_gpiod_get(dev, "IN_SEL0", GPIOD_OUT_HIGH);
+	if (IS_ERR(gpiod_in_sel0))
+		return PTR_ERR(gpiod_in_sel0);
+	gpiod_in_sel1 = devm_gpiod_get(dev, "IN_SEL1", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_in_sel1))
+		return PTR_ERR(gpiod_in_sel1);
+
+	snd_soc_card_magician.dev = &pdev->dev;
+	return devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_magician);
 }
 
-module_init(magician_init);
-module_exit(magician_exit);
+static struct platform_driver magician_audio_driver = {
+	.driver.name = "magician-audio",
+	.driver.pm = &snd_soc_pm_ops,
+	.probe = magician_audio_probe,
+};
+module_platform_driver(magician_audio_driver);
 
 MODULE_AUTHOR("Philipp Zabel");
 MODULE_DESCRIPTION("ALSA SoC Magician");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:magician-audio");
-- 
2.20.0

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de>
To: Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Cc: alsa-devel@alsa-project.org, Arnd Bergmann <arnd@arndb.de>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 24/46] ARM: pxa: magician: use platform driver for audio
Date: Fri, 18 Oct 2019 17:41:39 +0200	[thread overview]
Message-ID: <20191018154201.1276638-24-arnd@arndb.de> (raw)
In-Reply-To: <20191018154052.1276506-1-arnd@arndb.de>

The magician audio driver creates a codec device and gets
data from a board specific header file, both of which is
a bit suspicious. Move these into the board file itself,
using a gpio lookup table.

Cc: Mark Brown <broonie@kernel.org>
Cc: alsa-devel@alsa-project.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/mach-pxa/magician.c |  50 +++++++++++++
 sound/soc/pxa/magician.c     | 141 +++++++++--------------------------
 2 files changed, 87 insertions(+), 104 deletions(-)

diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index 31037679bf24..48ac4b96e5ce 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -54,6 +54,7 @@
 #include <linux/spi/spi.h>
 #include <linux/spi/pxa2xx_spi.h>
 #include <linux/spi/ads7846.h>
+#include <sound/uda1380.h>
 
 static unsigned long magician_pin_config[] __initdata = {
 
@@ -892,6 +893,53 @@ static struct platform_device strataflash = {
 	},
 };
 
+/*
+ * audio support
+ */
+static struct uda1380_platform_data uda1380_info = {
+	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
+	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
+	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
+};
+
+static struct i2c_board_info magician_audio_i2c_board_info[] = {
+	{
+		I2C_BOARD_INFO("uda1380", 0x18),
+		.platform_data = &uda1380_info,
+	},
+};
+
+static struct gpiod_lookup_table magician_audio_gpio_table = {
+	.dev_id = "magician-audio",
+	.table = {
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_SPK_POWER - MAGICIAN_EGPIO_BASE,
+			    "SPK_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_EP_POWER - MAGICIAN_EGPIO_BASE,
+			    "EP_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_MIC_POWER - MAGICIAN_EGPIO_BASE,
+			    "MIC_POWER", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL0 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL0", GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP("htc-egpio-0",
+			    EGPIO_MAGICIAN_IN_SEL1 - MAGICIAN_EGPIO_BASE,
+			    "IN_SEL1", GPIO_ACTIVE_HIGH),
+		{ },
+	},
+};
+
+static void magician_audio_init(void)
+{
+	i2c_register_board_info(0,
+		ARRAY_AND_SIZE(magician_audio_i2c_board_info));
+
+	gpiod_add_lookup_table(&magician_audio_gpio_table);
+	platform_device_register_simple("magician-audio", -1, NULL, 0);
+}
+
 /*
  * PXA I2C main controller
  */
@@ -1033,6 +1081,8 @@ static void __init magician_init(void)
 
 	gpiod_add_lookup_table(&bq24022_gpiod_table);
 	platform_add_devices(ARRAY_AND_SIZE(devices));
+
+	magician_audio_init();
 }
 
 MACHINE_START(MAGICIAN, "HTC Magician")
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
index 6483cff5b73d..c5993a532cf0 100644
--- a/sound/soc/pxa/magician.c
+++ b/sound/soc/pxa/magician.c
@@ -14,16 +14,14 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
-#include <sound/uda1380.h>
 
-#include <mach/magician.h>
 #include <asm/mach-types.h>
 #include "../codecs/uda1380.h"
 #include "pxa2xx-i2s.h"
@@ -36,6 +34,9 @@ static int magician_hp_switch;
 static int magician_spk_switch = 1;
 static int magician_in_sel = MAGICIAN_MIC;
 
+static struct gpio_desc *gpiod_spk_power, *gpiod_ep_power, *gpiod_mic_power;
+static struct gpio_desc *gpiod_in_sel0, *gpiod_in_sel1;
+
 static void magician_ext_control(struct snd_soc_dapm_context *dapm)
 {
 
@@ -215,10 +216,10 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 
 	switch (magician_in_sel) {
 	case MAGICIAN_MIC:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 1);
+		gpiod_set_value(gpiod_in_sel1, 1);
 		break;
 	case MAGICIAN_MIC_EXT:
-		gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 0);
+		gpiod_set_value(gpiod_in_sel1, 0);
 	}
 
 	return 1;
@@ -227,21 +228,21 @@ static int magician_set_input(struct snd_kcontrol *kcontrol,
 static int magician_spk_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_spk_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_hp_power(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_ep_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
 static int magician_mic_bias(struct snd_soc_dapm_widget *w,
 				struct snd_kcontrol *k, int event)
 {
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, SND_SOC_DAPM_EVENT_ON(event));
+	gpiod_set_value(gpiod_mic_power, SND_SOC_DAPM_EVENT_ON(event));
 	return 0;
 }
 
@@ -328,106 +329,38 @@ static struct snd_soc_card snd_soc_card_magician = {
 	.fully_routed = true,
 };
 
-static struct platform_device *magician_snd_device;
-
-/*
- * FIXME: move into magician board file once merged into the pxa tree
- */
-static struct uda1380_platform_data uda1380_info = {
-	.gpio_power = EGPIO_MAGICIAN_CODEC_POWER,
-	.gpio_reset = EGPIO_MAGICIAN_CODEC_RESET,
-	.dac_clk    = UDA1380_DAC_CLK_WSPLL,
-};
-
-static struct i2c_board_info i2c_board_info[] = {
-	{
-		I2C_BOARD_INFO("uda1380", 0x18),
-		.platform_data = &uda1380_info,
-	},
-};
-
-static int __init magician_init(void)
-{
-	int ret;
-	struct i2c_adapter *adapter;
-	struct i2c_client *client;
-
-	if (!machine_is_magician())
-		return -ENODEV;
-
-	adapter = i2c_get_adapter(0);
-	if (!adapter)
-		return -ENODEV;
-	client = i2c_new_device(adapter, i2c_board_info);
-	i2c_put_adapter(adapter);
-	if (!client)
-		return -ENODEV;
-
-	ret = gpio_request(EGPIO_MAGICIAN_SPK_POWER, "SPK_POWER");
-	if (ret)
-		goto err_request_spk;
-	ret = gpio_request(EGPIO_MAGICIAN_EP_POWER, "EP_POWER");
-	if (ret)
-		goto err_request_ep;
-	ret = gpio_request(EGPIO_MAGICIAN_MIC_POWER, "MIC_POWER");
-	if (ret)
-		goto err_request_mic;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL0, "IN_SEL0");
-	if (ret)
-		goto err_request_in_sel0;
-	ret = gpio_request(EGPIO_MAGICIAN_IN_SEL1, "IN_SEL1");
-	if (ret)
-		goto err_request_in_sel1;
-
-	gpio_set_value(EGPIO_MAGICIAN_IN_SEL0, 0);
-
-	magician_snd_device = platform_device_alloc("soc-audio", -1);
-	if (!magician_snd_device) {
-		ret = -ENOMEM;
-		goto err_pdev;
-	}
-
-	platform_set_drvdata(magician_snd_device, &snd_soc_card_magician);
-	ret = platform_device_add(magician_snd_device);
-	if (ret) {
-		platform_device_put(magician_snd_device);
-		goto err_pdev;
-	}
-
-	return 0;
-
-err_pdev:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-err_request_in_sel1:
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-err_request_in_sel0:
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-err_request_mic:
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-err_request_ep:
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
-err_request_spk:
-	return ret;
-}
-
-static void __exit magician_exit(void)
+static int magician_audio_probe(struct platform_device *pdev)
 {
-	platform_device_unregister(magician_snd_device);
-
-	gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_EP_POWER, 0);
-	gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, 0);
-
-	gpio_free(EGPIO_MAGICIAN_IN_SEL1);
-	gpio_free(EGPIO_MAGICIAN_IN_SEL0);
-	gpio_free(EGPIO_MAGICIAN_MIC_POWER);
-	gpio_free(EGPIO_MAGICIAN_EP_POWER);
-	gpio_free(EGPIO_MAGICIAN_SPK_POWER);
+	struct device *dev = &pdev->dev;
+
+	gpiod_spk_power = devm_gpiod_get(dev, "SPK_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_spk_power))
+		return PTR_ERR(gpiod_spk_power);
+	gpiod_ep_power = devm_gpiod_get(dev, "EP_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_ep_power))
+		return PTR_ERR(gpiod_ep_power);
+	gpiod_mic_power = devm_gpiod_get(dev, "MIC_POWER", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_mic_power))
+		return PTR_ERR(gpiod_mic_power);
+	gpiod_in_sel0 = devm_gpiod_get(dev, "IN_SEL0", GPIOD_OUT_HIGH);
+	if (IS_ERR(gpiod_in_sel0))
+		return PTR_ERR(gpiod_in_sel0);
+	gpiod_in_sel1 = devm_gpiod_get(dev, "IN_SEL1", GPIOD_OUT_LOW);
+	if (IS_ERR(gpiod_in_sel1))
+		return PTR_ERR(gpiod_in_sel1);
+
+	snd_soc_card_magician.dev = &pdev->dev;
+	return devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_magician);
 }
 
-module_init(magician_init);
-module_exit(magician_exit);
+static struct platform_driver magician_audio_driver = {
+	.driver.name = "magician-audio",
+	.driver.pm = &snd_soc_pm_ops,
+	.probe = magician_audio_probe,
+};
+module_platform_driver(magician_audio_driver);
 
 MODULE_AUTHOR("Philipp Zabel");
 MODULE_DESCRIPTION("ALSA SoC Magician");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:magician-audio");
-- 
2.20.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-10-18 15:42 UTC|newest]

Thread overview: 424+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-18 15:40 [PATCH 00/46] ARM: pxa: towards multiplatform support Arnd Bergmann
2019-10-18 15:40 ` Arnd Bergmann
2019-10-18 15:40 ` Arnd Bergmann
2019-10-18 15:40 ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 01/46] ARM: pxa: split mach/generic.h Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 18:06   ` Robert Jarzmik
2019-10-28 18:06     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 02/46] ARM: pxa: make mainstone.h private Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 18:08   ` Robert Jarzmik
2019-10-28 18:08     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 03/46] ARM: pxa: make mach/regs-uart.h private Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 18:14   ` Robert Jarzmik
2019-10-28 18:14     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 04/46] ARM: pxa: remove mach/dma.h Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 18:15   ` Robert Jarzmik
2019-10-28 18:15     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 05/46] ARM: pxa: split up mach/hardware.h Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 18:37   ` Dmitry Torokhov
2019-10-18 18:37     ` Dmitry Torokhov
2019-10-18 18:37     ` Dmitry Torokhov
2019-10-18 18:37     ` [alsa-devel] " Dmitry Torokhov
2019-10-18 18:37     ` Dmitry Torokhov
2019-10-18 18:37     ` Dmitry Torokhov
2019-10-19 21:22   ` Alexandre Belloni
2019-10-19 21:22     ` Alexandre Belloni
2019-10-19 21:22     ` Alexandre Belloni
2019-10-19 21:22     ` [alsa-devel] " Alexandre Belloni
2019-10-19 21:22     ` Alexandre Belloni
2019-10-19 21:22     ` Alexandre Belloni
2019-10-21  2:27   ` Viresh Kumar
2019-10-21  2:39     ` Viresh Kumar
2019-10-21  2:27     ` Viresh Kumar
2019-10-21  2:27     ` Viresh Kumar
2019-10-21  2:27     ` [alsa-devel] " Viresh Kumar
2019-10-21  2:27     ` Viresh Kumar
2019-10-21  9:58   ` Ulf Hansson
2019-10-21  9:58     ` Ulf Hansson
2019-10-21  9:58     ` Ulf Hansson
2019-10-21  9:58     ` [alsa-devel] " Ulf Hansson
2019-10-21  9:58     ` Ulf Hansson
2019-10-21  9:58     ` Ulf Hansson
2019-10-22 16:36   ` Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-22 16:36     ` [alsa-devel] " Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-28  9:18   ` Stephen Boyd
2019-10-28  9:18     ` Stephen Boyd
2019-10-28  9:18     ` Stephen Boyd
2019-10-28  9:18     ` Stephen Boyd
2019-10-28  9:18     ` [alsa-devel] " Stephen Boyd
2019-10-28  9:18     ` Stephen Boyd
2019-10-28  9:18     ` Stephen Boyd
2019-10-28 19:14   ` Robert Jarzmik
2019-10-28 19:14     ` Robert Jarzmik
2019-10-28 19:14     ` Robert Jarzmik
2019-10-28 19:14     ` [alsa-devel] " Robert Jarzmik
2019-10-28 19:14     ` Robert Jarzmik
2019-10-28 19:14     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 06/46] ARM: pxa: stop using mach/bitfield.h Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 19:20   ` Robert Jarzmik
2019-10-28 19:20     ` Robert Jarzmik
2019-10-28 19:20     ` Robert Jarzmik
2019-11-08 14:39   ` Bartlomiej Zolnierkiewicz
2019-11-08 14:39     ` Bartlomiej Zolnierkiewicz
2019-11-08 14:39     ` Bartlomiej Zolnierkiewicz
2019-10-18 15:41 ` [PATCH 07/46] ARM: pxa: move mach/sound.h to linux/platform_data/ Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:36   ` Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-22 16:36     ` [alsa-devel] " Mark Brown
2019-10-28 19:21   ` Robert Jarzmik
2019-10-28 19:21     ` Robert Jarzmik
2019-10-28 19:21     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 08/46] ARM: pxa: move regs-lcd.h into driver Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 19:24   ` Robert Jarzmik
2019-10-28 19:24     ` Robert Jarzmik
2019-10-28 19:24     ` Robert Jarzmik
2019-11-08 14:40   ` Bartlomiej Zolnierkiewicz
2019-11-08 14:40     ` Bartlomiej Zolnierkiewicz
2019-11-08 14:40     ` Bartlomiej Zolnierkiewicz
2019-11-08 14:40     ` Bartlomiej Zolnierkiewicz
2019-10-18 15:41 ` [PATCH 09/46] watchdog: sa1100: use platform device registration Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-19 14:06   ` Guenter Roeck
2019-10-19 14:06     ` Guenter Roeck
2019-10-22  9:44     ` Arnd Bergmann
2019-10-22  9:44       ` Arnd Bergmann
2019-10-22 13:38       ` Guenter Roeck
2019-10-22 13:38         ` Guenter Roeck
2019-10-18 15:41 ` [PATCH 10/46] ARM: pxa: pxa2xx-ac97-lib: use IRQ resource Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-28 20:19   ` Robert Jarzmik
2019-10-28 20:19     ` Robert Jarzmik
2019-10-28 20:19     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 11/46] ARM: pxa: cmx270: use platform device for nand Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-19  9:44   ` Miquel Raynal
2019-10-19  9:44     ` Miquel Raynal
2019-10-19  9:44     ` Miquel Raynal
2019-10-22 10:00     ` Arnd Bergmann
2019-10-22 10:00       ` Arnd Bergmann
2019-10-22 10:00       ` Arnd Bergmann
2019-10-28 20:25   ` Robert Jarzmik
2019-10-28 20:25     ` Robert Jarzmik
2019-10-28 20:25     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 12/46] ARM: pxa: make addr-map.h header local Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 20:27   ` Robert Jarzmik
2019-10-28 20:27     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 13/46] ARM: pxa: move pcmcia board data into mach-pxa Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 14/46] ARM: pxa: use pdev resource for palmld mmio Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 20:34   ` Robert Jarzmik
2019-10-28 20:34     ` Robert Jarzmik
2019-11-08 14:40   ` Bartlomiej Zolnierkiewicz
2019-11-08 14:40     ` Bartlomiej Zolnierkiewicz
2019-10-18 15:41 ` [PATCH 15/46] ARM: pxa: maybe fix gpio lookup tables Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 20:48   ` Robert Jarzmik
2019-10-28 20:48     ` Robert Jarzmik
2019-11-04 15:45   ` Linus Walleij
2019-11-04 15:45     ` Linus Walleij
2019-10-18 15:41 ` [PATCH 16/46] ARM: pxa: tosa: use gpio descriptor for audio Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:36   ` Mark Brown
2019-10-22 16:36     ` Mark Brown
2019-10-22 16:36     ` [alsa-devel] " Mark Brown
2019-10-28 20:49   ` Robert Jarzmik
2019-10-28 20:49     ` Robert Jarzmik
2019-10-28 20:49     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 17/46] ARM: pxa: poodle: use platform data for poodle asoc driver Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:37   ` Mark Brown
2019-10-22 16:37     ` Mark Brown
2019-10-22 16:37     ` [alsa-devel] " Mark Brown
2019-10-28 20:53   ` Robert Jarzmik
2019-10-28 20:53     ` Robert Jarzmik
2019-10-28 20:53     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 18/46] ARM: pxa: corgi: use gpio descriptors for audio Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:37   ` Mark Brown
2019-10-22 16:37     ` Mark Brown
2019-10-22 16:37     ` [alsa-devel] " Mark Brown
2019-10-28 20:56   ` Robert Jarzmik
2019-10-28 20:56     ` Robert Jarzmik
2019-10-28 20:56     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 19/46] ARM: pxa: hx4700: " Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:37   ` Mark Brown
2019-10-22 16:37     ` Mark Brown
2019-10-22 16:37     ` [alsa-devel] " Mark Brown
2019-10-28 20:59   ` Robert Jarzmik
2019-10-28 20:59     ` Robert Jarzmik
2019-10-28 20:59     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 20/46] ARM: pxa: lubbock: pass udc irqs as resource Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 21:05   ` Robert Jarzmik
2019-10-28 21:05     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 21/46] ARM: pxa: spitz: use gpio descriptors for audio Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:38   ` Mark Brown
2019-10-22 16:38     ` Mark Brown
2019-10-22 16:38     ` [alsa-devel] " Mark Brown
2019-10-28 21:08   ` Robert Jarzmik
2019-10-28 21:08     ` Robert Jarzmik
2019-10-28 21:08     ` [alsa-devel] " Robert Jarzmik
2022-04-19 15:40     ` Arnd Bergmann
2022-04-19 15:40       ` Arnd Bergmann
2022-04-19 15:40       ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 22/46] ARM: pxa: eseries: use gpio lookup " Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:38   ` Mark Brown
2019-10-22 16:38     ` Mark Brown
2019-10-22 16:38     ` [alsa-devel] " Mark Brown
2019-10-28 21:13   ` Robert Jarzmik
2019-10-28 21:13     ` Robert Jarzmik
2019-10-28 21:13     ` [alsa-devel] " Robert Jarzmik
2019-11-05  9:21   ` Linus Walleij
2019-11-05  9:21     ` Linus Walleij
2019-11-05  9:21     ` [alsa-devel] " Linus Walleij
2019-10-18 15:41 ` [PATCH 23/46] ARM: pxa: z2: use gpio lookup for audio device Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:38   ` Mark Brown
2019-10-22 16:38     ` Mark Brown
2019-10-22 16:38     ` [alsa-devel] " Mark Brown
2019-10-28 21:17   ` Robert Jarzmik
2019-10-28 21:17     ` Robert Jarzmik
2019-10-28 21:17     ` [alsa-devel] " Robert Jarzmik
2019-11-05  9:22   ` Linus Walleij
2019-11-05  9:22     ` Linus Walleij
2019-11-05  9:22     ` [alsa-devel] " Linus Walleij
2019-10-18 15:41 ` Arnd Bergmann [this message]
2019-10-18 15:41   ` [PATCH 24/46] ARM: pxa: magician: use platform driver for audio Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:38   ` Mark Brown
2019-10-22 16:38     ` Mark Brown
2019-10-22 16:38     ` [alsa-devel] " Mark Brown
2019-10-28 21:19   ` Robert Jarzmik
2019-10-28 21:19     ` Robert Jarzmik
2019-10-28 21:19     ` [alsa-devel] " Robert Jarzmik
2019-11-05  9:22   ` Linus Walleij
2019-11-05  9:22     ` Linus Walleij
2019-11-05  9:22     ` [alsa-devel] " Linus Walleij
2019-10-18 15:41 ` [PATCH 25/46] ARM: pxa: mainstone-wm97xx: use gpio lookup table Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 18:39   ` Dmitry Torokhov
2019-10-18 18:39     ` Dmitry Torokhov
     [not found]     ` <CAK8P3a1Fc=ogknDRGJ3Sn8bZ8tsR_ebE8_bDtF_kZ4AZ5YG_+g@mail.gmail.com>
2019-10-18 19:37       ` Arnd Bergmann
2019-10-18 19:37         ` Arnd Bergmann
2019-10-18 20:39         ` Dmitry Torokhov
2019-10-18 20:39           ` Dmitry Torokhov
2019-10-28 21:24   ` Robert Jarzmik
2019-10-28 21:24     ` Robert Jarzmik
2019-11-05  9:25   ` Linus Walleij
2019-11-05  9:25     ` Linus Walleij
2019-10-18 15:41 ` [PATCH 26/46] ARM: pxa: zylonite: use gpio lookup instead mfp header Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 21:31   ` Robert Jarzmik
2019-10-28 21:31     ` Robert Jarzmik
2019-11-05  9:28   ` Linus Walleij
2019-11-05  9:28     ` Linus Walleij
2019-10-18 15:41 ` [PATCH 27/46] input: touchscreen: mainstone: fix pxa2xx+pxa3xx configuration Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 18:40   ` Dmitry Torokhov
2019-10-18 18:40     ` Dmitry Torokhov
2019-10-28 21:33   ` Robert Jarzmik
2019-10-28 21:33     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 28/46] input: touchscreen: mainstone: sync with zylonite driver Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 18:41   ` Dmitry Torokhov
2019-10-18 18:41     ` Dmitry Torokhov
2019-10-28 21:40   ` Robert Jarzmik
2019-10-28 21:40     ` Robert Jarzmik
2022-04-19 15:51     ` Arnd Bergmann
2022-04-19 15:51       ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 29/46] Input: touchscreen: use wrapper for pxa2xx ac97 registers Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-18 18:48   ` Dmitry Torokhov
2019-10-18 18:48     ` Dmitry Torokhov
2019-10-18 18:48     ` [alsa-devel] " Dmitry Torokhov
     [not found]     ` <CAK8P3a27==9TeS-RWEvrpnxh+6McqRF-xeb8WPj9pHOn+0zbOQ@mail.gmail.com>
2019-10-18 19:39       ` Fwd: " Arnd Bergmann
2019-10-18 19:39         ` Arnd Bergmann
2019-10-18 19:39         ` [alsa-devel] " Arnd Bergmann
2019-10-18 20:39         ` Dmitry Torokhov
2019-10-18 20:39           ` Dmitry Torokhov
2019-10-18 20:39           ` [alsa-devel] " Dmitry Torokhov
2019-10-30 20:33   ` Robert Jarzmik
2019-10-30 20:33     ` Robert Jarzmik
2019-10-30 20:33     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 30/46] SoC: pxa: use pdev resource for FIFO regs Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:39   ` Mark Brown
2019-10-22 16:39     ` Mark Brown
2019-10-22 16:39     ` [alsa-devel] " Mark Brown
2019-10-22 20:13     ` Arnd Bergmann
2019-10-22 20:13       ` Arnd Bergmann
2019-10-22 20:13       ` [alsa-devel] " Arnd Bergmann
2019-10-28 21:45   ` Robert Jarzmik
2019-10-28 21:45     ` Robert Jarzmik
2019-10-28 21:45     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 31/46] ASoC: pxa: ac97: use normal MMIO accessors Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-28 21:47   ` Robert Jarzmik
2019-10-28 21:47     ` Robert Jarzmik
2019-10-28 21:47     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 32/46] ASoC: pxa: i2s: " Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` [alsa-devel] " Arnd Bergmann
2019-10-22 16:39   ` Mark Brown
2019-10-22 16:39     ` Mark Brown
2019-10-22 16:39     ` [alsa-devel] " Mark Brown
2019-10-28 21:50   ` Robert Jarzmik
2019-10-28 21:50     ` Robert Jarzmik
2019-10-28 21:50     ` [alsa-devel] " Robert Jarzmik
2019-10-18 15:41 ` [PATCH 33/46] ARM: pxa: pcmcia: move smemc configuration back to arch Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28 21:57   ` Robert Jarzmik
2019-10-28 21:57     ` Robert Jarzmik
2022-04-19 15:55     ` Arnd Bergmann
2022-04-19 15:55       ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 34/46] ARM: pxa: remove get_clk_frequency_khz() Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-21  2:26   ` Viresh Kumar
2019-10-21  2:26     ` Viresh Kumar
2019-10-28 21:58   ` Robert Jarzmik
2019-10-28 21:58     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 35/46] cpufreq: pxa3: move clk register access to clk driver Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-21  2:26   ` Viresh Kumar
2019-10-21  2:26     ` Viresh Kumar
2019-10-28  9:23   ` Stephen Boyd
2019-10-30 20:42     ` Robert Jarzmik
2019-11-08 21:59       ` Stephen Boyd
2019-11-08 22:02       ` Stephen Boyd
2019-10-18 15:41 ` [PATCH 36/46] ARM: pxa: move smemc register access from clk to platform Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28  9:34   ` Stephen Boyd
2019-10-28  9:34     ` Stephen Boyd
2019-10-30 20:57   ` Robert Jarzmik
2019-10-30 20:57     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 37/46] ARM: pxa: move clk register definitions to driver Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-28  9:34   ` Stephen Boyd
2019-10-28  9:34     ` Stephen Boyd
2019-10-30 21:00     ` Robert Jarzmik
2019-10-30 21:00       ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 38/46] video: backlight: tosa: use gpio lookup table Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-30 21:10   ` Robert Jarzmik
2019-10-30 21:10     ` Robert Jarzmik
2019-10-30 21:10     ` Robert Jarzmik
2019-10-30 21:10     ` Robert Jarzmik
2019-10-30 21:10     ` Robert Jarzmik
2019-11-05 10:04   ` Linus Walleij
2019-11-05 10:04     ` Linus Walleij
2019-11-05 10:04     ` Linus Walleij
2019-11-05 10:04     ` Linus Walleij
2019-11-05 10:17     ` Daniel Thompson
2019-11-05 10:17       ` Daniel Thompson
2019-11-05 10:17       ` Daniel Thompson
2019-11-05 10:17       ` Daniel Thompson
2019-11-11  9:30   ` Lee Jones
2019-11-11  9:30     ` Lee Jones
2019-11-11  9:30     ` Lee Jones
2019-11-11  9:30     ` Lee Jones
2019-10-18 15:41 ` [PATCH 39/46] power: tosa: simplify probe function Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-19  9:07   ` Sebastian Reichel
2019-10-19  9:07     ` Sebastian Reichel
2019-10-30 21:12     ` Robert Jarzmik
2019-10-30 21:12       ` Robert Jarzmik
2019-10-30 21:21     ` Robert Jarzmik
2019-10-30 21:21       ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 40/46] ARM: pxa: tosa: use gpio lookup for battery Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-19  9:09   ` Sebastian Reichel
2019-10-19  9:09     ` Sebastian Reichel
2019-10-18 15:41 ` [PATCH 41/46] ARM: pxa: move it8152 PCI support into machine Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 42/46] ARM: pxa: remove unused mach/bitfield.h Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-30 21:33   ` Robert Jarzmik
2019-10-30 21:33     ` Robert Jarzmik
2019-10-18 15:41 ` [PATCH 43/46] ARM: pxa: pci-it8152: add platform checks Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-18 15:41 ` [PATCH 44/46] ARM: mmp: remove tavorevb board support Arnd Bergmann
2019-10-18 15:41   ` Arnd Bergmann
2019-10-19 14:20   ` Lubomir Rintel
2019-10-19 14:20     ` Lubomir Rintel
2019-10-19 19:34     ` Arnd Bergmann
2019-10-19 19:34       ` Arnd Bergmann
2019-10-18 15:42 ` [PATCH 45/46] ARM: mmp: rename pxa_register_device Arnd Bergmann
2019-10-18 15:42   ` Arnd Bergmann
2019-10-31  8:53   ` Lubomir Rintel
2019-10-31  8:53     ` Lubomir Rintel
2019-10-18 15:42 ` [PATCH 46/46] ARM: pxa: move plat-pxa to drivers/soc/ Arnd Bergmann
2019-10-18 15:42   ` Arnd Bergmann
2019-10-30 21:40   ` Robert Jarzmik
2019-10-30 21:40     ` Robert Jarzmik
2019-10-31  8:53   ` Lubomir Rintel
2019-10-31  8:53     ` Lubomir Rintel
2019-10-18 19:03 ` [PATCH 00/46] ARM: pxa: towards multiplatform support Robert Jarzmik
2019-10-18 19:03   ` Robert Jarzmik
2019-10-18 19:03   ` Robert Jarzmik
2019-10-18 19:03   ` Robert Jarzmik
     [not found]   ` <CAK8P3a1JDtHsOW=iaxEycbJ4TBkR9MHUyDMeJnwxCtb=tefnBQ@mail.gmail.com>
2019-10-18 19:32     ` Arnd Bergmann
2019-10-18 19:32       ` Arnd Bergmann
2019-10-18 19:32       ` Arnd Bergmann
2019-10-18 19:32       ` Arnd Bergmann
2019-10-19 10:35       ` Robert Jarzmik
2019-10-19 10:35         ` Robert Jarzmik
2019-10-19 10:35         ` Robert Jarzmik
2019-10-19 10:35         ` Robert Jarzmik
2019-10-19 10:35         ` Robert Jarzmik
2019-10-24 20:49         ` Robert Jarzmik
2019-10-24 20:49           ` Robert Jarzmik
2019-10-24 20:49           ` Robert Jarzmik
2019-10-24 20:49           ` Robert Jarzmik
2019-10-24 20:49           ` Robert Jarzmik
2019-10-25 10:50           ` Arnd Bergmann
2019-10-25 10:50             ` Arnd Bergmann
2019-10-25 10:50             ` Arnd Bergmann
2019-10-25 10:50             ` Arnd Bergmann
2019-10-19  1:02 ` Guenter Roeck
2019-10-19  1:02   ` Guenter Roeck
2019-10-19  1:02   ` Guenter Roeck
2019-10-19  1:02   ` Guenter Roeck
2019-10-19 10:08   ` Arnd Bergmann
2019-10-19 10:08     ` Arnd Bergmann
2019-10-19 10:08     ` Arnd Bergmann
2019-10-19 10:08     ` Arnd Bergmann
2019-10-19 10:09   ` Arnd Bergmann
2019-10-19 10:09     ` Arnd Bergmann
2019-10-19 10:09     ` Arnd Bergmann
2019-10-19 10:09     ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191018154201.1276638-24-arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=daniel@zonque.org \
    --cc=haojian.zhuang@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robert.jarzmik@free.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.