From 39014486f9e50110d23dece007ce4c0ed90d15b1 Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 4 Oct 2013 03:15:13 +0300 Subject: [PATCH] gp2x: pollux: various fixes --- gp2x/soc_mmsp2.c | 3 +++ gp2x/soc_pollux.c | 9 +++++---- linux/sndout_oss.c | 13 ++++++++----- linux/sndout_oss.h | 1 + 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gp2x/soc_mmsp2.c b/gp2x/soc_mmsp2.c index beea7bf..67a5c7d 100644 --- a/gp2x/soc_mmsp2.c +++ b/gp2x/soc_mmsp2.c @@ -24,6 +24,7 @@ #include "soc.h" #include "soc_mmsp2.h" #include "plat_gp2x.h" +#include "../linux/sndout_oss.h" #include "../plat.h" static int mixerdev = -1; @@ -429,6 +430,8 @@ void mmsp2_init(void) gp2x_get_ticks_ms = plat_get_ticks_ms_good; gp2x_get_ticks_us = plat_get_ticks_us_good; + + sndout_oss_can_restart = 0; } void mmsp2_finish(void) diff --git a/gp2x/soc_pollux.c b/gp2x/soc_pollux.c index 5b0b3ff..7e86092 100644 --- a/gp2x/soc_pollux.c +++ b/gp2x/soc_pollux.c @@ -86,7 +86,8 @@ static void unset_ram_timings(void) static unsigned int gp2x_get_ticks_us_(void) { - TIMER_REG(0x08) = 0x4b; /* run timer, latch value */ + unsigned int div = TIMER_REG(0x08) & 3; + TIMER_REG(0x08) = 0x48 | div; /* run timer, latch value */ return TIMER_REG(0); } @@ -302,6 +303,9 @@ void pollux_init(void) TIMER_REG(0x44) = ((timer_div - 1) << 4) | 2; /* using PLL1 */ TIMER_REG(0x40) = 0x0c; /* clocks on */ TIMER_REG(0x08) = 0x68 | timer_div2; /* run timer, clear irq, latch value */ + + gp2x_get_ticks_ms = gp2x_get_ticks_ms_; + gp2x_get_ticks_us = gp2x_get_ticks_us_; } else { fprintf(stderr, "warning: could not make use of timer\n"); @@ -323,9 +327,6 @@ void pollux_init(void) plat_target.cpu_clock_set = pollux_cpu_clock_set; plat_target.bat_capacity_get = pollux_bat_capacity_get; plat_target.step_volume = step_volume; - - gp2x_get_ticks_ms = gp2x_get_ticks_ms_; - gp2x_get_ticks_us = gp2x_get_ticks_us_; } void pollux_finish(void) diff --git a/linux/sndout_oss.c b/linux/sndout_oss.c index a8fbe3f..2ac91c4 100644 --- a/linux/sndout_oss.c +++ b/linux/sndout_oss.c @@ -21,6 +21,7 @@ #include "sndout_oss.h" int sndout_oss_frag_frames = 1; +int sndout_oss_can_restart = 1; static int sounddev = -1, mixerdev = -1; static int can_write_safe; @@ -41,15 +42,17 @@ int sndout_oss_init(void) void sndout_oss_stop(void) { -#ifdef __GP2X__ - /* restarting audio on GP2X causes trouble */ - return; -#endif + /* restarting audio on GP2X causes trouble, + * not restarting on Caanoo causes trouble */ + if (!sndout_oss_can_restart) + return; if (sounddev < 0) return; - ioctl(sounddev, SOUND_PCM_SYNC, 0); + // sync causes trouble on Caanoo.. + //ioctl(sounddev, SOUND_PCM_SYNC, 0); + close(sounddev); sounddev = -1; } diff --git a/linux/sndout_oss.h b/linux/sndout_oss.h index fde9ff6..6b65617 100644 --- a/linux/sndout_oss.h +++ b/linux/sndout_oss.h @@ -10,3 +10,4 @@ void sndout_oss_exit(void); /* make oss fragment size to fit this much video frames */ extern int sndout_oss_frag_frames; +extern int sndout_oss_can_restart; -- 2.39.2