All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Linus Walleij <linus.walleij@linaro.org>,
	Alexander Stein <alexander.stein@ew.tq-group.com>,
	linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org
Cc: Bartosz Golaszewski <brgl@bgdev.pl>, Andy Shevchenko <andy@kernel.org>
Subject: [PATCH v3 5/5] gpio: delay: Remove duplicative functionality
Date: Thu, 15 Jun 2023 16:20:23 +0300	[thread overview]
Message-ID: <20230615132023.13801-6-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com>

Now that GPIO aggregator supports a delay line, drop the duplicative
functionality, i.e. the entire gpio-delay driver.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/gpio/Kconfig      |   9 ---
 drivers/gpio/Makefile     |   1 -
 drivers/gpio/gpio-delay.c | 164 --------------------------------------
 3 files changed, 174 deletions(-)
 delete mode 100644 drivers/gpio/gpio-delay.c

diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 209738ef1446..abaae68c88a4 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -1748,15 +1748,6 @@ config GPIO_AGGREGATOR
 	      industrial control context, to be operated from userspace using
 	      the GPIO chardev interface.
 
-config GPIO_DELAY
-	tristate "GPIO delay"
-	depends on OF_GPIO
-	help
-	  Say yes here to enable the GPIO delay, which provides a way to
-	  configure platform specific delays for GPIO ramp-up or ramp-down
-	  delays. This can serve the following purposes:
-	    - Open-drain output using an RC filter
-
 config GPIO_LATCH
 	tristate "GPIO latch driver"
 	help
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 947c9cf9aba8..7843b16f5d59 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -52,7 +52,6 @@ obj-$(CONFIG_GPIO_DA9052)		+= gpio-da9052.o
 obj-$(CONFIG_GPIO_DA9055)		+= gpio-da9055.o
 obj-$(CONFIG_GPIO_DAVINCI)		+= gpio-davinci.o
 obj-$(CONFIG_GPIO_DLN2)			+= gpio-dln2.o
-obj-$(CONFIG_GPIO_DELAY)		+= gpio-delay.o
 obj-$(CONFIG_GPIO_DWAPB)		+= gpio-dwapb.o
 obj-$(CONFIG_GPIO_EIC_SPRD)		+= gpio-eic-sprd.o
 obj-$(CONFIG_GPIO_ELKHARTLAKE)		+= gpio-elkhartlake.o
diff --git a/drivers/gpio/gpio-delay.c b/drivers/gpio/gpio-delay.c
deleted file mode 100644
index b489b561b225..000000000000
--- a/drivers/gpio/gpio-delay.c
+++ /dev/null
@@ -1,164 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright 2022 TQ-Systems GmbH
- * Author: Alexander Stein <linux@ew.tq-group.com>
- */
-
-#include <linux/err.h>
-#include <linux/gpio/consumer.h>
-#include <linux/gpio/driver.h>
-#include <linux/module.h>
-#include <linux/mod_devicetable.h>
-#include <linux/platform_device.h>
-#include <linux/delay.h>
-
-#include "gpiolib.h"
-
-struct gpio_delay_timing {
-	unsigned long ramp_up_delay_us;
-	unsigned long ramp_down_delay_us;
-};
-
-struct gpio_delay_priv {
-	struct gpio_chip gc;
-	struct gpio_descs *input_gpio;
-	struct gpio_delay_timing *delay_timings;
-};
-
-static int gpio_delay_get_direction(struct gpio_chip *gc, unsigned int offset)
-{
-	return GPIO_LINE_DIRECTION_OUT;
-}
-
-static void gpio_delay_set(struct gpio_chip *gc, unsigned int offset, int val)
-{
-	struct gpio_delay_priv *priv = gpiochip_get_data(gc);
-	struct gpio_desc *gpio_desc = priv->input_gpio->desc[offset];
-	const struct gpio_delay_timing *delay_timings;
-	bool ramp_up;
-
-	gpiod_set_value(gpio_desc, val);
-
-	delay_timings = &priv->delay_timings[offset];
-	ramp_up = (!gpiod_is_active_low(gpio_desc) && val) ||
-		  (gpiod_is_active_low(gpio_desc) && !val);
-
-	if (ramp_up && delay_timings->ramp_up_delay_us)
-		udelay(delay_timings->ramp_up_delay_us);
-	if (!ramp_up && delay_timings->ramp_down_delay_us)
-		udelay(delay_timings->ramp_down_delay_us);
-}
-
-static void gpio_delay_set_can_sleep(struct gpio_chip *gc, unsigned int offset, int val)
-{
-	struct gpio_delay_priv *priv = gpiochip_get_data(gc);
-	struct gpio_desc *gpio_desc = priv->input_gpio->desc[offset];
-	const struct gpio_delay_timing *delay_timings;
-	bool ramp_up;
-
-	gpiod_set_value_cansleep(gpio_desc, val);
-
-	delay_timings = &priv->delay_timings[offset];
-	ramp_up = (!gpiod_is_active_low(gpio_desc) && val) ||
-		  (gpiod_is_active_low(gpio_desc) && !val);
-
-	if (ramp_up && delay_timings->ramp_up_delay_us)
-		fsleep(delay_timings->ramp_up_delay_us);
-	if (!ramp_up && delay_timings->ramp_down_delay_us)
-		fsleep(delay_timings->ramp_down_delay_us);
-}
-
-static int gpio_delay_of_xlate(struct gpio_chip *gc,
-			       const struct of_phandle_args *gpiospec,
-			       u32 *flags)
-{
-	struct gpio_delay_priv *priv = gpiochip_get_data(gc);
-	struct gpio_delay_timing *timings;
-	u32 line;
-
-	if (gpiospec->args_count != gc->of_gpio_n_cells)
-		return -EINVAL;
-
-	line = gpiospec->args[0];
-	if (line >= gc->ngpio)
-		return -EINVAL;
-
-	timings = &priv->delay_timings[line];
-	timings->ramp_up_delay_us = gpiospec->args[1];
-	timings->ramp_down_delay_us = gpiospec->args[2];
-
-	return line;
-}
-
-static bool gpio_delay_can_sleep(const struct gpio_delay_priv *priv)
-{
-	int i;
-
-	for (i = 0; i < priv->input_gpio->ndescs; i++)
-		if (gpiod_cansleep(priv->input_gpio->desc[i]))
-			return true;
-
-	return false;
-}
-
-static int gpio_delay_probe(struct platform_device *pdev)
-{
-	struct gpio_delay_priv *priv;
-
-	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
-	if (!priv)
-		return -ENOMEM;
-
-	priv->input_gpio = devm_gpiod_get_array(&pdev->dev, NULL, GPIOD_OUT_LOW);
-	if (IS_ERR(priv->input_gpio))
-		return dev_err_probe(&pdev->dev, PTR_ERR(priv->input_gpio),
-				     "Failed to get input-gpios");
-
-	priv->delay_timings = devm_kcalloc(&pdev->dev,
-					   priv->input_gpio->ndescs,
-					   sizeof(*priv->delay_timings),
-					   GFP_KERNEL);
-	if (!priv->delay_timings)
-		return -ENOMEM;
-
-	if (gpio_delay_can_sleep(priv)) {
-		priv->gc.can_sleep = true;
-		priv->gc.set = gpio_delay_set_can_sleep;
-	} else {
-		priv->gc.can_sleep = false;
-		priv->gc.set = gpio_delay_set;
-	}
-
-	priv->gc.get_direction = gpio_delay_get_direction;
-	priv->gc.of_xlate = gpio_delay_of_xlate;
-	priv->gc.of_gpio_n_cells = 3;
-	priv->gc.ngpio = priv->input_gpio->ndescs;
-	priv->gc.owner = THIS_MODULE;
-	priv->gc.base = -1;
-	priv->gc.parent = &pdev->dev;
-
-	platform_set_drvdata(pdev, priv);
-
-	return devm_gpiochip_add_data(&pdev->dev, &priv->gc, priv);
-}
-
-static const struct of_device_id gpio_delay_ids[] = {
-	{
-		.compatible = "gpio-delay",
-	},
-	{ /* sentinel */ }
-};
-MODULE_DEVICE_TABLE(of, gpio_delay_ids);
-
-static struct platform_driver gpio_delay_driver = {
-	.driver	= {
-		.name		= "gpio-delay",
-		.of_match_table	= gpio_delay_ids,
-	},
-	.probe	= gpio_delay_probe,
-};
-module_platform_driver(gpio_delay_driver);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Alexander Stein <alexander.stein@ew.tq-group.com>");
-MODULE_DESCRIPTION("GPIO delay driver");
-- 
2.40.0.1.gaa8946217a0b


  parent reply	other threads:[~2023-06-15 13:51 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-15 13:20 [PATCH v3 0/5] gpio: aggregator: Incorporate gpio-delay functionality Andy Shevchenko
2023-06-15 13:20 ` [PATCH v3 1/5] gpio: aggregator: Remove CONFIG_OF and of_match_ptr() protections Andy Shevchenko
2023-06-15 13:20 ` [PATCH v3 2/5] gpio: aggregator: Support delay for setting up individual GPIOs Andy Shevchenko
2023-06-15 13:20 ` [PATCH v3 3/5] gpio: aggregator: Prevent collisions between DT and user device IDs Andy Shevchenko
2023-06-15 14:54   ` Geert Uytterhoeven
2023-06-15 15:36     ` Andy Shevchenko
2023-06-15 13:20 ` [PATCH v3 4/5] gpio: aggregator: Set up a parser of delay line parameters Andy Shevchenko
2023-06-15 13:20 ` Andy Shevchenko [this message]
2023-06-16  9:00 ` [PATCH v3 0/5] gpio: aggregator: Incorporate gpio-delay functionality Bartosz Golaszewski
2023-06-16  9:01 ` Alexander Stein
2023-06-16 13:33   ` Andy Shevchenko

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=20230615132023.13801-6-andriy.shevchenko@linux.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=alexander.stein@ew.tq-group.com \
    --cc=andy@kernel.org \
    --cc=bartosz.golaszewski@linaro.org \
    --cc=brgl@bgdev.pl \
    --cc=geert+renesas@glider.be \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.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.