/*
 * Copyright (c) 2023 Vestas Wind Systems A/S
 *
 * SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/dt-bindings/gpio/gpio.h>

/ {
     zephyr,user {
             output-high-gpios = <&gpioc 2 GPIO_ACTIVE_LOW>;
             output-low-gpios = <&gpiof 1 GPIO_ACTIVE_HIGH>;
             input-gpios = <&gpioc 3 GPIO_ACTIVE_HIGH>;
     };
};

&gpioc {
	hog1 {
		gpio-hog;
		gpios = <2 GPIO_ACTIVE_LOW>;
		output-high;
	};

	hog2 {
		gpio-hog;
		gpios = <3 GPIO_ACTIVE_HIGH>;
		input;
	};
};

&gpiof {
	hog3 {
		gpio-hog;
		gpios = <1 GPIO_ACTIVE_HIGH>;
		output-low;
	};
};
