[RFC v2 0/2] gpio: add generic gpio input multiplexer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



v2:
 - removed .owner from platform_driver as per test bot's instruction
 - added MODULE_AUTHOR, MODULE_DESCRIPTION, MODULE_LICENSE
 - added gpio_mux_input_get_direction as it's recommended for all chips
 - removed because this is input only chip:
     gpio_mux_input_set_value
 - removed because they are not needed for input/output only chips:
     gpio_mux_input_direction_input
     gpio_mux_input_direction_output
 - fixed typo in an error message
 - added info message about successful registration
 - removed can_sleep flag as this does not sleep while getting GPIO value
   like I2C or SPI do
 - added a little bit more text in the binding documenation
 - Updated description in Kconfig

rangediff v1...v2
1:  addd7422268e ! 1:  37eef51e67be dt-bindings: gpio-mux-input: add documentation
    @@ Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml (new)
     +$id: http://devicetree.org/schemas/gpio/gpio-mux-input.yaml#
     +$schema: http://devicetree.org/meta-schemas/core.yaml#
     +
    -+title: GPIO input multiplexer
    ++title: Generic GPIO input multiplexer
     +
     +maintainers:
     +  - Mauri Sandberg <sandberg@xxxxxxxxxxxxx>
    @@ Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml (new)
     +description: |
     +  A generic GPIO based input multiplexer
     +
    -+  This driver uses mux-controller to drive the multiplexer.
    ++  This driver uses a mux-controller to drive the multiplexer and has a single
    ++  output pin for reading the inputs to the mux.
     +
    -+  For consumer use see gpio.txt.
    ++  For GPIO consumer documentation see gpio.txt.
     +
     +properties:
     +  compatible:
    @@ Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml (new)
     +
     +  pin-gpios:
     +    description: |
    -+      The GPIO pin used the output from the multiplexer
    ++      The GPIO pin used as the output from the multiplexer
     +
     +required:
     +  - compatible
    @@ Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml (new)
     +        #gpio-cells = <2>;
     +
     +        // GPIOs used by this node, mux output pin
    -+        pin-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;	/* 1y */
    ++        pin-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
     +    };
     +
     +...
2:  067ac01b2ce6 ! 2:  01e497d16a25 gpio: gpio-mux-input: add generic gpio input multiplexer
    @@ Metadata
      ## Commit message ##
         gpio: gpio-mux-input: add generic gpio input multiplexer
     
    -    Suppport for a general GPIO multiplexer. To drive the multiplexer a
    +    Adds support for a generic GPIO multiplexer. To drive the multiplexer a
         mux-controller is needed. The output pin of the multiplexer is a GPIO
         pin.
     
    +    Reported-by: kernel test robot <lkp@xxxxxxxxx>
         Signed-off-by: Mauri Sandberg <sandberg@xxxxxxxxxxxxx>
     
      ## drivers/gpio/Kconfig ##
    @@ drivers/gpio/Kconfig: config GPIO_SIM
     +
     +config GPIO_MUX_INPUT
     +	tristate "General GPIO input multiplexer"
    ++	depends on OF_GPIO
     +	select MULTIPLEXER
     +	select MUX_GPIO
    -+	depends on OF_GPIO
     +	help
    -+	  Say yes here to enable support for generic GPIO input multiplexer. This
    -+	  needs a multiplexer controller to drive the select pins.
    ++	  Say yes here to enable support for generic GPIO input multiplexer.
    ++
    ++  	  This driver uses a mux-controller to drive the multiplexer and has a
    ++  	  single output pin for reading the inputs to the mux.
     +
      endif
     
    @@ drivers/gpio/gpio-mux-input.c (new)
     +	return container_of(gc, struct gpio_mux_input, gpio_chip);
     +}
     +
    -+static int gpio_mux_input_direction_input(struct gpio_chip *gc,
    -+				       unsigned int offset)
    -+{
    -+	return 0;
    -+}
    -+
    -+static int gpio_mux_input_direction_output(struct gpio_chip *gc,
    -+					unsigned int offset, int val)
    ++static int gpio_mux_input_get_direction(struct gpio_chip *gc,
    ++					unsigned int offset)
     +{
    -+	return -EINVAL;
    ++	return GPIO_LINE_DIRECTION_IN;
     +}
     +
     +static int gpio_mux_input_get_value(struct gpio_chip *gc, unsigned int offset)
    @@ drivers/gpio/gpio-mux-input.c (new)
     +	return ret;
     +}
     +
    -+static void gpio_mux_input_set_value(struct gpio_chip *gc,
    -+				  unsigned int offset, int val)
    -+{
    -+	/* not supported */
    -+}
    -+
     +static int gpio_mux_input_probe(struct platform_device *pdev)
     +{
     +	struct device_node *np = pdev->dev.of_node;
    @@ drivers/gpio/gpio-mux-input.c (new)
     +	pin = gpiod_get(&pdev->dev, "pin",  GPIOD_IN);
     +	if (IS_ERR(pin)) {
     +		err = (int) PTR_ERR(pin);
    -+		dev_err(&pdev->dev, "unable to claim pin GPIOs: %d\n", err);
    ++		dev_err(&pdev->dev, "unable to claim pin GPIO: %d\n", err);
     +		goto err_free_mc;
     +	}
     +
    @@ drivers/gpio/gpio-mux-input.c (new)
     +	mux->parent = &pdev->dev;
     +
     +	gc = &mux->gpio_chip;
    -+	gc->direction_input  = gpio_mux_input_direction_input;
    -+	gc->direction_output = gpio_mux_input_direction_output;
     +	gc->get = gpio_mux_input_get_value;
    -+	gc->set = gpio_mux_input_set_value;
    -+	gc->can_sleep = 1;
    ++	gc->get_direction = gpio_mux_input_get_direction;
     +
     +	gc->base = -1;
     +	gc->ngpio = mux_control_states(mc);
    @@ drivers/gpio/gpio-mux-input.c (new)
     +	}
     +
     +	platform_set_drvdata(pdev, mux);
    ++
    ++	dev_info(&pdev->dev, "registered %u input GPIOs\n", gc->ngpio);
    ++
     +	return 0;
     +
     +err_free_pin:
    @@ drivers/gpio/gpio-mux-input.c (new)
     +static struct platform_driver gpio_mux_input_driver = {
     +	.driver	= {
     +		.name		= "gpio-mux-input",
    -+		.owner		= THIS_MODULE,
     +		.of_match_table = gpio_mux_input_id,
     +	},
     +	.probe	= gpio_mux_input_probe,
     +};
     +module_platform_driver(gpio_mux_input_driver);
    ++
    ++MODULE_AUTHOR("Mauri Sandberg <sandberg@xxxxxxxxxxxxx>");
    ++MODULE_DESCRIPTION("Generic GPIO input multiplexer");
    ++MODULE_LICENSE("GPL");


Mauri Sandberg (2):
  dt-bindings: gpio-mux-input: add documentation
  gpio: gpio-mux-input: add generic gpio input multiplexer

 .../bindings/gpio/gpio-mux-input.yaml         |  56 ++++++++
 drivers/gpio/Kconfig                          |  13 ++
 drivers/gpio/Makefile                         |   1 +
 drivers/gpio/gpio-mux-input.c                 | 134 ++++++++++++++++++
 4 files changed, 204 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml
 create mode 100644 drivers/gpio/gpio-mux-input.c


base-commit: 9d940ab7264574be59ce3a953dc33de9250429eb
-- 
2.25.1




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux