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";
};