/*
 * Copyright (c) 2020, Linaro Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Application overlay for testing driver builds
 *
 * Names in this file should be chosen in a way that won't conflict
 * with real-world devicetree nodes, to allow these tests to run on
 * (and be extended to test) real hardware.
 */

/ {
	test {
		#address-cells = <1>;
		#size-cells = <1>;

		test_gpio: gpio@deadbeef {
			compatible = "vnd,gpio";
			gpio-controller;
			reg = <0xdeadbeef 0x1000>;
			#gpio-cells = <0x2>;
			status = "okay";
		};

		test_gpio_dw: gpio@c0ffee {
			compatible = "snps,designware-gpio";
			gpio-controller;
			reg = <0xc0ffee 0x1000>;
			#gpio-cells = <0x2>;
			status = "okay";
		};

		test_i2c: i2c@11112222 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "vnd,i2c";
			reg = <0x11112222 0x1000>;
			status = "okay";
			clock-frequency = <100000>;

			test_i2c_sx1509b: sx1509b@0 {
				compatible = "semtech,sx1509b";
				reg = <0x00>;
				#gpio-cells = <2>;
				ngpios = <16>;
				gpio-controller;
			};

			test_i2c_pcal6408a: pcal6408a@1 {
				compatible = "nxp,pcal6408a";
				reg = <0x01>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <8>;
				int-gpios = <&test_gpio 0 0>;
				reset-gpios = <&test_gpio 0 0>;
			};

			test_i2c_pcal6416a: pcal6416a@2 {
				compatible = "nxp,pcal6416a";
				reg = <0x02>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
				int-gpios = <&test_gpio 0 0>;
				reset-gpios = <&test_gpio 0 0>;
			};

			test_i2c_pca95xx: pca95xx@3 {
				compatible = "nxp,pca95xx";
				reg = <0x03>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
				interrupt-gpios = <&test_gpio 0 0>;
			};

			test_i2c_pcf8575: pcf8575@4 {
				compatible = "nxp,pcf857x";
				reg = <0x04>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
				int-gpios = <&test_gpio 0 0>;
			};

			test_i2c_pcf8574: pcf8574@5 {
				compatible = "nxp,pcf857x";
				reg = <0x05>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <8>;
				int-gpios = <&test_gpio 0 0>;
			};

			test_i2c_pca953x: pca953x@6 {
				compatible = "ti,tca9538";
				reg = <0x06>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <8>;
				nint-gpios = <&test_gpio 0 0>;
			};

			test_i2c_mcp230xx: mcp230xx@7 {
				compatible = "microchip,mcp230xx";
				reg = <0x07>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
			};

			test_i2c_fxl6408: fxl6408@8 {
				status = "okay";
				compatible = "fcs,fxl6408";
				reg = <0x08>;
				ngpios = <8>;
				#gpio-cells = <2>;
				gpio-controller;
			};

			mfd-nct38xx@9 {
				compatible = "nuvoton,nct38xx";
				reg = <0x09>;
				test_i2c_nct3807: nct3807 {
					#address-cells = <1>;
					#size-cells = <0>;
					compatible = "nuvoton,nct38xx-gpio";

					gpio@0 {
						compatible = "nuvoton,nct38xx-gpio-port";
						reg = <0x0>;
						gpio-controller;
						#gpio-cells = <2>;
						ngpios = <8>;
						pin_mask = <0xff>;
						pinmux_mask = <0xf7>;
					};

					gpio@1 {
						compatible = "nuvoton,nct38xx-gpio-port";
						reg = <0x1>;
						gpio-controller;
						#gpio-cells = <2>;
						ngpios = <8>;
						pin_mask = <0xff>;
					};
				};
			};

			test_i2c_nct3808_p1: mfd-nct38xx@a {
				compatible = "nuvoton,nct38xx";
				reg = <0x0a>;
				nct3808_0_P1 {
					#address-cells = <1>;
					#size-cells = <0>;
					compatible = "nuvoton,nct38xx-gpio";

					gpio@0 {
						compatible = "nuvoton,nct38xx-gpio-port";
						reg = <0x0>;
						gpio-controller;
						#gpio-cells = <2>;
						ngpios = <8>;
						pin_mask = <0xdc>;
						pinmux_mask = <0xff>;
					};
				};
			};

			test_i2c_nct3808_p2: mfd-nct38xx@b {
				compatible = "nuvoton,nct38xx";
				reg = <0x0b>;
				nct3808_0_P2 {
					#address-cells = <1>;
					#size-cells = <0>;
					compatible = "nuvoton,nct38xx-gpio";

					gpio@0 {
						compatible = "nuvoton,nct38xx-gpio-port";
						reg = <0x0>;
						gpio-controller;
						#gpio-cells = <2>;
						ngpios = <8>;
						pin_mask = <0xdc>;
						pinmux_mask = <0xff>;
					};
				};
			};

			test_i2c_tca6424a: tca6424a@c {
				compatible = "ti,tca6424a";
				reg = <0x0c>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <24>;
				int-gpios = <&test_gpio 0 0>;
				reset-gpios = <&test_gpio 0 0>;
			};

			test_i2c_axp192: axp192@d {
				compatible = "x-powers,axp192";
				reg = <0x0d>;

				axp192_gpio {
					compatible = "x-powers,axp192-gpio";
					gpio-controller;
					#gpio-cells = <2>;
					ngpios = <6>;
				};
			};

			test_i2c_ad559x: ad559x@e {
				compatible = "adi,ad559x";
				status = "okay";
				reg = <0x0e>;
				reset-gpios = <&test_gpio 0 0>;

				test_i2c_ad559x_gpio: gpio-controller {
					compatible = "adi,ad559x-gpio";
					gpio-controller;
					#gpio-cells = <2>;
					ngpios = <8>;
				};
			};
		};

		nct3807_alert_1 {
			compatible = "nuvoton,nct38xx-gpio-alert";
			irq-gpios =  <&test_gpio 0 0>;
			nct38xx-dev = <&test_i2c_nct3808_p1 &test_i2c_nct3808_p2>;
		};

		test_spi: spi@33334444 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "vnd,spi";
			reg = <0x33334444 0x1000>;
			status = "okay";
			clock-frequency = <2000000>;

			/* one entry for every devices at spi.dtsi */
			cs-gpios = <&test_gpio 0 0
				    &test_gpio 0 0
				    &test_gpio 0 0
				    &test_gpio 0 0
				    &test_gpio 0 0>;

			test_spi_mcp23s17: mcp23s17@0 {
				compatible = "microchip,mcp23s17";
				spi-max-frequency = <0>;
				reg = <0x0>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
			};

			test_spi_mcp23sxx: mcp23sxx@1 {
				compatible = "microchip,mcp23sxx";
				spi-max-frequency = <0>;
				reg = <0x01>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
			};

			test_spi_bd8lb600fs: bd8lb600fs@2 {
				compatible = "rohm,bd8lb600fs";
				status = "okay";
				spi-max-frequency = <0>;
				reg = <0x02>;
				reset-gpios = <&test_gpio 0 0>;
				instance-count = <1>;

				bd8lb600fs_gpio: bd8lb600fs_gpio {
					compatible = "rohm,bd8lb600fs-gpio";
					status = "okay";
					gpio-controller;
					#gpio-cells = <2>;
					ngpios = <8>;
				};
			};

			test_spi_ad559x: ad559x@3 {
				compatible = "adi,ad559x";
				status = "okay";
				reg = <0x03>;
				spi-max-frequency = <0>;
				reset-gpios = <&test_gpio 0 0>;

				test_spi_ad559x_gpio: gpio-controller {
					compatible = "adi,ad559x-gpio";
					gpio-controller;
					#gpio-cells = <2>;
					ngpios = <8>;
				};
			};

			test_spi_tle9104: tle9104@4 {
				compatible = "infineon,tle9104";
				status = "okay";
				spi-max-frequency = <0>;
				reg = <0x04>;
				resn-gpios = <&test_gpio 0 0>;
				en-gpios = <&test_gpio 0 0>;

				tle9104_gpio: tle9104_gpio {
					compatible = "infineon,tle9104-gpio";
					status = "okay";
					gpio-controller;
					#gpio-cells = <2>;
					ngpios = <4>;
				};
			};
		};
	};
};
