#include "soc.h"
#include "soc_mmsp2.h"
#include "plat_gp2x.h"
+#include "../linux/sndout_oss.h"
#include "../plat.h"
static int mixerdev = -1;
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)
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);
}
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");
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)
#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;
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;
}
/* make oss fragment size to fit this much video frames */
extern int sndout_oss_frag_frames;
+extern int sndout_oss_can_restart;