* [PATCH v5 0/7] gpio: exar: refactor the driver
@ 2020-11-16 10:42 Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 1/7] gpio: exar: add a newline after the copyright notice Bartosz Golaszewski
` (7 more replies)
0 siblings, 8 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
I just wanted to convert the driver to using simpler IDA API but ended up
quickly converting it to using regmap. Unfortunately I don't have the HW
to test it so marking the patches that introduce functional change as RFT
and Cc'ing the original author.
v1 -> v2:
- add new regmap helper: regmap_assign_bits()
- fix lvl vs sel register access
- set value in direction_output callback
v2 -> v3:
- drop the regmap helper from series
v3 -> v4:
- renamed the regmap variable to 'regmap' as leaving the old name caused me
to miss an assignment leading to a crash (culprit spotted by Andy Shevchenko)
v4 -> v5:
- set the reg_bits to 11 in regmap config
- collect review tags from Andy
Bartosz Golaszewski (7):
gpio: exar: add a newline after the copyright notice
gpio: exar: include idr.h
gpio: exar: switch to a simpler IDA interface
gpio: exar: use a helper variable for &pdev->dev
gpio: exar: unduplicate address and offset computation
gpio: exar: switch to using regmap
gpio: exar: use devm action for freeing the IDA and drop remove()
drivers/gpio/Kconfig | 1 +
drivers/gpio/gpio-exar.c | 160 ++++++++++++++++++++-------------------
2 files changed, 82 insertions(+), 79 deletions(-)
--
2.29.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v5 1/7] gpio: exar: add a newline after the copyright notice
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 2/7] gpio: exar: include idr.h Bartosz Golaszewski
` (6 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
It's customary to have a newline between the copyright header and the
includes. Add one to gpio-exar.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index b1accfba017d..4202dd363a11 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -4,6 +4,7 @@
*
* Copyright (C) 2015 Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
*/
+
#include <linux/bitops.h>
#include <linux/device.h>
#include <linux/gpio/driver.h>
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 2/7] gpio: exar: include idr.h
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 1/7] gpio: exar: add a newline after the copyright notice Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 3/7] gpio: exar: switch to a simpler IDA interface Bartosz Golaszewski
` (5 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This driver uses IDA APIs but doesn't include the relevant header. This
fixes it.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index 4202dd363a11..1941ae533418 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -8,6 +8,7 @@
#include <linux/bitops.h>
#include <linux/device.h>
#include <linux/gpio/driver.h>
+#include <linux/idr.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 3/7] gpio: exar: switch to a simpler IDA interface
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 1/7] gpio: exar: add a newline after the copyright notice Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 2/7] gpio: exar: include idr.h Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 4/7] gpio: exar: use a helper variable for &pdev->dev Bartosz Golaszewski
` (4 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
We don't need to specify any ranges when allocating IDs so we can switch
to ida_alloc() and ida_free() instead of the ida_simple_ counterparts.
ida_simple_get(ida, 0, 0, gfp) is equivalent to
ida_alloc_range(ida, 0, UINT_MAX, gfp) which is equivalent to
ida_alloc(ida, gfp). Note: IDR will never actually allocate an ID
larger than INT_MAX.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index 1941ae533418..752e8437ff80 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -149,7 +149,7 @@ static int gpio_exar_probe(struct platform_device *pdev)
mutex_init(&exar_gpio->lock);
- index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL);
+ index = ida_alloc(&ida_index, GFP_KERNEL);
if (index < 0) {
ret = index;
goto err_mutex_destroy;
@@ -179,7 +179,7 @@ static int gpio_exar_probe(struct platform_device *pdev)
return 0;
err_destroy:
- ida_simple_remove(&ida_index, index);
+ ida_free(&ida_index, index);
err_mutex_destroy:
mutex_destroy(&exar_gpio->lock);
return ret;
@@ -189,7 +189,7 @@ static int gpio_exar_remove(struct platform_device *pdev)
{
struct exar_gpio_chip *exar_gpio = platform_get_drvdata(pdev);
- ida_simple_remove(&ida_index, exar_gpio->index);
+ ida_free(&ida_index, exar_gpio->index);
mutex_destroy(&exar_gpio->lock);
return 0;
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 4/7] gpio: exar: use a helper variable for &pdev->dev
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
` (2 preceding siblings ...)
2020-11-16 10:42 ` [PATCH v5 3/7] gpio: exar: switch to a simpler IDA interface Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 5/7] gpio: exar: unduplicate address and offset computation Bartosz Golaszewski
` (3 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
It's more elegant to use a helper local variable to store the address
of the underlying struct device than to dereference pdev everywhere. It
also has the benefit of avoiding unnecessary line breaks.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index 752e8437ff80..db366d85b6b4 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -120,7 +120,8 @@ static int exar_direction_input(struct gpio_chip *chip, unsigned int offset)
static int gpio_exar_probe(struct platform_device *pdev)
{
- struct pci_dev *pcidev = to_pci_dev(pdev->dev.parent);
+ struct device *dev = &pdev->dev;
+ struct pci_dev *pcidev = to_pci_dev(dev->parent);
struct exar_gpio_chip *exar_gpio;
u32 first_pin, ngpios;
void __iomem *p;
@@ -134,16 +135,15 @@ static int gpio_exar_probe(struct platform_device *pdev)
if (!p)
return -ENOMEM;
- ret = device_property_read_u32(&pdev->dev, "exar,first-pin",
- &first_pin);
+ ret = device_property_read_u32(dev, "exar,first-pin", &first_pin);
if (ret)
return ret;
- ret = device_property_read_u32(&pdev->dev, "ngpios", &ngpios);
+ ret = device_property_read_u32(dev, "ngpios", &ngpios);
if (ret)
return ret;
- exar_gpio = devm_kzalloc(&pdev->dev, sizeof(*exar_gpio), GFP_KERNEL);
+ exar_gpio = devm_kzalloc(dev, sizeof(*exar_gpio), GFP_KERNEL);
if (!exar_gpio)
return -ENOMEM;
@@ -157,7 +157,7 @@ static int gpio_exar_probe(struct platform_device *pdev)
sprintf(exar_gpio->name, "exar_gpio%d", index);
exar_gpio->gpio_chip.label = exar_gpio->name;
- exar_gpio->gpio_chip.parent = &pdev->dev;
+ exar_gpio->gpio_chip.parent = dev;
exar_gpio->gpio_chip.direction_output = exar_direction_output;
exar_gpio->gpio_chip.direction_input = exar_direction_input;
exar_gpio->gpio_chip.get_direction = exar_get_direction;
@@ -169,8 +169,7 @@ static int gpio_exar_probe(struct platform_device *pdev)
exar_gpio->index = index;
exar_gpio->first_pin = first_pin;
- ret = devm_gpiochip_add_data(&pdev->dev,
- &exar_gpio->gpio_chip, exar_gpio);
+ ret = devm_gpiochip_add_data(dev, &exar_gpio->gpio_chip, exar_gpio);
if (ret)
goto err_destroy;
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 5/7] gpio: exar: unduplicate address and offset computation
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
` (3 preceding siblings ...)
2020-11-16 10:42 ` [PATCH v5 4/7] gpio: exar: use a helper variable for &pdev->dev Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 6/7] gpio: exar: switch to using regmap Bartosz Golaszewski
` (2 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Provide and use helpers for calculating the register address and bit
offset instead of hand coding it in every function.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 40 ++++++++++++++++++++++++++++------------
1 file changed, 28 insertions(+), 12 deletions(-)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index db366d85b6b4..28b0b4b5fa35 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -33,6 +33,26 @@ struct exar_gpio_chip {
unsigned int first_pin;
};
+static unsigned int
+exar_offset_to_sel_addr(struct exar_gpio_chip *exar_gpio, unsigned int offset)
+{
+ return (offset + exar_gpio->first_pin) / 8 ? EXAR_OFFSET_MPIOSEL_HI
+ : EXAR_OFFSET_MPIOSEL_LO;
+}
+
+static unsigned int
+exar_offset_to_lvl_addr(struct exar_gpio_chip *exar_gpio, unsigned int offset)
+{
+ return (offset + exar_gpio->first_pin) / 8 ? EXAR_OFFSET_MPIOLVL_HI
+ : EXAR_OFFSET_MPIOLVL_LO;
+}
+
+static unsigned int
+exar_offset_to_bit(struct exar_gpio_chip *exar_gpio, unsigned int offset)
+{
+ return (offset + exar_gpio->first_pin) % 8;
+}
+
static void exar_update(struct gpio_chip *chip, unsigned int reg, int val,
unsigned int offset)
{
@@ -52,9 +72,8 @@ static int exar_set_direction(struct gpio_chip *chip, int direction,
unsigned int offset)
{
struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- unsigned int addr = (offset + exar_gpio->first_pin) / 8 ?
- EXAR_OFFSET_MPIOSEL_HI : EXAR_OFFSET_MPIOSEL_LO;
- unsigned int bit = (offset + exar_gpio->first_pin) % 8;
+ unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
exar_update(chip, addr, direction, bit);
return 0;
@@ -75,9 +94,8 @@ static int exar_get(struct gpio_chip *chip, unsigned int reg)
static int exar_get_direction(struct gpio_chip *chip, unsigned int offset)
{
struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- unsigned int addr = (offset + exar_gpio->first_pin) / 8 ?
- EXAR_OFFSET_MPIOSEL_HI : EXAR_OFFSET_MPIOSEL_LO;
- unsigned int bit = (offset + exar_gpio->first_pin) % 8;
+ unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
if (exar_get(chip, addr) & BIT(bit))
return GPIO_LINE_DIRECTION_IN;
@@ -88,9 +106,8 @@ static int exar_get_direction(struct gpio_chip *chip, unsigned int offset)
static int exar_get_value(struct gpio_chip *chip, unsigned int offset)
{
struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- unsigned int addr = (offset + exar_gpio->first_pin) / 8 ?
- EXAR_OFFSET_MPIOLVL_HI : EXAR_OFFSET_MPIOLVL_LO;
- unsigned int bit = (offset + exar_gpio->first_pin) % 8;
+ unsigned int addr = exar_offset_to_lvl_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
return !!(exar_get(chip, addr) & BIT(bit));
}
@@ -99,9 +116,8 @@ static void exar_set_value(struct gpio_chip *chip, unsigned int offset,
int value)
{
struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- unsigned int addr = (offset + exar_gpio->first_pin) / 8 ?
- EXAR_OFFSET_MPIOLVL_HI : EXAR_OFFSET_MPIOLVL_LO;
- unsigned int bit = (offset + exar_gpio->first_pin) % 8;
+ unsigned int addr = exar_offset_to_lvl_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
exar_update(chip, addr, value, bit);
}
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 6/7] gpio: exar: switch to using regmap
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
` (4 preceding siblings ...)
2020-11-16 10:42 ` [PATCH v5 5/7] gpio: exar: unduplicate address and offset computation Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 7/7] gpio: exar: use devm action for freeing the IDA and drop remove() Bartosz Golaszewski
2020-11-23 11:38 ` [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
We can simplify the code in gpio-exar by using regmap. This allows us to
drop the mutex (regmap provides its own locking) and we can also reuse
regmap's bit operations instead of implementing our own update function.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/Kconfig | 1 +
drivers/gpio/gpio-exar.c | 96 ++++++++++++++++++----------------------
2 files changed, 43 insertions(+), 54 deletions(-)
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 5d4de5cd6759..253a61ec9645 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -255,6 +255,7 @@ config GPIO_EP93XX
config GPIO_EXAR
tristate "Support for GPIO pins on XR17V352/354/358"
depends on SERIAL_8250_EXAR
+ select REGMAP_MMIO
help
Selecting this option will enable handling of GPIO pins present
on Exar XR17V352/354/358 chips.
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index 28b0b4b5fa35..79fb0964ace3 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
+#include <linux/regmap.h>
#define EXAR_OFFSET_MPIOLVL_LO 0x90
#define EXAR_OFFSET_MPIOSEL_LO 0x93
@@ -26,9 +27,8 @@ static DEFINE_IDA(ida_index);
struct exar_gpio_chip {
struct gpio_chip gpio_chip;
- struct mutex lock;
+ struct regmap *regmap;
int index;
- void __iomem *regs;
char name[20];
unsigned int first_pin;
};
@@ -53,51 +53,13 @@ exar_offset_to_bit(struct exar_gpio_chip *exar_gpio, unsigned int offset)
return (offset + exar_gpio->first_pin) % 8;
}
-static void exar_update(struct gpio_chip *chip, unsigned int reg, int val,
- unsigned int offset)
-{
- struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- int temp;
-
- mutex_lock(&exar_gpio->lock);
- temp = readb(exar_gpio->regs + reg);
- temp &= ~BIT(offset);
- if (val)
- temp |= BIT(offset);
- writeb(temp, exar_gpio->regs + reg);
- mutex_unlock(&exar_gpio->lock);
-}
-
-static int exar_set_direction(struct gpio_chip *chip, int direction,
- unsigned int offset)
-{
- struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
- unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
-
- exar_update(chip, addr, direction, bit);
- return 0;
-}
-
-static int exar_get(struct gpio_chip *chip, unsigned int reg)
-{
- struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
- int value;
-
- mutex_lock(&exar_gpio->lock);
- value = readb(exar_gpio->regs + reg);
- mutex_unlock(&exar_gpio->lock);
-
- return value;
-}
-
static int exar_get_direction(struct gpio_chip *chip, unsigned int offset)
{
struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
- if (exar_get(chip, addr) & BIT(bit))
+ if (regmap_test_bits(exar_gpio->regmap, addr, BIT(bit)))
return GPIO_LINE_DIRECTION_IN;
return GPIO_LINE_DIRECTION_OUT;
@@ -109,7 +71,7 @@ static int exar_get_value(struct gpio_chip *chip, unsigned int offset)
unsigned int addr = exar_offset_to_lvl_addr(exar_gpio, offset);
unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
- return !!(exar_get(chip, addr) & BIT(bit));
+ return !!(regmap_test_bits(exar_gpio->regmap, addr, BIT(bit)));
}
static void exar_set_value(struct gpio_chip *chip, unsigned int offset,
@@ -119,21 +81,47 @@ static void exar_set_value(struct gpio_chip *chip, unsigned int offset,
unsigned int addr = exar_offset_to_lvl_addr(exar_gpio, offset);
unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
- exar_update(chip, addr, value, bit);
+ if (value)
+ regmap_set_bits(exar_gpio->regmap, addr, BIT(bit));
+ else
+ regmap_clear_bits(exar_gpio->regmap, addr, BIT(bit));
}
static int exar_direction_output(struct gpio_chip *chip, unsigned int offset,
int value)
{
+ struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
+ unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
+
exar_set_value(chip, offset, value);
- return exar_set_direction(chip, 0, offset);
+ regmap_clear_bits(exar_gpio->regmap, addr, BIT(bit));
+
+ return 0;
}
static int exar_direction_input(struct gpio_chip *chip, unsigned int offset)
{
- return exar_set_direction(chip, 1, offset);
+ struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
+ unsigned int addr = exar_offset_to_sel_addr(exar_gpio, offset);
+ unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
+
+ regmap_set_bits(exar_gpio->regmap, addr, BIT(bit));
+
+ return 0;
}
+static const struct regmap_config exar_regmap_config = {
+ .name = "exar-gpio",
+ /*
+ * While we're not programmatically blocking the regmap from accessing
+ * any non-GPIO registers, 11 address bits holds the maximum address
+ * we need to access from this driver.
+ */
+ .reg_bits = 11,
+ .val_bits = 8,
+};
+
static int gpio_exar_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -163,13 +151,17 @@ static int gpio_exar_probe(struct platform_device *pdev)
if (!exar_gpio)
return -ENOMEM;
- mutex_init(&exar_gpio->lock);
+ /*
+ * We don't need to check the return values of mmio regmap operations (unless
+ * the regmap has a clock attached which is not the case here).
+ */
+ exar_gpio->regmap = devm_regmap_init_mmio(dev, p, &exar_regmap_config);
+ if (IS_ERR(exar_gpio->regmap))
+ return PTR_ERR(exar_gpio->regmap);
index = ida_alloc(&ida_index, GFP_KERNEL);
- if (index < 0) {
- ret = index;
- goto err_mutex_destroy;
- }
+ if (index < 0)
+ return index;
sprintf(exar_gpio->name, "exar_gpio%d", index);
exar_gpio->gpio_chip.label = exar_gpio->name;
@@ -181,7 +173,6 @@ static int gpio_exar_probe(struct platform_device *pdev)
exar_gpio->gpio_chip.set = exar_set_value;
exar_gpio->gpio_chip.base = -1;
exar_gpio->gpio_chip.ngpio = ngpios;
- exar_gpio->regs = p;
exar_gpio->index = index;
exar_gpio->first_pin = first_pin;
@@ -195,8 +186,6 @@ static int gpio_exar_probe(struct platform_device *pdev)
err_destroy:
ida_free(&ida_index, index);
-err_mutex_destroy:
- mutex_destroy(&exar_gpio->lock);
return ret;
}
@@ -205,7 +194,6 @@ static int gpio_exar_remove(struct platform_device *pdev)
struct exar_gpio_chip *exar_gpio = platform_get_drvdata(pdev);
ida_free(&ida_index, exar_gpio->index);
- mutex_destroy(&exar_gpio->lock);
return 0;
}
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v5 7/7] gpio: exar: use devm action for freeing the IDA and drop remove()
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
` (5 preceding siblings ...)
2020-11-16 10:42 ` [PATCH v5 6/7] gpio: exar: switch to using regmap Bartosz Golaszewski
@ 2020-11-16 10:42 ` Bartosz Golaszewski
2020-11-23 11:38 ` [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
7 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-16 10:42 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: linux-gpio, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
We can simplify the error path in probe() and drop remove() entirely if
we provide a devm action for freeing the device ID.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-exar.c | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
index 79fb0964ace3..e4c1ac88d2ba 100644
--- a/drivers/gpio/gpio-exar.c
+++ b/drivers/gpio/gpio-exar.c
@@ -111,6 +111,13 @@ static int exar_direction_input(struct gpio_chip *chip, unsigned int offset)
return 0;
}
+static void exar_devm_ida_free(void *data)
+{
+ struct exar_gpio_chip *exar_gpio = data;
+
+ ida_free(&ida_index, exar_gpio->index);
+}
+
static const struct regmap_config exar_regmap_config = {
.name = "exar-gpio",
/*
@@ -163,6 +170,10 @@ static int gpio_exar_probe(struct platform_device *pdev)
if (index < 0)
return index;
+ ret = devm_add_action_or_reset(dev, exar_devm_ida_free, exar_gpio);
+ if (ret)
+ return ret;
+
sprintf(exar_gpio->name, "exar_gpio%d", index);
exar_gpio->gpio_chip.label = exar_gpio->name;
exar_gpio->gpio_chip.parent = dev;
@@ -178,29 +189,15 @@ static int gpio_exar_probe(struct platform_device *pdev)
ret = devm_gpiochip_add_data(dev, &exar_gpio->gpio_chip, exar_gpio);
if (ret)
- goto err_destroy;
+ return ret;
platform_set_drvdata(pdev, exar_gpio);
- return 0;
-
-err_destroy:
- ida_free(&ida_index, index);
- return ret;
-}
-
-static int gpio_exar_remove(struct platform_device *pdev)
-{
- struct exar_gpio_chip *exar_gpio = platform_get_drvdata(pdev);
-
- ida_free(&ida_index, exar_gpio->index);
-
return 0;
}
static struct platform_driver gpio_exar_driver = {
.probe = gpio_exar_probe,
- .remove = gpio_exar_remove,
.driver = {
.name = DRIVER_NAME,
},
--
2.29.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
` (6 preceding siblings ...)
2020-11-16 10:42 ` [PATCH v5 7/7] gpio: exar: use devm action for freeing the IDA and drop remove() Bartosz Golaszewski
@ 2020-11-23 11:38 ` Bartosz Golaszewski
2020-11-23 11:58 ` Jan Kiszka
7 siblings, 1 reply; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-23 11:38 UTC (permalink / raw)
To: Linus Walleij, Andy Shevchenko, Jan Kiszka, David Laight
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
>
> I just wanted to convert the driver to using simpler IDA API but ended up
> quickly converting it to using regmap. Unfortunately I don't have the HW
> to test it so marking the patches that introduce functional change as RFT
> and Cc'ing the original author.
>
Hi Jan!
Could you give this last version a final spin before I merge it?
Bartosz
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 11:38 ` [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
@ 2020-11-23 11:58 ` Jan Kiszka
2020-11-23 12:08 ` Jan Kiszka
2020-11-23 12:12 ` Bartosz Golaszewski
0 siblings, 2 replies; 16+ messages in thread
From: Jan Kiszka @ 2020-11-23 11:58 UTC (permalink / raw)
To: Bartosz Golaszewski, Linus Walleij, Andy Shevchenko, David Laight
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On 23.11.20 12:38, Bartosz Golaszewski wrote:
> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>>
>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
>>
>> I just wanted to convert the driver to using simpler IDA API but ended up
>> quickly converting it to using regmap. Unfortunately I don't have the HW
>> to test it so marking the patches that introduce functional change as RFT
>> and Cc'ing the original author.
>>
>
> Hi Jan!
>
> Could you give this last version a final spin before I merge it?
>
[ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
[ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
[ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
[ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
That's "new"...
Jan
--
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 11:58 ` Jan Kiszka
@ 2020-11-23 12:08 ` Jan Kiszka
2020-11-23 12:51 ` Bartosz Golaszewski
2020-11-23 12:12 ` Bartosz Golaszewski
1 sibling, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2020-11-23 12:08 UTC (permalink / raw)
To: Bartosz Golaszewski, Linus Walleij, Andy Shevchenko, David Laight
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On 23.11.20 12:58, Jan Kiszka wrote:
> On 23.11.20 12:38, Bartosz Golaszewski wrote:
>> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>>>
>>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
>>>
>>> I just wanted to convert the driver to using simpler IDA API but ended up
>>> quickly converting it to using regmap. Unfortunately I don't have the HW
>>> to test it so marking the patches that introduce functional change as RFT
>>> and Cc'ing the original author.
>>>
>>
>> Hi Jan!
>>
>> Could you give this last version a final spin before I merge it?
>>
>
> [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
> [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
> [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
> [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
>
> That's "new"...
>
Bisected to "gpio: exar: switch to using regmap" again.
Jan
--
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 11:58 ` Jan Kiszka
2020-11-23 12:08 ` Jan Kiszka
@ 2020-11-23 12:12 ` Bartosz Golaszewski
2020-11-23 12:57 ` Jan Kiszka
1 sibling, 1 reply; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-23 12:12 UTC (permalink / raw)
To: Jan Kiszka
Cc: Linus Walleij, Andy Shevchenko, David Laight,
open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
Thanks!On Mon, Nov 23, 2020 at 1:03 PM Jan Kiszka
<jan.kiszka@siemens.com> wrote:
>
> On 23.11.20 12:38, Bartosz Golaszewski wrote:
> > On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >>
> >> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> >>
> >> I just wanted to convert the driver to using simpler IDA API but ended up
> >> quickly converting it to using regmap. Unfortunately I don't have the HW
> >> to test it so marking the patches that introduce functional change as RFT
> >> and Cc'ing the original author.
> >>
> >
> > Hi Jan!
> >
> > Could you give this last version a final spin before I merge it?
> >
>
> [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
> [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
> [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
> [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
>
> That's "new"...
>
And if you change reg_bits from 11 to 16?
Bartosz
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 12:08 ` Jan Kiszka
@ 2020-11-23 12:51 ` Bartosz Golaszewski
0 siblings, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-23 12:51 UTC (permalink / raw)
To: Jan Kiszka
Cc: Linus Walleij, Andy Shevchenko, David Laight,
open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On Mon, Nov 23, 2020 at 1:12 PM Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
> On 23.11.20 12:58, Jan Kiszka wrote:
> > On 23.11.20 12:38, Bartosz Golaszewski wrote:
> >> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >>>
> >>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> >>>
> >>> I just wanted to convert the driver to using simpler IDA API but ended up
> >>> quickly converting it to using regmap. Unfortunately I don't have the HW
> >>> to test it so marking the patches that introduce functional change as RFT
> >>> and Cc'ing the original author.
> >>>
> >>
> >> Hi Jan!
> >>
> >> Could you give this last version a final spin before I merge it?
> >>
> >
> > [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
> > [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
> > [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
> > [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
> >
> > That's "new"...
> >
>
> Bisected to "gpio: exar: switch to using regmap" again.
>
I'm not sure if you saw my email which I sent at the same time as you
- but does reverting reg_bits to 16 help?
Bart
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 12:12 ` Bartosz Golaszewski
@ 2020-11-23 12:57 ` Jan Kiszka
2020-11-23 13:33 ` Bartosz Golaszewski
2020-11-23 13:37 ` Andy Shevchenko
0 siblings, 2 replies; 16+ messages in thread
From: Jan Kiszka @ 2020-11-23 12:57 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: Linus Walleij, Andy Shevchenko, David Laight,
open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On 23.11.20 13:12, Bartosz Golaszewski wrote:
> Thanks!On Mon, Nov 23, 2020 at 1:03 PM Jan Kiszka
> <jan.kiszka@siemens.com> wrote:
>>
>> On 23.11.20 12:38, Bartosz Golaszewski wrote:
>>> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>>>>
>>>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
>>>>
>>>> I just wanted to convert the driver to using simpler IDA API but ended up
>>>> quickly converting it to using regmap. Unfortunately I don't have the HW
>>>> to test it so marking the patches that introduce functional change as RFT
>>>> and Cc'ing the original author.
>>>>
>>>
>>> Hi Jan!
>>>
>>> Could you give this last version a final spin before I merge it?
>>>
>>
>> [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
>> [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
>> [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
>> [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
>>
>> That's "new"...
>>
>
> And if you change reg_bits from 11 to 16?
>
16 works. Didn't we have that already?
Jan
--
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 12:57 ` Jan Kiszka
@ 2020-11-23 13:33 ` Bartosz Golaszewski
2020-11-23 13:37 ` Andy Shevchenko
1 sibling, 0 replies; 16+ messages in thread
From: Bartosz Golaszewski @ 2020-11-23 13:33 UTC (permalink / raw)
To: Jan Kiszka
Cc: Linus Walleij, Andy Shevchenko, David Laight,
open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On Mon, Nov 23, 2020 at 2:00 PM Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
> On 23.11.20 13:12, Bartosz Golaszewski wrote:
> > Thanks!On Mon, Nov 23, 2020 at 1:03 PM Jan Kiszka
> > <jan.kiszka@siemens.com> wrote:
> >>
> >> On 23.11.20 12:38, Bartosz Golaszewski wrote:
> >>> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >>>>
> >>>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> >>>>
> >>>> I just wanted to convert the driver to using simpler IDA API but ended up
> >>>> quickly converting it to using regmap. Unfortunately I don't have the HW
> >>>> to test it so marking the patches that introduce functional change as RFT
> >>>> and Cc'ing the original author.
> >>>>
> >>>
> >>> Hi Jan!
> >>>
> >>> Could you give this last version a final spin before I merge it?
> >>>
> >>
> >> [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
> >> [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
> >> [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
> >> [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
> >>
> >> That's "new"...
> >>
> >
> > And if you change reg_bits from 11 to 16?
> >
>
> 16 works. Didn't we have that already?
>
> Jan
Yes we have, Andy suggested 11 is fine because it fits the highest
address we need to access but it seems regmap doesn't like this value.
Ok so I'll change it when applying, is that fine with you?
Bart
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v5 0/7] gpio: exar: refactor the driver
2020-11-23 12:57 ` Jan Kiszka
2020-11-23 13:33 ` Bartosz Golaszewski
@ 2020-11-23 13:37 ` Andy Shevchenko
1 sibling, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2020-11-23 13:37 UTC (permalink / raw)
To: Jan Kiszka
Cc: Bartosz Golaszewski, Linus Walleij, David Laight,
open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Bartosz Golaszewski
On Mon, Nov 23, 2020 at 01:57:07PM +0100, Jan Kiszka wrote:
> On 23.11.20 13:12, Bartosz Golaszewski wrote:
> > Thanks!On Mon, Nov 23, 2020 at 1:03 PM Jan Kiszka
> > <jan.kiszka@siemens.com> wrote:
> >>
> >> On 23.11.20 12:38, Bartosz Golaszewski wrote:
> >>> On Mon, Nov 16, 2020 at 11:42 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >>>>
> >>>> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> >>>>
> >>>> I just wanted to convert the driver to using simpler IDA API but ended up
> >>>> quickly converting it to using regmap. Unfortunately I don't have the HW
> >>>> to test it so marking the patches that introduce functional change as RFT
> >>>> and Cc'ing the original author.
> >>>>
> >>>
> >>> Hi Jan!
> >>>
> >>> Could you give this last version a final spin before I merge it?
> >>>
> >>
> >> [ 14.250117] exar_serial 0000:02:00.0: enabling device (0000 -> 0002)
> >> [ 14.336622] 0000:02:00.0: ttyS2 at MMIO 0x90000000 (irq = 44, base_baud = 7812500) is a XR17V35X
> >> [ 14.391588] 0000:02:00.0: ttyS3 at MMIO 0x90000400 (irq = 44, base_baud = 7812500) is a XR17V35X
> >> [ 19.250510] gpio_exar: probe of gpio_exar.1.auto failed with error -22
> >>
> >> That's "new"...
> >>
> >
> > And if you change reg_bits from 11 to 16?
> >
>
> 16 works. Didn't we have that already?
Yes, but it puzzles me what the idea behind it and don't we see the regmap
issue here. In any case, I'm fine with 16 there, although it's not clear
to me why 11 is not working...
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-11-23 13:36 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-16 10:42 [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 1/7] gpio: exar: add a newline after the copyright notice Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 2/7] gpio: exar: include idr.h Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 3/7] gpio: exar: switch to a simpler IDA interface Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 4/7] gpio: exar: use a helper variable for &pdev->dev Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 5/7] gpio: exar: unduplicate address and offset computation Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 6/7] gpio: exar: switch to using regmap Bartosz Golaszewski
2020-11-16 10:42 ` [PATCH v5 7/7] gpio: exar: use devm action for freeing the IDA and drop remove() Bartosz Golaszewski
2020-11-23 11:38 ` [PATCH v5 0/7] gpio: exar: refactor the driver Bartosz Golaszewski
2020-11-23 11:58 ` Jan Kiszka
2020-11-23 12:08 ` Jan Kiszka
2020-11-23 12:51 ` Bartosz Golaszewski
2020-11-23 12:12 ` Bartosz Golaszewski
2020-11-23 12:57 ` Jan Kiszka
2020-11-23 13:33 ` Bartosz Golaszewski
2020-11-23 13:37 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).