mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-07-12 18:19:42 -07:00
Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8b0f09c43e | |||
| 6faa39c570 | |||
| 56cd1626d6 | |||
| f99aff1149 | |||
| 5f1f6182cf | |||
| a0a45889f4 | |||
| 34b76db065 | |||
| 62edc065ad | |||
| 205c5bccb3 | |||
| 8aacf5c823 | |||
| bd6fb8d0a9 | |||
| 0be7aab31b | |||
| df92325273 | |||
| 4385a37cbf | |||
| 413b62304b | |||
| 5c5dcd3c4a | |||
| a30e6ea7f5 | |||
| d652e2d7bd | |||
| 39e4a5ebcf | |||
| 6794a56987 | |||
| d80eb6c482 | |||
| 235f113c25 | |||
| 1d892b9231 | |||
| 3cd958e549 | |||
| 6a66a44a8e | |||
| fd304683a3 | |||
| 492a61eee2 | |||
| 94d26a87fd | |||
| 88647c6e07 | |||
| 9de9224f80 | |||
| 2424c658de | |||
| 45dd6ff144 | |||
| a738af646b |
@@ -118,7 +118,12 @@ docker-image-pull:
|
||||
# Runs host-side on purpose: the website repo is not mounted into the build
|
||||
# container. The sync script is itself non-fatal, and the guard keeps it off
|
||||
# non-build docker targets (docker-shell, docker-update, ...).
|
||||
# Before any docker build, fail fast if the three shipped input-config
|
||||
# artifacts drifted from the per-pad definitions (see projects/ArchR/inputs).
|
||||
# Verification only: the build never rewrites the artifacts by itself.
|
||||
docker-%:
|
||||
@./projects/ArchR/inputs/gen-input-configs verify >/dev/null || \
|
||||
{ ./projects/ArchR/inputs/gen-input-configs verify; exit 1; }
|
||||
./scripts/get_env > .env
|
||||
BUILD_DIR="$(DOCKER_WORK_DIR)" $(DOCKER_CMD) run $(PODMAN_ARGS) $(INTERACTIVE) --init --env-file .env --rm --user $(UID):$(GID) $(GLOBAL_SETTINGS) $(LOCAL_SSH_KEYS_FILE) $(EMULATIONSTATION_SRC) -v "$(PWD)":"$(DOCKER_WORK_DIR)" -v /tmp:/tmp -w "$(DOCKER_WORK_DIR)" $(DOCKER_EXTRA_OPTS) $(DOCKER_IMAGE) $(COMMAND)
|
||||
@if [ "$*" = "RK3326" ]; then ./scripts/repo/sync-site-bases; fi
|
||||
|
||||
@@ -24,12 +24,12 @@ Arch R is a custom Linux distribution for the **R36S** handheld gaming console a
|
||||
- EmulationStation frontend with RetroArch and 18+ cores pre-installed.
|
||||
- Full audio support with speaker/headphone auto-switch.
|
||||
- Battery monitoring with capacity reporting and LED warning.
|
||||
- 43 pre-generated MIPI panel overlays (15 original + 18 clone + 10 soysauce variants), one per motherboard revision.
|
||||
- MIPI panel overlays for every known motherboard revision, generated on demand by the online overlay generator at https://arch-r.io/overlay-generator/ (or during flashing by the Arch R Flasher).
|
||||
- Separate images for original and clone boards, both with hardware auto-detection.
|
||||
- Integrated cross-device local and remote network play.
|
||||
- Fine-grained control for battery life and performance.
|
||||
- Bluetooth audio and controller support.
|
||||
- HDMI audio/video output, USB audio.
|
||||
- Bluetooth audio and controller support (via USB Bluetooth adapter; the boards have no internal radio).
|
||||
- USB audio devices (DACs, headsets, controllers with audio).
|
||||
- Device sync with Syncthing and rclone.
|
||||
- VPN support with WireGuard, Tailscale, and ZeroTier.
|
||||
- Built-in scraping and RetroAchievements.
|
||||
@@ -50,7 +50,7 @@ Arch R is a custom Linux distribution for the **R36S** handheld gaming console a
|
||||
|
||||
### Display Panels
|
||||
|
||||
Arch R ships 43 pre-generated MIPI panel overlays covering all known R36S display variants, named after the exact motherboard revision (e.g. `R36S-V21_2024-12-18_2551.dtbo`, `G80CA-MB_V1.3-20251212_Panel_8.dtbo`). Panel selection is done by copying the correct `.dtbo` file to `overlays/mipi-panel.dtbo` on the boot partition. Sources live under `config/archr-dts/{original,clone,soysauce}/<MB-revision>/`; the build extracts the panel description from each revision's `rk3326-r36s-linux.dtb` via `config/mipi-generator/generator.sh`.
|
||||
Panel overlays are not baked into the images. Generate the overlay for your exact motherboard revision at the online generator, https://arch-r.io/overlay-generator/ (pick your board, or upload the stock `dtb` from the SD card that shipped with the device), then copy the resulting file to `overlays/mipi-panel.dtbo` on the boot partition. The Arch R Flasher can also generate and install the overlay during flashing. The `/flash/overlays/` folder on a fresh install contains a `README.txt` with the same instructions.
|
||||
|
||||
## Quick Start
|
||||
|
||||
|
||||
@@ -15,6 +15,22 @@
|
||||
this = "r33s";
|
||||
};
|
||||
|
||||
gpio-leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&power_led_pin>;
|
||||
|
||||
led-0 {
|
||||
/* Mono blue power LED on GPIO2_B5 (BSP gpio77), active
|
||||
* low: the old JELOS quirk wrote 1 through the legacy
|
||||
* gpio sysfs to turn it off. sysfs name is blue:status. */
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
function = LED_FUNCTION_STATUS;
|
||||
gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_LOW>;
|
||||
default-state = "on";
|
||||
};
|
||||
};
|
||||
|
||||
builtin_gamepad: r33s_joypad {
|
||||
compatible = "archr-singleadc-joypad";
|
||||
pinctrl-names = "default";
|
||||
@@ -107,6 +123,12 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
leds {
|
||||
power_led_pin: power-led-pin {
|
||||
rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
btns {
|
||||
btn_pins: btn-pins {
|
||||
rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>,
|
||||
|
||||
@@ -15,6 +15,23 @@
|
||||
this = "r36s";
|
||||
};
|
||||
|
||||
gpio-leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&power_led_pin>;
|
||||
|
||||
led-0 {
|
||||
/* Bicolor power LED behind a single line (BSP gpio77 =
|
||||
* GPIO2_B5): driving it high lights red, low shows the
|
||||
* green side, so there is no hardware "off". Exposed as
|
||||
* the red half; sysfs name is red:status. */
|
||||
color = <LED_COLOR_ID_RED>;
|
||||
function = LED_FUNCTION_STATUS;
|
||||
gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
joypad: odroidgo3-joypad {
|
||||
compatible = "odroidgo3-joypad";
|
||||
pwms = <&pwm0 0 200000000 0>;
|
||||
@@ -202,6 +219,12 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
leds {
|
||||
power_led_pin: power-led-pin {
|
||||
rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
btns {
|
||||
btn_pins: btn-pins {
|
||||
rockchip,pins = <1 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>,
|
||||
|
||||
@@ -24,20 +24,19 @@
|
||||
this = "soysauce";
|
||||
};
|
||||
|
||||
/* LED indicators (soysauce-specific) */
|
||||
/* LED indicators (soysauce-specific). Only the blue power LED is
|
||||
* GPIO-driven; the red one is hardwired to the charger IC (toggling
|
||||
* the old led-red node on GPIO0_A5 did nothing on hardware, so the
|
||||
* node was a phantom and got dropped). The line is active HIGH:
|
||||
* declaring it active low inverted the whole ES power LED menu
|
||||
* (off lit the LED, on darkened it, heartbeat looked normal). */
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led-red {
|
||||
gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
|
||||
label = "red";
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led-blue {
|
||||
gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
|
||||
gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||
label = "blue";
|
||||
default-state = "off";
|
||||
default-state = "on";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -276,3 +275,16 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* The Soysauce routes the PMIC interrupt to GPIO0_A7, not the GPIO0_B2
|
||||
* the rest of the family uses (vendor DTB pmic_int pinctrl says pin 7).
|
||||
* With the wrong pin every rk817 interrupt is lost: power key, jack
|
||||
* detect, charger plug events and the suspend wake path (verified live:
|
||||
* /proc/interrupts stayed at zero across button presses). */
|
||||
&rk817 {
|
||||
interrupts = <RK_PA7 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
|
||||
&pmic_int {
|
||||
rockchip,pins = <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
};
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
# for a list of additional drivers see packages/linux-drivers
|
||||
# Space separated list is supported,
|
||||
# e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2"
|
||||
ADDITIONAL_DRIVERS="RTL8188EUS RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU RTL8831 AIC8800 mali-bifrost"
|
||||
ADDITIONAL_DRIVERS="rk915 RTL8188EUS RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU RTL8831 AIC8800 mali-bifrost"
|
||||
|
||||
# Additional Firmware to use ( )
|
||||
# Space separated list is supported,
|
||||
|
||||
+238
@@ -0,0 +1,238 @@
|
||||
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
|
||||
index 1bbff11..xxxxxxx 100644
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c 2025-12-07 05:25:03.000000000 +0800
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c 2026-03-24 08:32:09.772362168 +0800
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
+#include <linux/regulator/consumer.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
@@ -189,6 +190,8 @@
|
||||
* @port_id: flag for otg port or host port.
|
||||
* @suspended: phy suspended flag.
|
||||
* @vbus_attached: otg device vbus status.
|
||||
+ * @switch_gpio: GPIO descriptor for USB signal routing switch.
|
||||
+ * @ext_supply: regulator for external USB device power supply.
|
||||
* @host_disconnect: usb host disconnect status.
|
||||
* @bvalid_irq: IRQ number assigned for vbus valid rise detection.
|
||||
* @id_irq: IRQ number assigned for ID pin detection.
|
||||
@@ -209,6 +212,8 @@
|
||||
unsigned int port_id;
|
||||
bool suspended;
|
||||
bool vbus_attached;
|
||||
+ struct gpio_desc *switch_gpio;
|
||||
+ struct regulator *ext_supply;
|
||||
bool host_disconnect;
|
||||
int bvalid_irq;
|
||||
int id_irq;
|
||||
@@ -640,6 +645,24 @@
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Check if we should be in USB host mode.
|
||||
+ * Returns true if:
|
||||
+ * - EXTCON_USB_HOST is set, OR
|
||||
+ * - switch_gpio exists and is low (internal device mode)
|
||||
+ */
|
||||
+static bool rockchip_usb2phy_is_host_mode(struct rockchip_usb2phy *rphy,
|
||||
+ struct rockchip_usb2phy_port *rport)
|
||||
+{
|
||||
+ if (rphy->edev && extcon_get_state(rphy->edev, EXTCON_USB_HOST) > 0)
|
||||
+ return true;
|
||||
+
|
||||
+ if (rport->switch_gpio && gpiod_get_value_cansleep(rport->switch_gpio) == 0)
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static void rockchip_usb2phy_otg_sm_work(struct work_struct *work)
|
||||
{
|
||||
struct rockchip_usb2phy_port *rport =
|
||||
@@ -666,7 +689,7 @@
|
||||
rockchip_usb2phy_power_off(rport->phy);
|
||||
fallthrough;
|
||||
case OTG_STATE_B_IDLE:
|
||||
- if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) > 0) {
|
||||
+ if (rockchip_usb2phy_is_host_mode(rphy, rport)) {
|
||||
dev_dbg(&rport->phy->dev, "usb otg host connect\n");
|
||||
rport->state = OTG_STATE_A_HOST;
|
||||
rockchip_usb2phy_power_on(rport->phy);
|
||||
@@ -740,7 +763,7 @@
|
||||
sch_work = true;
|
||||
break;
|
||||
case OTG_STATE_A_HOST:
|
||||
- if (extcon_get_state(rphy->edev, EXTCON_USB_HOST) == 0) {
|
||||
+ if (!rockchip_usb2phy_is_host_mode(rphy, rport)) {
|
||||
dev_dbg(&rport->phy->dev, "usb otg host disconnect\n");
|
||||
rport->state = OTG_STATE_B_IDLE;
|
||||
rockchip_usb2phy_power_off(rport->phy);
|
||||
@@ -1042,6 +1065,115 @@
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Helper to find OTG port
|
||||
+ */
|
||||
+static struct rockchip_usb2phy_port *
|
||||
+rockchip_usb2phy_find_switch_port(struct rockchip_usb2phy *rphy)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < rphy->phy_cfg->num_ports; i++) {
|
||||
+ if (rphy->ports[i].port_id == USB2PHY_PORT_OTG)
|
||||
+ return &rphy->ports[i];
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static ssize_t usb_switch_gpio_show(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct rockchip_usb2phy *rphy = dev_get_drvdata(dev);
|
||||
+ struct rockchip_usb2phy_port *rport;
|
||||
+
|
||||
+ rport = rockchip_usb2phy_find_switch_port(rphy);
|
||||
+ if (!rport || !rport->switch_gpio)
|
||||
+ return sysfs_emit(buf, "unsupported\n");
|
||||
+
|
||||
+ return sysfs_emit(buf, "%d\n",
|
||||
+ gpiod_get_value_cansleep(rport->switch_gpio));
|
||||
+}
|
||||
+
|
||||
+static ssize_t usb_switch_gpio_store(struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ const char *buf, size_t count)
|
||||
+{
|
||||
+ struct rockchip_usb2phy *rphy = dev_get_drvdata(dev);
|
||||
+ struct rockchip_usb2phy_port *rport;
|
||||
+ unsigned int val;
|
||||
+ int ret;
|
||||
+
|
||||
+ rport = rockchip_usb2phy_find_switch_port(rphy);
|
||||
+ if (!rport || !rport->switch_gpio)
|
||||
+ return -ENOTSUPP;
|
||||
+
|
||||
+ ret = kstrtouint(buf, 10, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ gpiod_set_value_cansleep(rport->switch_gpio, val ? 1 : 0);
|
||||
+ dev_info(dev, "switch_gpio set to %d\n", val ? 1 : 0);
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+static DEVICE_ATTR_RW(usb_switch_gpio);
|
||||
+
|
||||
+static ssize_t usb_switch_ext_show(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct rockchip_usb2phy *rphy = dev_get_drvdata(dev);
|
||||
+ struct rockchip_usb2phy_port *rport;
|
||||
+
|
||||
+ rport = rockchip_usb2phy_find_switch_port(rphy);
|
||||
+ if (!rport || !rport->ext_supply)
|
||||
+ return sysfs_emit(buf, "unsupported\n");
|
||||
+
|
||||
+ return sysfs_emit(buf, "%d\n", regulator_is_enabled(rport->ext_supply));
|
||||
+}
|
||||
+
|
||||
+static ssize_t usb_switch_ext_store(struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ const char *buf, size_t count)
|
||||
+{
|
||||
+ struct rockchip_usb2phy *rphy = dev_get_drvdata(dev);
|
||||
+ struct rockchip_usb2phy_port *rport;
|
||||
+ unsigned int val;
|
||||
+ int ret;
|
||||
+
|
||||
+ rport = rockchip_usb2phy_find_switch_port(rphy);
|
||||
+ if (!rport || !rport->ext_supply)
|
||||
+ return -ENOTSUPP;
|
||||
+
|
||||
+ ret = kstrtouint(buf, 10, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (val)
|
||||
+ ret = regulator_enable(rport->ext_supply);
|
||||
+ else
|
||||
+ ret = regulator_disable(rport->ext_supply);
|
||||
+
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "failed to %s ext-supply: %d\n",
|
||||
+ val ? "enable" : "disable", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ dev_info(dev, "ext-supply %s\n", val ? "enabled" : "disabled");
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+static DEVICE_ATTR_RW(usb_switch_ext);
|
||||
+
|
||||
+static struct attribute *rockchip_usb2phy_switch_attrs[] = {
|
||||
+ &dev_attr_usb_switch_gpio.attr,
|
||||
+ &dev_attr_usb_switch_ext.attr,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static const struct attribute_group rockchip_usb2phy_switch_group = {
|
||||
+ .attrs = rockchip_usb2phy_switch_attrs,
|
||||
+};
|
||||
+
|
||||
static irqreturn_t rockchip_usb2phy_id_irq(int irq, void *data)
|
||||
{
|
||||
struct rockchip_usb2phy_port *rport = data;
|
||||
@@ -1281,6 +1413,34 @@
|
||||
|
||||
mutex_init(&rport->mutex);
|
||||
|
||||
+ /*
|
||||
+ * Get optional switch GPIO for USB signal routing.
|
||||
+ * Some devices use a GPIO to multiplex USB signals between
|
||||
+ * an external USB port and an internal device (like WiFi).
|
||||
+ * Default to internal device (GPIO low) on init.
|
||||
+ */
|
||||
+ rport->switch_gpio = devm_fwnode_gpiod_get(rphy->dev,
|
||||
+ of_fwnode_handle(child_np),
|
||||
+ "switch", GPIOD_OUT_LOW,
|
||||
+ "usb-switch");
|
||||
+ if (IS_ERR(rport->switch_gpio)) {
|
||||
+ if (PTR_ERR(rport->switch_gpio) != -ENOENT)
|
||||
+ dev_warn(rphy->dev, "failed to get switch GPIO: %ld\n",
|
||||
+ PTR_ERR(rport->switch_gpio));
|
||||
+ rport->switch_gpio = NULL;
|
||||
+ } else if (rport->switch_gpio) {
|
||||
+ gpiod_set_value_cansleep(rport->switch_gpio, 0);
|
||||
+ dev_info(rphy->dev, "USB switch GPIO initialized, default to internal device\n");
|
||||
+ }
|
||||
+
|
||||
+ rport->ext_supply = devm_regulator_get_optional(&rport->phy->dev, "ext");
|
||||
+ if (IS_ERR(rport->ext_supply)) {
|
||||
+ rport->ext_supply = NULL;
|
||||
+ } else if (rport->ext_supply) {
|
||||
+ regulator_enable(rport->ext_supply);
|
||||
+ dev_info(rphy->dev, "ext-supply regulator initialized, default enabled\n");
|
||||
+ }
|
||||
+
|
||||
rport->mode = of_usb_get_dr_mode_by_phy(child_np, -1);
|
||||
if (rport->mode == USB_DR_MODE_HOST ||
|
||||
rport->mode == USB_DR_MODE_UNKNOWN) {
|
||||
@@ -1480,6 +1640,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Create sysfs for USB switch control */
|
||||
+ if (rockchip_usb2phy_find_switch_port(rphy)) {
|
||||
+ ret = sysfs_create_group(&dev->kobj, &rockchip_usb2phy_switch_group);
|
||||
+ if (ret)
|
||||
+ dev_warn(dev, "failed to create usb_switch sysfs: %d\n", ret);
|
||||
+ }
|
||||
+
|
||||
return PTR_ERR_OR_ZERO(provider);
|
||||
|
||||
put_child:
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
diff -ur linux-6.12.29/drivers/mmc/core/host.c linux_for_rk915/drivers/mmc/core/host.c
|
||||
--- linux-6.12.29/drivers/mmc/core/host.c 2025-05-18 06:25:00.000000000 +0000
|
||||
+++ linux_for_rk915/drivers/mmc/core/host.c 2025-06-28 17:43:59.825733795 +0000
|
||||
@@ -403,6 +403,8 @@
|
||||
host->caps2 |= MMC_CAP2_NO_SD;
|
||||
if (device_property_read_bool(dev, "no-mmc"))
|
||||
host->caps2 |= MMC_CAP2_NO_MMC;
|
||||
+ if (device_property_read_bool(dev, "supports-rk912"))
|
||||
+ host->caps2 |= MMC_CAP2_WIFI_RK912;
|
||||
if (device_property_read_bool(dev, "no-mmc-hs400"))
|
||||
host->caps2 &= ~(MMC_CAP2_HS400_1_8V | MMC_CAP2_HS400_1_2V |
|
||||
MMC_CAP2_HS400_ES);
|
||||
diff -ur linux-6.12.29/drivers/mmc/core/sdio.c linux_for_rk915/drivers/mmc/core/sdio.c
|
||||
--- linux-6.12.29/drivers/mmc/core/sdio.c 2025-05-18 06:25:00.000000000 +0000
|
||||
+++ linux_for_rk915/drivers/mmc/core/sdio.c 2025-06-28 17:43:59.827733748 +0000
|
||||
@@ -1076,7 +1076,8 @@
|
||||
* removable card is checked from a detect work later on in the resume
|
||||
* process.
|
||||
*/
|
||||
- if (!mmc_card_keep_power(host)) {
|
||||
+ if (!mmc_card_keep_power(host) &&
|
||||
+ !(host->caps2 & MMC_CAP2_WIFI_RK912)) {
|
||||
mmc_power_up(host, host->card->ocr);
|
||||
/*
|
||||
* Tell runtime PM core we just powered up the card,
|
||||
diff -ur linux-6.12.29/drivers/mmc/core/sdio_cis.c linux_for_rk915/drivers/mmc/core/sdio_cis.c
|
||||
--- linux-6.12.29/drivers/mmc/core/sdio_cis.c 2025-05-18 06:25:00.000000000 +0000
|
||||
+++ linux_for_rk915/drivers/mmc/core/sdio_cis.c 2025-06-28 17:43:59.826733772 +0000
|
||||
@@ -190,15 +191,15 @@
|
||||
pr_warn("%s: card has broken SDIO 1.1 CIS, forcing SDIO 1.0\n",
|
||||
mmc_hostname(card->host));
|
||||
vsn = SDIO_SDIO_REV_1_00;
|
||||
- } else if (size < min_size) {
|
||||
+ } else if (size < min_size && !(card->host->caps2 & MMC_CAP2_WIFI_RK912)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* TPLFE_MAX_BLK_SIZE */
|
||||
func->max_blksize = buf[12] | (buf[13] << 8);
|
||||
|
||||
/* TPLFE_ENABLE_TIMEOUT_VAL, present in ver 1.1 and above */
|
||||
- if (vsn > SDIO_SDIO_REV_1_00)
|
||||
+ if (vsn > SDIO_SDIO_REV_1_00 && !(card->host->caps2 & MMC_CAP2_WIFI_RK912))
|
||||
func->enable_timeout = (buf[28] | (buf[29] << 8)) * 10;
|
||||
else
|
||||
func->enable_timeout = jiffies_to_msecs(HZ);
|
||||
diff -ur linux-6.12.29/drivers/mmc/host/dw_mmc.c linux_for_rk915/drivers/mmc/host/dw_mmc.c
|
||||
--- linux-6.12.29/drivers/mmc/host/dw_mmc.c 2025-05-18 06:25:00.000000000 +0000
|
||||
+++ linux_for_rk915/drivers/mmc/host/dw_mmc.c 2025-06-28 17:44:02.417672518 +0000
|
||||
@@ -295,6 +295,10 @@
|
||||
SDMMC_CMD_PRV_DAT_WAIT, 0);
|
||||
}
|
||||
|
||||
+ if ((mmc->caps2 & MMC_CAP2_WIFI_RK912) &&
|
||||
+ (cmd->opcode == SD_IO_RW_DIRECT))
|
||||
+ cmdr |= SDMMC_CMD_PRV_DAT_WAIT;
|
||||
+
|
||||
if (cmd->flags & MMC_RSP_PRESENT) {
|
||||
/* We expect a response, so set this bit */
|
||||
cmdr |= SDMMC_CMD_RESP_EXP;
|
||||
@@ -1263,7 +1267,8 @@
|
||||
|
||||
/* enable clock; only low power if no SDIO */
|
||||
clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;
|
||||
- if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags))
|
||||
+ if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags) &&
|
||||
+ !(slot->mmc->caps2 & MMC_CAP2_WIFI_RK912))
|
||||
clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;
|
||||
mci_writel(host, CLKENA, clk_en_a);
|
||||
|
||||
diff -ur linux-6.12.29/include/linux/mmc/host.h linux_for_rk915/include/linux/mmc/host.h
|
||||
--- linux-6.12.29/include/linux/mmc/host.h 2025-05-18 06:25:00.000000000 +0000
|
||||
+++ linux_for_rk915/include/linux/mmc/host.h 2025-06-28 17:45:54.422123779 +0000
|
||||
@@ -404,6 +404,7 @@
|
||||
#define MMC_CAP2_CRYPTO 0
|
||||
#endif
|
||||
#define MMC_CAP2_ALT_GPT_TEGRA (1 << 28) /* Host with eMMC that has GPT entry at a non-standard location */
|
||||
+#define MMC_CAP2_WIFI_RK912 (1 << 29)
|
||||
|
||||
int fixed_drv_type; /* fixed driver type for non-removable media */
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# Built-in gamepad definitions (single source of truth)
|
||||
|
||||
Every built-in platform pad must exist in THREE shipped artifacts:
|
||||
|
||||
1. `packages/ui/emulationstation/config/common/es_input.cfg` (EmulationStation)
|
||||
2. `packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/<name>.cfg` (RetroArch)
|
||||
3. `packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt` (SDL games and ports)
|
||||
|
||||
Historically these were maintained by hand and nothing checked they agreed:
|
||||
the Soysauce pad shipped without the SDL entry, so ports saw no controller.
|
||||
The JSON files in `defs/` are now the source of truth and `gen-input-configs`
|
||||
keeps the three artifacts honest.
|
||||
|
||||
## Daily use
|
||||
|
||||
`make docker-*` refuses to build if the artifacts drifted from `defs/`:
|
||||
|
||||
./gen-input-configs verify # what CI/build runs
|
||||
./gen-input-configs write # regenerate artifacts from defs
|
||||
|
||||
Only external controllers (USB/Bluetooth pads inherited from upstream
|
||||
databases) stay unmanaged; the managed set is exactly the defs directory.
|
||||
|
||||
## Adding a new pad (example: a future R36T Max)
|
||||
|
||||
1. On the device, read the identity:
|
||||
|
||||
cat /proc/bus/input/devices # Name=, Vendor=, Product=, Version=
|
||||
|
||||
2. Compute the GUID the runtime will use (bus 0x19 for platform drivers):
|
||||
|
||||
./gen-input-configs guid "r36tmax_Gamepad" --vendor 1 --product 0x1199 --version 0x0100
|
||||
|
||||
Vendor or product zero switches SDL to the name-embedded GUID form
|
||||
automatically, exactly like the runtime does (that mismatch was the
|
||||
Soysauce bug).
|
||||
|
||||
3. Copy the closest def (`defs/r36s_Gamepad.json`), adjust name, identity,
|
||||
buses, the SDL mapping string, the ES inputs and the RetroArch keys.
|
||||
|
||||
4. Materialize and check:
|
||||
|
||||
./gen-input-configs write "r36tmax_Gamepad"
|
||||
./gen-input-configs verify
|
||||
|
||||
5. Commit the def together with the regenerated artifacts.
|
||||
|
||||
## Fidelity rules (deliberate)
|
||||
|
||||
* gamecontrollerdb line: byte-exact; the GUID is always recomputed from the
|
||||
identity fields (use `guid_override` only for entries that predate the
|
||||
tool and cannot be reproduced; none of the platform pads needs it).
|
||||
* RetroArch cfg and es_input block: semantically exact (key/value sets);
|
||||
comments, blank lines and ordering are not preserved by `write`.
|
||||
* `sdl_mapping` may be a per-GUID dict when buses legitimately differ
|
||||
(retrogame_joypad ships guide:b10 only on the 0x19 bus line).
|
||||
Binary file not shown.
@@ -0,0 +1,204 @@
|
||||
{
|
||||
"name": "GO-Super Gamepad",
|
||||
"vendor": 0,
|
||||
"product": 4352,
|
||||
"version": 256,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,a:b1,b:b0,dpdown:b14,dpleft:b15,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,dpright:b16,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b12,righttrigger:b7,back:b8,start:b9,dpup:b13,x:b2,y:b3,",
|
||||
"retroarch": {
|
||||
"input_device": "GO-Super Gamepad",
|
||||
"input_driver": "udev",
|
||||
"input_vendor_id": "0000",
|
||||
"input_product_id": "1100",
|
||||
"input_b_btn": "0",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_y_btn": "3",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_up_btn": "13",
|
||||
"input_down_btn": "14",
|
||||
"input_left_btn": "15",
|
||||
"input_right_btn": "16",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_l3_btn": "11",
|
||||
"input_r3_btn": "12",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_enable_hotkey_btn": "8",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_screenshot_btn": "0",
|
||||
"input_pause_toggle_btn": "1",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_state_slot_increase_btn": "13",
|
||||
"input_state_slot_decrease_btn": "14",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "6",
|
||||
"input_toggle_fast_forward_btn": "7"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "16",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"name": "GO-Ultra Gamepad",
|
||||
"vendor": 0,
|
||||
"product": 0,
|
||||
"version": 0,
|
||||
"buses": [
|
||||
3
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4,",
|
||||
"retroarch": {
|
||||
"input_device": "GO-Ultra Gamepad",
|
||||
"input_driver": "udev",
|
||||
"input_b_btn": "0",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "3",
|
||||
"input_y_btn": "4",
|
||||
"input_l_btn": "5",
|
||||
"input_r_btn": "6",
|
||||
"input_l2_btn": "7",
|
||||
"input_r2_btn": "8",
|
||||
"input_up_btn": "14",
|
||||
"input_down_btn": "15",
|
||||
"input_left_btn": "16",
|
||||
"input_right_btn": "17",
|
||||
"input_select_btn": "9",
|
||||
"input_start_btn": "10",
|
||||
"input_l3_btn": "12",
|
||||
"input_r3_btn": "13",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_enable_hotkey_btn": "11",
|
||||
"input_exit_emulator_btn": "10",
|
||||
"input_screenshot_btn": "0",
|
||||
"input_pause_toggle_btn": "1",
|
||||
"input_menu_toggle_btn": "3",
|
||||
"input_fps_toggle_btn": "4",
|
||||
"input_state_slot_increase_btn": "14",
|
||||
"input_state_slot_decrease_btn": "15",
|
||||
"input_load_state_btn": "5",
|
||||
"input_save_state_btn": "6",
|
||||
"input_rewind_btn": "7",
|
||||
"input_toggle_fast_forward_btn": "8"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "16",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "17",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"name": "GameForce ACE Gamepad",
|
||||
"vendor": 0,
|
||||
"product": 0,
|
||||
"version": 0,
|
||||
"buses": [
|
||||
3
|
||||
],
|
||||
"sdl_mapping": "a:b1,b:b0,dpdown:b13,dpleft:b14,lefty:a1,leftx:a0,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "GameForce ACE Gamepad",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "4",
|
||||
"input_select_btn": "7",
|
||||
"input_start_btn": "8",
|
||||
"input_up_btn": "12",
|
||||
"input_down_btn": "13",
|
||||
"input_left_btn": "14",
|
||||
"input_right_btn": "15",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "3",
|
||||
"input_l_btn": "5",
|
||||
"input_r_btn": "6",
|
||||
"input_l2_axis": "-2",
|
||||
"input_r2_axis": "-5",
|
||||
"input_l3_btn": "10",
|
||||
"input_r3_btn": "11",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+3",
|
||||
"input_r_x_minus_axis": "-3",
|
||||
"input_r_y_plus_axis": "+4",
|
||||
"input_r_y_minus_axis": "-4",
|
||||
"input_enable_hotkey_btn": "9"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "4",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "axis",
|
||||
"id": "5",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"name": "H700 Gamepad",
|
||||
"vendor": 18507,
|
||||
"product": 5343,
|
||||
"version": 256,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b3,a:b1,b:b0,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "H700 Gamepad",
|
||||
"input_device_display_name": "Anbernic RG35XX Gamepad",
|
||||
"input_vendor_id": "18507",
|
||||
"input_product_id": "5343",
|
||||
"input_b_btn": "0",
|
||||
"input_a_btn": "1",
|
||||
"input_y_btn": "2",
|
||||
"input_x_btn": "3",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_l3_btn": "11",
|
||||
"input_r3_btn": "12",
|
||||
"input_up_btn": "13",
|
||||
"input_down_btn": "14",
|
||||
"input_left_btn": "15",
|
||||
"input_right_btn": "16",
|
||||
"input_enable_hotkey_btn": "10",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_pause_toggle_btn": "1",
|
||||
"input_menu_toggle_btn": "3",
|
||||
"input_fps_toggle_btn": "2",
|
||||
"input_screenshot_btn": "nul",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_toggle_fast_forward_btn": "7",
|
||||
"input_rewind_btn": "6",
|
||||
"input_analog_dpad_mode": "0",
|
||||
"input_gun_trigger_mbtn": "1",
|
||||
"input_joypad_index": "0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_mouse_index": "0",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_state_slot_increase_btn": "nul",
|
||||
"input_state_slot_decrease_btn": "nul"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "16",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"name": "RGB20S Gamepad",
|
||||
"vendor": 18507,
|
||||
"product": 4471,
|
||||
"version": 375,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b12,start:b13,dpleft:b10,dpdown:b9,dpright:b11,dpup:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b14,rightstick:b15,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "RGB20S Gamepad",
|
||||
"input_device_display_name": "RGB20S Gamepad",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "3",
|
||||
"input_select_btn": "12",
|
||||
"input_start_btn": "13",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_l3_btn": "14",
|
||||
"input_r3_btn": "15",
|
||||
"input_up_btn": "8",
|
||||
"input_down_btn": "9",
|
||||
"input_left_btn": "10",
|
||||
"input_right_btn": "11",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_enable_hotkey_btn": "12",
|
||||
"input_exit_emulator_btn": "13",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "6",
|
||||
"input_toggle_fast_forward_btn": "7"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"name": "XU10 Gamepad",
|
||||
"vendor": 50096,
|
||||
"product": 512,
|
||||
"version": 16,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,guide:b16,start:b9,dpleft:b14,dpdown:b13,dpright:b15,dpup:b12,leftshoulder:b4,lefttrigger:b7,rightshoulder:b5,righttrigger:b6,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
|
||||
"retroarch": {
|
||||
"input_device": "XU10 Gamepad",
|
||||
"input_driver": "udev",
|
||||
"input_device_display_name": "MagicX XU10 Gamepad",
|
||||
"input_b_btn": "1",
|
||||
"input_a_btn": "2",
|
||||
"input_x_btn": "3",
|
||||
"input_y_btn": "0",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "7",
|
||||
"input_r2_btn": "6",
|
||||
"input_up_btn": "12",
|
||||
"input_down_btn": "13",
|
||||
"input_left_btn": "14",
|
||||
"input_right_btn": "15",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_l3_btn": "10",
|
||||
"input_r3_btn": "11",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_enable_hotkey_btn": "16",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_screenshot_btn": "0",
|
||||
"input_pause_toggle_btn": "1",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_state_slot_increase_btn": "7",
|
||||
"input_state_slot_decrease_btn": "6",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "10",
|
||||
"input_toggle_fast_forward_btn": "11"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "16",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"name": "XU Mini M Gamepad",
|
||||
"vendor": 50096,
|
||||
"product": 512,
|
||||
"version": 16,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b8,guide:b16,start:b9,dpleft:b14,dpdown:b13,dpright:b15,dpup:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "XU Mini M Gamepad",
|
||||
"input_device_display_name": "MagicX XU Mini M Gamepad",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "3",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_up_btn": "12",
|
||||
"input_down_btn": "13",
|
||||
"input_left_btn": "14",
|
||||
"input_right_btn": "15",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_l3_btn": "10",
|
||||
"input_r3_btn": "11",
|
||||
"input_l_x_plus_axis": "+1",
|
||||
"input_l_x_minus_axis": "-1",
|
||||
"input_l_y_plus_axis": "-0",
|
||||
"input_l_y_minus_axis": "+0",
|
||||
"input_r_x_plus_axis": "+3",
|
||||
"input_r_x_minus_axis": "-3",
|
||||
"input_r_y_plus_axis": "-2",
|
||||
"input_r_y_minus_axis": "+2",
|
||||
"input_enable_hotkey_btn": "16",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "6",
|
||||
"input_toggle_fast_forward_btn": "7"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "16",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"name": "odroidgo2_joypad",
|
||||
"vendor": 1,
|
||||
"product": 1,
|
||||
"version": 257,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b10,start:b13,dpleft:b8,dpdown:b7,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b11,rightshoulder:b5,righttrigger:b12,leftx:a0,lefty:a1,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "odroidgo2_joypad",
|
||||
"input_device_display_name": "Odroid GO Advance Joypad",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "3",
|
||||
"input_select_btn": "10",
|
||||
"input_start_btn": "13",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "11",
|
||||
"input_r2_btn": "12",
|
||||
"input_up_btn": "6",
|
||||
"input_down_btn": "7",
|
||||
"input_left_btn": "8",
|
||||
"input_right_btn": "9",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_enable_hotkey_btn": "10",
|
||||
"input_exit_emulator_btn": "13",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "11",
|
||||
"input_toggle_fast_forward_btn": "12"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"name": "odroidgo2_v11_joypad",
|
||||
"vendor": 1,
|
||||
"product": 2,
|
||||
"version": 257,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b8,start:b9,dpleft:b14,dpdown:b13,dpright:b15,dpup:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "odroidgo2_v11_joypad",
|
||||
"input_device_display_name": "Odroid GO Advance Joypad v1.1",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "3",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_l3_btn": "10",
|
||||
"input_r3_btn": "11",
|
||||
"input_up_btn": "12",
|
||||
"input_down_btn": "13",
|
||||
"input_left_btn": "14",
|
||||
"input_right_btn": "15",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_enable_hotkey_btn": "8",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "6",
|
||||
"input_toggle_fast_forward_btn": "7"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"name": "odroidgo3_joypad",
|
||||
"vendor": 1,
|
||||
"product": 1,
|
||||
"version": 257,
|
||||
"buses": [
|
||||
25
|
||||
],
|
||||
"sdl_mapping": "a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,dpright:b15,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b11,righttrigger:b7,back:b8,start:b9,dpup:b12,x:b2,y:b3,platform:Linux,",
|
||||
"retroarch": {
|
||||
"input_driver": "udev",
|
||||
"input_device": "odroidgo3_joypad",
|
||||
"input_device_display_name": "Odroid GO Super",
|
||||
"input_b_btn": "0",
|
||||
"input_y_btn": "3",
|
||||
"input_select_btn": "8",
|
||||
"input_start_btn": "9",
|
||||
"input_a_btn": "1",
|
||||
"input_x_btn": "2",
|
||||
"input_l_btn": "4",
|
||||
"input_r_btn": "5",
|
||||
"input_l2_btn": "6",
|
||||
"input_r2_btn": "7",
|
||||
"input_l3_btn": "10",
|
||||
"input_r3_btn": "11",
|
||||
"input_up_btn": "12",
|
||||
"input_down_btn": "13",
|
||||
"input_left_btn": "14",
|
||||
"input_right_btn": "15",
|
||||
"input_l_x_plus_axis": "+0",
|
||||
"input_l_x_minus_axis": "-0",
|
||||
"input_l_y_plus_axis": "+1",
|
||||
"input_l_y_minus_axis": "-1",
|
||||
"input_r_x_plus_axis": "+2",
|
||||
"input_r_x_minus_axis": "-2",
|
||||
"input_r_y_plus_axis": "+3",
|
||||
"input_r_y_minus_axis": "-3",
|
||||
"input_enable_hotkey_btn": "8",
|
||||
"input_exit_emulator_btn": "9",
|
||||
"input_menu_toggle_btn": "2",
|
||||
"input_fps_toggle_btn": "3",
|
||||
"input_load_state_btn": "4",
|
||||
"input_save_state_btn": "5",
|
||||
"input_rewind_btn": "6",
|
||||
"input_toggle_fast_forward_btn": "7"
|
||||
},
|
||||
"es_inputs": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": "button",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": "button",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "down",
|
||||
"type": "button",
|
||||
"id": "13",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "hotkeyenable",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "left",
|
||||
"type": "button",
|
||||
"id": "14",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogdown",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogleft",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogright",
|
||||
"type": "axis",
|
||||
"id": "0",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftanalogup",
|
||||
"type": "axis",
|
||||
"id": "1",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "leftshoulder",
|
||||
"type": "button",
|
||||
"id": "4",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "leftthumb",
|
||||
"type": "button",
|
||||
"id": "10",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "lefttrigger",
|
||||
"type": "button",
|
||||
"id": "6",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "right",
|
||||
"type": "button",
|
||||
"id": "15",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogdown",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogleft",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogright",
|
||||
"type": "axis",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightanalogup",
|
||||
"type": "axis",
|
||||
"id": "3",
|
||||
"value": "-1"
|
||||
},
|
||||
{
|
||||
"name": "rightshoulder",
|
||||
"type": "button",
|
||||
"id": "5",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "rightthumb",
|
||||
"type": "button",
|
||||
"id": "11",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "righttrigger",
|
||||
"type": "button",
|
||||
"id": "7",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "select",
|
||||
"type": "button",
|
||||
"id": "8",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "start",
|
||||
"type": "button",
|
||||
"id": "9",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "up",
|
||||
"type": "button",
|
||||
"id": "12",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "button",
|
||||
"id": "2",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "button",
|
||||
"id": "3",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user