X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pandora%2Fpandora.c;h=9c4fc5c4eff89c234d763c0a94ade38dc44c9beb;hb=8add01a3a416c0054247a5ea69f1d5d09c23202f;hp=2e69798c2c2d79fa3a8baf6ad647556827c15754;hpb=de9b127473936673ed4a2cdfc2387a2a39cdbbe4;p=libpicofe.git diff --git a/pandora/pandora.c b/pandora/pandora.c index 2e69798..9c4fc5c 100644 --- a/pandora/pandora.c +++ b/pandora/pandora.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -16,15 +17,15 @@ #include "../gp2x/usbjoy.h" #include "../common/arm_utils.h" -static volatile unsigned int *memregs; +static volatile unsigned int *memregs = MAP_FAILED; //static int memdev = 0; -static int sounddev = -1, mixerdev = -1, touchdev = -1; +static int fbdev = -1, sounddev = -1, mixerdev = -1, touchdev = -1; static int touchcal[7] = { 6203, 0, -1501397, 0, -4200, 16132680, 65536 }; //#define SCREEN_MAP_SIZE (((800*(480+11)*2)+0xfff)&~0xfff) #define SCREEN_MAP_SIZE (800*480*2) -static void *screen; +static void *screen = MAP_FAILED; void *gp2x_screen; @@ -197,8 +198,8 @@ void gp2x_sound_volume(int l, int r) /* common */ void gp2x_init(void) { -// struct fb_fix_screeninfo fbfix; - int fbdev; + struct fb_fix_screeninfo fbfix; + int ret; printf("entering init()\n"); fflush(stdout); @@ -208,14 +209,14 @@ void gp2x_init(void) printf("open(\"/dev/mem\") failed with %i\n", errno); exit(1); } - +/* memregs = mmap(0, 0x01000000, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0x48000000); if (memregs == MAP_FAILED) { printf("mmap(memregs) failed with %i\n", errno); exit(1); } - +*/ fbdev = open("/dev/fb0", O_RDWR); if (fbdev == -1) { @@ -223,14 +224,20 @@ void gp2x_init(void) exit(1); } -/* ret = ioctl(fbdev, FBIOGET_FSCREENINFO, &fbfix); if (ret == -1) { printf("ioctl(fbdev) failed with %i\n", errno); exit(1); } -*/ + + // squidge hack + if (fbfix.line_length != 800*2) + { + gp2x_screen = malloc(800*640*2); + return; + } + screen = mmap(0, SCREEN_MAP_SIZE, PROT_WRITE|PROT_READ, MAP_SHARED, fbdev, 0); if (screen == MAP_FAILED) { @@ -269,9 +276,12 @@ void gp2x_deinit(void) { //gp2x_video_changemode(15); - munmap(screen, SCREEN_MAP_SIZE); - munmap((void *)memregs, 0x10000); + if (screen != MAP_FAILED) + munmap(screen, SCREEN_MAP_SIZE); + if (memregs != MAP_FAILED) + munmap((void *)memregs, 0x10000); close(memdev); + if (fbdev >= 0) close(fbdev); if (mixerdev >= 0) close(mixerdev); if (sounddev >= 0) close(sounddev); if (touchdev >= 0) close(touchdev);