/*
 * 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_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 = <0x0>;
				#gpio-cells = <2>;
				ngpios = <16>;
				gpio-controller;
			};

			test_i2c_pcal6408a: pcal6408a@1 {
				compatible = "nxp,pcal6408a";
				reg = <0x1>;
				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 = <0x2>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <16>;
				int-gpios = <&test_gpio 0 0>;
				reset-gpios = <&test_gpio 0 0>;
			};

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

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

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

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

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

			mfd-nct38xx@72 {
				compatible = "nuvoton,nct38xx";
				reg = <0x72>;
				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@71 {
				compatible = "nuvoton,nct38xx";
				reg = <0x71>;
				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@75 {
				compatible = "nuvoton,nct38xx";
				reg = <0x75>;
				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@23 {
				compatible = "ti,tca6424a";
				reg = <0x23>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <24>;
				int-gpios = <&test_gpio 0 0>;
				reset-gpios = <&test_gpio 0 0>;
			};

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

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

		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";
				spi-max-frequency = <0>;
				reg = <0x02>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <8>;
				reset-gpios = <&test_gpio 0 0>;
			};

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

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

			test_spi_tle9104: tle9104@4 {
				compatible = "infineon,tle9104";
				spi-max-frequency = <0>;
				reg = <0x04>;
				gpio-controller;
				#gpio-cells = <2>;
				ngpios = <4>;
				resn-gpios = <&test_gpio 0 0>;
				en-gpios = <&test_gpio 0 0>;
			};
		};
	};
};
