Commit 9832973b authored by Sebastian Huber's avatar Sebastian Huber Committed by Daniel DeGrasse
Browse files

drivers: gpio: mchp_mss: Add reset support



Add support to reset the device through a reset controller.

Signed-off-by: default avatarSebastian Huber <sebastian.huber@embedded-brains.de>
parent 9132ac48
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -15,6 +15,12 @@

#include <zephyr/drivers/gpio/gpio_utils.h>

/* Is MSS GPIO module 'resets' line property defined */
#define MSS_GPIO_RESET_ENABLED DT_ANY_INST_HAS_PROP_STATUS_OKAY(resets)

#if MSS_GPIO_RESET_ENABLED
#include <zephyr/drivers/reset.h>
#endif

#define MSS_GPIO_INPUT_MODE               0x02
#define MSS_GPIO_OUTPUT_MODE              0x05
@@ -48,6 +54,9 @@ struct mss_gpio_config {
	uintptr_t            gpio_base_addr;
	uint32_t                gpio_irq_base;
	mss_gpio_cfg_func_t    gpio_cfg_func;
#if MSS_GPIO_RESET_ENABLED
	struct reset_dt_spec reset_spec;
#endif
};

struct mss_gpio_data {
@@ -209,10 +218,15 @@ static DEVICE_API(gpio, mss_gpio_driver) = {
static int mss_gpio_init(const struct device *dev)
{
	volatile struct mss_gpio_t *gpio = DEV_GPIO(dev);
	const struct mss_gpio_config *cfg = DEV_GPIO_CFG(dev);

	gpio->gpio_irq = 0xFFFFFFFFU;
#if MSS_GPIO_RESET_ENABLED
	if (cfg->reset_spec.dev != NULL) {
		(void)reset_line_deassert_dt(&cfg->reset_spec);
	}
#endif

	const struct mss_gpio_config *cfg = DEV_GPIO_CFG(dev);
	gpio->gpio_irq = 0xFFFFFFFFU;
	/* Configure GPIO device */
	cfg->gpio_cfg_func();
	return 0;
@@ -239,7 +253,9 @@ static void mss_gpio_irq_handler(const struct device *dev)
		},	\
		.gpio_base_addr = DT_INST_REG_ADDR(n),	\
		.gpio_irq_base  = DT_INST_IRQN(n),	\
		.gpio_cfg_func = gpio_mss_gpio_cfg_func_##n	\
		.gpio_cfg_func = gpio_mss_gpio_cfg_func_##n,	\
		IF_ENABLED(DT_INST_NODE_HAS_PROP(n, resets),	\
			(.reset_spec = RESET_DT_SPEC_INST_GET(n),))	\
	};	\
	\
	DEVICE_DT_INST_DEFINE(n,	\
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ description: Microchip PolarFire SoC GPIO

compatible: "microchip,mpfs-gpio"

include: [gpio-controller.yaml, base.yaml]
include: [gpio-controller.yaml, base.yaml, reset-device.yaml]

properties:
  reg: