RK3588: Gameforce Ace bring up

This commit is contained in:
brooksytech 2024-02-26 16:07:58 +00:00
parent 0815fc609c
commit 8e06a27fb8
No known key found for this signature in database
50 changed files with 15089 additions and 6 deletions

View file

@ -41,6 +41,11 @@ RK3588:
PROJECT=Rockchip DEVICE=RK3588 ARCH=arm ./scripts/build_distro
PROJECT=Rockchip DEVICE=RK3588 ARCH=aarch64 ./scripts/build_distro
RK3588-ACE:
unset DEVICE_ROOT
PROJECT=Rockchip DEVICE=RK3588-ACE ARCH=arm ./scripts/build_distro
PROJECT=Rockchip DEVICE=RK3588-ACE ARCH=aarch64 ./scripts/build_distro
S922X:
unset DEVICE_ROOT
PROJECT=Amlogic DEVICE=S922X ARCH=arm ./scripts/build_distro

View file

@ -50,7 +50,7 @@
# a BSP kernel and a rotated display when using DEVICE_ROOT.
if [ -n "${DEVICE_ROOT}" ]
then
CLEAN_DEVICE_ROOT="busybox systemd initramfs linux u-boot libmali SDL2 SDL2-rotated retroarch mupen64plus-sa-input-sdl flycast-sa duckstation-sa drastic-sa fileman oga_controls portmaster glew-cmake"
CLEAN_DEVICE_ROOT="busybox systemd initramfs linux u-boot libmali libmali_rk3588 SDL2 SDL2-rotated retroarch mupen64plus-sa-input-sdl flycast-sa duckstation-sa drastic-sa fileman oga_controls portmaster glew-cmake"
fi
# additional drivers to install:

View file

@ -0,0 +1,122 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
#
# Supported Systems Emulators and Cores
This document describes all available systems emulators and cores available for the device.
|Manufacturer|System|Release Date|Games Path|Supported Extensions|Emulator / Core|
|----|----|----|----|----|----|
|&#xf013; System|Media Player (mplayer)|System|`mplayer`|.mp4 .mkv .avi .mov .wmv .m3u .mpg .ytb .twi .sh .mp3 .aac .mka .dts .flac .ogg .m4a .ac3 .opus .wav .wv .eac33 .thd|**mplayer:** mplayer (default)<br>|
|&#xf013; System|Moonlight Game Streaming (moonlight)|System|`moonlight`|.sh||
|&#xf013; System|Music Player (music)|System|`playlists`|.m3u .sh|**gmu:** gmu (default)<br>|
|&#xf013; System|Ports (ports)|System|`ports`|.sh|**portmaster:** portmaster (default)<br>|
|&#xf013; System|Screenshots (imageviewer)|System|`screenshots`|.jpg .jpeg .png .bmp .psd .tga .gif .hdr .pic .ppm .pgm .mkv .pdf .mp4 .avi||
|&#xf013; System|Tools (tools)|System|`modules`|.sh||
|Amstrad|Amstrad CPC (amstradcpc)|1984|`amstradcpc`|.dsk .cpr .sna .tap .cdt .kcr .voc .m3u .zip .7z|**retroarch:** crocods (default)<br>**retroarch:** cap32<br>|
|Apple|Macintosh (macintosh)|1984|`mac`|.dsk .img .hfv .cmd .zip|**retroarch:** minivmac (default)<br>|
|Arcade|Arcade (arcade)|0000|`arcade`|.zip .7z|**retroarch:** mame2003_plus (default)<br>**retroarch:** mame2010<br>**retroarch:** mame2015<br>**retroarch:** fbneo<br>**retroarch:** fbalpha2012<br>**retroarch:** fbalpha2019<br>**retroarch:** mame<br>|
|Arcade|Daphne (daphne)|1996|`daphne`|.daphne .singe|**hypseus-singe:** hypseus-singe (default)<br>**retroarch:** daphne<br>|
|Arcade|Final Burn Neo (fbn)|2002|`fbneo`|.7z .zip|**retroarch:** fbneo (default)<br>**retroarch:** mame2003_plus<br>**retroarch:** mame2010<br>**retroarch:** mame2015<br>**retroarch:** mame<br>**retroarch:** fbalpha2012<br>**retroarch:** fbalpha2019<br>|
|Arcade|MAME (mame)|1997|`mame`|.7z .zip|**retroarch:** mame2003_plus (default)<br>**retroarch:** mame2010<br>**retroarch:** mame2015<br>**retroarch:** mame<br>**retroarch:** fbneo<br>**retroarch:** fbalpha2012<br>**retroarch:** fbalpha2019<br>|
|Arduboy|Arduboy (arduboy)|2014|`arduboy`|.hex|**retroarch:** arduous (default)<br>|
|Atari|Atari 2600 (atari2600)|1977|`atari2600`|.a26 .bin .zip .7z|**retroarch:** stella (default)<br>|
|Atari|Atari 5200 (atari5200)|1982|`atari5200`|.rom .xfd .atr .atx .cdm .cas .car .bin .a52 .xex .zip .7z|**retroarch:** a5200 (default)<br>**retroarch:** atari800<br>|
|Atari|Atari 7800 (atari7800)|1986|`atari7800`|.a78 .bin .zip .7z|**retroarch:** prosystem (default)<br>|
|Atari|Atari 800 (atari800)|1979|`atari800`|.rom .xfd .atr .atx .cdm .cas .car .bin .a52 .xex .zip .7z|**retroarch:** atari800 (default)<br>|
|Atari|Atari Jaguar (atarijaguar)|1993|`atarijaguar`|.j64 .jag .rom .abs .cof .bin .prg|**retroarch:** virtualjaguar (default)<br>|
|Atari|Atari Lynx (atarilynx)|1989|`atarilynx`|.lnx .lyx .o .zip .7z|**retroarch:** handy (default)<br>**retroarch:** beetle_lynx<br>|
|Atari|Atari ST (atarist)|1985|`atarist`|.st .msa .stx .dim .ipf .m3u .zip .7z|**retroarch:** hatari (default)<br>**hatarisa:** hatarisa<br>|
|Bandai|SuFami Turbo (sufami)|1996|`sufami`|.st .zip .7z|**retroarch:** snes9x (default)<br>|
|Bandai|Wonderswan (wonderswan)|1999|`wonderswan`|.ws .zip .7z|**retroarch:** beetle_wswan (default)<br>|
|Bandai|Wonderswan Color (wonderswancolor)|2000|`wonderswancolor`|.wsc .zip .7z|**retroarch:** beetle_wswan (default)<br>|
|belogic|Uzebox (uzebox)|2008|`uzebox`|.uze|**retroarch:** uzem (default)<br>|
|Capcom|CPS-I (cps1)|1988|`cps1`|.zip .7z|**retroarch:** fbneo (default)<br>**retroarch:** mame2003_plus<br>**retroarch:** mame2010<br>**retroarch:** fbalpha2012<br>**AdvanceMame:** AdvanceMame<br>|
|Capcom|CPS-II (cps2)|1993|`cps2`|.zip .7z|**retroarch:** fbneo (default)<br>**retroarch:** mame2003_plus<br>**retroarch:** mame2010<br>**retroarch:** fbalpha2012<br>**AdvanceMame:** AdvanceMame<br>|
|Capcom|CPS-III (cps3)|1996|`cps3`|.zip .7z|**retroarch:** fbneo (default)<br>**retroarch:** mame2003_plus<br>**retroarch:** mame2010<br>**retroarch:** fbalpha2012<br>**AdvanceMame:** AdvanceMame<br>|
|Coleco|ColecoVision (colecovision)|1982|`coleco`|.bin .col .rom .zip .7z|**retroarch:** bluemsx (default)<br>**retroarch:** gearcoleco<br>**retroarch:** smsplus<br>|
|Commodore|Amiga (amiga)|1985|`amiga`|.zip .adf .uae .ipf .dms .adz .lha .m3u .hdf .hdz|**retroarch:** puae2021 (default)<br>**retroarch:** puae<br>**amiberry:** amiberry<br>**retroarch:** uae4arm<br>|
|Commodore|Amiga CD32 (amigacd32)|1994|`amigacd32`|.iso .cue .lha .chd|**retroarch:** puae2021 (default)<br>**retroarch:** puae<br>**retroarch:** uae4arm<br>|
|Commodore|Commodore 128 (c128)|1985|`c128`|.d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip|**retroarch:** vice_x128 (default)<br>**vicesa:** x128<br>|
|Commodore|Commodore 16 (c16)|1984|`c16`|.d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip|**retroarch:** vice_xplus4 (default)<br>**vicesa:** xplus4<br>|
|Commodore|Commodore 64 (c64)|1982|`c64`|.d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip|**retroarch:** vice_x64 (default)<br>**vicesa:** x64sc<br>|
|Commodore|Commodore PET (pet)|1977|`pet`|.20 .a0 .b0 .d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .gz .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip|**retroarch:** vice_xpet (default)<br>|
|Commodore|VIC-20 (vic20)|1980|`vic20`|.20 .a0 .b0 .d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .gz .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip|**retroarch:** vice_xvic (default)<br>**vicesa:** xvic<br>|
|EPOCH/YENO|Super Cassette Vision (scv)|1984|`scv`|.cart .bin .rom .0 .zip|**retroarch:** emuscv (default)<br>|
|Fairchild|Fairchild Channel F (channelf)|1976|`channelf`|.bin .chf .zip .7z|**retroarch:** freechaf (default)<br>|
|id Software|Doom (doom)|1993|`doom`|.doom|**gzdoom:** gzdoom-sa (default)<br>|
|id Software|iDtech (idtech)|1991|`idtech`|.sh|**retroarch:** idtech<br>|
|Infocom|Z-machine (zmachine)|1979|`zmachine`|.dat .z1 .z2 .z3 .z4 .z5 .z6 .zip|**retroarch:** mojozork (default)<br>|
|Lexaloffle|PICO-8 (pico-8)|2015|`pico-8`|.p8 .png|**pico-8:** pico8 (default)<br>**retroarch:** fake08<br>|
|Magnavox|Odyssey 2 (odyssey2)|1979|`odyssey`|.bin .zip .7z|**retroarch:** o2em (default)<br>|
|Mattel|Intellivision (intellivision)|1979|`intellivision`|.int .bin .rom .zip .7z|**retroarch:** freeintv (default)<br>|
|Microsoft|DOS (pc)|1981|`pc`|.com .bat .exe .dosz|**retroarch:** dosbox_pure<br>**retroarch:** dosbox_svn<br>|
|Microsoft|MSX (msx)|1983|`msx`|.dsk .mx1 .mx2 .rom .zip .7z .m3u|**retroarch:** bluemsx (default)<br>**retroarch:** fmsx<br>|
|Microsoft|MSX 2 (msx2)|1988|`msx2`|.dsk .mx1 .mx2 .rom .zip .7z .m3u|**retroarch:** bluemsx (default)<br>**retroarch:** fmsx<br>|
|NEC|PC Engine (pcengine)|1987|`pcengine`|.pce .bin .zip .7z|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|NEC|PC Engine CD (pcenginecd)|1988|`pcenginecd`|.cue .ccd .chd .toc .m3u|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|NEC|PC-8800 (pc-8800)|1981|`pc88`|.d88 .m3u|**retroarch:** quasi88 (default)<br>|
|NEC|PC-9800 (pc-9800)|1983|`pc98`|.d98 .zip .fdi .fdd .2hd .tfd .d88 .hdm .xdf .dup .hdi .thd .nhd .hdd .hdn|**retroarch:** np2kai (default)<br>|
|NEC|PC-FX (pcfx)|1994|`pcfx`|.chd .cue .ccd .toc|**retroarch:** beetle_pcfx (default)<br>|
|NEC|SuperGrafx (supergrafx)|1989|`sgfx`|.pce .sgx .cue .ccd .chd .zip .7z|**retroarch:** beetle_supergrafx<br>**retroarch:** beetle_pce<br>|
|NEC|TurboGrafx-16 (tg16)|1989|`tg16`|.pce .bin .zip .7z|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|NEC|TurboGrafx-CD (tg16cd)|1989|`tg16cd`|.cue .ccd .chd .toc .m3u|**retroarch:** beetle_pce_fast (default)<br>**retroarch:** beetle_pce<br>**retroarch:** beetle_supergrafx<br>|
|Nesbox|TIC-80 (tic-80)|2017|`tic-80`|.tic|**retroarch:** tic80 (default)<br>|
|Nintendo|Famicom (famicom)|1983|`famicom`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
|Nintendo|Famicom Disk System (fds)|1986|`fds`|.fds .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
|Nintendo|Game &amp; Watch (gameandwatch)|1980|`gameandwatch`|.mgw .zip .7z|**retroarch:** gw<br>**retroarch:** mame<br>|
|Nintendo|Game Boy (gb)|1989|`gb`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|Game Boy (Hacks) (gbh)|1989|`gbh`|.gb .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|Game Boy Advance (gba)|2001|`gba`|.gba .zip .7z|**retroarch:** mgba (default)<br>**retroarch:** gbsp<br>**retroarch:** vbam<br>**retroarch:** vba_next<br>**retroarch:** beetle_gba<br>|
|Nintendo|Game Boy Advance (Hacks) (gbah)|2001|`gbah`|.gba .zip .7z|**retroarch:** mgba (default)<br>**retroarch:** gbsp<br>**retroarch:** vbam<br>**retroarch:** vba_next<br>**retroarch:** beetle_gba<br>|
|Nintendo|Game Boy Color (gbc)|1998|`gbc`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|Game Boy Color (Hacks) (gbch)|1998|`gbch`|.gb .gbc .zip .7z|**retroarch:** gambatte (default)<br>**retroarch:** sameboy<br>**retroarch:** gearboy<br>**retroarch:** tgbdual<br>**retroarch:** mgba<br>**retroarch:** vbam<br>|
|Nintendo|NES (Hacks) (nesh)|1985|`nesh`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
|Nintendo|Nintendo 64 (n64)|1996|`n64`|.z64 .n64 .v64 .zip .7z|**retroarch:** mupen64plus_next (default)<br>**retroarch:** mupen64plus<br>**retroarch:** parallel_n64<br>**mupen64plus:** mupen64plus-sa<br>|
|Nintendo|Nintendo DS (nds)|2005|`nds`|.nds .zip .7z|**drastic:** drastic-sa (default)<br>**retroarch:** melonds<br>**retroarch:** desmume<br>|
|Nintendo|Nintendo Entertainment System (nes)|1985|`nes`|.nes .unif .unf .zip .7z|**retroarch:** nestopia (default)<br>**retroarch:** fceumm<br>**retroarch:** quicknes<br>**retroarch:** mesen<br>|
|Nintendo|Pokémon Mini (pokemini)|2001|`pokemini`|.min .zip .7z|**retroarch:** pokemini (default)<br>|
|Nintendo|Satellaview (satellaview)|1995|`satellaview`|.smc .fig .bs .sfc .bsx .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>|
|Nintendo|Super Famicom (sfc)|1990|`sfc`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Super NES MSU-1 (snesmsu1)|2012|`snesmsu1`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** beetle_supafaust<br>|
|Nintendo|Super Nintendo (Hacks) (snesh)|1991|`snesh`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Super Nintendo (snes)|1991|`snes`|.smc .fig .sfc .swc .zip .7z|**retroarch:** snes9x (default)<br>**retroarch:** snes9x2010<br>**retroarch:** snes9x2002<br>**retroarch:** snes9x2005_plus<br>**retroarch:** beetle_supafaust<br>**retroarch:** bsnes_mercury_performance<br>**retroarch:** bsnes<br>**retroarch:** bsnes_hd_beta<br>|
|Nintendo|Virtual Boy (virtualboy)|1995|`virtualboy`|.vb .zip .7z|**retroarch:** beetle_vb (default)<br>|
|Panasonic|3DO (3do)|1993|`3do`|.iso .bin .chd .cue|**retroarch:** opera (default)<br>|
|Philips|CD-i (cdi)|1991|`cdi`|.chd .cue .iso|**retroarch:** same_cdi (default)<br>|
|Philips|VideoPac (videopac)|1978|`videopac`|.bin .zip .7z|**retroarch:** o2em (default)<br>|
|Sammy|Atomiswave (atomiswave)|2003|`atomiswave`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021<br>**retroarch:** flycast<br>**flycast:** flycast-sa<br>|
|Sega|Dreamcast (dreamcast)|1998|`dreamcast`|.cdi .gdi .chd .m3u .cue|**retroarch:** flycast2021<br>**retroarch:** flycast<br>**flycast:** flycast-sa<br>|
|Sega|Game Gear (gamegear)|1990|`gamegear`|.bin .gg .zip .7z|**retroarch:** gearsystem (default)<br>**retroarch:** genesis_plus_gx<br>**retroarch:** picodrive<br>**retroarch:** smsplus<br>|
|Sega|Game Gear (Hacks) (ggh)|1990|`gamegearh`|.bin .gg .zip .7z|**retroarch:** gearsystem (default)<br>**retroarch:** genesis_plus_gx<br>**retroarch:** picodrive<br>**retroarch:** smsplus<br>|
|Sega|Genesis (genesis)|1989|`genesis`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** genesis_plus_gx_wide<br>**retroarch:** picodrive<br>|
|Sega|Genesis (Hacks) (genh)|1989|`genh`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** genesis_plus_gx_wide<br>**retroarch:** picodrive<br>|
|Sega|Master System (mastersystem)|1985|`mastersystem`|.bin .sms .zip .7z|**retroarch:** gearsystem (default)<br>**retroarch:** genesis_plus_gx<br>**retroarch:** picodrive<br>**retroarch:** smsplus<br>|
|Sega|Mega CD (megacd)|1991|`megacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** picodrive<br>|
|Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** genesis_plus_gx_wide<br>**retroarch:** picodrive<br>|
|Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** genesis_plus_gx_wide<br>**retroarch:** picodrive<br>|
|Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021<br>**retroarch:** flycast<br>**flycast:** flycast-sa<br>|
|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)<br>**retroarch:** yabasanshiro<br>**retroarch:** beetle_saturn<br>**mednafen:** ss<br>|
|Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)<br>|
|Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)<br>**retroarch:** picodrive<br>|
|Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)<br>**retroarch:** genesis_plus_gx<br>**retroarch:** picodrive<br>|
|Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**retroarch:** beetle_saturn (default)<br>**mednafen:** ss<br>|
|Sharp|X1 (x1)|1982|`x1`|.dx1 .2d .2hd .tfd .d88 .hdm .xdf .dup .tap .cmd .zip .7z|**retroarch:** x1 (default)<br>|
|Sharp|x68000 (x68000)|1987|`x68000`|.dim .img .d88 .hdm .dup .2hd .xdf .hdf .cmd .m3u .zip .7z|**retroarch:** px68k (default)<br>|
|Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse<br>|
|Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .zip .7z|**retroarch:** 81 (default)<br>|
|Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)<br>|
|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)<br>**retroarch:** mame2003_plus<br>**retroarch:** fbalpha2012<br>**retroarch:** fbalpha2019<br>**retroarch:** mame2010<br>**retroarch:** mame2015<br>**retroarch:** mame<br>|
|SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)<br>**retroarch:** fbneo<br>|
|SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngc .ngp .zip .7z|**retroarch:** beetle_ngp (default)<br>**retroarch:** race<br>|
|SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngc .zip .7z|**retroarch:** beetle_ngp (default)<br>**retroarch:** race<br>|
|Sony|PlayStation (psx)|1994|`psx`|.bin .cue .img .mdf .pbp .toc .cbn .m3u .ccd .chd .iso|**retroarch:** duckstation<br>**retroarch:** swanstation<br>|
|Sony|PlayStation Portable (psp)|2004|`psp`|.iso .cso .pbp .chd|**ppsspp:** ppsspp-sa (default)<br>|
|Sony|PSP Minis (pspminis)|2004|`pspminis`|.iso .cso .pbp|**ppsspp:** ppsspp-sa (default)<br>**retroarch:** ppsspp<br>|
|Sun Microsystems|J2ME (j2me)|2002|`j2me`|.jar|**retroarch:** freej2me (default)<br>|
|Various|CHIP-8 / S-CHIP / XO-CHIP (chip-8)|1978|`chip-8`|.ch8 .sc8 .xo8|**retroarch:** jaxe (default)<br>|
|Various|EasyRPG (easyrpg)|2003|`easyrpg`|.zip .easyrpg .ldb|**retroarch:** easyrpg (default)<br>|
|Various|OpenBOR (openbor)|2003|`openbor`|.pak|**OpenBOR:** OpenBOR (default)<br>|
|Various|ScummVM (scummvm)|2001|`games`|.sh .svm .scummvm|**scummvmsa:** scummvm (default)<br>**retroarch:** scummvm<br>|
|Various|Vircon32 (vircon32)|2021|`vircon32`|.v32|**retroarch:** vircon32 (default)<br>|
|Watara|Supervision (supervision)|1992|`supervision`|.sv .zip .7z|**retroarch:** potator (default)<br>|
|Welback Holdings|Mega Duck (megaduck)|1993|`megaduck`|.bin .zip .7z|**retroarch:** sameduck (default)<br>|

View file

@ -8,6 +8,15 @@ PKG_DEPENDS_TARGET="toolchain"
PKG_TOOLCHAIN="make"
GET_HANDLER_SUPPORT="git"
case ${DEVOCE} in
RK3588-ACE)
PKG_PATCH_DIRS+=" ${DEVICE}"
;;
*)
PKG_PATCH_DIRS+=" common"
;;
esac
makeinstall_target() {
mkdir -p $INSTALL/usr/bin
cp rinputer2 ${INSTALL}/usr/bin/jelos_gamepad

View file

@ -0,0 +1,71 @@
diff -rupN rinputer2.orig/main.c rinputer2/main.c
--- rinputer2.orig/main.c 2024-02-22 18:08:36.307753030 +0000
+++ rinputer2/main.c 2024-02-23 20:00:20.626534557 +0000
@@ -144,6 +144,9 @@ void *worker(void *data)
if((codes[ABS_X / 8]) & 1)
useful = 1;
+ if(codes[ABS_Z / 8])
+ useful = 1;
+
struct input_absinfo tmp;
for(int tmp_code = ABS_X; tmp_code < ABS_HAT3Y; tmp_code++)
{
@@ -240,7 +243,7 @@ int rescan_devices(struct rinputer_devic
continue;
// let's not make a loop
- if(strncmp("Rinputer", name, 8) == 0)
+ if(strncmp("gameforce_ace_gamepad", name, 8) == 0)
continue;
// ignore steam-created controllers
// they have this name, with a digit at the end
@@ -316,10 +319,10 @@ int main(void)
ioctl(outfd, UI_SET_EVBIT, EV_KEY);
- //ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_UP); // dpad up
- //ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_DOWN); // dpad down
- //ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_LEFT); // dpad left
- //ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_RIGHT); // dpad right
+ ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_UP); // dpad up
+ ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_DOWN); // dpad down
+ ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_LEFT); // dpad left
+ ioctl(outfd, UI_SET_KEYBIT, BTN_DPAD_RIGHT); // dpad right
ioctl(outfd, UI_SET_KEYBIT, BTN_NORTH); // x
ioctl(outfd, UI_SET_KEYBIT, BTN_SOUTH); // b
@@ -329,8 +332,11 @@ int main(void)
ioctl(outfd, UI_SET_KEYBIT, BTN_TL); // L1
ioctl(outfd, UI_SET_KEYBIT, BTN_TR); // R1
- ioctl(outfd, UI_SET_KEYBIT, BTN_TR2); // L2
- ioctl(outfd, UI_SET_KEYBIT, BTN_TL2); // R2
+ //ioctl(outfd, UI_SET_KEYBIT, BTN_TR2); // L2
+ //ioctl(outfd, UI_SET_KEYBIT, BTN_TL2); // R2
+
+ ioctl(outfd, UI_SET_KEYBIT, BTN_THUMBL); // L3
+ ioctl(outfd, UI_SET_KEYBIT, BTN_THUMBR); // R3
ioctl(outfd, UI_SET_KEYBIT, BTN_SELECT);
ioctl(outfd, UI_SET_KEYBIT, BTN_START);
@@ -350,15 +356,15 @@ int main(void)
setup_abs(outfd, ABS_RZ);
// dpad
- setup_abs(outfd, ABS_HAT0X);
- setup_abs(outfd, ABS_HAT0Y);
+ //setup_abs(outfd, ABS_HAT0X);
+ //setup_abs(outfd, ABS_HAT0Y);
// maybe we should pretend to be xbox gamepad?
memset(&usetup, 0, sizeof(usetup));
usetup.id.bustype = BUS_USB;
usetup.id.vendor = 0x1234;
- usetup.id.product = 0x5678;
- strcpy(usetup.name, "Rinputer");
+ usetup.id.product = 0x8765;
+ strcpy(usetup.name, "gameforce_ace_gamepad");
ioctl(outfd, UI_DEV_SETUP, &usetup);
ioctl(outfd, UI_DEV_CREATE);

View file

@ -0,0 +1,43 @@
diff -rupN flycast.orig/Makefile flycast/Makefile
--- flycast.orig/Makefile 2022-06-18 13:29:52.675787687 -0400
+++ flycast/Makefile 2022-06-18 13:53:23.564624927 -0400
@@ -403,26 +403,30 @@ else ifeq ($(platform), arm64_cortex_a53
#######################################
-# ARM64 SM1 Odroid C4
-else ifeq ($(platform), odroidc4)
+# ARM64 RK3588
+else ifeq ($(platform), RK3588-ACE)
EXT ?= so
TARGET := $(TARGET_NAME)_libretro.$(EXT)
SHARED += -shared -Wl,--version-script=link.T
- LDFLAGS += -Wl,--no-undefined
fpic = -fPIC
LIBS += -lrt
ARM_FLOAT_ABI_HARD = 0
FORCE_GLES = 1
SINGLE_PREC_FLAGS = 1
- CPUFLAGS += -DHOST_CPU=0x20000006 -DTARGET_LINUX_ARMv8 -frename-registers
- CFLAGS += -mcpu=cortex-a55 -mtune=cortex-a55 $(CPUFLAGS)
- CXXFLAGS += -mcpu=cortex-a55 -mtune=cortex-a55 $(CPUFLAGS)
- ASFLAGS += $(CFLAGS) -c -frename-registers -fno-strict-aliasing -ffast-math -ftree-vectorize
+ HAVE_LTCG = 0
+ HAVE_OPENMP = 0
+ CFLAGS += -Ofast \
+ -fuse-linker-plugin \
+ -fno-stack-protector -fno-ident -fomit-frame-pointer \
+ -fmerge-all-constants -ffast-math -funroll-all-loops \
+ -mcpu=cortex-a76 -mtune=cortex-a76
+ CXXFLAGS += $(CFLAGS)
+ LDFLAGS += -mcpu=cortex-a76 -mtune=cortex-a76 -Ofast -flto -fuse-linker-plugin
PLATFORM_EXT := unix
+ CORE_DEFINES += -DLOW_END -DLOW_RES
WITH_DYNAREC=arm64
+ PLATFORM_EXT := unix
HAVE_GENERIC_JIT = 0
- HAVE_VULKAN = 0
- HAVE_LTCG = 0
#######################################

View file

@ -0,0 +1,446 @@
[UI]
SettingsVersion = 1
StartFullscreen = true
RenderToSeparateWindow = true
[EmuCore]
CdvdVerboseReads = false
CdvdDumpBlocks = false
CdvdShareWrite = false
EnablePatches = true
EnableCheats = false
EnablePINE = false
EnableWideScreenPatches = false
EnableNoInterlacingPatches = false
EnableRecordingTools = true
EnableGameFixes = true
SaveStateOnShutdown = false
ConsoleToStdio = false
HostFs = false
PatchBios = false
PatchRegion =
BackupSavestate = true
SavestateZstdCompression = true
McdEnableEjection = true
McdFolderAutoManage = true
GzipIsoIndexTemplate = $(f).pindex.tmp
BlockDumpSaveDirectory =
[EmuCore/Speedhacks]
EECycleRate = 0
EECycleSkip = 0
fastCDVD = false
IntcStat = true
WaitLoop = true
vuFlagHack = true
vuThread = true
vu1Instant = true
[EmuCore/CPU]
FPU.DenormalsAreZero = true
FPU.FlushToZero = true
FPU.Roundmode = 3
AffinityControlMode = 0
VU.DenormalsAreZero = true
VU.FlushToZero = true
VU.Roundmode = 3
[EmuCore/CPU/Recompiler]
EnableEE = true
EnableIOP = true
EnableEECache = false
EnableVU0 = true
EnableVU1 = true
EnableFastmem = true
vuOverflow = true
vuExtraOverflow = false
vuSignOverflow = false
vuUnderflow = false
fpuOverflow = true
fpuExtraOverflow = false
fpuFullMode = false
fpuCorrectAddSub = true
StackFrameChecks = false
PreBlockCheckEE = false
PreBlockCheckIOP = false
[EmuCore/GS]
VsyncQueueSize = 2
FrameLimitEnable = true
VsyncEnable = 0
FramerateNTSC = 59.940000
FrameratePAL = 50.000000
SyncToHostRefreshRate = false
AspectRatio = Auto 4:3/3:2
FMVAspectRatioSwitch = Off
Zoom = 100.000000
StretchY = 100.000000
CropLeft = 0
CropTop = 0
CropRight = 0
CropBottom = 0
pcrtc_antiblur = true
disable_interlace_offset = false
pcrtc_offsets = false
pcrtc_overscan = false
IntegerScaling = false
linear_present = true
UseDebugDevice = false
UseBlitSwapChain = false
disable_shader_cache = false
DisableDualSourceBlend = false
DisableFramebufferFetch = false
ThreadedPresentation = false
SkipDuplicateFrames = true
OsdShowMessages = true
OsdShowSpeed = false
OsdShowFPS = false
OsdShowCPU = false
OsdShowGPU = false
OsdShowResolution = false
OsdShowGSStats = false
OsdShowIndicators = true
OsdShowVersionInfo = false
accurate_date = true
paltex = false
conservative_framebuffer = true
autoflush_sw = true
preload_frame_with_gs_data = false
wrap_gs_mem = false
mipmap = true
aa1 = true
UserHacks = false
UserHacks_align_sprite_X = false
UserHacks_AutoFlush = false
UserHacks_CPU_FB_Conversion = false
UserHacks_DisableDepthSupport = false
UserHacks_DisablePartialInvalidation = false
UserHacks_Disable_Safe_Features = false
UserHacks_merge_pp_sprite = false
UserHacks_WildHack = false
UserHacks_TextureInsideRt = false
fxaa = false
ShadeBoost = false
shaderfx = false
dump = false
save = false
savef = false
savet = false
savez = false
DumpReplaceableTextures = false
DumpReplaceableMipmaps = false
DumpTexturesWithFMVActive = false
DumpDirectTextures = true
DumpPaletteTextures = true
LoadTextureReplacements = false
LoadTextureReplacementsAsync = true
PrecacheTextureReplacements = false
deinterlace = 7
OsdScale = 100
Renderer = -1
upscale_multiplier = 1
mipmap_hw = -1
accurate_blending_unit = 1
crc_hack_level = -1
filter = 2
texture_preloading = 2
GSDumpCompression = 0
HWDownloadMode = 0
dithering_ps2 = 2
MaxAnisotropy = 0
extrathreads = 2
extrathreads_height = 4
TVShader = 0
UserHacks_SkipDraw_Start = 0
UserHacks_SkipDraw_End = 0
UserHacks_Half_Bottom_Override = -1
UserHacks_HalfPixelOffset = 0
UserHacks_round_sprite_offset = 0
UserHacks_TCOffsetX = 0
UserHacks_TCOffsetY = 0
UserHacks_CPUSpriteRenderBW = 0
UserHacks_TriFilter = -1
OverrideTextureBarriers = -1
OverrideGeometryShaders = -1
ShadeBoost_Brightness = 50
ShadeBoost_Contrast = 50
ShadeBoost_Saturation = 50
saven = 0
savel = 5000
Adapter =
shaderfx_conf = shaders/GS_FX_Settings.ini
shaderfx_glsl = shaders/GS.fx
[SPU2/Mixing]
Interpolation = 5
FinalVolume = 100
VolumeAdjustC = 0.000000
VolumeAdjustFL = 0.000000
VolumeAdjustFR = 0.000000
VolumeAdjustBL = 0.000000
VolumeAdjustBR = 0.000000
VolumeAdjustSL = 0.000000
VolumeAdjustSR = 0.000000
VolumeAdjustLFE = 0.000000
[SPU2/Output]
OutputModule = cubeb
Latency = 100
SynchMode = 0
SpeakerConfiguration = 0
[DEV9/Eth]
EthEnable = false
EthApi = Unset
EthDevice =
EthLogDNS = false
InterceptDHCP = false
PS2IP = 0.0.0.0
Mask = 0.0.0.0
Gateway = 0.0.0.0
DNS1 = 0.0.0.0
DNS2 = 0.0.0.0
AutoMask = true
AutoGateway = true
ModeDNS1 = Auto
ModeDNS2 = Auto
[DEV9/Eth/Hosts]
Count = 0
[DEV9/Hdd]
HddEnable = false
HddFile = DEV9hdd.raw
HddSizeSectors = 83886080
[EmuCore/Gamefixes]
VuAddSubHack = false
FpuMulHack = false
FpuNegDivHack = false
XgKickHack = false
EETimingHack = false
SoftwareRendererFMVHack = false
SkipMPEGHack = false
OPHFlagHack = false
DMABusyHack = false
VIFFIFOHack = false
VIF1StallHack = false
GIFFIFOHack = false
GoemonTlbHack = false
IbitHack = false
VUSyncHack = false
VUOverflowHack = false
BlitInternalFPSHack = false
[EmuCore/Profiler]
Enabled = false
RecBlocks_EE = true
RecBlocks_IOP = true
RecBlocks_VU0 = true
RecBlocks_VU1 = true
[EmuCore/Debugger]
ShowDebuggerOnStart = false
AlignMemoryWindowStart = true
FontWidth = 8
FontHeight = 12
WindowWidth = 0
WindowHeight = 0
MemoryViewBytesPerRow = 16
[EmuCore/TraceLog]
Enabled = false
EE.bitset = 0
IOP.bitset = 0
[Filenames]
BIOS =
[Framerate]
NominalScalar = 1.000000
TurboScalar = 2.000000
SlomoScalar = 0.500000
[MemoryCards]
Slot1_Enable = true
Slot1_Filename = Mcd001.ps2
Slot2_Enable = true
Slot2_Filename = Mcd002.ps2
Multitap1_Slot2_Enable = false
Multitap1_Slot2_Filename = Mcd-Multitap1-Slot02.ps2
Multitap1_Slot3_Enable = false
Multitap1_Slot3_Filename = Mcd-Multitap1-Slot03.ps2
Multitap1_Slot4_Enable = false
Multitap1_Slot4_Filename = Mcd-Multitap1-Slot04.ps2
Multitap2_Slot2_Enable = false
Multitap2_Slot2_Filename = Mcd-Multitap2-Slot02.ps2
Multitap2_Slot3_Enable = false
Multitap2_Slot3_Filename = Mcd-Multitap2-Slot03.ps2
Multitap2_Slot4_Enable = false
Multitap2_Slot4_Filename = Mcd-Multitap2-Slot04.ps2
[Folders]
Bios = /storage/roms/bios/aethersx2/bios
Snapshots = snaps
Savestates = /storage/roms/savestates/ps2
MemoryCards = /storage/roms/ps2
Logs = logs
Cheats = cheats
CheatsWS = cheats_ws
CheatsNI = cheats_ni
Cache = cache
Textures = textures
InputProfiles = inputprofiles
[InputSources]
SDL = true
SDLControllerEnhancedMode = false
XInput = false
RawInput = false
[Hotkeys]
ToggleFullscreen = Keyboard/Alt & Keyboard/Return
CycleAspectRatio = Keyboard/F6
CycleInterlaceMode = Keyboard/F5
CycleMipmapMode = Keyboard/Insert
GSDumpMultiFrame = Keyboard/Control & Keyboard/Shift & Keyboard/F8
Screenshot = Keyboard/F8
GSDumpSingleFrame = Keyboard/Shift & Keyboard/F8
ToggleSoftwareRendering = Keyboard/F9
ZoomIn = Keyboard/Control & Keyboard/Plus
ZoomOut = Keyboard/Control & Keyboard/Minus
InputRecToggleMode = Keyboard/Shift & Keyboard/R
LoadStateFromSlot = Keyboard/F3
SaveStateToSlot = Keyboard/F1
NextSaveStateSlot = Keyboard/F2
PreviousSaveStateSlot = Keyboard/Shift & Keyboard/F2
OpenPauseMenu = Keyboard/Escape
ToggleFrameLimit = Keyboard/F4
TogglePause = Keyboard/Space
ToggleSlowMotion = Keyboard/Shift & Keyboard/Backtab
ToggleTurbo = Keyboard/Tab
HoldTurbo = Keyboard/Period
[Pad]
MultitapPort1 = false
MultitapPort2 = false
PointerXScale = 8.000000
PointerYScale = 8.000000
PointerXInvert = false
PointerYInvert = false
[Pad1]
Type = DualShock2
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
Up = SDL-0/DPadUp
Right = SDL-0/DPadRight
Down = SDL-0/DPadDown
Left = SDL-0/DPadLeft
Triangle = SDL-0/Y
Circle = SDL-0/B
Cross = SDL-0/A
Square = SDL-0/X
Select = SDL-0/Back
Start = SDL-0/Start
L1 = SDL-0/LeftShoulder
L2 = SDL-0/+LeftTrigger
R1 = SDL-0/RightShoulder
R2 = SDL-0/+RightTrigger
L3 = SDL-0/LeftStick
R3 = SDL-0/RightStick
LUp = SDL-0/-LeftY
LRight = SDL-0/+LeftX
LDown = SDL-0/+LeftY
LLeft = SDL-0/-LeftX
RUp = SDL-0/-RightY
RRight = SDL-0/+RightX
RDown = SDL-0/+RightY
RLeft = SDL-0/-RightX
[Pad2]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad3]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad4]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad5]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad6]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad7]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000
[Pad8]
Type = None
Deadzone = 0.000000
AxisScale = 1.330000
LargeMotorScale = 1.000000
SmallMotorScale = 1.000000
PressureModifier = 0.500000

View file

@ -0,0 +1,148 @@
[General]
LastFilename =
ShowLag = False
ShowFrameCount = False
ISOPaths = 1
RecursiveISOPaths = False
NANDRootPath =
WirelessMac =
[Interface]
ConfirmStop = True
UsePanicHandlers = True
OnScreenDisplayMessages = True
HideCursor = False
AutoHideCursor = False
MainWindowPosX = 403
MainWindowPosY = 148
MainWindowWidth = 800
MainWindowHeight = 600
Language = 0
ShowToolbar = True
ShowStatusbar = True
ShowLogWindow = False
ShowLogConfigWindow = False
ExtendedFPSInfo = False
ThemeName40 = Clean Blue
PauseOnFocusLost = False
[Display]
FullscreenResolution = Auto
Fullscreen = True
RenderToMain = False
RenderWindowXPos = -1
RenderWindowYPos = -1
RenderWindowWidth = 640
RenderWindowHeight = 480
RenderWindowAutoSize = False
KeepWindowOnTop = False
ProgressiveScan = False
PAL60 = True
DisableScreenSaver = True
ForceNTSCJ = False
[GameList]
ListDrives = False
ListWad = True
ListElfDol = True
ListWii = True
ListGC = True
ListJap = True
ListPal = True
ListUsa = True
ListAustralia = True
ListFrance = True
ListGermany = True
ListItaly = True
ListKorea = True
ListNetherlands = True
ListRussia = True
ListSpain = True
ListTaiwan = True
ListWorld = True
ListUnknown = True
ListSort = 3
ListSortSecondary = 0
ColorCompressed = True
ColumnPlatform = True
ColumnBanner = True
ColumnNotes = True
ColumnFileName = False
ColumnID = False
ColumnRegion = True
ColumnSize = True
ColumnState = True
[Core]
HLE_BS2 = False
TimingVariance = 40
CPUCore = 4
Fastmem = True
CPUThread = True
DSPHLE = True
SkipIdle = True
SyncOnSkipIdle = True
SyncGPU = False
SyncGpuMaxDistance = 200000
SyncGpuMinDistance = -200000
SyncGpuOverclock = 1.00000000
FPRF = False
AccurateNaNs = False
DefaultISO =
DVDRoot =
Apploader =
EnableCheats = True
SelectedLanguage = 0
OverrideGCLang = False
DPL2Decoder = False
Latency = 2
MemcardAPath =
MemcardBPath =
AgpCartAPath =
AgpCartBPath =
SlotA = 1
SlotB = 255
SerialPort1 = 255
BBA_MAC =
SIDevice0 = 6
AdapterRumble0 = True
SimulateKonga0 = False
SIDevice1 = 6
AdapterRumble1 = True
SimulateKonga1 = False
SIDevice2 = 0
AdapterRumble2 = True
SimulateKonga2 = False
SIDevice3 = 0
AdapterRumble3 = True
SimulateKonga3 = False
WiiSDCard = False
WiiKeyboard = False
WiimoteContinuousScanning = False
WiimoteEnableSpeaker = False
RunCompareServer = False
RunCompareClient = False
EmulationSpeed = 1.00000000
FrameSkip = 0x00000003
Overclock = 4.00000000
OverclockEnable = False
GFXBackend = OGL
GPUDeterminismMode = auto
PerfMapDir =
[Movie]
PauseMovie = False
Author =
DumpFrames = False
DumpFramesSilent = False
ShowInputDisplay = False
[DSP]
EnableJIT = True
DumpAudio = False
DumpUCode = False
Backend = Pulse
Volume = 100
CaptureLog = False
[Input]
BackgroundInput = False
[FifoPlayer]
LoopReplay = True
[Analytics]
ID = 5082f0c30a7e422b1220107f69d6c108
Enabled = False
PermissionAsked = True

View file

@ -0,0 +1,29 @@
[GCPad1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 0
Buttons/B = Button 2
Buttons/Start = Button 6
Buttons/X = Button 1
Buttons/Y = Button 3
Buttons/Z = Button 5
Buttons/Hotkey = Button 7
C-Stick/Dead Zone = 25.000000000000000
C-Stick/Down = Axis 4+
C-Stick/Left = Axis 3-
C-Stick/Modifier = Control_L
C-Stick/Modifier/Range = 50.000000000000000
C-Stick/Right = Axis 3+
C-Stick/Up = Axis 4-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
D-Pad/Up = Axis 7-
Main Stick/Dead Zone = 25.000000000000000
Main Stick/Down = Axis 1+
Main Stick/Left = Axis 0-
Main Stick/Modifier = Shift_L
Main Stick/Modifier/Range = 50.000000000000000
Main Stick/Right = Axis 0+
Main Stick/Up = Axis 1-
Triggers/L = Axis 2+
Triggers/R = Axis 5+

View file

@ -0,0 +1,29 @@
[GCPad1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 1
Buttons/B = Button 0
Buttons/Start = Button 6
Buttons/X = Button 3
Buttons/Y = Button 2
Buttons/Z = Button 5
Buttons/Hotkey = Button 7
C-Stick/Dead Zone = 25.000000000000000
C-Stick/Down = Axis 4+
C-Stick/Left = Axis 3-
C-Stick/Modifier = Control_L
C-Stick/Modifier/Range = 50.000000000000000
C-Stick/Right = Axis 3+
C-Stick/Up = Axis 4-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
D-Pad/Up = Axis 7-
Main Stick/Dead Zone = 25.000000000000000
Main Stick/Down = Axis 1+
Main Stick/Left = Axis 0-
Main Stick/Modifier = Shift_L
Main Stick/Modifier/Range = 50.000000000000000
Main Stick/Right = Axis 0+
Main Stick/Up = Axis 1-
Triggers/L = Axis 2+
Triggers/R = Axis 5+

View file

@ -0,0 +1,62 @@
[Hardware]
VSync = False
Adapter = 0
[Settings]
PreferGLES = True
AspectRatio = 0
InternalResolution = 2
Crop = False
wideScreenHack = False
UseXFB = False
UseRealXFB = False
SafeTextureCacheColorSamples = 128
ShowFPS = False
LogRenderTimeToFile = False
OverlayStats = False
OverlayProjStats = False
DumpTextures = False
HiresTextures = False
ConvertHiresTextures = False
CacheHiresTextures = False
DumpEFBTarget = False
FreeLook = False
UseFFV1 = False
EnablePixelLighting = False
FastDepthCalc = True
MSAA = 1
SSAA = False
EFBScale = 2
TexFmtOverlayEnable = False
TexFmtOverlayCenter = False
Wireframe = False
DisableFog = False
EnableShaderDebugging = False
BorderlessFullscreen = False
SWZComploc = True
SWZFreeze = True
SWDumpObjects = False
SWDumpTevStages = False
SWDumpTevTexFetches = False
SWDrawStart = 0
SWDrawEnd = 100000
ShaderCompilationMode = 0
WaitForShadersBeforeStarting = True
BackendMultithreading = True
EnableGPUTextureDecoding = True
[Enhancements]
ForceTextureFiltering = False
MaxAnisotropy = 0
PostProcessingShader =
[Stereoscopy]
StereoMode = 0
StereoDepth = 20
StereoConvergencePercentage = 100
StereoSwapEyes = False
[Hacks]
EFBAccessEnable = False
BBoxEnable = False
ForceProgressive = True
EFBToTextureEnable = True
EFBScaledCopy = False
EFBEmulateFormatChanges = False
SkipDuplicateXFBs = True

View file

@ -0,0 +1,27 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Extension = Classic
Source = 1
Classic/Buttons/A = Button 1
Classic/Buttons/B = Button 0
Classic/Buttons/X = Button 3
Classic/Buttons/Y = Button 2
Classic/Buttons/ZL = Axis 2+
Classic/Buttons/ZR = Axis 5+
Classic/Buttons/- = Button 6
Classic/Buttons/+ = Button 7
Classic/Buttons/Home = Button 8
Classic/Left Stick/Up = Axis 1-
Classic/Left Stick/Down = Axis 1+
Classic/Left Stick/Left = Axis 0-
Classic/Left Stick/Right = Axis 0+
Classic/Right Stick/Up = Axis 4-
Classic/Right Stick/Down = Axis 4+
Classic/Right Stick/Left = Axis 3-
Classic/Right Stick/Right = Axis 3+
Classic/Triggers/L = Button 4
Classic/Triggers/R = Button 5
Classic/D-Pad/Up = Axis 7-
Classic/D-Pad/Down = Axis 7+
Classic/D-Pad/Left = Axis 6-
Classic/D-Pad/Right = Axis 6+

View file

@ -0,0 +1,20 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 0
Buttons/B = Button 1
Buttons/1 = Button 2
Buttons/2 = Button 3
Buttons/- = Button 6
Buttons/+ = Button 7
Buttons/Home = Button 8
Shake/X = Button 4
Shake/Y = Button 4
Shake/Z = Button 4
D-Pad/Up = Axis 6-
D-Pad/Down = Axis 6+
D-Pad/Left = Axis 7-
D-Pad/Right = Axis 7+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -0,0 +1,30 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Extension = Nunchuk
Buttons/A = Button 0
Buttons/B = Button 1
Buttons/1 = Button 2
Buttons/2 = Button 3
Buttons/- = Button 6
Buttons/+ = Button 7
D-Pad/Up = Axis 7-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
Buttons/Home = Button 8
Shake/X = Button 4
Shake/Y = Button 4
Shake/Z = Button 4
Nunchuk/Buttons/C = Button 5
Nunchuk/Buttons/Z = Axis 5+
Nunchuk/Stick/Up = Axis 1-
Nunchuk/Stick/Down = Axis 1+
Nunchuk/Stick/Left = Axis 0-
Nunchuk/Stick/Right = Axis 0+
Nunchuk/Shake/X = Axis 2+
Nunchuk/Shake/Y = Axis 2+
Nunchuk/Shake/Z = Axis 2+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -0,0 +1,20 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 0
Buttons/B = Button 1
Buttons/1 = Button 2
Buttons/2 = Button 3
Buttons/- = Button 6
Buttons/+ = Button 7
Buttons/Home = Button 8
Shake/X = Button 4
Shake/Y = Button 4
Shake/Z = Button 4
D-Pad/Up = Axis 7-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
IR/Up = `Axis 4-`
IR/Down = `Axis 4+`
IR/Left = `Axis 3-`
IR/Right = `Axis 3+`

View file

@ -0,0 +1,27 @@
[Wiimote1]
Device = evdev/0/Microsoft X-Box 360 pad
Extension = Classic
Source = 1
Classic/Buttons/A = Button 1
Classic/Buttons/B = Button 0
Classic/Buttons/X = Button 3
Classic/Buttons/Y = Button 2
Classic/Buttons/ZL = Axis 2+
Classic/Buttons/ZR = Axis 5+
Classic/Buttons/- = Button 6
Classic/Buttons/+ = Button 7
Classic/Buttons/Home = Button 8
Classic/Left Stick/Up = Axis 1-
Classic/Left Stick/Down = Axis 1+
Classic/Left Stick/Left = Axis 0-
Classic/Left Stick/Right = Axis 0+
Classic/Right Stick/Up = Axis 4-
Classic/Right Stick/Down = Axis 4+
Classic/Right Stick/Left = Axis 3-
Classic/Right Stick/Right = Axis 3+
Classic/Triggers/L = Button 4
Classic/Triggers/R = Button 5
Classic/D-Pad/Up = Axis 7-
Classic/D-Pad/Down = Axis 7+
Classic/D-Pad/Left = Axis 6-
Classic/D-Pad/Right = Axis 6+

View file

@ -8,7 +8,7 @@ PKG_LONGDESC="Dolphin is a GameCube / Wii emulator, allowing you to play games f
PKG_TOOLCHAIN="cmake"
case ${DEVICE} in
RK3588|AMD64|S922X|RK3399)
RK3588*|AMD64|S922X|RK3399)
PKG_SITE="https://github.com/dolphin-emu/dolphin"
PKG_URL="${PKG_SITE}.git"
PKG_VERSION="e6583f8bec814d8f3748f1d7738457600ce0de56"
@ -87,7 +87,7 @@ post_install() {
RK356*)
DOLPHIN_PLATFORM="drm"
;;
RK3588)
RK3588*)
DOLPHIN_PLATFORM="x11"
;;
*)

View file

@ -0,0 +1,111 @@
frameskip_type = 0
frameskip_value = 4
safe_frameskip = 0
show_frame_counter = 0
screen_orientation = 0
screen_swap = 0
savestate_number = 0
fast_forward = 0
enable_sound = 1
clock_speed = 0
threaded_3d = 0
mirror_touch = 0
compress_savestates = 1
savestate_snapshot = 1
unzip_roms = 0
preload_roms = 0
backup_in_savestates = 1
ignore_gamecard_limit = 0
frame_interval = 0
trim_roms = 0
fix_main_2d_screen = 0
disable_edge_marking = 0
interframe_blend = 0
hires_3d = 1
use_rtc_custom_time = 0
rtc_custom_time = 0
rtc_system_time = 0
slot2_device_type = 0
rumble_frames = 3
firmware.username = Jelos
firmware.language = 1
firmware.favorite_color = 0
firmware.birthday_month = 1
firmware.birthday_day = 1
enable_cheats = 1
controls_a[CONTROL_INDEX_UP] = 1217
controls_a[CONTROL_INDEX_DOWN] = 1153
controls_a[CONTROL_INDEX_LEFT] = 1216
controls_a[CONTROL_INDEX_RIGHT] = 1152
controls_a[CONTROL_INDEX_A] = 65535
controls_a[CONTROL_INDEX_B] = 65535
controls_a[CONTROL_INDEX_X] = 65535
controls_a[CONTROL_INDEX_Y] = 65535
controls_a[CONTROL_INDEX_L] = 65535
controls_a[CONTROL_INDEX_R] = 65535
controls_a[CONTROL_INDEX_START] = 65535
controls_a[CONTROL_INDEX_SELECT] = 65535
controls_a[CONTROL_INDEX_HINGE] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_UP] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 65535
controls_a[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 65535
controls_a[CONTROL_INDEX_MENU] = 65535
controls_a[CONTROL_INDEX_SAVE_STATE] = 65535
controls_a[CONTROL_INDEX_LOAD_STATE] = 65535
controls_a[CONTROL_INDEX_FAST_FORWARD] = 65535
controls_a[CONTROL_INDEX_SWAP_SCREENS] = 65535
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_A] = 65535
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_B] = 65535
controls_a[CONTROL_INDEX_LOAD_GAME] = 65535
controls_a[CONTROL_INDEX_QUIT] = 65535
controls_a[CONTROL_INDEX_FAKE_MICROPHONE] = 65535
controls_a[CONTROL_INDEX_UI_UP] = 1217
controls_a[CONTROL_INDEX_UI_DOWN] = 1153
controls_a[CONTROL_INDEX_UI_LEFT] = 1216
controls_a[CONTROL_INDEX_UI_RIGHT] = 1152
controls_a[CONTROL_INDEX_UI_SELECT] = 65535
controls_a[CONTROL_INDEX_UI_BACK] = 65535
controls_a[CONTROL_INDEX_UI_EXIT] = 65535
controls_a[CONTROL_INDEX_UI_PAGE_UP] = 65535
controls_a[CONTROL_INDEX_UI_PAGE_DOWN] = 65535
controls_a[CONTROL_INDEX_UI_SWITCH] = 65535
controls_b[CONTROL_INDEX_UP] = 1037
controls_b[CONTROL_INDEX_DOWN] = 1038
controls_b[CONTROL_INDEX_LEFT] = 1039
controls_b[CONTROL_INDEX_RIGHT] = 1040
controls_b[CONTROL_INDEX_A] = 1025
controls_b[CONTROL_INDEX_B] = 1024
controls_b[CONTROL_INDEX_X] = 1026
controls_b[CONTROL_INDEX_Y] = 1027
controls_b[CONTROL_INDEX_L] = 1028
controls_b[CONTROL_INDEX_R] = 1029
controls_b[CONTROL_INDEX_START] = 1033
controls_b[CONTROL_INDEX_SELECT] = 1032
controls_b[CONTROL_INDEX_HINGE] = 65535
controls_b[CONTROL_INDEX_TOUCH_CURSOR_UP] = 1219
controls_b[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 1155
controls_b[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 1218
controls_b[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 1154
controls_b[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 1036
controls_b[CONTROL_INDEX_MENU] = 1035
controls_b[CONTROL_INDEX_SAVE_STATE] = 65535
controls_b[CONTROL_INDEX_LOAD_STATE] = 65535
controls_b[CONTROL_INDEX_FAST_FORWARD] = 65535
controls_b[CONTROL_INDEX_SWAP_SCREENS] = 65535
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_A] = 1030
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_B] = 1031
controls_b[CONTROL_INDEX_LOAD_GAME] = 65535
controls_b[CONTROL_INDEX_QUIT] = 65535
controls_b[CONTROL_INDEX_FAKE_MICROPHONE] = 65535
controls_b[CONTROL_INDEX_UI_UP] = 1037
controls_b[CONTROL_INDEX_UI_DOWN] = 1038
controls_b[CONTROL_INDEX_UI_LEFT] = 1039
controls_b[CONTROL_INDEX_UI_RIGHT] = 1040
controls_b[CONTROL_INDEX_UI_SELECT] = 1025
controls_b[CONTROL_INDEX_UI_BACK] = 65535
controls_b[CONTROL_INDEX_UI_EXIT] = 1024
controls_b[CONTROL_INDEX_UI_PAGE_UP] = 65535
controls_b[CONTROL_INDEX_UI_PAGE_DOWN] = 65535
controls_b[CONTROL_INDEX_UI_SWITCH] = 65535

View file

@ -0,0 +1,262 @@
[Main]
SettingsVersion = 3
StartFullscreen = true
EmulationSpeed = 1.000000
FastForwardSpeed = 0.000000
TurboSpeed = 0.000000
SyncToHostRefreshRate = false
IncreaseTimerResolution = true
InhibitScreensaver = true
StartPaused = false
PauseOnFocusLoss = false
PauseOnMenu = true
SaveStateOnExit = true
ConfirmPowerOff = true
LoadDevicesFromSaveStates = false
ApplyGameSettings = true
AutoLoadCheats = true
DisableAllEnhancements = false
RewindEnable = false
RewindFrequency = 10.000000
RewindSaveSlots = 10
RunaheadFrameCount = 0
[BIOS]
SearchDirectory = /storage/roms/bios
PathNTSCU =
PathNTSCJ =
PathPAL =
PatchTTYEnable = false
PatchFastBoot = true
[GPU]
Renderer = Software
Adapter =
ResolutionScale = 1
Multisamples = 1
UseDebugDevice = false
PerSampleShading = false
UseThread = true
ThreadedPresentation = true
UseSoftwareRendererForReadbacks = false
TrueColor = false
ScaledDithering = false
TextureFilter = Nearest
DownsampleMode = Disabled
DisableInterlacing = false
ForceNTSCTimings = false
WidescreenHack = false
ChromaSmoothing24Bit = false
PGXPEnable = false
PGXPCulling = true
PGXPTextureCorrection = true
PGXPVertexCache = false
PGXPCPU = false
PGXPPreserveProjFP = false
PGXPTolerance = -1.000000
PGXPDepthBuffer = false
PGXPDepthClearThreshold = 300.000000
[Display]
CropMode = Overscan
ActiveStartOffset = 0
ActiveEndOffset = 0
LineStartOffset = 0
LineEndOffset = 0
Force4_3For24Bit = false
AspectRatio = 4:3
CustomAspectRatioNumerator = 4
LinearFiltering = true
IntegerScaling = false
Stretch = false
PostProcessing = false
ShowOSDMessages = true
ShowFPS = false
ShowVPS = false
ShowSpeed = false
ShowResolution = false
ShowStatusIndicators = true
ShowEnhancements = false
DisplayAllFrames = true
VSync = false
MaxFPS = 0.000000
[Hotkeys]
OpenPauseMenu = SDL-0/Back & SDL-0/X
FastForward = SDL-0/Back & SDL-0/+RightTrigger
Screenshot = SDL-0/Back & SDL-0/A
LoadSelectedSaveState = SDL-0/Back & SDL-0/LeftShoulder
SaveSelectedSaveState = SDL-0/Back & SDL-0/RightShoulder
PowerOff = SDL-0/Back & SDL-0/Start
[Logging]
LogLevel = Error
LogFilter =
LogToConsole = false
LogToDebug = false
LogToWindow = false
LogToFile = false
[Controller1]
Type = AnalogController
ButtonUp = Controller0/Button11
ButtonDown = Controller0/Button12
ButtonLeft = Controller0/Button13
ButtonRight = Controller0/Button14
ButtonSelect = Controller0/Button4
ButtonStart = Controller0/Button6
ButtonTriangle = Controller0/Button2
ButtonCross = Controller0/Button1
ButtonSquare = Controller0/Button3
ButtonCircle = Controller0/Button0
ButtonL1 = Controller0/Button9
ButtonL2 = Controller0/+Axis4
ButtonR1 = Controller0/Button10
ButtonR2 = Controller0/+Axis5
AxisLeftX = Controller0/Axis0
AxisLeftY = Controller0/Axis1
ButtonL3 = Controller0/Button7
ButtonR3 = Controller0/Button8
AxisRightX = Controller0/Axis2
AxisRightY = Controller0/Axis3
AnalogDPadInDigitalMode = false
[GameList]
RecursivePaths = /storage/roms/psx
[MemoryCards]
UsePlaylistTitle = true
Directory = /storage/roms/psx
Card1Type = PerGameTitle
Card2Type = None
[Console]
Region = Auto
Enable8MBRAM = false
[CPU]
ExecutionMode = Recompiler
OverclockEnable = false
OverclockNumerator = 1
OverclockDenominator = 1
RecompilerMemoryExceptions = false
RecompilerBlockLinking = true
RecompilerICache = false
FastmemMode = MMap
[CDROM]
ReadaheadSectors = 8
RegionCheck = false
LoadImageToRAM = false
MuteCDAudio = false
ReadSpeedup = 1
SeekSpeedup = 1
[Audio]
Backend = SDL
OutputVolume = 100
FastForwardVolume = 100
BufferSize = 2048
Resampling = true
OutputMuted = false
Sync = true
DumpOnBoot = false
[Hacks]
DMAMaxSliceTicks = 1000
DMAHaltTicks = 100
GPUFIFOSize = 16
GPUMaxRunAhead = 128
[Controller2]
Type = None
[Controller3]
Type = None
[Controller4]
Type = None
[Controller5]
Type = None
[Controller6]
Type = None
[Controller7]
Type = None
[Controller8]
Type = None
[ControllerPorts]
MultitapMode = Disabled
[Debug]
ShowVRAM = false
DumpCPUToVRAMCopies = false
DumpVRAMToCPUCopies = false
ShowGPUState = false
ShowCDROMState = false
ShowSPUState = false
ShowTimersState = false
ShowMDECState = false
ShowDMAState = false
[TextureReplacements]
EnableVRAMWriteReplacements = false
PreloadTextures = false
DumpVRAMWrites = false
DumpVRAMWriteForceAlphaChannel = true
DumpVRAMWriteWidthThreshold = 128
DumpVRAMWriteHeightThreshold = 128
[Pad1]
Up = SDL-0/DPadUp
Right = SDL-0/DPadRight
Down = SDL-0/DPadDown
Left = SDL-0/DPadLeft
Triangle = SDL-0/X
Circle = SDL-0/A
Cross = SDL-0/B
Square = SDL-0/Y
Select = SDL-0/Back
Start = SDL-0/Start
L1 = SDL-0/LeftShoulder
R1 = SDL-0/RightShoulder
L2 = SDL-0/+LeftTrigger
R2 = SDL-0/+RightTrigger
L3 = SDL-0/LeftStick
R3 = SDL-0/RightStick
LLeft = SDL-0/-LeftX
LRight = SDL-0/+LeftX
LDown = SDL-0/+LeftY
LUp = SDL-0/-LeftY
RLeft = SDL-0/+RightX
RRight = SDL-0/-RightX
RDown = SDL-0/+RightY
RUp = SDL-0/-RightY

View file

@ -0,0 +1,13 @@
[audio]
backend = pulse
[input]
maple_sdl_joystick_0 = 0
maple_sdl_joystick_1 = 1
device1 = 0
device1.1 = 1
device1.2 = 1
device2 = 0
device2.1 = 1
device2.2 = 1

View file

@ -0,0 +1,147 @@
Key_A=-1
Key_B=-1
Key_Select=-1
Key_Start=-1
Key_Right=-1
Key_Left=-1
Key_Up=-1
Key_Down=-1
Key_R=-1
Key_L=-1
Key_X=-1
Key_Y=-1
Joy_A=1
Joy_B=0
Joy_Select=6
Joy_Start=7
Joy_Right=65794
Joy_Left=1114376
Joy_Up=17891585
Joy_Down=16843012
Joy_R=86114303
Joy_L=35782655
Joy_X=3
Joy_Y=2
HKKey_Lid=-1
HKKey_Mic=-1
HKKey_Pause=-1
HKKey_Reset=-1
HKKey_FastForward=-1
HKKey_FastForwardToggle=-1
HKKey_FullscreenToggle=-1
HKKey_SwapScreens=-1
HKKey_SolarSensorDecrease=-1
HKKey_SolarSensorIncrease=-1
HKKey_FrameStep=-1
HKKey_SaveState=-1
HKKey_LoadState=-1
HKJoy_Lid=-1
HKJoy_Mic=10
HKJoy_Pause=-1
HKJoy_Reset=-1
HKJoy_FastForward=-1
HKJoy_FastForwardToggle=-1
HKJoy_FullscreenToggle=-1
HKJoy_SwapScreens=9
HKJoy_SolarSensorDecrease=-1
HKJoy_SolarSensorIncrease=-1
HKJoy_FrameStep=-1
HKJoy_SaveState=5
HKJoy_LoadState=4
JoystickID=0
WindowWidth=1920
WindowHeight=1080
WindowMax=0
ScreenRotation=0
ScreenGap=0
ScreenLayout=2
ScreenSwap=0
ScreenSizing=3
IntegerScaling=0
ScreenAspectTop=0
ScreenAspectBot=0
ScreenFilter=1
ScreenUseGL=0
ScreenVSync=0
ScreenVSyncInterval=1
3DRenderer=0
Threaded3D=1
GL_ScaleFactor=1
GL_BetterPolygons=0
LimitFPS=1
AudioSync=0
ShowOSD=1
ConsoleType=0
DirectBoot=1
JIT_Enable=0
JIT_MaxBlockSize=32
JIT_BranchOptimisations=1
JIT_LiteralOptimisations=1
JIT_FastMemory=1
ExternalBIOSEnable=0
BIOS9Path=
BIOS7Path=
FirmwarePath=
DSiBIOS9Path=
DSiBIOS7Path=
DSiFirmwarePath=
DSiNANDPath=
DLDIEnable=0
DLDISDPath=dldi.bin
DLDISize=0
DLDIReadOnly=0
DLDIFolderSync=0
DLDIFolderPath=
DSiSDEnable=0
DSiSDPath=dsisd.bin
DSiSDSize=0
DSiSDReadOnly=0
DSiSDFolderSync=0
DSiSDFolderPath=
FirmwareOverrideSettings=0
FirmwareUsername=melonDS
FirmwareLanguage=1
FirmwareBirthdayMonth=1
FirmwareBirthdayDay=1
FirmwareFavouriteColour=0
FirmwareMessage=
FirmwareMAC=
MPAudioMode=1
MPRecvTimeout=25
LANDevice=
DirectLAN=0
SavStaRelocSRAM=0
AudioInterp=0
AudioBitrate=0
AudioVolume=256
MicInputType=0
MicWavPath=
LastROMFolder=
RecentROM_0=
RecentROM_1=
RecentROM_2=
RecentROM_3=
RecentROM_4=
RecentROM_5=
RecentROM_6=
RecentROM_7=
RecentROM_8=
RecentROM_9=
SaveFilePath=/storage/roms/nds
SavestatePath=/storage/roms/savestates/nds
CheatFilePath=
EnableCheats=0
MouseHide=0
MouseHideSeconds=5
PauseLostFocus=0
DSBatteryLevelOkay=1
DSiBatteryLevel=15
DSiBatteryCharging=1
Camera0_InputType=0
Camera0_ImagePath=
Camera0_CamDeviceName=
Camera0_XFlip=0
Camera1_InputType=0
Camera1_ImagePath=
Camera1_CamDeviceName=
Camera1_XFlip=0

View file

@ -0,0 +1,665 @@
# Mupen64Plus Configuration File
# This file is automatically read and written by the Mupen64Plus Core library
[64DD]
# Filename of the 64DD IPL ROM
IPL-ROM = ""
# Filename of the disk to load into Disk Drive
Disk = ""
[Audio-SDL]
# Mupen64Plus SDL Audio Plugin config parameter version number
Version = 1.000000
# Frequency which is used if rom doesn't want to change it
DEFAULT_FREQUENCY = 33600
# Swaps left and right channels
SWAP_CHANNELS = False
# Size of primary buffer in output samples. This is where audio is loaded after it's extracted from n64's memory.
PRIMARY_BUFFER_SIZE = 16384
# Fullness level target for Primary audio buffer, in equivalent output samples. This value must be larger than the SECONDARY_BUFFER_SIZE. Decreasing this value will reduce audio latency but requires a faster PC to avoid choppiness. Increasing this will increase audio latency but reduce the chance of drop-outs.
PRIMARY_BUFFER_TARGET = 2048
# Size of secondary buffer in output samples. This is SDL's hardware buffer. The SDL documentation states that this should be a power of two between 512 and 8192.
SECONDARY_BUFFER_SIZE = 1024
# Audio resampling algorithm. src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold, src-linear, speex-fixed-{10-0}, trivial
RESAMPLE = "trivial"
# Volume control type: 1 = SDL (only affects Mupen64Plus output) 2 = OSS mixer (adjusts master PC volume)
VOLUME_CONTROL_TYPE = 1
# Percentage change each time the volume is increased or decreased
VOLUME_ADJUST = 5
# Default volume when a game is started. Only used if VOLUME_CONTROL_TYPE is 1
VOLUME_DEFAULT = 100
# Synchronize Video/Audio
AUDIO_SYNC = False
[Core]
# Mupen64Plus Core config parameter set version number. Please don't change this version number.
Version = 1.010000
# Draw on-screen display if True, otherwise don't draw OSD
OnScreenDisplay = True
# Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more
R4300Emulator = 2
# Disable compiled jump commands in dynamic recompiler (should be set to False)
NoCompiledJump = False
# Disable 4MB expansion RAM pack. May be necessary for some games
DisableExtraMem = False
# Increment the save state slot after each save operation
AutoStateSlotIncrement = False
# Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support
EnableDebugger = False
# Save state slot (0-9) to use when saving/loading the emulator state
CurrentStateSlot = 0
# Path to directory where screenshots are saved. If this is blank, the default value of ${UserDataPath}/screenshot will be used
ScreenshotPath = "/storage/roms/screenshots"
# Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserDataPath}/save will be used
SaveStatePath = "/storage/roms/n64"
# Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserDataPath}/save will be used
SaveSRAMPath = "/storage/roms/n64"
# Path to a directory to search when looking for shared data files
SharedDataPath = "/storage/.config/game/configs/mupen64plussa"
# Force number of cycles per emulated instruction
CountPerOp = 0
# Randomize PI/SI Interrupt Timing
RandomizeInterrupt = True
# Duration of SI DMA (-1: use per game settings)
SiDmaDuration = -1
# Gameboy Camera Video Capture backend
GbCameraVideoCaptureBackend1 = ""
# Disk Save Format (0: Full Disk Copy (*.ndr/*.d6r), 1: RAM Area Only (*.ram))
SaveDiskFormat = 1
[CoreEvents]
# Mupen64Plus CoreEvents config parameter set version number. Please don't change this version number.
Version = 1.000000
# SDL keysym for stopping the emulator
Kbd Mapping Stop = 27
# SDL keysym for switching between fullscreen/windowed modes
Kbd Mapping Fullscreen = 0
# SDL keysym for saving the emulator state
Kbd Mapping Save State = 286
# SDL keysym for loading the emulator state
Kbd Mapping Load State = 288
# SDL keysym for advancing the save state slot
Kbd Mapping Increment Slot = 0
# SDL keysym for resetting the emulator
Kbd Mapping Reset = 290
# SDL keysym for slowing down the emulator
Kbd Mapping Speed Down = 291
# SDL keysym for speeding up the emulator
Kbd Mapping Speed Up = 292
# SDL keysym for taking a screenshot
Kbd Mapping Screenshot = 293
# SDL keysym for pausing the emulator
Kbd Mapping Pause = 112
# SDL keysym for muting/unmuting the sound
Kbd Mapping Mute = 109
# SDL keysym for increasing the volume
Kbd Mapping Increase Volume = 93
# SDL keysym for decreasing the volume
Kbd Mapping Decrease Volume = 91
# SDL keysym for temporarily going really fast
Kbd Mapping Fast Forward = 102
# SDL keysym for advancing by one frame when paused
Kbd Mapping Frame Advance = 47
# SDL keysym for pressing the game shark button
Kbd Mapping Gameshark = 103
# Joystick event string for stopping the emulator
Joy Mapping Stop = "J0B8/B9"
# Joystick event string for switching between fullscreen/windowed modes
Joy Mapping Fullscreen = ""
# Joystick event string for saving the emulator state
Joy Mapping Save State = "J0B8/B5"
# Joystick event string for loading the emulator state
Joy Mapping Load State = "J0B8/B4"
# Joystick event string for advancing the save state slot
Joy Mapping Increment Slot = ""
# Joystick event string for resetting the emulator
Joy Mapping Reset = "J0B8/B0"
# Joystick event string for slowing down the emulator
Joy Mapping Speed Down = ""
# Joystick event string for speeding up the emulator
Joy Mapping Speed Up = ""
# Joystick event string for taking a screenshot
Joy Mapping Screenshot = "J0B8/B3"
# Joystick event string for pausing the emulator
Joy Mapping Pause = "J0B12/B1"
# Joystick event string for muting/unmuting the sound
Joy Mapping Mute = ""
# Joystick event string for increasing the volume
Joy Mapping Increase Volume = ""
# Joystick event string for decreasing the volume
Joy Mapping Decrease Volume = ""
# Joystick event string for fast-forward
Joy Mapping Fast Forward = "J0B8/B7"
# Joystick event string for advancing by one frame when paused
Joy Mapping Frame Advance = ""
# Joystick event string for pressing the game shark button
Joy Mapping Gameshark = "J0B8/B2"
# SDL keysym for save slot 0
Kbd Mapping Slot 0 = 48
# SDL keysym for save slot 1
Kbd Mapping Slot 1 = 49
# SDL keysym for save slot 2
Kbd Mapping Slot 2 = 50
# SDL keysym for save slot 3
Kbd Mapping Slot 3 = 51
# SDL keysym for save slot 4
Kbd Mapping Slot 4 = 52
# SDL keysym for save slot 5
Kbd Mapping Slot 5 = 53
# SDL keysym for save slot 6
Kbd Mapping Slot 6 = 54
# SDL keysym for save slot 7
Kbd Mapping Slot 7 = 55
# SDL keysym for save slot 8
Kbd Mapping Slot 8 = 56
# SDL keysym for save slot 9
Kbd Mapping Slot 9 = 57
[Input-SDL-Control1]
# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = 0
# SDL joystick name (or Keyboard)
name = "rg552_joypad"
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements. For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.
AnalogDeadzone = "0,0"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = button(16)
DPad L = button(15)
DPad D = button(14)
DPad U = button(13)
Start = button(9)
Z Trig = button(5)
B Button = button(3)
A Button = button(0)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(7)
L Trig = button(4)
Mempak switch =
Rumblepak switch =
# Analog axis configuration mappings
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)
[Input-SDL-Control2]
# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements. For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""
[Input-SDL-Control3]
# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements. For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""
[Input-SDL-Control4]
# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements. For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""
[Rsp-HLE]
# Mupen64Plus RSP HLE Plugin config parameter version number
Version = 1.000000
# Path to a RSP plugin which will be used when encountering an unknown ucode.You can disable this by letting an empty string.
RspFallback = ""
# Send display lists to the graphics plugin
DisplayListToGraphicsPlugin = True
# Send audio lists to the audio plugin
AudioListToAudioPlugin = False
[Transferpak]
# Filename of the GB ROM to load into transferpak 1
GB-rom-1 = ""
# Filename of the GB RAM to load into transferpak 1
GB-ram-1 = ""
# Filename of the GB ROM to load into transferpak 2
GB-rom-2 = ""
# Filename of the GB RAM to load into transferpak 2
GB-ram-2 = ""
# Filename of the GB ROM to load into transferpak 3
GB-rom-3 = ""
# Filename of the GB RAM to load into transferpak 3
GB-ram-3 = ""
# Filename of the GB ROM to load into transferpak 4
GB-rom-4 = ""
# Filename of the GB RAM to load into transferpak 4
GB-ram-4 = ""
[UI-Console]
# Mupen64Plus UI-Console config parameter set version number. Please don't change this version number.
Version = 1.000000
# Directory in which to search for plugins
PluginDir = "/usr/local/lib/mupen64plus"
# Filename of video plugin
VideoPlugin = "mupen64plus-video-rice"
# Filename of audio plugin
AudioPlugin = "mupen64plus-audio-sdl.so"
# Filename of input plugin
InputPlugin = "mupen64plus-input-sdl.so"
# Filename of RSP plugin
RspPlugin = "mupen64plus-rsp-hle.so"
[Video-General]
# Width of output window or fullscreen width
ScreenWidth = 640
# Height of output window or fullscreen height
ScreenHeight = 480
# Use fullscreen mode if True, or windowed mode if False
Fullscreen = True
# If true, activate the SDL_GL_SWAP_CONTROL attribute
VerticalSync = True
# Rotate screen contents: 0=0 degree, 1=90 degree, 2 = 180 degree, 3=270 degree
Rotate = 0
[Video-GLideN64]
###### Hardware Compatibility ######
# Leave enabled unless a mobile gpu doesn't support it.
EnableFragmentDepthWrite = 1
# Hardware per pixel lighting, supposedly good for GLES3.1 devices or higher.
EnableHWLighting = 0
###### Enhancements #######
# Internal render resoluton rather than output. So 2 x 240p is 480p, etc.
UseNativeResolutionFactor = 1
# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)
MultiSampling = 0
# Enable/Disable Fast Approximate Anti-Aliasing FXAA
FXAA = 0
# Max level of Anisotropic Filtering, 0 for off
anisotropy = 0
# Bilinear filtering mode (0=N64 3point, 1=standard)
# @rishooty: best to use this at 1x native res, any higher turn it off.
bilinearMode = 1
###### Compatibility ######
# Make texrect coordinates continuous to avoid black lines between them. (0=Off/default, 1=Auto, 2=Force)
CorrectTexrectCoords = 1
# Copy auxiliary buffers to RDRAM (default: 0)
EnableCopyAuxiliaryToRDRAM = 1
# Render 2D texrects in native resolution to fix misalignment between parts of 2D image. (0=Off/default, 1=Optimized, 2=Unoptimized)")
EnableNativeResTexrects = 1
###### Other ######
# Enable threaded video backend at the cost of input lag
ThreadedVideo = 1
# Screen aspect ratio (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust)
AspectRatio = 1
# Display On-screen FPS
ShowFPS = False
[Video-Glide64mk2]
# Enable full-scene anti-aliasing by setting this to a value greater than 1
wrpAntiAliasing = 0
# Card ID
card_id = 0
# If true, use polygon offset values specified below
force_polygon_offset = False
# Specifies a scale factor that is used to create a variable depth offset for each polygon
polygon_offset_factor = 0.000000
# Is multiplied by an implementation-specific value to create a constant depth offset
polygon_offset_units = 0.000000
# Vertical sync
vsync = True
# TODO:ssformat
ssformat = False
# Display performance stats (add together desired flags): 1=FPS counter, 2=VI/s counter, 4=% speed, 8=FPS transparent
show_fps = 0
# Clock enabled
clock = False
# Clock is 24-hour
clock_24_hr = True
# Wrapper resolution
wrpResolution = 0
# Wrapper VRAM
wrpVRAM = 0
# Wrapper FBO
wrpFBO = True
# Wrapper Anisotropic Filtering
wrpAnisotropic = True
# Texture Enhancement: Smooth/Sharpen Filters
ghq_fltr = 0
# Texture Compression: 0 for S3TC, 1 for FXT1
ghq_cmpr = 0
# Texture Enhancement: More filters
ghq_enht = 0
# Hi-res texture pack format (0 for none, 1 for Rice)
ghq_hirs = 1
# Compress texture cache with S3TC or FXT1
ghq_enht_cmpr = False
# Tile textures (saves memory but could cause issues)
ghq_enht_tile = 0
# Force 16bpp textures (saves ram but lower quality)
ghq_enht_f16bpp = False
# Compress texture cache
ghq_enht_gz = True
# Don't enhance textures for backgrounds
ghq_enht_nobg = False
# Enable S3TC and FXT1 compression
ghq_hirs_cmpr = False
# Tile hi-res textures (saves memory but could cause issues)
ghq_hirs_tile = False
# Force 16bpp hi-res textures (saves ram but lower quality)
ghq_hirs_f16bpp = False
# Compress hi-res texture cache
ghq_hirs_gz = True
# Alternative CRC calculation -- emulates Rice bug
ghq_hirs_altcrc = True
# Save tex cache to disk
ghq_cache_save = True
# Texture Cache Size (MB)
ghq_cache_size = 128
# Use full alpha channel -- could cause issues for some tex packs
ghq_hirs_let_texartists_fly = False
# Dump textures
ghq_hirs_dump = False
# Alternate texture size method: -1=Game default, 0=disable. 1=enable
alt_tex_size = -1
# Use first SETTILESIZE only: -1=Game default, 0=disable. 1=enable
use_sts1_only = -1
# Use spheric mapping only: -1=Game default, 0=disable. 1=enable
force_calc_sphere = -1
# Force positive viewport: -1=Game default, 0=disable. 1=enable
correct_viewport = -1
# Force texrect size to integral value: -1=Game default, 0=disable. 1=enable
increase_texrect_edge = -1
# Reduce fillrect size by 1: -1=Game default, 0=disable. 1=enable
decrease_fillrect_edge = -1
# Enable perspective texture correction emulation: -1=Game default, 0=disable. 1=enable
texture_correction = -1
# Set special scale for PAL games: -1=Game default, 0=disable. 1=enable
pal230 = -1
# 3DFX Dithered alpha emulation mode: -1=Game default, >=0=dithered alpha emulation mode
stipple_mode = -1
# 3DFX Dithered alpha pattern: -1=Game default, >=0=pattern used for dithered alpha emulation
stipple_pattern = -1
# Check microcode each frame: -1=Game default, 0=disable. 1=enable
force_microcheck = -1
# Force 0xb5 command to be quad, not line 3D: -1=Game default, 0=disable. 1=enable
force_quad3d = -1
# Enable near z clipping: -1=Game default, 0=disable. 1=enable
clip_zmin = -1
# Enable far plane clipping: -1=Game default, 0=disable. 1=enable
clip_zmax = -1
# Use fast CRC algorithm: -1=Game default, 0=disable. 1=enable
fast_crc = -1
# Adjust screen aspect for wide screen mode: -1=Game default, 0=disable. 1=enable
adjust_aspect = -1
# Force strict check in Depth buffer test: -1=Game default, 0=disable. 1=enable
zmode_compare_less = -1
# Apply alpha dither regardless of alpha_dither_mode: -1=Game default, 0=disable. 1=enable
old_style_adither = -1
# Scale vertex z value before writing to depth buffer: -1=Game default, 0=disable. 1=enable
n64_z_scale = -1
# Fast texrect rendering with hwfbe: -1=Game default, 0=disable. 1=enable
optimize_texrect = -1
# Do not copy auxiliary frame buffers: -1=Game default, 0=disable. 1=enable
ignore_aux_copy = -1
# Clear auxiliary texture frame buffers: -1=Game default, 0=disable. 1=enable
hires_buf_clear = -1
# Read alpha from framebuffer: -1=Game default, 0=disable. 1=enable
fb_read_alpha = -1
# Handle unchanged fb: -1=Game default, 0=disable. 1=enable
useless_is_useless = -1
# Set frambuffer CRC mode: -1=Game default, 0=disable CRC, 1=fast CRC, 2=safe CRC
fb_crc_mode = -1
# Filtering mode: -1=Game default, 0=automatic, 1=force bilinear, 2=force point sampled
filtering = -1
# Fog: -1=Game default, 0=disable. 1=enable
fog = -1
# Buffer clear on every frame: -1=Game default, 0=disable. 1=enable
buff_clear = -1
# Buffer swapping method: -1=Game default, 0=swap buffers when vertical interrupt has occurred, 1=swap buffers when set of conditions is satisfied. Prevents flicker on some games, 2=mix of first two methods
swapmode = -1
# Aspect ratio: -1=Game default, 0=Force 4:3, 1=Force 16:9, 2=Stretch, 3=Original
aspect = -1
# LOD calculation: -1=Game default, 0=disable. 1=fast, 2=precise
lodmode = -1
# Smart framebuffer: -1=Game default, 0=disable. 1=enable
fb_smart = -1
# Hardware frame buffer emulation: -1=Game default, 0=disable. 1=enable
fb_hires = -1
# Read framebuffer every frame (may be slow use only for effects that need it e.g. Banjo Kazooie, DK64 transitions): -1=Game default, 0=disable. 1=enable
fb_read_always = -1
# Render N64 frame buffer as texture: -1=Game default, 0=disable, 1=mode1, 2=mode2
read_back_to_screen = -1
# Show images written directly by CPU: -1=Game default, 0=disable. 1=enable
detect_cpu_write = -1
# Get frame buffer info: -1=Game default, 0=disable. 1=enable
fb_get_info = -1
# Enable software depth render: -1=Game default, 0=disable. 1=enable
fb_render = -1
# If true, skip up to maxframeskip frames to maintain clock schedule; if false, skip exactly maxframeskip frames
autoframeskip = False
# If autoframeskip is true, skip up to this many frames to maintain clock schedule; if autoframeskip is false, skip exactly this many frames
maxframeskip = 0
[Video-Rice]
# Mupen64Plus Rice Video Plugin config parameter version number
Version = 1
# Frame Buffer Emulation (0=ROM default, 1=disable)
FrameBufferSetting = 0
# Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc)
FrameBufferWriteBackControl = 0
# Render-to-texture emulation (0=none, 1=ignore, 2=normal, 3=write back, 4=write back and reload)
RenderToTexture = 0
# Control when the screen will be updated (0=ROM default, 1=VI origin update, 2=VI origin change, 3=CI change, 4=first CI change, 5=first primitive draw, 6=before screen clear, 7=after screen drawn)
ScreenUpdateSetting = 4
# Force to use normal alpha blender
NormalAlphaBlender = False
# Use a faster algorithm to speed up texture loading and CRC computation
FastTextureLoading = False
# Use different texture coordinate clamping code
AccurateTextureMapping = True
# Force emulated frame buffers to be in N64 native resolution
InN64Resolution = False
# Try to reduce Video RAM usage (should never be used)
SaveVRAM = False
# Enable this option to have better render-to-texture quality
DoubleSizeForSmallTxtrBuf = False
# Force to use normal color combiner
DefaultCombinerDisable = False
# Enable game-specific settings from INI file
EnableHacks = True
# If enabled, graphics will be drawn in WinFrame mode instead of solid and texture mode
WinFrameMode = False
# N64 Texture Memory Full Emulation (may fix some games, may break others)
FullTMEMEmulation = False
# Enable vertex clipper for fog operations
OpenGLVertexClipper = False
# Enable/Disable SSE optimizations for capable CPUs
EnableSSE = True
# If this option is enabled, the plugin will skip every other frame
SkipFrame = False
# If enabled, texture enhancement will be done only for TxtRect ucode
TexRectOnly = False
# If enabled, texture enhancement will be done only for textures width+height<=128
SmallTextureOnly = False
# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility)
LoadHiResCRCOnly = True
# Enable hi-resolution texture file loading
LoadHiResTextures = False
# Enable texture dumping
DumpTexturesToFiles = False
# Display On-screen FPS
ShowFPS = False
# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear
Mipmapping = 2
# Enable, Disable fog generation (0=Disable, 1=Enable)
FogMethod = 1
# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering)
ForceTextureFilter = 0
# Primary texture enhancement filter (0=None, 1=2X, 2=2XSAI, 3=HQ2X, 4=LQ2X, 5=HQ4X, 6=Sharpen, 7=Sharpen More, 8=External, 9=Mirrored)
TextureEnhancement = 0
# Secondary texture enhancement filter (0 = none, 1-4 = filtered)
TextureEnhancementControl = 0
# Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits)
TextureQuality = 0
# Z-buffer depth (only 16 or 32)
OpenGLDepthBufferSetting = 16
# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)
MultiSampling = 0
# Color bit depth for rendering window (0=32 bits, 1=16 bits)
ColorQuality = 1
# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM)
OpenGLRenderSetting = 0
# Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering
AnisotropicFiltering = 0
# If true, use polygon offset values specified below
ForcePolygonOffset = False
# Specifies a scale factor that is used to create a variable depth offset for each polygon
PolygonOffsetFactor = 0.000000
# Is multiplied by an implementation-specific value to create a constant depth offset
PolygonOffsetUnits = 0.000000

View file

@ -0,0 +1,25 @@
; RG552 Gamepad - default.ini
[rg552_joypad]
plugged = True
mouse = False
AnalogDeadzone = 0,0
AnalogPeak = 32768,32768
DPad R = button(16)
DPad L = button(15)
DPad D = button(14)
DPad U = button(13)
Start = button(9)
Z Trig = button(6)
B Button = button(3)
A Button = button(0)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(5)
L Trig = button(4)
Mempak switch =
Rumblepak switch =
# Analog axis configuration mappings
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

View file

@ -0,0 +1,25 @@
; RG552 Gamepad - zlswap.ini
[rg552_joypad]
plugged = True
mouse = False
AnalogDeadzone = 0,0
AnalogPeak = 32768,32768
DPad R = button(16)
DPad L = button(15)
DPad D = button(14)
DPad U = button(13)
Start = button(9)
Z Trig = button(4)
B Button = button(3)
A Button = button(0)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(5)
L Trig = button(6)
Mempak switch =
Rumblepak switch =
# Analog axis configuration mappings
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

View file

@ -0,0 +1,18 @@
# See https://wiki.libsdl.org/SDL_Keycode for key names
[general]
fastforward = "Space"
reset = "F9"
fullscreen = "F10"
[gba]
a = "A"
b = "S"
l = "D"
r = "F"
start = "Return"
select = "Backspace"
up = "Up"
down = "Down"
left = "Left"
right = "Right"

View file

@ -0,0 +1,18 @@
# See https://wiki.libsdl.org/SDL_Keycode for key names
[general]
fastforward = "Space"
reset = "F9"
fullscreen = "F10"
[gba]
a = "A"
b = "S"
l = "D"
r = "F"
start = "Return"
select = "Backspace"
up = "Up"
down = "Down"
left = "Left"
right = "Right"

View file

@ -0,0 +1 @@
RK3588

View file

@ -10,7 +10,7 @@ PKG_TOOLCHAIN="meson"
PKG_PATCH_DIRS+=" ${DEVICE}"
case ${DEVICE} in
RK3588)
RK3588*)
PKG_VERSION="120202c675749c5ef81ae4c8cdc30019b4de08f4"
PKG_SITE="https://gitlab.com/panfork/mesa"
PKG_URL="${PKG_SITE}.git"

View file

@ -0,0 +1,19 @@
/storage/.config/profile.d/001-device_config#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2024 JELOS (https://github.com/JustEnoughLinuxOS)
cat <<EOF >/storage/.config/profile.d/001-device_config
# Device Features
#DEVICE_FAKE_JACKSENSE="true"
DEVICE_VOLUMECTL="true"
#DEVICE_AUDIO_MIXER="DAC"
#DEVICE_PLAYBACK_PATH_SPK="1*"
#DEVICE_PLAYBACK_PATH_HP="0*"
DEVICE_BRIGHTNESS="128"
#DEVICE_HEADPHONE_DEV="/dev/input/by-path/platform-es8316-sound-event"
#DEVICE_HAS_HDMI="true"
#DEVICE_BATTERY_LED_STATUS="true"
#DEVICE_PWR_LED_CONTROL="true"
DEVICE_TEMP_SENSOR=("/sys/devices/virtual/thermal/thermal_zone0/temp" "/sys/devices/virtual/thermal/thermal_zone1/temp")
EOF

View file

@ -0,0 +1,9 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
cat <<EOF >/storage/.config/profile.d/020-fan_control
DEVICE_HAS_FAN="true"
DEVICE_PWM_FAN="/sys/class/hwmon/hwmon8/pwm1"
DEVICE_FAN_INPUT="/sys/class/hwmon/hwmon8/pwm1"
EOF

View file

@ -0,0 +1,10 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
cat <<EOF >/storage/.config/profile.d/050-modifiers
DEVICE_KEY_VOLUMEDOWN=114
DEVICE_KEY_VOLUMEUP=115
DEVICE_FUNC_KEYA_MODIFIER="BTN_SELECT"
DEVICE_FUNC_KEYB_MODIFIER="BTN_MODE"
EOF

View file

@ -0,0 +1,83 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
. /etc/profile
DEBUG=false
COOLING_PROFILE=$(get_setting "cooling.profile")
FAN_PWM="${DEVICE_PWM_FAN}"
log $0 "Setting profile to ${COOLING_PROFILE}"
function set_control() {
log $0 "Set fan control to ${1}"
if [ -e "${DEVICE_PWM_FAN}_enable" ]
then
echo ${1} >${DEVICE_PWM_FAN}_enable
fi
}
trap "set_control 0 && exit 0" SIGHUP SIGINT SIGQUIT SIGABRT
if [ -e "/storage/.config/fancontrol.conf" ] && [ "${COOLING_PROFILE}" = "custom" ]
then
log $0 "Loading configuration file" 2>/dev/null
source /storage/.config/fancontrol.conf
if [ ! $? = 0 ]
then
WARN="Custom fan profile could not be loaded, defaulting to auto."
log $0 "${WARN}"
COOLING_PROFILE="auto"
set_setting cooling.profile auto
fi
fi
if [ ! "${COOLING_PROFILE}" = "custom" ]
then
if [ "${COOLING_PROFILE}" = "aggressive" ]
then
SPEEDS=(255 225 195)
TEMPS=(55000 45000 0)
elif [ "${COOLING_PROFILE}" = "moderate" ]
then
SPEEDS=(255 192 128 96)
TEMPS=(65000 55000 45000 0)
elif [ "${COOLING_PROFILE}" = "quiet" ]
then
# Quiet.
SPEEDS=(255 192 128 96 64 48 32)
TEMPS=(70000 60000 55000 50000 49000 47000 0)
else
# auto
set_control 0 >/dev/null 2>&1
exit 0
fi
fi
log $0 "Enabling fan control."
set_control 1 >/dev/null 2>&1
while true
do
INDEX=0
CPU_TEMP=$(printf "%.0f" $(awk '{ total += $1; count++ } END { print total/count }' ${DEVICE_TEMP_SENSOR}))
$DEBUG && log $0 "CPU TEMP: ${CPU_TEMP}" 2>/dev/null
for TEMP in "${TEMPS[@]}"
do
if (( "${CPU_TEMP}" > "${TEMP}" )) && \
[ ! "${LASTSPEED}" = "${SPEEDS[${INDEX}]}" ]
then
$DEBUG && log $0 "Setting PWM FAN to ${SPEEDS[${INDEX}]} (${TEMP})" 2>/dev/null
echo ${SPEEDS[${INDEX}]} >${FAN_PWM}
LASTSPEED=${SPEEDS[${INDEX}]}
break
fi
INDEX=$(( $INDEX + 1 ))
done
sleep 2
done
log $0 "Disabling fan control."
set_control 0 >/dev/null 2>&1

View file

@ -0,0 +1 @@
RK3588

View file

@ -0,0 +1,18 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2024 JELOS (https://github.com/JustEnoughLinuxOS)
PKG_NAME="ap6256-firmware"
PKG_VERSION="6b6f053f6089e08dd2a675cda1ec813de2e842e2"
PKG_LICENSE="Apache"
PKG_SITE="https://github.com/armbian/firmware"
PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain"
PKG_NEED_UNPACK="${LINUX_DEPENDS}"
PKG_LONGDESC="ap6256 Linux firmware"
PKG_TOOLCHAIN="manual"
makeinstall_target() {
mkdir -p ${INSTALL}/$(get_kernel_overlay_dir)/lib/firmware/brcm
cp -av brcm/brcmfmac43456-sdio.bin ${INSTALL}/$(get_kernel_overlay_dir)/lib/firmware/brcm/
cp -av brcm/brcmfmac43456-sdio.txt ${INSTALL}/$(get_kernel_overlay_dir)/lib/firmware/brcm/
}

View file

@ -8,8 +8,17 @@ PKG_ARCH="arm aarch64"
PKG_DEPENDS_TARGET="kernel-firmware"
PKG_TOOLCHAIN="manual"
PKG_LONGDESC="Mali blob needed for RK3588 gpu"
PKG_ACE_FIRMWARE="https://github.com/JeffyCN/mirrors/raw/ca33693a03b2782edc237d1d3b786f94849bed7d/firmware/g610/mali_csffw.bin"
makeinstall_target() {
mkdir -p ${INSTALL}/$(get_full_firmware_dir)
cp -rf ${PKG_DIR}/firmware/* ${INSTALL}/$(get_full_firmware_dir)/
case ${DEVICE} in
RK3588-ACE)
# RK Linux 6.1 reequires libmali v18 for the moment
curl -Lo ${INSTALL}/$(get_full_firmware_dir)/mali_csffw.bin ${PKG_ACE_FIRMWARE}
;;
*)
cp -rf ${PKG_DIR}/firmware/* ${INSTALL}/$(get_full_firmware_dir)/
;;
esac
}

View file

@ -0,0 +1,26 @@
[core]
idle-time=0
backend=drm-backend.so
shell=kiosk-shell.so
modules=systemd-notify.so,kiosk-shell-dpms.so
xwayland=true
[output]
name=DSI-1
mode=1080x1920@60.0
transform=rotate-270
[xwayland]
path=/usr/bin/Xwayland
[terminal]
font-size=@WESTONFONTSIZE@
[shell]
background-color=0x00000000
clock-format=minutes-24h
locking=false
[autolaunch]
path=@STARTUP@
watch=true

View file

@ -0,0 +1,24 @@
[core]
idle-time=0
backend=drm-backend.so
xwayland=true
[output]
name=DSI-1
mode=1080x1920@60.0
transform=rotate-270
[xwayland]
path=/usr/bin/Xwayland
[terminal]
font-size=@WESTONFONTSIZE@
[shell]
background-color=0x00000000
clock-format=minutes-24h
locking=false
[launcher]
path=/usr/bin/weston-terminal
icon=/usr/share/weston/terminal.png

View file

@ -59,7 +59,12 @@ post_makeinstall_target() {
cp ${PKG_DIR}/scripts/weston-config ${INSTALL}/usr/lib/weston
mkdir -p ${INSTALL}/usr/share/weston
if [ ${DEVICE} = "RK3588-ACE" ]; then
cp ${PKG_DIR}/config/weston.ini.ace ${INSTALL}/usr/share/weston/weston.ini
cp ${PKG_DIR}/config/kiosk.ini.ace ${INSTALL}/usr/share/weston/kiosk.ini
else
cp ${PKG_DIR}/config/*ini ${INSTALL}/usr/share/weston
fi
safe_remove ${INSTALL}/usr/share/wayland-sessions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,171 @@
################################################################################
# setup device defaults
################################################################################
# The TARGET_CPU variable controls which processor should be targeted for
# generated code.
case ${TARGET_ARCH} in
aarch64)
TARGET_KERNEL_ARCH="arm64"
TARGET_PATCH_ARCH="aarch64"
TARGET_CPU="cortex-a76.cortex-a55"
TARGET_CPU_FLAGS="+crc+crypto"
TARGET_FPU="fp-armv8"
TARGET_FLOAT="hard"
TARGET_FEATURES="64bit"
;;
arm)
TARGET_KERNEL_ARCH="arm64"
TARGET_PATCH_ARCH="aarch64"
TARGET_CPU="cortex-a76.cortex-a55"
TARGET_CPU_FLAGS="+crc"
TARGET_FPU="crypto-neon-fp-armv8"
TARGET_FLOAT="hard"
TARGET_FEATURES="32bit"
;;
esac
# Kernel target
DEVICE_NAME="RK3588-ACE"
KERNEL_TARGET="Image"
BOOTLOADER="u-boot"
PARTITION_TABLE="gpt"
UBOOT_LABEL="uboot"
# Single dtb settings
TRUST_LABEL="trust"
DEVICE_DTB=("rk3588s-gameforce-ace")
UBOOT_DTB="${DEVICE_DTB[0]}"
# Multi dtb settings
#TRUST_LABEL="resource"
#DEVICE_DTB=("rk3588s-orangepi-5" "rk3588-rock-5b" "rk3588s-indiedroid-nova")
#UBOOT_DTB="rk3588-evb"
UBOOT_CONFIG="orangepi_5_defconfig"
PKG_SOC="rk3588"
PKG_DATAFILE="${PKG_RKBIN}/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin"
PKG_LOADER="spl/u-boot-spl.bin"
PKG_BL31="${PKG_RKBIN}/bin/rk35/rk3588_bl31_v1.38.elf"
PKG_LOAD_ADDR="0x00200000"
BOOT_INI=false
EXT_LINUX_CONF=true
# Additional kernel make parameters (for example to specify the u-boot loadaddress)
KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "rockchip/${DTB}.dtb "; done)"
# Define the CPU
HW_CPU="Rockchip RK3588"
# Mali GPU family
MALI_FAMILY="g610"
GRAPHIC_DRIVERS="panfrost"
# OpenGL(X) implementation to use (mesa / no)
OPENGL="mesa"
# OpenGL-ES implementation to use (mesa / no)
OPENGLES="mesa"
# Displayserver to use (weston / x11 / no)
DISPLAYSERVER="wl"
# Windowmanager to use (fluxbox / weston / no)
WINDOWMANAGER="weston"
# kernel serial console
EXTRA_CMDLINE="rootwait quiet systemd.debug_shell=ttyFIQ0 earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 console=tty0 fbcon=rotate:1 coherent_pool=2M"
# additional packages to install
# ADDITIONAL_PACKAGES=""
# additional Firmware to use ( )
# Space separated list is supported,
# e.g. FIRMWARE=""
FIRMWARE="libmali_rk3588 RTL8821CS-firmware ap6256-firmware"
# additional drivers to install:
# for a list of additional drivers see packages/linux-drivers
# Space separated list is supported,
# e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2"
ADDITIONAL_DRIVERS+=" RTW89 jelos-gamepad"
# build and install driver addons (yes / no)
DRIVER_ADDONS_SUPPORT="no"
# driver addons to install:
# for a list of additinoal drivers see packages/linux-driver-addons
# Space separated list is supported,
DRIVER_ADDONS=""
# debug tty path
DEBUG_TTY="/dev/ttyFIQ0"
# Disable 32BIT support
ENABLE_32BIT="true"
# build and install bluetooth support (yes / no)
BLUETOOTH_SUPPORT="yes"
# build and install Avahi (Zeroconf) daemon (yes / no)
AVAHI_DAEMON="no"
# build with NFS support (mounting nfs shares via the OS) (yes / no)
NFS_SUPPORT="no"
# build with Samba Client support (mounting samba shares via the OS) (yes / no)
SAMBA_SUPPORT="no"
# build and install Samba Server (yes / no)
SAMBA_SERVER="yes"
# build and install SFTP Server (yes / no)
SFTP_SERVER="yes"
# build and install Simple HTTP Server (yes / no)
SIMPLE_HTTP_SERVER="yes"
# build and install OpenVPN support (yes / no)
OPENVPN_SUPPORT="no"
# build and install ZeroTier support (yes / no)
ZEROTIER_SUPPORT="yes"
# build and install diskmounter support (udevil)
# this service provide auto mounting support for external drives in the
# mediacenter also automount internally drives at boottime via udev (yes / no)
UDEVIL="yes"
# build and install exFAT fuse support (yes / no)
EXFAT="yes"
# build and install NTFS-3G fuse support (yes / no)
NTFS3G="no"
# build and install hfs filesystem utilities (yes / no)
HFSTOOLS="no"
# Support for partitioning and formating disks in initramfs (yes / no)
# This adds support for parted and mkfs.ext3/4 to initramfs for OEM usage
INITRAMFS_PARTED_SUPPORT="no"
# build with swap support (yes / no)
SWAP_SUPPORT="yes"
# swap support enabled per default (yes / no)
SWAP_ENABLED_DEFAULT="yes"
# swapfile size if SWAP_SUPPORT=yes in MB
SWAPFILESIZE="384"
# Some devices have internal storage.
INSTALLER_SUPPORT="yes"
# cron support (yes / no)
CRON_SUPPORT="no"
# Settings package name - blank if not required
DISTRO_PKG_SETTINGS=""
# htop tool (yes / no)
HTOP_TOOL="yes"

View file

@ -16,12 +16,17 @@ PKG_STAMP="${KERNEL_TARGET} ${KERNEL_MAKE_EXTRACMD}"
PKG_PATCH_DIRS+="${DEVICE}"
case ${DEVICE} in
RK358*)
RK3588)
PKG_VERSION="eef98210c4984831d1706f884c95eec132c791e1"
PKG_URL="${PKG_SITE}/rk358x-kernel.git"
GET_HANDLER_SUPPORT="git"
PKG_GIT_CLONE_BRANCH="main"
;;
RK3588-ACE)
PKG_VERSION="99e54e1a546eca7fa8d5b86be1b825914e097d06"
PKG_URL="https://github.com/brooksytech/linux-rockchip/archive/${PKG_VERSION}.tar.gz"
PKG_GIT_CLONE_BRANCH="panfork-6.1"
;;
RK3399|RK3326|RK-ARMV8-A)
PKG_VERSION="6.7.6"
PKG_URL="https://www.kernel.org/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,743 @@
diff -rupN linux.orig/Makefile linux/Makefile
--- linux.orig/Makefile 2024-02-20 15:29:33.987442662 +0000
+++ linux/Makefile 2024-02-20 16:30:19.099604354 +0000
@@ -568,7 +568,7 @@ LINUXINCLUDE := \
KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE
KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
- -Werror=implicit-function-declaration -Werror=implicit-int \
+ -Werror=implicit-int \
-Werror=return-type -Wno-format-security \
-std=gnu11
KBUILD_CPPFLAGS := -D__KERNEL__
diff -rupN linux.orig/drivers/gpu/drm/panel/Kconfig linux/drivers/gpu/drm/panel/Kconfig
--- linux.orig/drivers/gpu/drm/panel/Kconfig 2024-02-20 15:29:34.639464011 +0000
+++ linux/drivers/gpu/drm/panel/Kconfig 2024-02-20 16:20:00.804814361 +0000
@@ -154,6 +154,15 @@ config DRM_PANEL_FEIYANG_FY07024DI26A30D
Say Y if you want to enable support for panels based on the
Feiyang FY07024DI26A30-D MIPI-DSI interface.
+config DRM_PANEL_HIMAX_HX8394
+ tristate "HIMAX HX8394 MIPI-DSI LCD panel"
+ depends on OF
+ depends on DRM_MIPI_DSI
+ depends on BACKLIGHT_CLASS_DEVICE
+ help
+ Say Y if you want to enable support for panels based on the
+ HIMAX HX8394 MIPI-DSI interface.
+
config DRM_PANEL_ILITEK_IL9322
tristate "Ilitek ILI9322 320x240 QVGA panels"
depends on OF && SPI
diff -rupN linux.orig/drivers/gpu/drm/panel/Makefile linux/drivers/gpu/drm/panel/Makefile
--- linux.orig/drivers/gpu/drm/panel/Makefile 2024-02-20 15:29:34.639464011 +0000
+++ linux/drivers/gpu/drm/panel/Makefile 2024-02-20 16:16:03.525879814 +0000
@@ -13,6 +13,7 @@ obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += p
obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o
obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o
obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o
+obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o
diff -rupN linux.orig/drivers/gpu/drm/panel/panel-himax-hx8394.c linux/drivers/gpu/drm/panel/panel-himax-hx8394.c
--- linux.orig/drivers/gpu/drm/panel/panel-himax-hx8394.c 1970-01-01 00:00:00.000000000 +0000
+++ linux/drivers/gpu/drm/panel/panel-himax-hx8394.c 2024-02-20 16:14:26.146716456 +0000
@@ -0,0 +1,697 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver for panels based on Himax HX8394 controller, such as:
+ *
+ * - HannStar HSD060BHW4 5.99" MIPI-DSI panel
+ *
+ * Copyright (C) 2021 Kamil Trzciński
+ *
+ * Based on drivers/gpu/drm/panel/panel-sitronix-st7703.c
+ * Copyright (C) Purism SPC 2019
+ */
+
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/media-bus-format.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/regulator/consumer.h>
+
+#include <video/mipi_display.h>
+
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_modes.h>
+#include <drm/drm_panel.h>
+
+#define DRV_NAME "panel-himax-hx8394"
+
+/* Manufacturer specific commands sent via DSI, listed in HX8394-F datasheet */
+#define HX8394_CMD_SETSEQUENCE 0xb0
+#define HX8394_CMD_SETPOWER 0xb1
+#define HX8394_CMD_SETDISP 0xb2
+#define HX8394_CMD_SETCYC 0xb4
+#define HX8394_CMD_SETVCOM 0xb6
+#define HX8394_CMD_SETTE 0xb7
+#define HX8394_CMD_SETSENSOR 0xb8
+#define HX8394_CMD_SETEXTC 0xb9
+#define HX8394_CMD_SETMIPI 0xba
+#define HX8394_CMD_SETOTP 0xbb
+#define HX8394_CMD_SETREGBANK 0xbd
+#define HX8394_CMD_UNKNOWN5 0xbf
+#define HX8394_CMD_UNKNOWN1 0xc0
+#define HX8394_CMD_SETDGCLUT 0xc1
+#define HX8394_CMD_SETID 0xc3
+#define HX8394_CMD_SETDDB 0xc4
+#define HX8394_CMD_UNKNOWN2 0xc6
+#define HX8394_CMD_SETCABC 0xc9
+#define HX8394_CMD_SETCABCGAIN 0xca
+#define HX8394_CMD_SETPANEL 0xcc
+#define HX8394_CMD_SETOFFSET 0xd2
+#define HX8394_CMD_SETGIP0 0xd3
+#define HX8394_CMD_UNKNOWN3 0xd4
+#define HX8394_CMD_SETGIP1 0xd5
+#define HX8394_CMD_SETGIP2 0xd6
+#define HX8394_CMD_SETGPO 0xd6
+#define HX8394_CMD_UNKNOWN4 0xd8
+#define HX8394_CMD_SETGIP3 0xd8
+#define HX8394_CMD_SETSCALING 0xdd
+#define HX8394_CMD_SETIDLE 0xdf
+#define HX8394_CMD_SETGAMMA 0xe0
+#define HX8394_CMD_SETCHEMODE_DYN 0xe4
+#define HX8394_CMD_SETCHE 0xe5
+#define HX8394_CMD_SETCESEL 0xe6
+#define HX8394_CMD_SET_SP_CMD 0xe9
+#define HX8394_CMD_SETREADINDEX 0xfe
+#define HX8394_CMD_GETSPIREAD 0xff
+
+struct hx8394 {
+ struct device *dev;
+ struct drm_panel panel;
+ struct gpio_desc *reset_gpio;
+ struct regulator *vcc;
+ struct regulator *iovcc;
+ enum drm_panel_orientation orientation;
+
+ const struct hx8394_panel_desc *desc;
+};
+
+struct hx8394_panel_desc {
+ const struct drm_display_mode *mode;
+ unsigned int lanes;
+ unsigned long mode_flags;
+ enum mipi_dsi_pixel_format format;
+ int (*init_sequence)(struct hx8394 *ctx);
+};
+
+static inline struct hx8394 *panel_to_hx8394(struct drm_panel *panel)
+{
+ return container_of(panel, struct hx8394, panel);
+}
+
+static int hsd060bhw4_init_sequence(struct hx8394 *ctx)
+{
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+ /* 5.19.8 SETEXTC: Set extension command (B9h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC,
+ 0xff, 0x83, 0x94);
+
+ /* 5.19.2 SETPOWER: Set power (B1h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
+ 0x48, 0x11, 0x71, 0x09, 0x32, 0x24, 0x71, 0x31, 0x55, 0x30);
+
+ /* 5.19.9 SETMIPI: Set MIPI control (BAh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETMIPI,
+ 0x63, 0x03, 0x68, 0x6b, 0xb2, 0xc0);
+
+ /* 5.19.3 SETDISP: Set display related register (B2h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP,
+ 0x00, 0x80, 0x78, 0x0c, 0x07);
+
+ /* 5.19.4 SETCYC: Set display waveform cycles (B4h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC,
+ 0x12, 0x63, 0x12, 0x63, 0x12, 0x63, 0x01, 0x0c, 0x7c, 0x55,
+ 0x00, 0x3f, 0x12, 0x6b, 0x12, 0x6b, 0x12, 0x6b, 0x01, 0x0c,
+ 0x7c);
+
+ /* 5.19.19 SETGIP0: Set GIP Option0 (D3h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0x32, 0x10,
+ 0x09, 0x00, 0x09, 0x32, 0x15, 0xad, 0x05, 0xad, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x37, 0x03, 0x0b, 0x0b, 0x37, 0x00, 0x00,
+ 0x00, 0x0c, 0x40);
+
+ /* 5.19.20 Set GIP Option1 (D5h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1,
+ 0x19, 0x19, 0x18, 0x18, 0x1b, 0x1b, 0x1a, 0x1a, 0x00, 0x01,
+ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x20, 0x21, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x24, 0x25, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18);
+
+ /* 5.19.21 Set GIP Option2 (D6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2,
+ 0x18, 0x18, 0x19, 0x19, 0x1b, 0x1b, 0x1a, 0x1a, 0x07, 0x06,
+ 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x25, 0x24, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18);
+
+ /* 5.19.25 SETGAMMA: Set gamma curve related setting (E0h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA,
+ 0x00, 0x04, 0x0c, 0x12, 0x14, 0x18, 0x1a, 0x18, 0x31, 0x3f,
+ 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, 0x82, 0x7e, 0x8a,
+ 0x99, 0x4a, 0x48, 0x49, 0x4b, 0x4a, 0x4c, 0x4b, 0x7f, 0x00,
+ 0x04, 0x0c, 0x11, 0x13, 0x17, 0x1a, 0x18, 0x31,
+ 0x3f, 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f,
+ 0x82, 0x7e, 0x8a, 0x99, 0x4a, 0x48, 0x49, 0x4b,
+ 0x4a, 0x4c, 0x4b, 0x7f);
+
+ /* 5.19.17 SETPANEL (CCh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL,
+ 0x0b);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN1,
+ 0x1f, 0x31);
+
+ /* 5.19.5 SETVCOM: Set VCOM voltage (B6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM,
+ 0x7d, 0x7d);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3,
+ 0x02);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x01);
+
+ /* 5.19.2 SETPOWER: Set power (B1h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
+ 0x00);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x00);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3,
+ 0xed);
+
+ return 0;
+}
+
+static const struct drm_display_mode hsd060bhw4_mode = {
+ .hdisplay = 720,
+ .hsync_start = 720 + 40,
+ .hsync_end = 720 + 40 + 46,
+ .htotal = 720 + 40 + 46 + 40,
+ .vdisplay = 1440,
+ .vsync_start = 1440 + 9,
+ .vsync_end = 1440 + 9 + 7,
+ .vtotal = 1440 + 9 + 7 + 7,
+ .clock = 74250,
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+ .width_mm = 68,
+ .height_mm = 136,
+};
+
+static const struct hx8394_panel_desc hsd060bhw4_desc = {
+ .mode = &hsd060bhw4_mode,
+ .lanes = 4,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST,
+ .format = MIPI_DSI_FMT_RGB888,
+ .init_sequence = hsd060bhw4_init_sequence,
+};
+
+static int powkiddy_x55_init_sequence(struct hx8394 *ctx)
+{
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+ /* 5.19.8 SETEXTC: Set extension command (B9h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC,
+ 0xff, 0x83, 0x94);
+
+ /* 5.19.9 SETMIPI: Set MIPI control (BAh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETMIPI,
+ 0x63, 0x03, 0x68, 0x6b, 0xb2, 0xc0);
+
+ /* 5.19.2 SETPOWER: Set power (B1h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
+ 0x48, 0x12, 0x72, 0x09, 0x32, 0x54, 0x71, 0x71, 0x57, 0x47);
+
+ /* 5.19.3 SETDISP: Set display related register (B2h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP,
+ 0x00, 0x80, 0x64, 0x2c, 0x16, 0x2f);
+
+ /* 5.19.4 SETCYC: Set display waveform cycles (B4h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC,
+ 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x01, 0x0c, 0x86, 0x75,
+ 0x00, 0x3f, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x01, 0x0c,
+ 0x86);
+
+ /* 5.19.5 SETVCOM: Set VCOM voltage (B6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM,
+ 0x6e, 0x6e);
+
+ /* 5.19.19 SETGIP0: Set GIP Option0 (D3h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0,
+ 0x00, 0x00, 0x07, 0x07, 0x40, 0x07, 0x0c, 0x00, 0x08, 0x10,
+ 0x08, 0x00, 0x08, 0x54, 0x15, 0x0a, 0x05, 0x0a, 0x02, 0x15,
+ 0x06, 0x05, 0x06, 0x47, 0x44, 0x0a, 0x0a, 0x4b, 0x10, 0x07,
+ 0x07, 0x0c, 0x40);
+
+ /* 5.19.20 Set GIP Option1 (D5h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1,
+ 0x1c, 0x1c, 0x1d, 0x1d, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x24, 0x25, 0x18, 0x18,
+ 0x26, 0x27, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x20, 0x21,
+ 0x18, 0x18, 0x18, 0x18);
+
+ /* 5.19.21 Set GIP Option2 (D6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2,
+ 0x1c, 0x1c, 0x1d, 0x1d, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02,
+ 0x01, 0x00, 0x0b, 0x0a, 0x09, 0x08, 0x21, 0x20, 0x18, 0x18,
+ 0x27, 0x26, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x25, 0x24,
+ 0x18, 0x18, 0x18, 0x18);
+
+ /* 5.19.25 SETGAMMA: Set gamma curve related setting (E0h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA,
+ 0x00, 0x0a, 0x15, 0x1b, 0x1e, 0x21, 0x24, 0x22, 0x47, 0x56,
+ 0x65, 0x66, 0x6e, 0x82, 0x88, 0x8b, 0x9a, 0x9d, 0x98, 0xa8,
+ 0xb9, 0x5d, 0x5c, 0x61, 0x66, 0x6a, 0x6f, 0x7f, 0x7f, 0x00,
+ 0x0a, 0x15, 0x1b, 0x1e, 0x21, 0x24, 0x22, 0x47, 0x56, 0x65,
+ 0x65, 0x6e, 0x81, 0x87, 0x8b, 0x98, 0x9d, 0x99, 0xa8, 0xba,
+ 0x5d, 0x5d, 0x62, 0x67, 0x6b, 0x72, 0x7f, 0x7f);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN1,
+ 0x1f, 0x31);
+
+ /* 5.19.17 SETPANEL (CCh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL,
+ 0x0b);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3,
+ 0x02);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x02);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x00);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x01);
+
+ /* 5.19.2 SETPOWER: Set power (B1h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
+ 0x00);
+
+ /* 5.19.11 Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x00);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN5,
+ 0x40, 0x81, 0x50, 0x00, 0x1a, 0xfc, 0x01);
+
+ /* Unknown command, not listed in the HX8394-F datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN2,
+ 0xed);
+
+ return 0;
+}
+
+static const struct drm_display_mode powkiddy_x55_mode = {
+ .hdisplay = 720,
+ .hsync_start = 720 + 44,
+ .hsync_end = 720 + 44 + 20,
+ .htotal = 720 + 44 + 20 + 20,
+ .vdisplay = 1280,
+ .vsync_start = 1280 + 12,
+ .vsync_end = 1280 + 12 + 10,
+ .vtotal = 1280 + 12 + 10 + 10,
+ .clock = 63290,
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+ .width_mm = 67,
+ .height_mm = 121,
+};
+
+static const struct hx8394_panel_desc powkiddy_x55_desc = {
+ .mode = &powkiddy_x55_mode,
+ .lanes = 4,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
+ .format = MIPI_DSI_FMT_RGB888,
+ .init_sequence = powkiddy_x55_init_sequence,
+};
+
+static int gameforce_ace_init_sequence(struct hx8394 *ctx)
+{
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+ /* SETEXTC: Set extension command (B9h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC,
+ 0xff, 0x83, 0x99);
+
+ /* SETOFFSET (D2h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETOFFSET,
+ 0x77);
+
+ /* SETPOWER: Set power (B1h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
+ 0x02, 0x04, 0x74, 0x94, 0x01, 0x32, 0x33, 0x11, 0x11, 0xAB,
+ 0x4D, 0x56, 0x73, 0x02, 0x02);
+
+ /* SETDISP: Set display related register (B2h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP,
+ 0x00, 0x80, 0x80, 0xAE, 0x05, 0x07, 0x5A, 0x11, 0x00, 0x00,
+ 0x10, 0x1E, 0x70, 0x03, 0xD4);
+
+ /* SETCYC: Set display waveform cycles (B4h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC,
+ 0x00, 0xFF, 0x02, 0xC0, 0x02, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x04,
+ 0x06, 0x00, 0x32, 0x04, 0x0A, 0x08, 0x21, 0x03, 0x01, 0x00, 0x0F,
+ 0xB8, 0x8B, 0x02, 0xC0, 0x02, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x04,
+ 0x06, 0x00, 0x32, 0x04, 0x0A, 0x08, 0x01, 0x00, 0x0F, 0xB8, 0x01);
+
+ /* SETGIP0: Set GIP Option0 (D3h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x10, 0x04,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x05, 0x05, 0x07, 0x00, 0x00, 0x00, 0x05, 0x40);
+
+ /* Set GIP Option1 (D5h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1,
+ 0x18, 0x18, 0x19, 0x19, 0x18, 0x18, 0x21, 0x20, 0x01, 0x00, 0x07,
+ 0x06, 0x05, 0x04, 0x03, 0x02, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x18, 0x18, 0x18, 0x18);
+
+ /* Set GIP Option2 (D6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2,
+ 0x18, 0x18, 0x19, 0x19, 0x40, 0x40, 0x20, 0x21, 0x02, 0x03, 0x04,
+ 0x05, 0x06, 0x07, 0x00, 0x01, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x40, 0x40, 0x40, 0x40);
+
+ /* Set GIP Option3 (D8h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP3,
+ 0xA2, 0xAA, 0x02, 0xA0, 0xA2, 0xA8, 0x02, 0xA0, 0xB0, 0x00, 0x00,
+ 0x00, 0xB0, 0x00, 0x00, 0x00);
+
+ /* Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x01);
+
+ /* Set GIP Option3 (D8h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP3,
+ 0xB0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xE2, 0xAA, 0x03,
+ 0xF0, 0xE2, 0xAA, 0x03, 0xF0);
+
+ /* Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x02);
+
+ /* Set GIP Option3 (D8h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP3,
+ 0xE2, 0xAA, 0x03, 0xF0, 0xE2, 0xAA, 0x03, 0xF);
+
+ /* Set register bank (BDh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
+ 0x00);
+
+ /* SETVCOM: Set VCOM voltage (B6h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM,
+ 0x7A, 0x7A);
+
+ /* SETGAMMA: Set gamma curve related setting (E0h) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA,
+ 0x00, 0x18, 0x27, 0x24, 0x5A, 0x68, 0x79, 0x78, 0x81, 0x8A, 0x92,
+ 0x99, 0x9E, 0xA7, 0xAF, 0xB4, 0xB9, 0xC3, 0xC7, 0xD1, 0xC6, 0xD4,
+ 0xD5, 0x6C, 0x67, 0x71, 0x77, 0x00, 0x00, 0x18, 0x27, 0x24, 0x5A,
+ 0x68, 0x79, 0x78, 0x81, 0x8A, 0x92, 0x99, 0x9E, 0xA7, 0xAF, 0xB4,
+ 0xB9, 0xC3, 0xC7, 0xD1, 0xC6, 0xD4, 0xD5, 0x6C, 0x67, 0x77);
+
+ /* Unknown command, C6h, not listed in the HX8399-c datasheet */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN2,
+ 0xFF, 0xF9);
+
+ /* SETPANEL (CCh) */
+ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL,
+ 0x08);
+
+ return 0;
+}
+
+static const struct drm_display_mode gameforce_ace_mode = {
+ .hdisplay = 1080,
+ .hsync_start = 1080 + 32,
+ .hsync_end = 1080 + 32 + 8,
+ .htotal = 1080 + 32 + 8 + 32,
+ .vdisplay = 1920,
+ .vsync_start = 1920 + 16,
+ .vsync_end = 1920 + 16 + 2,
+ .vtotal = 1920 + 16 + 2 + 14,
+ .clock = 12400,
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+ .width_mm = 68,
+ .height_mm = 120,
+};
+
+static const struct hx8394_panel_desc gameforce_ace_desc = {
+ .mode = &gameforce_ace_mode,
+ .lanes = 4,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
+ .format = MIPI_DSI_FMT_RGB888,
+ .init_sequence = gameforce_ace_init_sequence,
+};
+
+static int hx8394_enable(struct drm_panel *panel)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+ int ret;
+
+ ret = ctx->desc->init_sequence(ctx);
+ if (ret) {
+ dev_err(ctx->dev, "Panel init sequence failed: %d\n", ret);
+ return ret;
+ }
+
+ ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
+ if (ret) {
+ dev_err(ctx->dev, "Failed to exit sleep mode: %d\n", ret);
+ return ret;
+ }
+
+ /* Panel is operational 120 msec after reset */
+ msleep(120);
+
+ ret = mipi_dsi_dcs_set_display_on(dsi);
+ if (ret) {
+ dev_err(ctx->dev, "Failed to turn on the display: %d\n", ret);
+ goto sleep_in;
+ }
+
+ return 0;
+
+sleep_in:
+ /* This will probably fail, but let's try orderly power off anyway. */
+ ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
+ if (!ret)
+ msleep(50);
+
+ return ret;
+}
+
+static int hx8394_disable(struct drm_panel *panel)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+ int ret;
+
+ ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
+ if (ret) {
+ dev_err(ctx->dev, "Failed to enter sleep mode: %d\n", ret);
+ return ret;
+ }
+
+ msleep(50); /* about 3 frames */
+
+ return 0;
+}
+
+static int hx8394_unprepare(struct drm_panel *panel)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+
+ regulator_disable(ctx->iovcc);
+ regulator_disable(ctx->vcc);
+
+ return 0;
+}
+
+static int hx8394_prepare(struct drm_panel *panel)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+ int ret;
+
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+
+ ret = regulator_enable(ctx->vcc);
+ if (ret) {
+ dev_err(ctx->dev, "Failed to enable vcc supply: %d\n", ret);
+ return ret;
+ }
+
+ ret = regulator_enable(ctx->iovcc);
+ if (ret) {
+ dev_err(ctx->dev, "Failed to enable iovcc supply: %d\n", ret);
+ goto disable_vcc;
+ }
+
+ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
+
+ msleep(180);
+
+ return 0;
+
+disable_vcc:
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ regulator_disable(ctx->vcc);
+ return ret;
+}
+
+static int hx8394_get_modes(struct drm_panel *panel,
+ struct drm_connector *connector)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+ struct drm_display_mode *mode;
+
+ mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);
+ if (!mode) {
+ dev_err(ctx->dev, "Failed to add mode %ux%u@%u\n",
+ ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay,
+ drm_mode_vrefresh(ctx->desc->mode));
+ return -ENOMEM;
+ }
+
+ drm_mode_set_name(mode);
+
+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
+ connector->display_info.width_mm = mode->width_mm;
+ connector->display_info.height_mm = mode->height_mm;
+ drm_mode_probed_add(connector, mode);
+
+ return 1;
+}
+
+static enum drm_panel_orientation hx8394_get_orientation(struct drm_panel *panel)
+{
+ struct hx8394 *ctx = panel_to_hx8394(panel);
+
+ return ctx->orientation;
+}
+
+static const struct drm_panel_funcs hx8394_drm_funcs = {
+ .disable = hx8394_disable,
+ .unprepare = hx8394_unprepare,
+ .prepare = hx8394_prepare,
+ .enable = hx8394_enable,
+ .get_modes = hx8394_get_modes,
+ .get_orientation = hx8394_get_orientation,
+};
+
+static int hx8394_probe(struct mipi_dsi_device *dsi)
+{
+ struct device *dev = &dsi->dev;
+ struct hx8394 *ctx;
+ int ret;
+
+ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
+ if (!ctx)
+ return -ENOMEM;
+
+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(ctx->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
+ "Failed to get reset gpio\n");
+
+ ret = of_drm_get_panel_orientation(dev->of_node, &ctx->orientation);
+ if (ret < 0) {
+ dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, ret);
+ return ret;
+ }
+
+ mipi_dsi_set_drvdata(dsi, ctx);
+
+ ctx->dev = dev;
+ ctx->desc = of_device_get_match_data(dev);
+
+ dsi->mode_flags = ctx->desc->mode_flags;
+ dsi->format = ctx->desc->format;
+ dsi->lanes = ctx->desc->lanes;
+
+ ctx->vcc = devm_regulator_get(dev, "vcc");
+ if (IS_ERR(ctx->vcc))
+ return dev_err_probe(dev, PTR_ERR(ctx->vcc),
+ "Failed to request vcc regulator\n");
+
+ ctx->iovcc = devm_regulator_get(dev, "iovcc");
+ if (IS_ERR(ctx->iovcc))
+ return dev_err_probe(dev, PTR_ERR(ctx->iovcc),
+ "Failed to request iovcc regulator\n");
+
+ drm_panel_init(&ctx->panel, dev, &hx8394_drm_funcs,
+ DRM_MODE_CONNECTOR_DSI);
+
+ ret = drm_panel_of_backlight(&ctx->panel);
+ if (ret)
+ return ret;
+
+ drm_panel_add(&ctx->panel);
+
+ ret = mipi_dsi_attach(dsi);
+ if (ret < 0) {
+ dev_err_probe(dev, ret, "mipi_dsi_attach failed\n");
+ drm_panel_remove(&ctx->panel);
+ return ret;
+ }
+
+ dev_dbg(dev, "%ux%u@%u %ubpp dsi %udl - ready\n",
+ ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay,
+ drm_mode_vrefresh(ctx->desc->mode),
+ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes);
+
+ return 0;
+}
+
+static void hx8394_remove(struct mipi_dsi_device *dsi)
+{
+ struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi);
+ int ret;
+
+ ret = mipi_dsi_detach(dsi);
+ if (ret < 0)
+ dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
+
+ drm_panel_remove(&ctx->panel);
+}
+
+static const struct of_device_id hx8394_of_match[] = {
+ { .compatible = "hannstar,hsd060bhw4", .data = &hsd060bhw4_desc },
+ { .compatible = "powkiddy,x55-panel", .data = &powkiddy_x55_desc },
+ { .compatible = "gameforce,ace-panel", .data = &gameforce_ace_desc },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, hx8394_of_match);
+
+static struct mipi_dsi_driver hx8394_driver = {
+ .probe = hx8394_probe,
+ .remove = hx8394_remove,
+ .driver = {
+ .name = DRV_NAME,
+ .of_match_table = hx8394_of_match,
+ },
+};
+module_mipi_dsi_driver(hx8394_driver);
+
+MODULE_AUTHOR("Kamil Trzciński <ayufan@ayufan.eu>");
+MODULE_DESCRIPTION("DRM driver for Himax HX8394 based MIPI DSI panels");
+MODULE_LICENSE("GPL");

View file

@ -0,0 +1,217 @@
diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s.dtsi linux/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
--- linux.orig/arch/arm64/boot/dts/rockchip/rk3588s.dtsi 2024-02-21 01:57:23.561577173 +0000
+++ linux/arch/arm64/boot/dts/rockchip/rk3588s.dtsi 2024-02-23 16:00:03.971337529 +0000
@@ -706,20 +706,20 @@
rockchip,high-temp-max-freq = <1608000>;
/* RK3588 cluster0 OPPs */
- opp-408000000 {
- opp-supported-hw = <0xf9 0xffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <675000 675000 950000>,
- <675000 675000 950000>;
- clock-latency-ns = <40000>;
- };
- opp-600000000 {
- opp-supported-hw = <0xf9 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <675000 675000 950000>,
- <675000 675000 950000>;
- clock-latency-ns = <40000>;
- };
+ //opp-408000000 {
+ // opp-supported-hw = <0xf9 0xffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <675000 675000 950000>,
+ // <675000 675000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
+ //opp-600000000 {
+ // opp-supported-hw = <0xf9 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <675000 675000 950000>,
+ // <675000 675000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-816000000 {
opp-supported-hw = <0xf9 0xffff>;
opp-hz = /bits/ 64 <816000000>;
@@ -813,20 +813,20 @@
};
/* RK3588J/M cluster0 OPPs */
- opp-j-m-408000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
- opp-j-m-600000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
+ //opp-j-m-408000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
+ //opp-j-m-600000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-j-m-816000000 {
opp-supported-hw = <0x06 0xffff>;
opp-hz = /bits/ 64 <816000000>;
@@ -971,21 +971,21 @@
rockchip,high-temp-max-freq = <2208000>;
/* RK3588 cluster1 OPPs */
- opp-408000000 {
- opp-supported-hw = <0xf9 0xffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <675000 675000 1000000>,
- <675000 675000 1000000>;
- clock-latency-ns = <40000>;
- opp-suspend;
- };
- opp-600000000 {
- opp-supported-hw = <0xf9 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <675000 675000 1000000>,
- <675000 675000 1000000>;
- clock-latency-ns = <40000>;
- };
+ //opp-408000000 {
+ // opp-supported-hw = <0xf9 0xffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <675000 675000 1000000>,
+ // <675000 675000 1000000>;
+ // clock-latency-ns = <40000>;
+ // opp-suspend;
+ //};
+ //opp-600000000 {
+ // opp-supported-hw = <0xf9 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <675000 675000 1000000>,
+ // <675000 675000 1000000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-816000000 {
opp-supported-hw = <0xf9 0xffff>;
opp-hz = /bits/ 64 <816000000>;
@@ -1138,20 +1138,20 @@
};
/* RK3588J/M cluster1 OPPs */
- opp-j-m-408000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
- opp-j-m-600000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
+ //opp-j-m-408000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
+ //opp-j-m-600000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-j-m-816000000 {
opp-supported-hw = <0x06 0xffff>;
opp-hz = /bits/ 64 <816000000>;
@@ -1304,21 +1304,21 @@
rockchip,high-temp-max-freq = <2208000>;
/* RK3588 cluster2 OPPs */
- opp-408000000 {
- opp-supported-hw = <0xf9 0x0ffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <675000 675000 1000000>,
- <675000 675000 1000000>;
- clock-latency-ns = <40000>;
- opp-suspend;
- };
- opp-600000000 {
- opp-supported-hw = <0xf9 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <675000 675000 1000000>,
- <675000 675000 1000000>;
- clock-latency-ns = <40000>;
- };
+ //opp-408000000 {
+ // opp-supported-hw = <0xf9 0x0ffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <675000 675000 1000000>,
+ // <675000 675000 1000000>;
+ // clock-latency-ns = <40000>;
+ // opp-suspend;
+ //};
+ //opp-600000000 {
+ // opp-supported-hw = <0xf9 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <675000 675000 1000000>,
+ // <675000 675000 1000000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-816000000 {
opp-supported-hw = <0xf9 0xffff>;
opp-hz = /bits/ 64 <816000000>;
@@ -1467,20 +1467,20 @@
};
/* RK3588J/M cluster2 OPPs */
- opp-j-m-408000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <408000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
- opp-j-m-600000000 {
- opp-supported-hw = <0x06 0xffff>;
- opp-hz = /bits/ 64 <600000000>;
- opp-microvolt = <750000 750000 950000>,
- <750000 750000 950000>;
- clock-latency-ns = <40000>;
- };
+ //opp-j-m-408000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <408000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
+ //opp-j-m-600000000 {
+ // opp-supported-hw = <0x06 0xffff>;
+ // opp-hz = /bits/ 64 <600000000>;
+ // opp-microvolt = <750000 750000 950000>,
+ // <750000 750000 950000>;
+ // clock-latency-ns = <40000>;
+ //};
opp-j-m-816000000 {
opp-supported-hw = <0x06 0xffff>;
opp-hz = /bits/ 64 <816000000>;

View file

@ -0,0 +1,691 @@
diff -rupN linux.orig/Makefile linux/Makefile
--- linux.orig/Makefile 2024-02-21 01:57:23.445573377 +0000
+++ linux/Makefile 2024-02-22 16:21:29.661040043 +0000
@@ -1075,7 +1075,7 @@ endif
KBUILD_CFLAGS += -Werror=date-time
# enforce correct pointer usage
-KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
+#KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
# Require designated initializers for all marked structures
KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
diff -rupN linux.orig/drivers/iio/adc/ti-ads1015.c linux/drivers/iio/adc/ti-ads1015.c
--- linux.orig/drivers/iio/adc/ti-ads1015.c 2024-02-21 01:57:24.113595238 +0000
+++ linux/drivers/iio/adc/ti-ads1015.c 2024-02-22 16:18:15.319056297 +0000
@@ -76,15 +76,10 @@
#define ADS1015_DEFAULT_DATA_RATE 4
#define ADS1015_DEFAULT_CHAN 0
-struct ads1015_chip_data {
- struct iio_chan_spec const *channels;
- int num_channels;
- const struct iio_info *info;
- const int *data_rate;
- const int data_rate_len;
- const int *scale;
- const int scale_len;
- bool has_comparator;
+enum chip_ids {
+ ADSXXXX = 0,
+ ADS1015,
+ ADS1115,
};
enum ads1015_channels {
@@ -99,11 +94,11 @@ enum ads1015_channels {
ADS1015_TIMESTAMP,
};
-static const int ads1015_data_rate[] = {
+static const unsigned int ads1015_data_rate[] = {
128, 250, 490, 920, 1600, 2400, 3300, 3300
};
-static const int ads1115_data_rate[] = {
+static const unsigned int ads1115_data_rate[] = {
8, 16, 32, 64, 128, 250, 475, 860
};
@@ -111,28 +106,10 @@ static const int ads1115_data_rate[] = {
* Translation from PGA bits to full-scale positive and negative input voltage
* range in mV
*/
-static const int ads1015_fullscale_range[] = {
+static int ads1015_fullscale_range[] = {
6144, 4096, 2048, 1024, 512, 256, 256, 256
};
-static const int ads1015_scale[] = { /* 12bit ADC */
- 256, 11,
- 512, 11,
- 1024, 11,
- 2048, 11,
- 4096, 11,
- 6144, 11
-};
-
-static const int ads1115_scale[] = { /* 16bit ADC */
- 256, 15,
- 512, 15,
- 1024, 15,
- 2048, 15,
- 4096, 15,
- 6144, 15
-};
-
/*
* Translation from COMP_QUE field value to the number of successive readings
* exceed the threshold values before an interrupt is generated
@@ -157,53 +134,71 @@ static const struct iio_event_spec ads10
},
};
-/*
- * Compile-time check whether _fitbits can accommodate up to _testbits
- * bits. Returns _fitbits on success, fails to compile otherwise.
- *
- * The test works such that it multiplies constant _fitbits by constant
- * double-negation of size of a non-empty structure, i.e. it multiplies
- * constant _fitbits by constant 1 in each successful compilation case.
- * The non-empty structure may contain C11 _Static_assert(), make use of
- * this and place the kernel variant of static assert in there, so that
- * it performs the compile-time check for _testbits <= _fitbits. Note
- * that it is not possible to directly use static_assert in compound
- * statements, hence this convoluted construct.
- */
-#define FIT_CHECK(_testbits, _fitbits) \
- ( \
- (_fitbits) * \
- !!sizeof(struct { \
- static_assert((_testbits) <= (_fitbits)); \
- int pad; \
- }) \
- )
+#define ADS1015_V_CHAN(_chan, _addr) { \
+ .type = IIO_VOLTAGE, \
+ .indexed = 1, \
+ .address = _addr, \
+ .channel = _chan, \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
+ BIT(IIO_CHAN_INFO_SCALE) | \
+ BIT(IIO_CHAN_INFO_SAMP_FREQ), \
+ .scan_index = _addr, \
+ .scan_type = { \
+ .sign = 's', \
+ .realbits = 12, \
+ .storagebits = 16, \
+ .shift = 4, \
+ .endianness = IIO_CPU, \
+ }, \
+ .event_spec = ads1015_events, \
+ .num_event_specs = ARRAY_SIZE(ads1015_events), \
+ .datasheet_name = "AIN"#_chan, \
+}
-#define ADS1015_V_CHAN(_chan, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
+#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr) { \
.type = IIO_VOLTAGE, \
+ .differential = 1, \
.indexed = 1, \
.address = _addr, \
.channel = _chan, \
+ .channel2 = _chan2, \
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
BIT(IIO_CHAN_INFO_SCALE) | \
BIT(IIO_CHAN_INFO_SAMP_FREQ), \
- .info_mask_shared_by_all_available = \
+ .scan_index = _addr, \
+ .scan_type = { \
+ .sign = 's', \
+ .realbits = 12, \
+ .storagebits = 16, \
+ .shift = 4, \
+ .endianness = IIO_CPU, \
+ }, \
+ .event_spec = ads1015_events, \
+ .num_event_specs = ARRAY_SIZE(ads1015_events), \
+ .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
+}
+
+#define ADS1115_V_CHAN(_chan, _addr) { \
+ .type = IIO_VOLTAGE, \
+ .indexed = 1, \
+ .address = _addr, \
+ .channel = _chan, \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
BIT(IIO_CHAN_INFO_SCALE) | \
BIT(IIO_CHAN_INFO_SAMP_FREQ), \
.scan_index = _addr, \
.scan_type = { \
.sign = 's', \
- .realbits = (_realbits), \
- .storagebits = FIT_CHECK((_realbits) + (_shift), 16), \
- .shift = (_shift), \
+ .realbits = 16, \
+ .storagebits = 16, \
.endianness = IIO_CPU, \
}, \
- .event_spec = (_event_spec), \
- .num_event_specs = (_num_event_specs), \
+ .event_spec = ads1015_events, \
+ .num_event_specs = ARRAY_SIZE(ads1015_events), \
.datasheet_name = "AIN"#_chan, \
}
-#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
+#define ADS1115_V_DIFF_CHAN(_chan, _chan2, _addr) { \
.type = IIO_VOLTAGE, \
.differential = 1, \
.indexed = 1, \
@@ -213,19 +208,15 @@ static const struct iio_event_spec ads10
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
BIT(IIO_CHAN_INFO_SCALE) | \
BIT(IIO_CHAN_INFO_SAMP_FREQ), \
- .info_mask_shared_by_all_available = \
- BIT(IIO_CHAN_INFO_SCALE) | \
- BIT(IIO_CHAN_INFO_SAMP_FREQ), \
.scan_index = _addr, \
.scan_type = { \
.sign = 's', \
- .realbits = (_realbits), \
- .storagebits = FIT_CHECK((_realbits) + (_shift), 16), \
- .shift = (_shift), \
+ .realbits = 16, \
+ .storagebits = 16, \
.endianness = IIO_CPU, \
}, \
- .event_spec = (_event_spec), \
- .num_event_specs = (_num_event_specs), \
+ .event_spec = ads1015_events, \
+ .num_event_specs = ARRAY_SIZE(ads1015_events), \
.datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
}
@@ -254,7 +245,7 @@ struct ads1015_data {
unsigned int comp_mode;
struct ads1015_thresh_data thresh_data[ADS1015_CHANNELS];
- const struct ads1015_chip_data *chip;
+ unsigned int *data_rate;
/*
* Set to true when the ADC is switched to the continuous-conversion
* mode and exits from a power-down state. This flag is used to avoid
@@ -282,91 +273,49 @@ static void ads1015_event_channel_disabl
data->event_channel = ADS1015_CHANNELS;
}
-static const struct regmap_range ads1015_writeable_ranges[] = {
- regmap_reg_range(ADS1015_CFG_REG, ADS1015_HI_THRESH_REG),
-};
-
-static const struct regmap_access_table ads1015_writeable_table = {
- .yes_ranges = ads1015_writeable_ranges,
- .n_yes_ranges = ARRAY_SIZE(ads1015_writeable_ranges),
-};
+static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case ADS1015_CFG_REG:
+ case ADS1015_LO_THRESH_REG:
+ case ADS1015_HI_THRESH_REG:
+ return true;
+ default:
+ return false;
+ }
+}
static const struct regmap_config ads1015_regmap_config = {
.reg_bits = 8,
.val_bits = 16,
.max_register = ADS1015_HI_THRESH_REG,
- .wr_table = &ads1015_writeable_table,
-};
-
-static const struct regmap_range tla2024_writeable_ranges[] = {
- regmap_reg_range(ADS1015_CFG_REG, ADS1015_CFG_REG),
-};
-
-static const struct regmap_access_table tla2024_writeable_table = {
- .yes_ranges = tla2024_writeable_ranges,
- .n_yes_ranges = ARRAY_SIZE(tla2024_writeable_ranges),
-};
-
-static const struct regmap_config tla2024_regmap_config = {
- .reg_bits = 8,
- .val_bits = 16,
- .max_register = ADS1015_CFG_REG,
- .wr_table = &tla2024_writeable_table,
+ .writeable_reg = ads1015_is_writeable_reg,
};
static const struct iio_chan_spec ads1015_channels[] = {
- ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
+ ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
+ ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
+ ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
+ ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
+ ADS1015_V_CHAN(0, ADS1015_AIN0),
+ ADS1015_V_CHAN(1, ADS1015_AIN1),
+ ADS1015_V_CHAN(2, ADS1015_AIN2),
+ ADS1015_V_CHAN(3, ADS1015_AIN3),
IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
};
static const struct iio_chan_spec ads1115_channels[] = {
- ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(0, ADS1015_AIN0, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(1, ADS1015_AIN1, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(2, ADS1015_AIN2, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
- ADS1015_V_CHAN(3, ADS1015_AIN3, 16, 0,
- ads1015_events, ARRAY_SIZE(ads1015_events)),
+ ADS1115_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
+ ADS1115_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
+ ADS1115_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
+ ADS1115_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
+ ADS1115_V_CHAN(0, ADS1015_AIN0),
+ ADS1115_V_CHAN(1, ADS1015_AIN1),
+ ADS1115_V_CHAN(2, ADS1015_AIN2),
+ ADS1115_V_CHAN(3, ADS1015_AIN3),
IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
};
-static const struct iio_chan_spec tla2024_channels[] = {
- ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4, NULL, 0),
- ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4, NULL, 0),
- ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4, NULL, 0),
- ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4, NULL, 0),
- ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4, NULL, 0),
- ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4, NULL, 0),
- ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4, NULL, 0),
- ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4, NULL, 0),
- IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
-};
-
-
#ifdef CONFIG_PM
static int ads1015_set_power_state(struct ads1015_data *data, bool on)
{
@@ -374,7 +323,9 @@ static int ads1015_set_power_state(struc
struct device *dev = regmap_get_device(data->regmap);
if (on) {
- ret = pm_runtime_resume_and_get(dev);
+ ret = pm_runtime_get_sync(dev);
+ if (ret < 0)
+ pm_runtime_put_noidle(dev);
} else {
pm_runtime_mark_last_busy(dev);
ret = pm_runtime_put_autosuspend(dev);
@@ -395,7 +346,6 @@ static int ads1015_set_power_state(struc
static
int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
{
- const int *data_rate = data->chip->data_rate;
int ret, pga, dr, dr_old, conv_time;
unsigned int old, mask, cfg;
@@ -430,8 +380,8 @@ int ads1015_get_adc_result(struct ads101
}
if (data->conv_invalid) {
dr_old = (old & ADS1015_CFG_DR_MASK) >> ADS1015_CFG_DR_SHIFT;
- conv_time = DIV_ROUND_UP(USEC_PER_SEC, data_rate[dr_old]);
- conv_time += DIV_ROUND_UP(USEC_PER_SEC, data_rate[dr]);
+ conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
+ conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
conv_time += conv_time / 10; /* 10% internal clock inaccuracy */
usleep_range(conv_time, conv_time + 1);
data->conv_invalid = false;
@@ -497,8 +447,8 @@ static int ads1015_set_data_rate(struct
{
int i;
- for (i = 0; i < data->chip->data_rate_len; i++) {
- if (data->chip->data_rate[i] == rate) {
+ for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++) {
+ if (data->data_rate[i] == rate) {
data->channel_data[chan].data_rate = i;
return 0;
}
@@ -507,32 +457,6 @@ static int ads1015_set_data_rate(struct
return -EINVAL;
}
-static int ads1015_read_avail(struct iio_dev *indio_dev,
- struct iio_chan_spec const *chan,
- const int **vals, int *type, int *length,
- long mask)
-{
- struct ads1015_data *data = iio_priv(indio_dev);
-
- if (chan->type != IIO_VOLTAGE)
- return -EINVAL;
-
- switch (mask) {
- case IIO_CHAN_INFO_SCALE:
- *type = IIO_VAL_FRACTIONAL_LOG2;
- *vals = data->chip->scale;
- *length = data->chip->scale_len;
- return IIO_AVAIL_LIST;
- case IIO_CHAN_INFO_SAMP_FREQ:
- *type = IIO_VAL_INT;
- *vals = data->chip->data_rate;
- *length = data->chip->data_rate_len;
- return IIO_AVAIL_LIST;
- default:
- return -EINVAL;
- }
-}
-
static int ads1015_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val,
int *val2, long mask)
@@ -542,7 +466,9 @@ static int ads1015_read_raw(struct iio_d
mutex_lock(&data->lock);
switch (mask) {
- case IIO_CHAN_INFO_RAW:
+ case IIO_CHAN_INFO_RAW: {
+ int shift = chan->scan_type.shift;
+
ret = iio_device_claim_direct_mode(indio_dev);
if (ret)
break;
@@ -563,8 +489,7 @@ static int ads1015_read_raw(struct iio_d
goto release_direct;
}
- *val = sign_extend32(*val >> chan->scan_type.shift,
- chan->scan_type.realbits - 1);
+ *val = sign_extend32(*val >> shift, 15 - shift);
ret = ads1015_set_power_state(data, false);
if (ret < 0)
@@ -574,6 +499,7 @@ static int ads1015_read_raw(struct iio_d
release_direct:
iio_device_release_direct_mode(indio_dev);
break;
+ }
case IIO_CHAN_INFO_SCALE:
idx = data->channel_data[chan->address].pga;
*val = ads1015_fullscale_range[idx];
@@ -582,7 +508,7 @@ release_direct:
break;
case IIO_CHAN_INFO_SAMP_FREQ:
idx = data->channel_data[chan->address].data_rate;
- *val = data->chip->data_rate[idx];
+ *val = data->data_rate[idx];
ret = IIO_VAL_INT;
break;
default:
@@ -642,7 +568,7 @@ static int ads1015_read_event(struct iio
dr = data->channel_data[chan->address].data_rate;
comp_queue = data->thresh_data[chan->address].comp_queue;
period = ads1015_comp_queue[comp_queue] *
- USEC_PER_SEC / data->chip->data_rate[dr];
+ USEC_PER_SEC / data->data_rate[dr];
*val = period / USEC_PER_SEC;
*val2 = period % USEC_PER_SEC;
@@ -664,7 +590,6 @@ static int ads1015_write_event(struct ii
int val2)
{
struct ads1015_data *data = iio_priv(indio_dev);
- const int *data_rate = data->chip->data_rate;
int realbits = chan->scan_type.realbits;
int ret = 0;
long long period;
@@ -690,7 +615,7 @@ static int ads1015_write_event(struct ii
for (i = 0; i < ARRAY_SIZE(ads1015_comp_queue) - 1; i++) {
if (period <= ads1015_comp_queue[i] *
- USEC_PER_SEC / data_rate[dr])
+ USEC_PER_SEC / data->data_rate[dr])
break;
}
data->thresh_data[chan->address].comp_queue = i;
@@ -881,20 +806,54 @@ static const struct iio_buffer_setup_ops
.validate_scan_mask = &iio_validate_scan_mask_onehot,
};
+static IIO_CONST_ATTR_NAMED(ads1015_scale_available, scale_available,
+ "3 2 1 0.5 0.25 0.125");
+static IIO_CONST_ATTR_NAMED(ads1115_scale_available, scale_available,
+ "0.1875 0.125 0.0625 0.03125 0.015625 0.007813");
+
+static IIO_CONST_ATTR_NAMED(ads1015_sampling_frequency_available,
+ sampling_frequency_available, "128 250 490 920 1600 2400 3300");
+static IIO_CONST_ATTR_NAMED(ads1115_sampling_frequency_available,
+ sampling_frequency_available, "8 16 32 64 128 250 475 860");
+
+static struct attribute *ads1015_attributes[] = {
+ &iio_const_attr_ads1015_scale_available.dev_attr.attr,
+ &iio_const_attr_ads1015_sampling_frequency_available.dev_attr.attr,
+ NULL,
+};
+
+static const struct attribute_group ads1015_attribute_group = {
+ .attrs = ads1015_attributes,
+};
+
+static struct attribute *ads1115_attributes[] = {
+ &iio_const_attr_ads1115_scale_available.dev_attr.attr,
+ &iio_const_attr_ads1115_sampling_frequency_available.dev_attr.attr,
+ NULL,
+};
+
+static const struct attribute_group ads1115_attribute_group = {
+ .attrs = ads1115_attributes,
+};
+
static const struct iio_info ads1015_info = {
- .read_avail = ads1015_read_avail,
.read_raw = ads1015_read_raw,
.write_raw = ads1015_write_raw,
.read_event_value = ads1015_read_event,
.write_event_value = ads1015_write_event,
.read_event_config = ads1015_read_event_config,
.write_event_config = ads1015_write_event_config,
+ .attrs = &ads1015_attribute_group,
};
-static const struct iio_info tla2024_info = {
- .read_avail = ads1015_read_avail,
+static const struct iio_info ads1115_info = {
.read_raw = ads1015_read_raw,
.write_raw = ads1015_write_raw,
+ .read_event_value = ads1015_read_event,
+ .write_event_value = ads1015_write_event,
+ .read_event_config = ads1015_read_event_config,
+ .write_event_config = ads1015_write_event_config,
+ .attrs = &ads1115_attribute_group,
};
static int ads1015_client_get_channels_config(struct i2c_client *client)
@@ -977,18 +936,12 @@ static int ads1015_set_conv_mode(struct
static int ads1015_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
- const struct ads1015_chip_data *chip;
struct iio_dev *indio_dev;
struct ads1015_data *data;
int ret;
+ enum chip_ids chip;
int i;
- chip = device_get_match_data(&client->dev);
- if (!chip)
- chip = (const struct ads1015_chip_data *)id->driver_data;
- if (!chip)
- return dev_err_probe(&client->dev, -EINVAL, "Unknown chip\n");
-
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
if (!indio_dev)
return -ENOMEM;
@@ -1001,12 +954,28 @@ static int ads1015_probe(struct i2c_clie
indio_dev->name = ADS1015_DRV_NAME;
indio_dev->modes = INDIO_DIRECT_MODE;
- indio_dev->channels = chip->channels;
- indio_dev->num_channels = chip->num_channels;
- indio_dev->info = chip->info;
- data->chip = chip;
- data->event_channel = ADS1015_CHANNELS;
+ chip = (enum chip_ids)device_get_match_data(&client->dev);
+ if (chip == ADSXXXX)
+ chip = id->driver_data;
+ switch (chip) {
+ case ADS1015:
+ indio_dev->channels = ads1015_channels;
+ indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
+ indio_dev->info = &ads1015_info;
+ data->data_rate = (unsigned int *) &ads1015_data_rate;
+ break;
+ case ADS1115:
+ indio_dev->channels = ads1115_channels;
+ indio_dev->num_channels = ARRAY_SIZE(ads1115_channels);
+ indio_dev->info = &ads1115_info;
+ data->data_rate = (unsigned int *) &ads1115_data_rate;
+ break;
+ default:
+ dev_err(&client->dev, "Unknown chip %d\n", chip);
+ return -EINVAL;
+ }
+ data->event_channel = ADS1015_CHANNELS;
/*
* Set default lower and upper threshold to min and max value
* respectively.
@@ -1021,9 +990,7 @@ static int ads1015_probe(struct i2c_clie
/* we need to keep this ABI the same as used by hwmon ADS1015 driver */
ads1015_get_channels_config(client);
- data->regmap = devm_regmap_init_i2c(client, chip->has_comparator ?
- &ads1015_regmap_config :
- &tla2024_regmap_config);
+ data->regmap = devm_regmap_init_i2c(client, &ads1015_regmap_config);
if (IS_ERR(data->regmap)) {
dev_err(&client->dev, "Failed to allocate register map\n");
return PTR_ERR(data->regmap);
@@ -1037,7 +1004,7 @@ static int ads1015_probe(struct i2c_clie
return ret;
}
- if (client->irq && chip->has_comparator) {
+ if (client->irq) {
unsigned long irq_trig =
irqd_get_trigger_type(irq_get_irq_data(client->irq));
unsigned int cfg_comp_mask = ADS1015_CFG_COMP_QUE_MASK |
@@ -1094,22 +1061,19 @@ static int ads1015_probe(struct i2c_clie
return 0;
}
-static void ads1015_remove(struct i2c_client *client)
+static int ads1015_remove(struct i2c_client *client)
{
struct iio_dev *indio_dev = i2c_get_clientdata(client);
struct ads1015_data *data = iio_priv(indio_dev);
- int ret;
iio_device_unregister(indio_dev);
pm_runtime_disable(&client->dev);
pm_runtime_set_suspended(&client->dev);
+ pm_runtime_put_noidle(&client->dev);
/* power down single shot mode */
- ret = ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
- if (ret)
- dev_warn(&client->dev, "Failed to power down (%pe)\n",
- ERR_PTR(ret));
+ return ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
}
#ifdef CONFIG_PM
@@ -1140,51 +1104,22 @@ static const struct dev_pm_ops ads1015_p
ads1015_runtime_resume, NULL)
};
-static const struct ads1015_chip_data ads1015_data = {
- .channels = ads1015_channels,
- .num_channels = ARRAY_SIZE(ads1015_channels),
- .info = &ads1015_info,
- .data_rate = ads1015_data_rate,
- .data_rate_len = ARRAY_SIZE(ads1015_data_rate),
- .scale = ads1015_scale,
- .scale_len = ARRAY_SIZE(ads1015_scale),
- .has_comparator = true,
-};
-
-static const struct ads1015_chip_data ads1115_data = {
- .channels = ads1115_channels,
- .num_channels = ARRAY_SIZE(ads1115_channels),
- .info = &ads1015_info,
- .data_rate = ads1115_data_rate,
- .data_rate_len = ARRAY_SIZE(ads1115_data_rate),
- .scale = ads1115_scale,
- .scale_len = ARRAY_SIZE(ads1115_scale),
- .has_comparator = true,
-};
-
-static const struct ads1015_chip_data tla2024_data = {
- .channels = tla2024_channels,
- .num_channels = ARRAY_SIZE(tla2024_channels),
- .info = &tla2024_info,
- .data_rate = ads1015_data_rate,
- .data_rate_len = ARRAY_SIZE(ads1015_data_rate),
- .scale = ads1015_scale,
- .scale_len = ARRAY_SIZE(ads1015_scale),
- .has_comparator = false,
-};
-
static const struct i2c_device_id ads1015_id[] = {
- { "ads1015", (kernel_ulong_t)&ads1015_data },
- { "ads1115", (kernel_ulong_t)&ads1115_data },
- { "tla2024", (kernel_ulong_t)&tla2024_data },
+ {"ads1015", ADS1015},
+ {"ads1115", ADS1115},
{}
};
MODULE_DEVICE_TABLE(i2c, ads1015_id);
static const struct of_device_id ads1015_of_match[] = {
- { .compatible = "ti,ads1015", .data = &ads1015_data },
- { .compatible = "ti,ads1115", .data = &ads1115_data },
- { .compatible = "ti,tla2024", .data = &tla2024_data },
+ {
+ .compatible = "ti,ads1015",
+ .data = (void *)ADS1015
+ },
+ {
+ .compatible = "ti,ads1115",
+ .data = (void *)ADS1115
+ },
{}
};
MODULE_DEVICE_TABLE(of, ads1015_of_match);

View file

@ -0,0 +1,178 @@
diff -rupN linux.orig/sound/soc/codecs/es8323.c linux/sound/soc/codecs/es8323.c
--- linux.orig/sound/soc/codecs/es8323.c 2024-02-22 23:16:12.484295695 +0000
+++ linux/sound/soc/codecs/es8323.c 2024-02-22 23:23:57.934593039 +0000
@@ -25,6 +25,11 @@
#include <sound/soc-dapm.h>
#include <sound/initval.h>
#include <linux/proc_fs.h>
+#include <linux/gpio/consumer.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/of_gpio.h>
+
#include "es8323.h"
#define NR_SUPPORTED_MCLK_LRCK_RATIOS 5
@@ -33,6 +38,9 @@ static const unsigned int supported_mclk
};
#define es8323_DEF_VOL 0x1b
+//extern struct gpio_desc *g_spk_ctl_gpio;
+static int es8323_mute(struct snd_soc_dai *dai, int mute, int stream);
+static void es8323_pcm_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai);
static int es8323_set_bias_level(struct snd_soc_component *component,
enum snd_soc_bias_level level);
@@ -93,6 +101,7 @@ struct es8323_priv {
struct snd_pcm_hw_constraint_list sysclk_constraints;
struct snd_soc_component *component;
struct regmap *regmap;
+ struct gpio_desc *spk_ctl_gpio;
};
static int es8323_reset(struct snd_soc_component *component)
@@ -382,8 +391,8 @@ static const struct _coeff_div coeff_div
{12000000, 22050, 544, 0x6, 0x1},
/* 32k */
- {8192000, 32000, 256, 0x2, 0x0},
- {16384000, 32000, 512, 0x4, 0x0},
+ {8192000, 16000, 256, 0x2, 0x0},
+ {16384000, 16000, 512, 0x4, 0x0},
{12288000, 32000, 384, 0x3, 0x0},
{18432000, 32000, 576, 0x5, 0x0},
{12000000, 32000, 375, 0x4, 0x1},
@@ -540,6 +549,11 @@ static int es8323_pcm_startup(struct snd
return 0;
}
+static void es8323_pcm_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
+{
+ return;
+}
+
static int es8323_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
@@ -615,8 +629,31 @@ static int es8323_pcm_hw_params(struct s
}
static int es8323_mute(struct snd_soc_dai *dai, int mute, int stream)
-{
- return 0;
+{
+ // struct snd_soc_component *component = dai->component;
+ // struct es8323_priv *es8323 = snd_soc_component_get_drvdata(component);
+
+ // gpiod_set_value_cansleep(es8323->spk_ctl_gpio, mute ? 0 : 1);
+
+ int hp = 0;
+ hp = gpio_get_value(102);//hp det
+
+ // printk("gsy hp =%d\n",hp);
+
+ if (hp) {
+ // printk("gsy es8323_mute\n");
+ // gsy add
+ if (mute) {
+ gpio_direction_output(133, 0);// spk ctl
+ gpio_set_value(133, 0);
+ } else {
+ gpio_direction_output(133, 1);
+ gpio_set_value(133, 1);
+ }
+ }
+ // gsy end
+ usleep_range(5000, 7000);
+ return snd_soc_component_update_bits(dai->component, ES8323_DACCONTROL3, ES8323_DACCONTROL3_DACMUTE, mute ? ES8323_DACCONTROL3_DACMUTE : 0);
}
static int es8323_set_bias_level(struct snd_soc_component *component,
@@ -645,6 +682,8 @@ static int es8323_set_bias_level(struct
snd_soc_component_write(component, ES8323_CHIPLOPOW2, 0x00);
snd_soc_component_write(component, ES8323_CHIPPOWER, 0x00);
snd_soc_component_write(component, ES8323_ADCPOWER, 0x59);
+ // printk("gsy SND_SOC_BIAS_PREPARE\n");
+ usleep_range(50000, 51000);
break;
case SND_SOC_BIAS_STANDBY:
dev_dbg(component->dev, "%s standby\n", __func__);
@@ -653,6 +692,7 @@ static int es8323_set_bias_level(struct
snd_soc_component_write(component, ES8323_CHIPLOPOW2, 0x00);
snd_soc_component_write(component, ES8323_CHIPPOWER, 0x00);
snd_soc_component_write(component, ES8323_ADCPOWER, 0x59);
+ // printk("gsy SND_SOC_BIAS_STANDBY\n");
break;
case SND_SOC_BIAS_OFF:
dev_dbg(component->dev, "%s off\n", __func__);
@@ -662,6 +702,7 @@ static int es8323_set_bias_level(struct
snd_soc_component_write(component, ES8323_CHIPLOPOW2, 0xFF);
snd_soc_component_write(component, ES8323_CHIPPOWER, 0xFF);
snd_soc_component_write(component, ES8323_ANAVOLMANAG, 0x7B);
+ // printk("gsy SND_SOC_BIAS_OFF\n");
break;
}
return 0;
@@ -674,6 +715,7 @@ static int es8323_set_bias_level(struct
static struct snd_soc_dai_ops es8323_ops = {
.startup = es8323_pcm_startup,
+ .shutdown = es8323_pcm_shutdown,
.hw_params = es8323_pcm_hw_params,
.set_fmt = es8323_set_dai_fmt,
.set_sysclk = es8323_set_dai_sysclk,
@@ -743,6 +785,12 @@ static int es8323_probe(struct snd_soc_c
struct es8323_priv *es8323 = snd_soc_component_get_drvdata(component);
int ret = 0;
+ es8323->spk_ctl_gpio = devm_gpiod_get_optional(component->dev,
+ "spk-con",
+ GPIOD_OUT_LOW);
+ if (IS_ERR(es8323->spk_ctl_gpio))
+ return PTR_ERR(es8323->spk_ctl_gpio);
+
es8323->mclk = devm_clk_get(component->dev, "mclk");
if (IS_ERR(es8323->mclk)) {
dev_err(component->dev, "%s mclk is missing or invalid\n", __func__);
@@ -870,9 +918,10 @@ static int es8323_i2c_probe(struct i2c_c
return ret;
}
-static void es8323_i2c_remove(struct i2c_client *client)
+static int es8323_i2c_remove(struct i2c_client *client)
{
snd_soc_unregister_component(&client->dev);
+ return 0;
}
static const struct i2c_device_id es8323_i2c_id[] = {
diff -rupN linux.orig/sound/soc/codecs/es8323.h linux/sound/soc/codecs/es8323.h
--- linux.orig/sound/soc/codecs/es8323.h 2024-02-22 23:16:12.484295695 +0000
+++ linux/sound/soc/codecs/es8323.h 2024-02-22 23:17:51.183289828 +0000
@@ -80,7 +80,7 @@
#define ES8323_ADC_MUTE ES8323_ADCCONTROL7
#define ES8323_DAC_MUTE ES8323_DACCONTROL3
-
+#define ES8323_DACCONTROL3_DACMUTE (1 << 2)
#define ES8323_IFACE ES8323_MASTERMODE
diff -rupN linux.orig/sound/soc/rockchip/rockchip_multicodecs.c linux/sound/soc/rockchip/rockchip_multicodecs.c
--- linux.orig/sound/soc/rockchip/rockchip_multicodecs.c 2024-02-22 23:16:12.580298595 +0000
+++ linux/sound/soc/rockchip/rockchip_multicodecs.c 2024-02-22 23:20:46.900676454 +0000
@@ -272,9 +272,13 @@ static int mc_hp_event(struct snd_soc_da
struct snd_soc_card *card = w->dapm->card;
struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card);
+ struct snd_soc_jack *jack_headset = mc_data->jack_headset;
+
switch (event) {
case SND_SOC_DAPM_POST_PMU:
- gpiod_set_value_cansleep(mc_data->hp_ctl_gpio, 1);
+ //gpiod_set_value_cansleep(mc_data->hp_ctl_gpio, 1);
+ if (!(jack_headset->status & SND_JACK_HEADPHONE))
+ gpiod_set_value_cansleep(mc_data->spk_ctl_gpio, 1);
break;
case SND_SOC_DAPM_PRE_PMD:
gpiod_set_value_cansleep(mc_data->hp_ctl_gpio, 0);

View file

@ -0,0 +1,12 @@
diff -rupN linux.orig/drivers/power/supply/cw2015_battery.c linux/drivers/power/supply/cw2015_battery.c
--- linux.orig/drivers/power/supply/cw2015_battery.c 2023-12-15 19:18:59.060967411 +0000
+++ linux/drivers/power/supply/cw2015_battery.c 2023-12-15 19:20:05.987107578 +0000
@@ -553,7 +553,7 @@ static enum power_supply_property cw_bat
};
static const struct power_supply_desc cw2015_bat_desc = {
- .name = "cw2015-battery",
+ .name = "battery",
.type = POWER_SUPPLY_TYPE_BATTERY,
.properties = cw_battery_properties,
.num_properties = ARRAY_SIZE(cw_battery_properties),

View file

@ -0,0 +1,14 @@
diff -rupN linux.orig/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c linux/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
--- linux.orig/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c 2024-02-21 01:57:24.081594191 +0000
+++ linux/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c 2024-02-23 14:30:21.801129014 +0000
@@ -4884,8 +4884,8 @@ static int vop2_plane_atomic_check(struc
if (vop2_cluster_window(win) && !vpstate->afbc_en &&
(win->supported_rotations & pstate->rotation)) {
- DRM_ERROR("Unsupported linear rotation(%d) format at %s\n",
- pstate->rotation, win->name);
+ //DRM_ERROR("Unsupported linear rotation(%d) format at %s\n",
+ // pstate->rotation, win->name);
return -EINVAL;
}
}

View file

@ -0,0 +1 @@
RK3588/