gp2x: pollux: various fixes
authornotaz <notasas@gmail.com>
Fri, 4 Oct 2013 00:15:13 +0000 (03:15 +0300)
committernotaz <notasas@gmail.com>
Fri, 4 Oct 2013 00:21:40 +0000 (03:21 +0300)
gp2x/soc_mmsp2.c
gp2x/soc_pollux.c
linux/sndout_oss.c
linux/sndout_oss.h

index beea7bf..67a5c7d 100644 (file)
@@ -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)
index 5b0b3ff..7e86092 100644 (file)
@@ -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)
index a8fbe3f..2ac91c4 100644 (file)
@@ -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;
 }
index fde9ff6..6b65617 100644 (file)
@@ -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;