ShiboSoftwareDev/f1c100s-linux-gameboy

Restores PCB assembly metadata by assigning part numbers, managing 3D CAD models and orientations, removing test-point bodies, and validating top-side SMT solder-paste features.

Version
1.0.8
License
unset
Stars
0

firmware/carrier.dtsi

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * F1C100S Linux Game Boy carrier fragment.
 * Include this after suniv-f1c100s.dtsi in a complete board DTS.
 */
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
	aliases {
		serial0 = &uart0;
		spi0 = &spi0;
		spi1 = &spi1;
		i2c0 = &i2c0;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	gamepad_keys: gpio-keys {
		compatible = "gpio-keys";
		label = "F1C100S handheld controls";

		key-up     { label = "D-pad Up";     linux,code = <KEY_UP>;     gpios = <&gamepad 0 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-down   { label = "D-pad Down";   linux,code = <KEY_DOWN>;   gpios = <&gamepad 1 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-left   { label = "D-pad Left";   linux,code = <KEY_LEFT>;   gpios = <&gamepad 2 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-right  { label = "D-pad Right";  linux,code = <KEY_RIGHT>;  gpios = <&gamepad 3 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-a      { label = "A";            linux,code = <KEY_Z>;      gpios = <&gamepad 4 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-b      { label = "B";            linux,code = <KEY_X>;      gpios = <&gamepad 5 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-x      { label = "X";            linux,code = <KEY_A>;      gpios = <&gamepad 6 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-y      { label = "Y";            linux,code = <KEY_S>;      gpios = <&gamepad 7 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-select { label = "Select";       linux,code = <KEY_SELECT>; gpios = <&gamepad 8 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
		key-start  { label = "Start";        linux,code = <KEY_START>;  gpios = <&gamepad 9 GPIO_ACTIVE_LOW>; debounce-interval = <10>; };
	};
};

&pio {
	gameboy_i2c0_pins: i2c0-pe-pins {
		pins = "PE11", "PE12";
		function = "i2c0";
		bias-pull-up;
	};

	gameboy_spi1_pins: spi1-pe-pins {
		pins = "PE7", "PE8", "PE9", "PE10";
		function = "spi1";
	};
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_pe_pins>;
	status = "okay";
};

&spi0 {
	pinctrl-names = "default";
	pinctrl-0 = <&spi0_pc_pins>;
	status = "okay";

	flash@0 {
		compatible = "winbond,w25q128", "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <24000000>;
	};
};

&spi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&gameboy_spi1_pins>;
	status = "okay";

	display@0 {
		/* Common upstream ILI9341 initialization sequence. Verify the
		 * panel revision if using a module other than LCDWiki MSP2807. */
		compatible = "adafruit,yx240qv29", "ilitek,ili9341";
		reg = <0>;
		spi-max-frequency = <24000000>;
		dc-gpios = <&pio 4 2 GPIO_ACTIVE_HIGH>;    /* PE2 */
		reset-gpios = <&pio 4 3 GPIO_ACTIVE_LOW>; /* PE3 */
		rotation = <270>;
	};
};

&i2c0 {
	pinctrl-names = "default";
	pinctrl-0 = <&gameboy_i2c0_pins>;
	clock-frequency = <100000>;
	status = "okay";

	gamepad: gpio@20 {
		compatible = "nxp,pca9535";
		reg = <0x20>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
		interrupt-parent = <&pio>;
		interrupts = <4 4 IRQ_TYPE_LEVEL_LOW>; /* PE4 */
		gpio-line-names =
			"UP", "DOWN", "LEFT", "RIGHT", "A", "B", "X", "Y",
			"SELECT", "START", "NC10", "NC11", "NC12", "NC13", "NC14", "NC15";
	};
};

&codec {
	status = "okay";
};

&usb_otg {
	dr_mode = "peripheral";
	status = "okay";
};

&usbphy {
	status = "okay";
};

&otg_sram {
	status = "okay";
};