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>, Sebastian Reichel <sre@kernel.org>,
	linux-pm@vger.kernel.org
Subject: [PATCH 40/46] ARM: pxa: tosa: use gpio lookup for battery
Date: Fri, 18 Oct 2019 17:41:55 +0200	[thread overview]
Message-ID: <20191018154201.1276638-40-arnd@arndb.de> (raw)
In-Reply-To: <20191018154052.1276506-1-arnd@arndb.de>

The battery driver uses a lot of GPIO lines, hardcoded from a
machine header file.

Change it to use a gpiod lookup table instead.

Cc: Sebastian Reichel <sre@kernel.org>
Cc: linux-pm@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/mach-pxa/tosa.c            |  23 +++++
 drivers/power/supply/tosa_battery.c | 147 ++++++++++++++++------------
 2 files changed, 109 insertions(+), 61 deletions(-)

diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index 8329a2969b2b..ef3bbf6d158e 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -365,6 +365,28 @@ static struct pxaficp_platform_data tosa_ficp_platform_data = {
 	.shutdown		= tosa_irda_shutdown,
 };
 
+static struct gpiod_lookup_table tosa_battery_gpio_table = {
+	.dev_id = "wm97xx-battery",
+	.table = {
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_CHARGE_OFF - TOSA_TC6393XB_GPIO_BASE,    "main charge off", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_CHARGE_OFF_JC - TOSA_TC6393XB_GPIO_BASE, "jacket charge off", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT_SW_ON - TOSA_TC6393XB_GPIO_BASE,     "battery switch", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT0_V_ON - TOSA_TC6393XB_GPIO_BASE,     "main battery", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT1_V_ON - TOSA_TC6393XB_GPIO_BASE,     "jacket battery", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT1_TH_ON - TOSA_TC6393XB_GPIO_BASE,    "main battery temp", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT0_TH_ON - TOSA_TC6393XB_GPIO_BASE,    "jacket battery temp", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BU_CHRG_ON - TOSA_TC6393XB_GPIO_BASE,    "backup battery", GPIO_ACTIVE_HIGH ),
+
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT0_CRG,      "main battery full", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT1_CRG,      "jacket battery full", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT0_LOW,      "main battery low", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT1_LOW,      "jacket battery low", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_JACKET_DETECT, "jacket detect", GPIO_ACTIVE_HIGH ),
+		{ },
+	},
+};
+
+
 /*
  * Tosa AC IN
  */
@@ -946,6 +968,7 @@ static void __init tosa_init(void)
 	/* enable batt_fault */
 	PMCR = 0x01;
 
+	gpiod_add_lookup_table(&tosa_battery_gpio_table);
 	gpiod_add_lookup_table(&tosa_mci_gpio_table);
 	gpiod_add_lookup_table(&tosa_audio_gpio_table);
 	pxa_set_mci_info(&tosa_mci_platform_data);
diff --git a/drivers/power/supply/tosa_battery.c b/drivers/power/supply/tosa_battery.c
index b26b0eca33e1..d10320f348d0 100644
--- a/drivers/power/supply/tosa_battery.c
+++ b/drivers/power/supply/tosa_battery.c
@@ -15,11 +15,16 @@
 #include <linux/gpio.h>
 
 #include <asm/mach-types.h>
-#include <mach/tosa.h>
 
 static DEFINE_MUTEX(bat_lock); /* protects gpio pins */
 static struct work_struct bat_work;
 
+struct tosa_gpio {
+	const char *con;
+	enum gpiod_flags flags;
+	struct gpio_desc *desc;
+};
+
 struct tosa_bat {
 	int status;
 	struct power_supply *psy;
@@ -28,38 +33,42 @@ struct tosa_bat {
 	struct mutex work_lock; /* protects data */
 
 	bool (*is_present)(struct tosa_bat *bat);
-	int gpio_full;
-	int gpio_charge_off;
+	struct tosa_gpio gpio_full;
+	struct tosa_gpio gpio_charge_off;
 
 	int technology;
 
-	int gpio_bat;
+	struct tosa_gpio gpio_bat;
 	int adc_bat;
 	int adc_bat_divider;
 	int bat_max;
 	int bat_min;
 
-	int gpio_temp;
+	struct tosa_gpio gpio_temp;
 	int adc_temp;
 	int adc_temp_divider;
 };
 
 static struct tosa_bat tosa_bat_main;
 static struct tosa_bat tosa_bat_jacket;
+static struct tosa_gpio gpiod_jacket_det = { "jacket detect", GPIOD_IN };
+static struct tosa_gpio gpiod_battery_switch = { "battery switch", GPIOD_OUT_LOW };
+static struct tosa_gpio gpiod_main_battery_low = { "main battery low", GPIOD_IN };
+static struct tosa_gpio gpiod_jacket_battery_low = { "jacket battery low", GPIOD_IN };
 
 static unsigned long tosa_read_bat(struct tosa_bat *bat)
 {
 	unsigned long value = 0;
 
-	if (bat->gpio_bat < 0 || bat->adc_bat < 0)
+	if (!bat->gpio_bat.desc || bat->adc_bat < 0)
 		return 0;
 
 	mutex_lock(&bat_lock);
-	gpio_set_value(bat->gpio_bat, 1);
+	gpiod_set_value(bat->gpio_bat.desc, 1);
 	msleep(5);
 	value = wm97xx_read_aux_adc(dev_get_drvdata(bat->psy->dev.parent),
 			bat->adc_bat);
-	gpio_set_value(bat->gpio_bat, 0);
+	gpiod_set_value(bat->gpio_bat.desc, 0);
 	mutex_unlock(&bat_lock);
 
 	value = value * 1000000 / bat->adc_bat_divider;
@@ -71,15 +80,15 @@ static unsigned long tosa_read_temp(struct tosa_bat *bat)
 {
 	unsigned long value = 0;
 
-	if (bat->gpio_temp < 0 || bat->adc_temp < 0)
+	if (!bat->gpio_temp.desc || bat->adc_temp < 0)
 		return 0;
 
 	mutex_lock(&bat_lock);
-	gpio_set_value(bat->gpio_temp, 1);
+	gpiod_set_value(bat->gpio_temp.desc, 1);
 	msleep(5);
 	value = wm97xx_read_aux_adc(dev_get_drvdata(bat->psy->dev.parent),
 			bat->adc_temp);
-	gpio_set_value(bat->gpio_temp, 0);
+	gpiod_set_value(bat->gpio_temp.desc, 0);
 	mutex_unlock(&bat_lock);
 
 	value = value * 10000 / bat->adc_temp_divider;
@@ -136,7 +145,7 @@ static int tosa_bat_get_property(struct power_supply *psy,
 
 static bool tosa_jacket_bat_is_present(struct tosa_bat *bat)
 {
-	return gpio_get_value(TOSA_GPIO_JACKET_DETECT) == 0;
+	return gpiod_get_value(gpiod_jacket_det.desc) == 0;
 }
 
 static void tosa_bat_external_power_changed(struct power_supply *psy)
@@ -166,23 +175,23 @@ static void tosa_bat_update(struct tosa_bat *bat)
 		bat->full_chrg = -1;
 	} else if (power_supply_am_i_supplied(psy)) {
 		if (bat->status == POWER_SUPPLY_STATUS_DISCHARGING) {
-			gpio_set_value(bat->gpio_charge_off, 0);
+			gpiod_set_value(bat->gpio_charge_off.desc, 0);
 			mdelay(15);
 		}
 
-		if (gpio_get_value(bat->gpio_full)) {
+		if (gpiod_get_value(bat->gpio_full.desc)) {
 			if (old == POWER_SUPPLY_STATUS_CHARGING ||
 					bat->full_chrg == -1)
 				bat->full_chrg = tosa_read_bat(bat);
 
-			gpio_set_value(bat->gpio_charge_off, 1);
+			gpiod_set_value(bat->gpio_charge_off.desc, 1);
 			bat->status = POWER_SUPPLY_STATUS_FULL;
 		} else {
-			gpio_set_value(bat->gpio_charge_off, 0);
+			gpiod_set_value(bat->gpio_charge_off.desc, 0);
 			bat->status = POWER_SUPPLY_STATUS_CHARGING;
 		}
 	} else {
-		gpio_set_value(bat->gpio_charge_off, 1);
+		gpiod_set_value(bat->gpio_charge_off.desc, 1);
 		bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
 	}
 
@@ -251,18 +260,18 @@ static struct tosa_bat tosa_bat_main = {
 	.full_chrg = -1,
 	.psy = NULL,
 
-	.gpio_full = TOSA_GPIO_BAT0_CRG,
-	.gpio_charge_off = TOSA_GPIO_CHARGE_OFF,
+	.gpio_full = { "main battery full", GPIOD_IN },
+	.gpio_charge_off = { "main charge off" , GPIOD_OUT_HIGH },
 
 	.technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
 
-	.gpio_bat = TOSA_GPIO_BAT0_V_ON,
+	.gpio_bat = { "main battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID3,
 	.adc_bat_divider = 414,
 	.bat_max = 4310000,
 	.bat_min = 1551 * 1000000 / 414,
 
-	.gpio_temp = TOSA_GPIO_BAT1_TH_ON,
+	.gpio_temp = { "main battery temp", GPIOD_OUT_LOW },
 	.adc_temp = WM97XX_AUX_ID2,
 	.adc_temp_divider = 10000,
 };
@@ -273,18 +282,18 @@ static struct tosa_bat tosa_bat_jacket = {
 	.psy = NULL,
 
 	.is_present = tosa_jacket_bat_is_present,
-	.gpio_full = TOSA_GPIO_BAT1_CRG,
-	.gpio_charge_off = TOSA_GPIO_CHARGE_OFF_JC,
+	.gpio_full = { "jacket battery full", GPIOD_IN },
+	.gpio_charge_off = { "jacket charge off", GPIOD_OUT_HIGH },
 
 	.technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
 
-	.gpio_bat = TOSA_GPIO_BAT1_V_ON,
+	.gpio_bat = { "jacket battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID3,
 	.adc_bat_divider = 414,
 	.bat_max = 4310000,
 	.bat_min = 1551 * 1000000 / 414,
 
-	.gpio_temp = TOSA_GPIO_BAT0_TH_ON,
+	.gpio_temp = { "jacket battery temp", GPIOD_OUT_LOW },
 	.adc_temp = WM97XX_AUX_ID2,
 	.adc_temp_divider = 10000,
 };
@@ -294,36 +303,16 @@ static struct tosa_bat tosa_bat_bu = {
 	.full_chrg = -1,
 	.psy = NULL,
 
-	.gpio_full = -1,
-	.gpio_charge_off = -1,
-
 	.technology = POWER_SUPPLY_TECHNOLOGY_LiMn,
 
-	.gpio_bat = TOSA_GPIO_BU_CHRG_ON,
+	.gpio_bat = { "backup battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID4,
 	.adc_bat_divider = 1266,
 
-	.gpio_temp = -1,
 	.adc_temp = -1,
 	.adc_temp_divider = -1,
 };
 
-static struct gpio tosa_bat_gpios[] = {
-	{ TOSA_GPIO_CHARGE_OFF,	   GPIOF_OUT_INIT_HIGH, "main charge off" },
-	{ TOSA_GPIO_CHARGE_OFF_JC, GPIOF_OUT_INIT_HIGH, "jacket charge off" },
-	{ TOSA_GPIO_BAT_SW_ON,	   GPIOF_OUT_INIT_LOW,	"battery switch" },
-	{ TOSA_GPIO_BAT0_V_ON,	   GPIOF_OUT_INIT_LOW,	"main battery" },
-	{ TOSA_GPIO_BAT1_V_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery" },
-	{ TOSA_GPIO_BAT1_TH_ON,	   GPIOF_OUT_INIT_LOW,	"main battery temp" },
-	{ TOSA_GPIO_BAT0_TH_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery temp" },
-	{ TOSA_GPIO_BU_CHRG_ON,	   GPIOF_OUT_INIT_LOW,	"backup battery" },
-	{ TOSA_GPIO_BAT0_CRG,	   GPIOF_IN,		"main battery full" },
-	{ TOSA_GPIO_BAT1_CRG,	   GPIOF_IN,		"jacket battery full" },
-	{ TOSA_GPIO_BAT0_LOW,	   GPIOF_IN,		"main battery low" },
-	{ TOSA_GPIO_BAT1_LOW,	   GPIOF_IN,		"jacket battery low" },
-	{ TOSA_GPIO_JACKET_DETECT, GPIOF_IN,		"jacket detect" },
-};
-
 #ifdef CONFIG_PM
 static int tosa_bat_suspend(struct platform_device *dev, pm_message_t state)
 {
@@ -343,6 +332,21 @@ static int tosa_bat_resume(struct platform_device *dev)
 #define tosa_bat_resume NULL
 #endif
 
+static int tosa_bat_gpio_get(struct device *dev, struct tosa_gpio *gpio)
+{
+	int ret;
+
+	if (!gpio->con)
+		return 0;
+
+	gpio->desc = devm_gpiod_get(dev, gpio->con, gpio->flags);
+	ret = PTR_ERR_OR_ZERO(gpio->desc);
+	if (ret)
+		dev_warn(dev, "failed to get gpio \"%s\"\n", gpio->con);
+
+	return ret;
+}
+
 static int tosa_power_supply_register(struct device *dev,
 			struct tosa_bat *bat,
 			const struct power_supply_desc *desc)
@@ -350,6 +354,23 @@ static int tosa_power_supply_register(struct device *dev,
 	struct power_supply_config cfg = {
 		.drv_data = bat,
 	};
+	int ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_full);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_charge_off);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_bat);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_temp);
+	if (ret)
+		return ret;
 
 	mutex_init(&bat->work_lock);
 	bat->psy = power_supply_register(dev, desc, &cfg);
@@ -358,49 +379,55 @@ static int tosa_power_supply_register(struct device *dev,
 }
 
 
-static int tosa_bat_probe(struct platform_device *dev)
+static int tosa_bat_probe(struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
 	int ret;
 
 	if (!machine_is_tosa())
 		return -ENODEV;
 
-	ret = gpio_request_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
+	ret = tosa_bat_gpio_get(dev, &gpiod_jacket_det);
 	if (ret)
 		return ret;
 
+	/* these are not used anywhere, continue on failure */
+	tosa_bat_gpio_get(dev, &gpiod_battery_switch);
+	tosa_bat_gpio_get(dev, &gpiod_main_battery_low);
+	tosa_bat_gpio_get(dev, &gpiod_jacket_battery_low);
+
 	INIT_WORK(&bat_work, tosa_bat_work);
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_main,
+	ret = tosa_power_supply_register(dev, &tosa_bat_main,
 					 &tosa_bat_main_desc);
 	if (ret)
 		goto err_psy_reg_main;
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_jacket,
+	ret = tosa_power_supply_register(dev, &tosa_bat_jacket,
 					 &tosa_bat_jacket_desc);
 	if (ret)
 		goto err_psy_reg_jacket;
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_bu,
+	ret = tosa_power_supply_register(dev, &tosa_bat_bu,
 					 &tosa_bat_bu_desc);
 	if (ret)
 		goto err_psy_reg_bu;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG),
+	ret = request_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"main full", &tosa_bat_main);
 	if (ret)
 		goto err_req_main;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG),
+	ret = request_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"jacket full", &tosa_bat_jacket);
 	if (ret)
 		goto err_req_jacket;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT),
+	ret = request_irq(gpiod_to_irq(gpiod_jacket_det.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"jacket detect", &tosa_bat_jacket);
@@ -409,9 +436,9 @@ static int tosa_bat_probe(struct platform_device *dev)
 		return 0;
 	}
 
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc), &tosa_bat_jacket);
 err_req_jacket:
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
+	free_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc), &tosa_bat_main);
 err_req_main:
 	power_supply_unregister(tosa_bat_bu.psy);
 err_psy_reg_bu:
@@ -423,15 +450,14 @@ static int tosa_bat_probe(struct platform_device *dev)
 	/* see comment in tosa_bat_remove */
 	cancel_work_sync(&bat_work);
 
-	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
 	return ret;
 }
 
 static int tosa_bat_remove(struct platform_device *dev)
 {
-	free_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), &tosa_bat_jacket);
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
+	free_irq(gpiod_to_irq(gpiod_jacket_det.desc), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc), &tosa_bat_main);
 
 	power_supply_unregister(tosa_bat_bu.psy);
 	power_supply_unregister(tosa_bat_jacket.psy);
@@ -443,7 +469,6 @@ static int tosa_bat_remove(struct platform_device *dev)
 	 * unregistered now.
 	 */
 	cancel_work_sync(&bat_work);
-	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
 	return 0;
 }
 
-- 
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: Arnd Bergmann <arnd@arndb.de>,
	linux-pm@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-kernel@vger.kernel.org, Sebastian Reichel <sre@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 40/46] ARM: pxa: tosa: use gpio lookup for battery
Date: Fri, 18 Oct 2019 17:41:55 +0200	[thread overview]
Message-ID: <20191018154201.1276638-40-arnd@arndb.de> (raw)
In-Reply-To: <20191018154052.1276506-1-arnd@arndb.de>

The battery driver uses a lot of GPIO lines, hardcoded from a
machine header file.

Change it to use a gpiod lookup table instead.

Cc: Sebastian Reichel <sre@kernel.org>
Cc: linux-pm@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm/mach-pxa/tosa.c            |  23 +++++
 drivers/power/supply/tosa_battery.c | 147 ++++++++++++++++------------
 2 files changed, 109 insertions(+), 61 deletions(-)

diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index 8329a2969b2b..ef3bbf6d158e 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -365,6 +365,28 @@ static struct pxaficp_platform_data tosa_ficp_platform_data = {
 	.shutdown		= tosa_irda_shutdown,
 };
 
+static struct gpiod_lookup_table tosa_battery_gpio_table = {
+	.dev_id = "wm97xx-battery",
+	.table = {
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_CHARGE_OFF - TOSA_TC6393XB_GPIO_BASE,    "main charge off", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_CHARGE_OFF_JC - TOSA_TC6393XB_GPIO_BASE, "jacket charge off", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT_SW_ON - TOSA_TC6393XB_GPIO_BASE,     "battery switch", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT0_V_ON - TOSA_TC6393XB_GPIO_BASE,     "main battery", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT1_V_ON - TOSA_TC6393XB_GPIO_BASE,     "jacket battery", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT1_TH_ON - TOSA_TC6393XB_GPIO_BASE,    "main battery temp", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT0_TH_ON - TOSA_TC6393XB_GPIO_BASE,    "jacket battery temp", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BU_CHRG_ON - TOSA_TC6393XB_GPIO_BASE,    "backup battery", GPIO_ACTIVE_HIGH ),
+
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT0_CRG,      "main battery full", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT1_CRG,      "jacket battery full", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT0_LOW,      "main battery low", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_BAT1_LOW,      "jacket battery low", GPIO_ACTIVE_HIGH ),
+		GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_JACKET_DETECT, "jacket detect", GPIO_ACTIVE_HIGH ),
+		{ },
+	},
+};
+
+
 /*
  * Tosa AC IN
  */
@@ -946,6 +968,7 @@ static void __init tosa_init(void)
 	/* enable batt_fault */
 	PMCR = 0x01;
 
+	gpiod_add_lookup_table(&tosa_battery_gpio_table);
 	gpiod_add_lookup_table(&tosa_mci_gpio_table);
 	gpiod_add_lookup_table(&tosa_audio_gpio_table);
 	pxa_set_mci_info(&tosa_mci_platform_data);
diff --git a/drivers/power/supply/tosa_battery.c b/drivers/power/supply/tosa_battery.c
index b26b0eca33e1..d10320f348d0 100644
--- a/drivers/power/supply/tosa_battery.c
+++ b/drivers/power/supply/tosa_battery.c
@@ -15,11 +15,16 @@
 #include <linux/gpio.h>
 
 #include <asm/mach-types.h>
-#include <mach/tosa.h>
 
 static DEFINE_MUTEX(bat_lock); /* protects gpio pins */
 static struct work_struct bat_work;
 
+struct tosa_gpio {
+	const char *con;
+	enum gpiod_flags flags;
+	struct gpio_desc *desc;
+};
+
 struct tosa_bat {
 	int status;
 	struct power_supply *psy;
@@ -28,38 +33,42 @@ struct tosa_bat {
 	struct mutex work_lock; /* protects data */
 
 	bool (*is_present)(struct tosa_bat *bat);
-	int gpio_full;
-	int gpio_charge_off;
+	struct tosa_gpio gpio_full;
+	struct tosa_gpio gpio_charge_off;
 
 	int technology;
 
-	int gpio_bat;
+	struct tosa_gpio gpio_bat;
 	int adc_bat;
 	int adc_bat_divider;
 	int bat_max;
 	int bat_min;
 
-	int gpio_temp;
+	struct tosa_gpio gpio_temp;
 	int adc_temp;
 	int adc_temp_divider;
 };
 
 static struct tosa_bat tosa_bat_main;
 static struct tosa_bat tosa_bat_jacket;
+static struct tosa_gpio gpiod_jacket_det = { "jacket detect", GPIOD_IN };
+static struct tosa_gpio gpiod_battery_switch = { "battery switch", GPIOD_OUT_LOW };
+static struct tosa_gpio gpiod_main_battery_low = { "main battery low", GPIOD_IN };
+static struct tosa_gpio gpiod_jacket_battery_low = { "jacket battery low", GPIOD_IN };
 
 static unsigned long tosa_read_bat(struct tosa_bat *bat)
 {
 	unsigned long value = 0;
 
-	if (bat->gpio_bat < 0 || bat->adc_bat < 0)
+	if (!bat->gpio_bat.desc || bat->adc_bat < 0)
 		return 0;
 
 	mutex_lock(&bat_lock);
-	gpio_set_value(bat->gpio_bat, 1);
+	gpiod_set_value(bat->gpio_bat.desc, 1);
 	msleep(5);
 	value = wm97xx_read_aux_adc(dev_get_drvdata(bat->psy->dev.parent),
 			bat->adc_bat);
-	gpio_set_value(bat->gpio_bat, 0);
+	gpiod_set_value(bat->gpio_bat.desc, 0);
 	mutex_unlock(&bat_lock);
 
 	value = value * 1000000 / bat->adc_bat_divider;
@@ -71,15 +80,15 @@ static unsigned long tosa_read_temp(struct tosa_bat *bat)
 {
 	unsigned long value = 0;
 
-	if (bat->gpio_temp < 0 || bat->adc_temp < 0)
+	if (!bat->gpio_temp.desc || bat->adc_temp < 0)
 		return 0;
 
 	mutex_lock(&bat_lock);
-	gpio_set_value(bat->gpio_temp, 1);
+	gpiod_set_value(bat->gpio_temp.desc, 1);
 	msleep(5);
 	value = wm97xx_read_aux_adc(dev_get_drvdata(bat->psy->dev.parent),
 			bat->adc_temp);
-	gpio_set_value(bat->gpio_temp, 0);
+	gpiod_set_value(bat->gpio_temp.desc, 0);
 	mutex_unlock(&bat_lock);
 
 	value = value * 10000 / bat->adc_temp_divider;
@@ -136,7 +145,7 @@ static int tosa_bat_get_property(struct power_supply *psy,
 
 static bool tosa_jacket_bat_is_present(struct tosa_bat *bat)
 {
-	return gpio_get_value(TOSA_GPIO_JACKET_DETECT) == 0;
+	return gpiod_get_value(gpiod_jacket_det.desc) == 0;
 }
 
 static void tosa_bat_external_power_changed(struct power_supply *psy)
@@ -166,23 +175,23 @@ static void tosa_bat_update(struct tosa_bat *bat)
 		bat->full_chrg = -1;
 	} else if (power_supply_am_i_supplied(psy)) {
 		if (bat->status == POWER_SUPPLY_STATUS_DISCHARGING) {
-			gpio_set_value(bat->gpio_charge_off, 0);
+			gpiod_set_value(bat->gpio_charge_off.desc, 0);
 			mdelay(15);
 		}
 
-		if (gpio_get_value(bat->gpio_full)) {
+		if (gpiod_get_value(bat->gpio_full.desc)) {
 			if (old == POWER_SUPPLY_STATUS_CHARGING ||
 					bat->full_chrg == -1)
 				bat->full_chrg = tosa_read_bat(bat);
 
-			gpio_set_value(bat->gpio_charge_off, 1);
+			gpiod_set_value(bat->gpio_charge_off.desc, 1);
 			bat->status = POWER_SUPPLY_STATUS_FULL;
 		} else {
-			gpio_set_value(bat->gpio_charge_off, 0);
+			gpiod_set_value(bat->gpio_charge_off.desc, 0);
 			bat->status = POWER_SUPPLY_STATUS_CHARGING;
 		}
 	} else {
-		gpio_set_value(bat->gpio_charge_off, 1);
+		gpiod_set_value(bat->gpio_charge_off.desc, 1);
 		bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
 	}
 
@@ -251,18 +260,18 @@ static struct tosa_bat tosa_bat_main = {
 	.full_chrg = -1,
 	.psy = NULL,
 
-	.gpio_full = TOSA_GPIO_BAT0_CRG,
-	.gpio_charge_off = TOSA_GPIO_CHARGE_OFF,
+	.gpio_full = { "main battery full", GPIOD_IN },
+	.gpio_charge_off = { "main charge off" , GPIOD_OUT_HIGH },
 
 	.technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
 
-	.gpio_bat = TOSA_GPIO_BAT0_V_ON,
+	.gpio_bat = { "main battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID3,
 	.adc_bat_divider = 414,
 	.bat_max = 4310000,
 	.bat_min = 1551 * 1000000 / 414,
 
-	.gpio_temp = TOSA_GPIO_BAT1_TH_ON,
+	.gpio_temp = { "main battery temp", GPIOD_OUT_LOW },
 	.adc_temp = WM97XX_AUX_ID2,
 	.adc_temp_divider = 10000,
 };
@@ -273,18 +282,18 @@ static struct tosa_bat tosa_bat_jacket = {
 	.psy = NULL,
 
 	.is_present = tosa_jacket_bat_is_present,
-	.gpio_full = TOSA_GPIO_BAT1_CRG,
-	.gpio_charge_off = TOSA_GPIO_CHARGE_OFF_JC,
+	.gpio_full = { "jacket battery full", GPIOD_IN },
+	.gpio_charge_off = { "jacket charge off", GPIOD_OUT_HIGH },
 
 	.technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
 
-	.gpio_bat = TOSA_GPIO_BAT1_V_ON,
+	.gpio_bat = { "jacket battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID3,
 	.adc_bat_divider = 414,
 	.bat_max = 4310000,
 	.bat_min = 1551 * 1000000 / 414,
 
-	.gpio_temp = TOSA_GPIO_BAT0_TH_ON,
+	.gpio_temp = { "jacket battery temp", GPIOD_OUT_LOW },
 	.adc_temp = WM97XX_AUX_ID2,
 	.adc_temp_divider = 10000,
 };
@@ -294,36 +303,16 @@ static struct tosa_bat tosa_bat_bu = {
 	.full_chrg = -1,
 	.psy = NULL,
 
-	.gpio_full = -1,
-	.gpio_charge_off = -1,
-
 	.technology = POWER_SUPPLY_TECHNOLOGY_LiMn,
 
-	.gpio_bat = TOSA_GPIO_BU_CHRG_ON,
+	.gpio_bat = { "backup battery", GPIOD_OUT_LOW },
 	.adc_bat = WM97XX_AUX_ID4,
 	.adc_bat_divider = 1266,
 
-	.gpio_temp = -1,
 	.adc_temp = -1,
 	.adc_temp_divider = -1,
 };
 
-static struct gpio tosa_bat_gpios[] = {
-	{ TOSA_GPIO_CHARGE_OFF,	   GPIOF_OUT_INIT_HIGH, "main charge off" },
-	{ TOSA_GPIO_CHARGE_OFF_JC, GPIOF_OUT_INIT_HIGH, "jacket charge off" },
-	{ TOSA_GPIO_BAT_SW_ON,	   GPIOF_OUT_INIT_LOW,	"battery switch" },
-	{ TOSA_GPIO_BAT0_V_ON,	   GPIOF_OUT_INIT_LOW,	"main battery" },
-	{ TOSA_GPIO_BAT1_V_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery" },
-	{ TOSA_GPIO_BAT1_TH_ON,	   GPIOF_OUT_INIT_LOW,	"main battery temp" },
-	{ TOSA_GPIO_BAT0_TH_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery temp" },
-	{ TOSA_GPIO_BU_CHRG_ON,	   GPIOF_OUT_INIT_LOW,	"backup battery" },
-	{ TOSA_GPIO_BAT0_CRG,	   GPIOF_IN,		"main battery full" },
-	{ TOSA_GPIO_BAT1_CRG,	   GPIOF_IN,		"jacket battery full" },
-	{ TOSA_GPIO_BAT0_LOW,	   GPIOF_IN,		"main battery low" },
-	{ TOSA_GPIO_BAT1_LOW,	   GPIOF_IN,		"jacket battery low" },
-	{ TOSA_GPIO_JACKET_DETECT, GPIOF_IN,		"jacket detect" },
-};
-
 #ifdef CONFIG_PM
 static int tosa_bat_suspend(struct platform_device *dev, pm_message_t state)
 {
@@ -343,6 +332,21 @@ static int tosa_bat_resume(struct platform_device *dev)
 #define tosa_bat_resume NULL
 #endif
 
+static int tosa_bat_gpio_get(struct device *dev, struct tosa_gpio *gpio)
+{
+	int ret;
+
+	if (!gpio->con)
+		return 0;
+
+	gpio->desc = devm_gpiod_get(dev, gpio->con, gpio->flags);
+	ret = PTR_ERR_OR_ZERO(gpio->desc);
+	if (ret)
+		dev_warn(dev, "failed to get gpio \"%s\"\n", gpio->con);
+
+	return ret;
+}
+
 static int tosa_power_supply_register(struct device *dev,
 			struct tosa_bat *bat,
 			const struct power_supply_desc *desc)
@@ -350,6 +354,23 @@ static int tosa_power_supply_register(struct device *dev,
 	struct power_supply_config cfg = {
 		.drv_data = bat,
 	};
+	int ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_full);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_charge_off);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_bat);
+	if (ret)
+		return ret;
+
+	ret = tosa_bat_gpio_get(dev, &bat->gpio_temp);
+	if (ret)
+		return ret;
 
 	mutex_init(&bat->work_lock);
 	bat->psy = power_supply_register(dev, desc, &cfg);
@@ -358,49 +379,55 @@ static int tosa_power_supply_register(struct device *dev,
 }
 
 
-static int tosa_bat_probe(struct platform_device *dev)
+static int tosa_bat_probe(struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
 	int ret;
 
 	if (!machine_is_tosa())
 		return -ENODEV;
 
-	ret = gpio_request_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
+	ret = tosa_bat_gpio_get(dev, &gpiod_jacket_det);
 	if (ret)
 		return ret;
 
+	/* these are not used anywhere, continue on failure */
+	tosa_bat_gpio_get(dev, &gpiod_battery_switch);
+	tosa_bat_gpio_get(dev, &gpiod_main_battery_low);
+	tosa_bat_gpio_get(dev, &gpiod_jacket_battery_low);
+
 	INIT_WORK(&bat_work, tosa_bat_work);
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_main,
+	ret = tosa_power_supply_register(dev, &tosa_bat_main,
 					 &tosa_bat_main_desc);
 	if (ret)
 		goto err_psy_reg_main;
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_jacket,
+	ret = tosa_power_supply_register(dev, &tosa_bat_jacket,
 					 &tosa_bat_jacket_desc);
 	if (ret)
 		goto err_psy_reg_jacket;
 
-	ret = tosa_power_supply_register(&dev->dev, &tosa_bat_bu,
+	ret = tosa_power_supply_register(dev, &tosa_bat_bu,
 					 &tosa_bat_bu_desc);
 	if (ret)
 		goto err_psy_reg_bu;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG),
+	ret = request_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"main full", &tosa_bat_main);
 	if (ret)
 		goto err_req_main;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG),
+	ret = request_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"jacket full", &tosa_bat_jacket);
 	if (ret)
 		goto err_req_jacket;
 
-	ret = request_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT),
+	ret = request_irq(gpiod_to_irq(gpiod_jacket_det.desc),
 				tosa_bat_gpio_isr,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
 				"jacket detect", &tosa_bat_jacket);
@@ -409,9 +436,9 @@ static int tosa_bat_probe(struct platform_device *dev)
 		return 0;
 	}
 
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc), &tosa_bat_jacket);
 err_req_jacket:
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
+	free_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc), &tosa_bat_main);
 err_req_main:
 	power_supply_unregister(tosa_bat_bu.psy);
 err_psy_reg_bu:
@@ -423,15 +450,14 @@ static int tosa_bat_probe(struct platform_device *dev)
 	/* see comment in tosa_bat_remove */
 	cancel_work_sync(&bat_work);
 
-	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
 	return ret;
 }
 
 static int tosa_bat_remove(struct platform_device *dev)
 {
-	free_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), &tosa_bat_jacket);
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
-	free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
+	free_irq(gpiod_to_irq(gpiod_jacket_det.desc), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_jacket.gpio_full.desc), &tosa_bat_jacket);
+	free_irq(gpiod_to_irq(tosa_bat_main.gpio_full.desc), &tosa_bat_main);
 
 	power_supply_unregister(tosa_bat_bu.psy);
 	power_supply_unregister(tosa_bat_jacket.psy);
@@ -443,7 +469,6 @@ static int tosa_bat_remove(struct platform_device *dev)
 	 * unregistered now.
 	 */
 	cancel_work_sync(&bat_work);
-	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
 	return 0;
 }
 
-- 
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:44 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 ` [PATCH 24/46] ARM: pxa: magician: use platform driver 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: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 ` Arnd Bergmann [this message]
2019-10-18 15:41   ` [PATCH 40/46] ARM: pxa: tosa: use gpio lookup for battery 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-40-arnd@arndb.de \
    --to=arnd@arndb.de \
    --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=linux-pm@vger.kernel.org \
    --cc=robert.jarzmik@free.fr \
    --cc=sre@kernel.org \
    /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.