From db2ca70a233f0cfb1added825f6b5c94ab8c828c Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Fri, 28 Sep 2018 14:05:49 -0500 Subject: [PATCH] dts: pulpino: Add device tree support for GPIO controller Add the needed bits to get device tree support for the GPIO controller on the Zedboard-Pulpino. This will allow us to move LED & button info into the board.dts. Signed-off-by: Kumar Gala --- .../zedboard_pulpino/zedboard_pulpino.dts | 4 ++ drivers/gpio/Kconfig.pulpino | 1 + drivers/gpio/gpio_pulpino.c | 6 +-- dts/bindings/gpio/pulp,pulpino-gpio.yaml | 45 +++++++++++++++++++ dts/riscv32/pulpino.dtsi | 13 ++++++ soc/riscv32/pulpino/soc.h | 4 -- 6 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 dts/bindings/gpio/pulp,pulpino-gpio.yaml diff --git a/boards/riscv32/zedboard_pulpino/zedboard_pulpino.dts b/boards/riscv32/zedboard_pulpino/zedboard_pulpino.dts index d3c43595a99..c717b4b6374 100644 --- a/boards/riscv32/zedboard_pulpino/zedboard_pulpino.dts +++ b/boards/riscv32/zedboard_pulpino/zedboard_pulpino.dts @@ -14,6 +14,7 @@ aliases { uart-0 = &uart0; + gpio-0 = &gpio0; }; chosen { @@ -26,3 +27,6 @@ current-speed = <115200>; }; +&gpio0 { + status = "ok"; +}; diff --git a/drivers/gpio/Kconfig.pulpino b/drivers/gpio/Kconfig.pulpino index 800f57d9321..e0ed2b0c0b7 100644 --- a/drivers/gpio/Kconfig.pulpino +++ b/drivers/gpio/Kconfig.pulpino @@ -8,6 +8,7 @@ menuconfig GPIO_PULPINO bool "Pulpino GPIO controller driver" depends on GPIO && SOC_RISCV32_PULPINO + select HAS_DTS_GPIO help Enable driver for the Pulpino GPIO controller. diff --git a/drivers/gpio/gpio_pulpino.c b/drivers/gpio/gpio_pulpino.c index 3b9935aba7b..8c8cd11ff5b 100644 --- a/drivers/gpio/gpio_pulpino.c +++ b/drivers/gpio/gpio_pulpino.c @@ -258,7 +258,7 @@ static int gpio_pulpino_init(struct device *dev) static void gpio_pulpino_cfg_0(void); static const struct gpio_pulpino_config gpio_pulpino_config0 = { - .gpio_base_addr = PULP_GPIO_0_BASE, + .gpio_base_addr = GPIO_0_BASE_ADDRESS, .gpio_cfg_func = gpio_pulpino_cfg_0, }; @@ -271,10 +271,10 @@ DEVICE_AND_API_INIT(gpio_pulpino_0, "gpio0", gpio_pulpino_init, static void gpio_pulpino_cfg_0(void) { - IRQ_CONNECT(PULP_GPIO_0_IRQ, + IRQ_CONNECT(GPIO_0_IRQ, 0, gpio_pulpino_irq_handler, DEVICE_GET(gpio_pulpino_0), 0); - irq_enable(PULP_GPIO_0_IRQ); + irq_enable(GPIO_0_IRQ); } diff --git a/dts/bindings/gpio/pulp,pulpino-gpio.yaml b/dts/bindings/gpio/pulp,pulpino-gpio.yaml new file mode 100644 index 00000000000..4f9ed9f96cd --- /dev/null +++ b/dts/bindings/gpio/pulp,pulpino-gpio.yaml @@ -0,0 +1,45 @@ +# +# Copyright (c) 2018, Linaro Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +--- +title: PULPINO GPIO Controller +id: pulp,pulpino-gpio +version: 0.1 + +description: > + This is a representation of the Pulpino GPIO node + +properties: + compatible: + type: string + category: required + description: compatible strings + constraint: "pulp,pulpino-gpio" + generation: define + + reg: + type: int + description: mmio register space + generation: define + category: required + + interrupts: + type: compound + category: required + description: required interrupts + generation: define + + label: + type: string + category: required + description: Human readable string describing the device (used by Zephyr for API name) + generation: define + +cell_string: GPIO + +"#cells": + - pin + - flags +... diff --git a/dts/riscv32/pulpino.dtsi b/dts/riscv32/pulpino.dtsi index 47b1eacb339..f8862d5f39a 100644 --- a/dts/riscv32/pulpino.dtsi +++ b/dts/riscv32/pulpino.dtsi @@ -4,6 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include + / { #address-cells = <1>; #size-cells = <1>; @@ -44,6 +46,17 @@ status = "disabled"; }; + gpio0: gpio@1a101000 { + compatible = "pulp,pulpino-gpio"; + gpio-controller; + reg = <0x1a101000 0x1000>; + interrupts = <25>; + interrupt-parent = <&intc>; + label = "GPIO"; + status = "disabled"; + #gpio-cells = <2>; + }; + intc: interrupt-controller@1a104000 { #interrupt-cells = <1>; compatible = "pulp,pulpino-event-unit"; diff --git a/soc/riscv32/pulpino/soc.h b/soc/riscv32/pulpino/soc.h index a1b137bc3f6..a5027ec6ca5 100644 --- a/soc/riscv32/pulpino/soc.h +++ b/soc/riscv32/pulpino/soc.h @@ -22,7 +22,6 @@ /* IRQ numbers */ #define PULP_I2C_0_IRQ 23 /* I2C Controller */ -#define PULP_GPIO_0_IRQ 25 /* GPIO Controller */ #define PULP_SPI_0_IRQ 26 /* SPI Controller #0 */ #define PULP_SPI_1_IRQ 27 /* SPI Controller #1 */ #define PULP_TIMER_A_OVERFLOW_IRQ 28 /* Timer Overflow A */ @@ -61,9 +60,6 @@ #define CONFIG_UART_NS16550_PORT_0_IRQ_PRI 0 #define CONFIG_UART_NS16550_PORT_0_IRQ_FLAGS 0 -/* GPIO configuration */ -#define PULP_GPIO_0_BASE 0x1A101000 - /* PAD configuration */ #define PULP_PAD_BASE 0x1A107000