<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.systems.archos.rockbox.cvs">
    <title>gmane.comp.systems.archos.rockbox.cvs</title>
    <link>http://blog.gmane.org/gmane.comp.systems.archos.rockbox.cvs</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32848"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32847"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32846"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32845"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32844"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32843"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32842"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32841"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32840"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32839"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32838"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32837"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32836"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32835"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32834"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32833"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32832"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32831"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32830"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32829"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32848">
    <title>df1704: Add filter roll-off selection.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32848</link>
    <description>&lt;pre&gt;commit 00b856365469b4ff82928597923094aa3236abb5
Author: Andrew Ryabinin &amp;lt;ryabinin.a.a&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Sun May 12 23:31:32 2013 +0400

    df1704: Add filter roll-off selection.
    
    Change-Id: I732ebd3446858b497105cf03fc81e934a749a57b

diff --git a/firmware/drivers/audio/df1704.c b/firmware/drivers/audio/df1704.c
index b0b9d7b..ec8d56b 100644
--- a/firmware/drivers/audio/df1704.c
+++ b/firmware/drivers/audio/df1704.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -113,3 +113,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void audiohw_set_volume(int vol_l, int vol_r)
     df1704_write_reg(DF1704_MODE(0), DF1704_LDL_ON|vol_tenthdb2hw(vol_l));
     df1704_write_reg(DF1704_MODE(1), DF1704_LDR_ON|vol_tenthdb2hw(vol_r));
 }
+
+void audiohw_set_filter_roll_off(int value)
+{
+    int mode3_val = DF1704_CKO_HALF |
+                    DF1704_LRP_H    |
+                    DF1704_I2S_ON;
+
+    if (value == 0) {
+        mode3_val |= DF1704_SRO_SHARP;
+    } else {
+        mode3_val |= DF1704_SRO_SLOW;
+    }
+    df1704_write_reg(DF1704_MODE(3), mode3_val);
+}
diff --git a/firmware/export/df1704.h b/firmware/export/df1704.h
index 59d1372..4a0bdfd 100644
--- a/firmware/export/df1704.h
+++ b/firmware/export/df1704.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,7 +26,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define DF1704_VOLUME_MIN -1270
 #define DF1704_VOLUME_MAX 0
 
+#define AUDIOHW_CAPS (FILTER_ROLL_OFF_CAP)
 AUDIOHW_SETTING(VOLUME, "dB", 0, 1, DF1704_VOLUME_MIN/10, DF1704_VOLUME_MAX/10, 0)
+AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 1, 0)
 
 #define DF1704_MODE(x) (((x)&amp;amp;0x03)&amp;lt;&amp;lt;9)
 
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-24T07:35:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32847">
    <title>Remove data_abort_handler from ARM crt0 files.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32847</link>
    <description>&lt;pre&gt;commit f6e179bd8eeb417e0428b8290df4ca058782e8b3
Author: Boris Gjenero &amp;lt;boris.gjenero&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Wed May 22 13:05:47 2013 -0400

    Remove data_abort_handler from ARM crt0 files.
    
    This causes data_abort_handler from lib/unwarminder/safe_read.S to be
    used instead. It allows unwarminder to avoid data aborts when
    displaying the backtrace. A data_abort_handler remains in system-arm.c,
    but it is not used because it is declared as a weak symbol.
    
    Change-Id: I832066ed514347fe697e219872e90fbdd937f477
    Reviewed-on: http://gerrit.rockbox.org/475
    Reviewed-by: Marcin Bukat &amp;lt;marcin.bukat&amp;lt; at &amp;gt;gmail.com&amp;gt;
    Tested-by: Boris Gjenero &amp;lt;boris.gjenero&amp;lt; at &amp;gt;gmail.com&amp;gt;

diff --git a/firmware/target/arm/pnx0101/crt0-pnx0101.S b/firmware/target/arm/pnx0101/crt0-pnx0101.S
index f297c29..51be8c7 100644
--- a/firmware/target/arm/pnx0101/crt0-pnx0101.S
+++ b/firmware/target/arm/pnx0101/crt0-pnx0101.S
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -203,11 +203,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; fiq_handler:
     ldmfd sp!, {r0-r7, r12, lr}
     subs pc, lr, #4
 
-data_abort_handler:
-    sub    r0, lr, #8 
-    mov    r1, #2
-    b      UIE
-
 irq_handler:
 #ifndef STUB
     stmfd  sp!, {r0-r11, r12, lr}
diff --git a/firmware/target/arm/pp/crt0-pp.S b/firmware/target/arm/pp/crt0-pp.S
index 5a9835a..4e7621e 100644
--- a/firmware/target/arm/pp/crt0-pp.S
+++ b/firmware/target/arm/pp/crt0-pp.S
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -402,11 +402,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; prefetch_abort_handler:
     mov    r1, #1
     b      UIE
 
-data_abort_handler:
-    sub    r0, lr, #8
-    mov    r1, #2
-    b      UIE
-
 /* Align stacks to cache line boundary */
     .balign 32
 
diff --git a/firmware/target/arm/pp/crt0-pp502x-bl-usb.S b/firmware/target/arm/pp/crt0-pp502x-bl-usb.S
index 7b0489b..93b1fba 100644
--- a/firmware/target/arm/pp/crt0-pp502x-bl-usb.S
+++ b/firmware/target/arm/pp/crt0-pp502x-bl-usb.S
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -351,11 +351,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; prefetch_abort_handler:
     mov     r1, #1
     b       UIE
 
-data_abort_handler:
-    sub     r0, lr, #8 
-    mov     r1, #2
-    b       UIE
-
 /* should never happen in the bootloader */
 fiq_handler:
     subs    pc, lr, #4
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-24T00:02:09</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32846">
    <title>Fix return address when data_abort_handler skips faulting instruction.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32846</link>
    <description>&lt;pre&gt;commit 4077eac8398345d3500be794190eec83852135ba
Author: Boris Gjenero &amp;lt;boris.gjenero&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Thu May 23 19:31:33 2013 -0400

    Fix return address when data_abort_handler skips faulting instruction.
    
    When writing a value to PC, execution continues at that location,
    so subtracting 4 returns to the next instruction. Previously, two
    instructions after the faulting instruction were being skipped, causing
    safe_read functions to return true even if a data abort happened.
    
    Change-Id: I3fd02d54646323ea2050d0504e38f6d22f09c749

diff --git a/lib/unwarminder/safe_read.S b/lib/unwarminder/safe_read.S
index d18bf49..1969c7e 100644
--- a/lib/unwarminder/safe_read.S
+++ b/lib/unwarminder/safe_read.S
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -137,6 +137,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; data_abort_handler:
     &amp;lt; at &amp;gt; restore registers
     ldmfd   sp!, {r0-r1}
     &amp;lt; at &amp;gt; restore mode and jump back to the *next* instruction
-    subs    pc, lr, #-4
+    subs    pc, lr, #4
 .size       data_abort_handler, . - data_abort_handler
 #endif
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-23T23:51:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32845">
    <title>Fix 6e211ab errors and warnings.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32845</link>
    <description>&lt;pre&gt;commit 9b65f8e658768b14ae917341f57d774f729447fe
Author: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;
Date:   Thu May 23 14:58:57 2013 -0400

    Fix 6e211ab errors and warnings.
    
    If target has HW tone controls but no HW prescaler (non-implemented or
    non-existent), audiohw_set_prescaler() should, for now, do nothing.
    
    Change-Id: If1b1a36970dca82fda1c350fbaa4d6ce068a6d32

diff --git a/firmware/drivers/audio/audiohw-swcodec.c b/firmware/drivers/audio/audiohw-swcodec.c
index 6c86bdf..b627c1e 100644
--- a/firmware/drivers/audio/audiohw-swcodec.c
+++ b/firmware/drivers/audio/audiohw-swcodec.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,7 +54,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void audiohw_set_treble(int value)
 #ifndef AUDIOHW_HAVE_PRESCALER
 void audiohw_set_prescaler(int value)
 {
+#ifdef HAVE_SW_TONE_CONTROLS
     tone_set_prescale(value);
+#endif
+    /* FIXME: Should PGA be used if HW tone controls but no HW prescaler?
+       Callback-based implementation would have had no prescaling at all
+       so just do nothing for now, changing nothing. */
+    (void)value;    
 }
 #endif /* AUDIOHW_HAVE_PRESCALER */
 
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-23T19:01:09</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32844">
    <title>Remove dsp_callback because DSP is now library code, not app code.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32844</link>
    <description>&lt;pre&gt;commit 6e211ab3ac36cf792f6412cd61b8336c12533778
Author: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;
Date:   Thu May 23 14:19:06 2013 -0400

    Remove dsp_callback because DSP is now library code, not app code.
    
    Yep, nope, not necessary anymore. Just call functions directly.
    
    Change-Id: I21dc35f8d674c2a9c8379b7cebd5613c1f05b5eb

diff --git a/apps/settings.c b/apps/settings.c
index 0984143..b04b91c 100644
--- a/apps/settings.c
+++ b/apps/settings.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -722,9 +722,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void settings_apply_pm_range(void)
 
 void sound_settings_apply(void)
 {
-#if CONFIG_CODEC == SWCODEC
-    audiohw_swcodec_set_callback(dsp_callback);
-#endif
 #ifdef AUDIOHW_HAVE_BASS
     sound_set(SOUND_BASS, global_settings.bass);
 #endif
diff --git a/firmware/drivers/audio/audiohw-swcodec.c b/firmware/drivers/audio/audiohw-swcodec.c
index 9cfc2ce..6c86bdf 100644
--- a/firmware/drivers/audio/audiohw-swcodec.c
+++ b/firmware/drivers/audio/audiohw-swcodec.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -21,56 +21,51 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "config.h"
 #include "system.h"
 #include "sound.h"
+#ifdef HAVE_SW_TONE_CONTROLS
+#include "tone_controls.h"
+#endif
+#include "channel_mode.h"
 #include "dsp_misc.h"
 
-/* Linking audio hardware calls to SWCODEC DSP emulation */
-
-static audiohw_swcodec_cb_type callback = NULL;
-
-void audiohw_swcodec_set_callback(audiohw_swcodec_cb_type func)
-{
-    callback = func;
-}
-
-/** Functions exported by audiohw.h **/
+/** Functions exported by audiohw.h but implemented in DSP **/
 
 void audiohw_set_channel(int value)
 {
-    callback(DSP_CALLBACK_SET_CHANNEL_CONFIG, value);
+    channel_mode_set_config(value);
 }
 
 void audiohw_set_stereo_width(int value)
 {
-    callback(DSP_CALLBACK_SET_STEREO_WIDTH, value);
+    channel_mode_custom_set_width(value);
 }
 
 #ifdef HAVE_SW_TONE_CONTROLS
 void audiohw_set_bass(int value)
 {
-    callback(DSP_CALLBACK_SET_BASS, value*10);
+    tone_set_bass(value*10);
 }
 
 void audiohw_set_treble(int value)
 {
-    callback(DSP_CALLBACK_SET_TREBLE, value*10);
+    tone_set_treble(value*10);
 }
 #endif /* HAVE_SW_TONE_CONTROLS */
 
 #ifndef AUDIOHW_HAVE_PRESCALER
 void audiohw_set_prescaler(int value)
 {
-    callback(DSP_CALLBACK_SET_PRESCALE, value);
+    tone_set_prescale(value);
 }
 #endif /* AUDIOHW_HAVE_PRESCALER */
 
 #ifdef HAVE_PITCHCONTROL
 void audiohw_set_pitch(int32_t value)
 {
-    callback(DSP_CALLBACK_SET_PITCH, value);
+    dsp_set_pitch(value);
 }
 
 int32_t audiohw_get_pitch(void)
 {
-    return callback(DSP_CALLBACK_GET_PITCH, 0);
+    return dsp_get_pitch();
 }
 #endif /* HAVE_PITCHCONTROL */
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 28fa1b0..d1579b5 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -529,11 +529,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void audiohw_set_stereo_width(int val);
 void audiohw_enable_speaker(bool on);
 #endif /* HAVE_SPEAKER */
 
-#if CONFIG_CODEC == SWCODEC
-typedef int (*audiohw_swcodec_cb_type)(int msg, intptr_t param);
-void audiohw_swcodec_set_callback(audiohw_swcodec_cb_type func);
-#endif /* CONFIG_CODEC == SWCODEC */
-
 /**
  * Some setting are the same for every codec and can be defined here.
  */
diff --git a/lib/rbcodec/dsp/dsp_misc.c b/lib/rbcodec/dsp/dsp_misc.c
index a19ef52..40d198f 100644
--- a/lib/rbcodec/dsp/dsp_misc.c
+++ b/lib/rbcodec/dsp/dsp_misc.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -116,7 +116,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void dsp_pitch_update(struct dsp_config *dsp)
                   fp_div(pitch_ratio, PITCH_SPEED_100, 16));
 }
 
-static void dsp_set_pitch(int32_t percent)
+void dsp_set_pitch(int32_t percent)
 {
     if (percent &amp;lt;= 0)
         percent = PITCH_SPEED_100;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -128,50 +128,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void dsp_set_pitch(int32_t percent)
 
     dsp_pitch_update(dsp_get_config(CODEC_IDX_AUDIO));
 }
-#endif /* HAVE_PITCHCONTROL */
-
-
-/** Firmware callback interface **/
 
-/* Hook back from firmware/ part of audio, which can't/shouldn't call apps/
- * code directly. */
-int dsp_callback(int msg, intptr_t param)
+int32_t dsp_get_pitch(void)
 {
-    int retval = 0;
-
-    switch (msg)
-    {
-#ifdef HAVE_SW_TONE_CONTROLS
-    case DSP_CALLBACK_SET_PRESCALE:
-        tone_set_prescale(param);
-        break;
-    case DSP_CALLBACK_SET_BASS:
-        tone_set_bass(param);
-        break;
-    case DSP_CALLBACK_SET_TREBLE:
-        tone_set_treble(param);
-        break;
-#endif /* HAVE_SW_TONE_CONTROLS */
-    case DSP_CALLBACK_SET_CHANNEL_CONFIG:
-        channel_mode_set_config(param);
-        break;
-    case DSP_CALLBACK_SET_STEREO_WIDTH:
-        channel_mode_custom_set_width(param);
-        break;
-#ifdef HAVE_PITCHCONTROL
-    case DSP_CALLBACK_SET_PITCH:
-        dsp_set_pitch(param);
-        break;
-    case DSP_CALLBACK_GET_PITCH:
-        retval = pitch_ratio;
-        break;
-#endif /* HAVE_PITCHCONTROL */
-    default:
-        break;
-    }
-
-    return retval;
+    return pitch_ratio;
 }
+#endif /* HAVE_PITCHCONTROL */
 
 static void INIT_ATTR misc_dsp_init(struct dsp_config *dsp,
                                     enum dsp_ids dsp_id)
diff --git a/lib/rbcodec/dsp/dsp_misc.h b/lib/rbcodec/dsp/dsp_misc.h
index 2583f49..2fed940 100644
--- a/lib/rbcodec/dsp/dsp_misc.h
+++ b/lib/rbcodec/dsp/dsp_misc.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,18 +54,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct dsp_replay_gains
 
 void dsp_replaygain_set_settings(const struct replaygain_settings *settings);
 
-/* Callback for firmware layers to interface */
-enum
-{
-    DSP_CALLBACK_SET_PRESCALE = 0,
-    DSP_CALLBACK_SET_BASS,
-    DSP_CALLBACK_SET_TREBLE,
-    DSP_CALLBACK_SET_CHANNEL_CONFIG,
-    DSP_CALLBACK_SET_STEREO_WIDTH,
-    DSP_CALLBACK_SET_PITCH,
-    DSP_CALLBACK_GET_PITCH,
-};
-
-int dsp_callback(int msg, intptr_t param);
+#ifdef HAVE_PITCHCONTROL
+void dsp_set_pitch(int32_t pitch);
+int32_t dsp_get_pitch(void);
+#endif /* HAVE_PITCHCONTROL */
 
 #endif /* DSP_MISC_H */
diff --git a/lib/rbcodec/test/warble.c b/lib/rbcodec/test/warble.c
index 6aabf95..735fa25 100644
--- a/lib/rbcodec/test/warble.c
+++ b/lib/rbcodec/test/warble.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -387,7 +387,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void perform_config(void)
         } else if (!strncmp(name, "offset=", 7)) {
             ci.id3-&amp;gt;offset = atoi(val);
         } else if (!strncmp(name, "rate=", 5)) {
-            dsp_callback(DSP_CALLBACK_SET_PITCH, atof(val) * PITCH_SPEED_100);
+            dsp_set_pitch(atof(val) * PITCH_SPEED_100);
         } else if (!strncmp(name, "seek=", 5)) {
             codec_action = CODEC_ACTION_SEEK_TIME;
             codec_action_param = atoi(val);
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-23T18:27:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32843">
    <title>buflib: Remove compulsory IRQ disable during buffer move.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32843</link>
    <description>&lt;pre&gt;commit b7e0e1a0a3b44868ddb9ad60210158ccbe220e90
Author: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;
Date:   Thu May 16 16:15:34 2013 -0400

    buflib: Remove compulsory IRQ disable during buffer move.
    
    It can cause excessively long interrupt outages if moving a larger
    buffer and disrupt audio where DMA is not at a higher interrupt priority
    such as FIQ.
    
    Some targets, like Gigabeat S, have very low audio interrupt latency
    requirements and will even channel swap if they are missed. Pictureflow
    will make the issue very obvious. Even then, moves could take
    milliseconds or more depending on the buffer size which is far too long
    for any target.
    
    Change-Id: I8e7817213e901da67c36b7eb25d7cb1c1e3ba802
    Reviewed-on: http://gerrit.rockbox.org/472
    Reviewed-by: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;
    Tested-by: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;

diff --git a/firmware/buflib.c b/firmware/buflib.c
index a007603..9b591ad 100644
--- a/firmware/buflib.c
+++ b/firmware/buflib.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -208,18 +208,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; move_block(struct buflib_context* ctx, union buflib_data* block, int shift)
     new_block = block + shift;
     new_start = tmp-&amp;gt;alloc + shift*sizeof(union buflib_data);
 
-    /* disable IRQs to make accessing the buffer from interrupt context safe. */
-    /* protect the move callback, as a cached global pointer might be updated
-     * in it. and protect "tmp-&amp;gt;alloc = new_start" for buflib_get_data() */
-    /* call the callback before moving */
+    /* If move must be synchronized with use, user should have specified a
+       callback that handles this */
     if (ops &amp;amp;&amp;amp; ops-&amp;gt;sync_callback)
-    {
         ops-&amp;gt;sync_callback(handle, true);
-    }
-    else
-    {
-        disable_irq();
-    }
 
     bool retval = false;
     if (!ops || ops-&amp;gt;move_callback(handle, tmp-&amp;gt;alloc, new_start)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -231,13 +223,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; move_block(struct buflib_context* ctx, union buflib_data* block, int shift)
     }
 
     if (ops &amp;amp;&amp;amp; ops-&amp;gt;sync_callback)
-    {
         ops-&amp;gt;sync_callback(handle, false);
-    }
-    else
-    {
-        enable_irq();
-    }
 
     return retval;
 }
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-23T16:25:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32842">
    <title>SPC Codec: Add ARMv5 optimized code. Easy peasy.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32842</link>
    <description>&lt;pre&gt;commit 33f3af2b8dbda1e67f07c9c63a07fb3e9af6fa59
Author: Michael Sevakis &amp;lt;jethead71&amp;lt; at &amp;gt;rockbox.org&amp;gt;
Date:   Wed May 22 18:50:28 2013 -0400

    SPC Codec: Add ARMv5 optimized code. Easy peasy.
    
    Why? Why not? Cuts a few MHz.
    
    Change-Id: Ied5c70b1aedd255cbe5d42b7d3028bbe47aad01d

diff --git a/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.c b/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.c
new file mode 100644
index 0000000..dd08e9e
--- /dev/null
+++ b/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,238 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/***************************************************************************
+ *             __________               __   ___.
+ *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
+ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
+ *   Jukebox    |    |   (  &amp;lt;_&amp;gt; )  \___|    &amp;lt; | \_\ (  &amp;lt;_&amp;gt; &amp;gt; &amp;lt;  &amp;lt;
+ *   Firmware   |____|_  /\____/ \___  &amp;gt;__|_ \|___  /\____/__/\_ \
+ *                     \/            \/     \/    \/            \/
+ * $Id$
+ *
+ * Copyright (C) 2013 Michael Sevakis (jhMikeS)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#if !SPC_NOINTERP
+
+#define SPC_GAUSSIAN_FAST_INTERP
+static inline int gaussian_fast_interp( int16_t const* samples,
+                                        int32_t position,
+                                        int16_t const* fwd,
+                                        int16_t const* rev )
+{
+    int output;
+    int t0, t1, t2, t3;
+
+    asm volatile (
+    "ldrh    %[t0], [%[samp]]             \n" /* t0=s0      */
+    "ldrh    %[t2], [%[fwd]]              \n" /* t2=f0      */
+    "ldrh    %[t1], [%[samp], #2]         \n" /* t1=s1      */
+    "ldrh    %[t3], [%[fwd], #2]          \n" /* r3=f1      */
+    "smulbb  %[out], %[t0], %[t2]         \n" /* out=s0*f0  */
+    "ldrh    %[t2], [%[rev], #2]          \n" /* r2=r1      */
+    "ldrh    %[t0], [%[samp], #4]         \n" /* t0=s2      */            
+    "smlabb  %[out], %[t1], %[t3], %[out] \n" /* out+=s1*f1 */
+    "ldrh    %[t3], [%[rev]]              \n" /* t3=r0      */
+    "ldrh    %[t1], [%[samp], #6]         \n" /* t1=s3      */
+    "smlabb  %[out], %[t0], %[t2], %[out] \n" /* out+=s2*r1 */
+    "smlabb  %[out], %[t1], %[t3], %[out] \n" /* out+=s3*r0 */
+    : [out]"=&amp;amp;r"(output),
+      [t0]"=&amp;amp;r"(t0), [t1]"=&amp;amp;r"(t1), [t2]"=&amp;amp;r"(t2), [t3]"=&amp;amp;r"(t3)
+    : [fwd]"r"(fwd), [rev]"r"(rev),
+      [samp]"r"(samples + (position &amp;gt;&amp;gt; 12)));
+
+    return output;
+}
+
+#define SPC_GAUSSIAN_FAST_AMP
+static inline int gaussian_fast_amp( struct voice_t* voice, int output,
+                                     int* amp_0, int* amp_1 )
+{
+    asm volatile (
+    "mov     %[out], %[out], asr #15   \n"
+    "smulbb  %[out], %[out], %[envx]   \n"
+    : [out]"+r"(output)
+    : [envx]"r"(voice-&amp;gt;envx));
+    asm volatile (
+    "mov     %[out], %[out], asr #11   \n"
+    "smulbb  %[a0], %[out], %[v0]      \n"
+    "smulbb  %[a1], %[out], %[v1]      \n"
+    : [out]"+r"(output),
+      [a0]"=&amp;amp;r"(*amp_0), [a1]"=r"(*amp_1)
+    : [v0]"r"(voice-&amp;gt;volume [0]),
+      [v1]"r"(voice-&amp;gt;volume [1]));
+
+    return output;
+}
+
+#define SPC_GAUSSIAN_SLOW_INTERP
+static inline int gaussian_slow_interp( int16_t const* samples,
+                                        int32_t position,
+                                        int16_t const* fwd,
+                                        int16_t const* rev )
+{
+    int output;
+    int t0, t1, t2, t3;
+    asm volatile (
+    "ldrsh   %[t0], [%[samp]]               \n" /* t0=s0                */
+    "ldrh    %[t2], [%[fwd]]                \n" /* t2=f0                */
+    "ldrsh   %[t1], [%[samp], #2]           \n" /* t1=s1                */
+    "ldrh    %[t3], [%[fwd], #2]            \n" /* t3=f1                */
+    "smulwb  %[out], %[t0], %[t2]           \n" /* out=s0*f0&amp;gt;&amp;gt;16        */
+    "ldrsh   %[t0], [%[samp], #4]           \n" /* t0=s2                */
+    "ldrh    %[t2], [%[rev], #2]            \n" /* t2=r1                */
+    "smlawb  %[out], %[t1], %[t3], %[out]   \n" /* out+=s1*f1&amp;gt;&amp;gt;16       */
+    "ldrsh   %[t1], [%[samp], #6]           \n" /* t1=s3                */
+    "ldrh    %[t3], [%[rev]]                \n" /* t3=r0                */
+    "smlawb  %[out], %[t0], %[t2], %[out]   \n" /* out+=s2*r1&amp;gt;&amp;gt;16       */
+    "smulwb  %[t0], %[t1], %[t3]            \n" /* t0=s3*r0&amp;gt;&amp;gt;16         */
+    "mov     %[out], %[out], asl #17        \n" /* out=(int16_t)(out*2) */
+    "mov     %[t0], %[t0], asl #1           \n" /* out+=t0*2            */
+    "add     %[out], %[t0], %[out], asr #16 \n"
+    : [out]"=&amp;amp;r"(output),
+      [t0]"=&amp;amp;r"(t0), [t1]"=&amp;amp;r"(t1), [t2]"=&amp;amp;r"(t2), [t3]"=&amp;amp;r"(t3)
+    : [fwd]"r"(fwd), [rev]"r"(rev),
+      [samp]"r"(samples + (position &amp;gt;&amp;gt; 12)));
+
+    return CLAMP16( output );
+}
+
+#define SPC_GAUSSIAN_SLOW_AMP
+static inline int gaussian_slow_amp( struct voice_t* voice, int output,
+                                     int* amp_0, int* amp_1 )
+{
+    asm volatile (
+    "smulbb  %[out], %[out], %[envx]"
+    : [out]"+r"(output)
+    : [envx]"r"(voice-&amp;gt;envx));
+    asm volatile (
+    "mov     %[out], %[out], asr #11 \n"
+    "bic     %[out], %[out], #0x1    \n"
+    "smulbb  %[a0], %[out], %[v0]    \n"
+    "smulbb  %[a1], %[out], %[v1]    \n"
+    : [out]"+r"(output),
+      [a0]"=&amp;amp;r"(*amp_0), [a1]"=r"(*amp_1)
+    : [v0]"r"(voice-&amp;gt;volume [0]), [v1]"r"(voice-&amp;gt;volume [1]));
+
+    return output;
+}
+
+#endif /* !SPC_NOINTERP */
+
+
+#if !SPC_NOECHO
+
+#define SPC_DSP_ECHO_APPLY
+
+/* Echo filter history */
+static int32_t fir_buf[FIR_BUF_CNT] IBSS_ATTR_SPC
+    __attribute__(( aligned(FIR_BUF_ALIGN*1) ));
+
+static inline void echo_init( struct Spc_Dsp* this )
+{
+    this-&amp;gt;fir.ptr = fir_buf;
+    ci-&amp;gt;memset( fir_buf, 0, sizeof fir_buf );
+}
+
+static inline void echo_apply( struct Spc_Dsp* this, uint8_t *echo_ptr,
+                               int* out_0, int* out_1 )
+{
+    /* Keep last 8 samples */
+    int32_t* fir_ptr;
+    int t0;
+    asm volatile (
+    "ldr     %[t0], [%[ep]]           \n"
+    "add     %[p], %[t_p], #4         \n"
+    "bic     %[t_p], %[p], %[mask]    \n"
+    "str     %[t0], [%[p], #-4]       \n"
+    /* duplicate at +8 eliminates wrap checking below */
+    "str     %[t0], [%[p], #28]       \n"
+    : [p]"=&amp;amp;r"(fir_ptr), [t_p]"+r"(this-&amp;gt;fir.ptr),
+      [t0]"=&amp;amp;r"(t0)
+    : [ep]"r"(echo_ptr), [mask]"i"(~FIR_BUF_MASK));
+
+    int32_t* fir_coeff = (int32_t *)this-&amp;gt;fir.coeff;
+
+    asm volatile (
+    "ldmia   %[c]!, { r0-r1 }         \n" /* C0C1-C2C3 = r0-r1 */
+    "ldmia   %[p]!, { r2-r5 }         \n" /* L1R1-L4R4 = r2-r5 */
+    "smulbb  %[acc0], %[t0], r0       \n" /* acc0  = L0*C0     */
+    "smultb  %[acc1], %[t0], r0       \n" /* acc1  = R0*C0     */
+    "smlabt  %[acc0], r2, r0, %[acc0] \n" /* acc0 += L1*C1     */
+    "smlatt  %[acc1], r2, r0, %[acc1] \n" /* acc1 += R1*C1     */
+    "smlabb  %[acc0], r3, r1, %[acc0] \n" /* acc0 += L2*C2     */
+    "smlatb  %[acc1], r3, r1, %[acc1] \n" /* acc1 += R2*C2     */
+    "smlabt  %[acc0], r4, r1, %[acc0] \n" /* acc0 += L3*C3     */
+    "smlatt  %[acc1], r4, r1, %[acc1] \n" /* acc1 += R3*C3     */
+    "ldmia   %[c], { r0-r1 }          \n" /* C4C5-C6C7 = r0-r1 */
+    "ldmia   %[p], { r2-r4 }          \n" /* L5R5-L7R7 = r2-r5 */
+    "smlabb  %[acc0], r5, r0, %[acc0] \n" /* acc0 += L4*C4     */
+    "smlatb  %[acc1], r5, r0, %[acc1] \n" /* acc1 += R4*C4     */
+    "smlabt  %[acc0], r2, r0, %[acc0] \n" /* acc0 += L5*C5     */
+    "smlatt  %[acc1], r2, r0, %[acc1] \n" /* acc1 += R5*C5     */
+    "smlabb  %[acc0], r3, r1, %[acc0] \n" /* acc0 += L6*C6     */
+    "smlatb  %[acc1], r3, r1, %[acc1] \n" /* acc1 += R6*C6     */
+    "smlabt  %[acc0], r4, r1, %[acc0] \n" /* acc0 += L7*C7     */
+    "smlatt  %[acc1], r4, r1, %[acc1] \n" /* acc1 += R7*C7     */
+    : [t0]"+r"(t0), [acc0]"=&amp;amp;r"(*out_0), [acc1]"=&amp;amp;r"(*out_1),
+      [p]"+r"(fir_ptr), [c]"+r"(fir_coeff)
+    :
+    : "r0", "r1", "r2", "r3", "r4", "r5");
+}
+
+#define SPC_DSP_ECHO_FEEDBACK
+static inline void echo_feedback(struct Spc_Dsp* this, uint8_t* echo_ptr,
+                                 int echo_0, int echo_1, int fb_0, int fb_1)
+{
+    int e0, e1;
+    asm volatile (
+    "mov      %[e0], %[ei0], asl #7        \n"
+    "mov      %[e1], %[ei1], asl #7        \n"
+    "mla      %[e0], %[fb0], %[ef], %[e0]  \n"
+    "mla      %[e1], %[fb1], %[ef], %[e1]  \n"
+    : [e0]"=&amp;amp;r"(e0), [e1]"=&amp;amp;r"(e1)
+    : [ei0]"r"(echo_0), [ei1]"r"(echo_1),
+      [fb0]"r"(fb_0), [fb1]"r"(fb_1),
+      [ef]"r"((int)this-&amp;gt;r.g.echo_feedback));
+
+    e0 = CLAMP16( e0 &amp;gt;&amp;gt; 14 );
+    SET_LE16A( echo_ptr    , e0 );
+    e1 = CLAMP16( e1 &amp;gt;&amp;gt; 14 );
+    SET_LE16A( echo_ptr + 2, e1 );
+}
+
+#define SPC_DSP_GENERATE_OUTPUT
+static inline void echo_output( struct Spc_Dsp* this, int global_muting,
+    int global_vol_0, int global_vol_1, int chans_0, int chans_1, 
+    int fb_0, int fb_1, int* out_0, int* out_1 )
+{
+    int t0, t1;
+
+    asm volatile (
+    "mul      %[t0], %[gv0], %[ch0]       \n"
+    "mul      %[t1], %[gv1], %[ch1]       \n"
+    : [t0]"=&amp;amp;r"(t0), [t1]"=r"(t1)
+    : [gv0]"r"(global_vol_0), [gv1]"r"(global_vol_1),
+      [ch0]"r"(chans_0), [ch1]"r"(chans_1));
+    asm volatile (
+    "mla      %[t0], %[i0], %[ev0], %[t0] \n"
+    "mla      %[t1], %[i1], %[ev1], %[t1] \n"
+    : [t0]"+r"(t0), [t1]"+r"(t1)
+    : [i0]"r"(fb_0), [i1]"r"(fb_1),
+      [ev0]"r"((int)this-&amp;gt;r.g.echo_volume_0),
+      [ev1]"r"((int)this-&amp;gt;r.g.echo_volume_1));
+    asm volatile (
+    "mov      %[o0], %[t0], asr %[gm]     \n"
+    "mov      %[o1], %[t1], asr %[gm]     \n"
+    : [o0]"=&amp;amp;r"(*out_0), [o1]"=r"(*out_1)
+    : [t0]"r"(t0), [t1]"r"(t1), 
+      [gm]"r"(global_muting));
+}
+
+#endif /* SPC_NOECHO */
diff --git a/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.h b/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.h
new file mode 100644
index 0000000..7056928
--- /dev/null
+++ b/lib/rbcodec/codecs/libspc/cpu/spc_dsp_armv5.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,30 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#if !SPC_NOINTERP
+/* Want scale optimized for smulw(y) */
+#define GAUSS_TABLE_SCALE 4
+#endif
+
+#if !SPC_NOECHO
+
+#define SPC_DSP_ECHO_APPLY
+
+enum
+{
+    FIR_BUF_CNT   = FIR_BUF_HALF * 2,
+    FIR_BUF_SIZE  = FIR_BUF_CNT * sizeof ( int32_t ),
+    FIR_BUF_ALIGN = FIR_BUF_SIZE,
+    FIR_BUF_MASK  = ~((FIR_BUF_ALIGN / 2) | (sizeof ( int32_t ) - 1))
+};
+
+/* Echo filter structure embedded in struct Spc_Dsp */
+struct echo_filter
+{
+   /* fir_buf [i + 8] == fir_buf [i], to avoid wrap checking in FIR code */
+    int32_t* ptr;
+    /* FIR history is interleaved with guard to eliminate wrap checking
+     * when convolving.
+     * |LR|LR|LR|LR|LR|LR|LR|LR|--|--|--|--|--|--|--|--| */
+    /* copy of echo FIR constants as int16_t, loaded as int32 for
+     * halfword, packed multiples */
+    int16_t coeff [VOICE_COUNT]; 
+};
+#endif /* SPC_NOECHO */
diff --git a/lib/rbcodec/codecs/libspc/spc_codec.h b/lib/rbcodec/codecs/libspc/spc_codec.h
index 96ca734..446690f 100644
--- a/lib/rbcodec/codecs/libspc/spc_codec.h
+++ b/lib/rbcodec/codecs/libspc/spc_codec.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -82,6 +82,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define IBSS_ATTR_SPC               IBSS_ATTR
 #define ICODE_ATTR_SPC              ICODE_ATTR
 #define ICONST_ATTR_SPC             ICONST_ATTR
+#define IDATA_ATTR_SPC              IDATA_ATTR
 /* Not enough IRAM available to move further data to it. */
 #define IBSS_ATTR_SPC_LARGE_IRAM
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -90,6 +91,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define IBSS_ATTR_SPC
 #define ICODE_ATTR_SPC
 #define ICONST_ATTR_SPC
+#define IDATA_ATTR_SPC
 /* Not enough IRAM available to move further data to it. */
 #define IBSS_ATTR_SPC_LARGE_IRAM
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -97,6 +99,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define IBSS_ATTR_SPC               IBSS_ATTR
 #define ICODE_ATTR_SPC              ICODE_ATTR
 #define ICONST_ATTR_SPC             ICONST_ATTR
+#define IDATA_ATTR_SPC              IDATA_ATTR
 /* Not enough IRAM available to move further data to it. */
 #define IBSS_ATTR_SPC_LARGE_IRAM
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -104,6 +107,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define IBSS_ATTR_SPC               IBSS_ATTR
 #define ICODE_ATTR_SPC              ICODE_ATTR
 #define ICONST_ATTR_SPC             ICONST_ATTR
+#define IDATA_ATTR_SPC              IDATA_ATTR
 /* Very large IRAM. Move even more data to it. */
 #define IBSS_ATTR_SPC_LARGE_IRAM    IBSS_ATTR
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -111,6 +115,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define IBSS_ATTR_SPC               IBSS_ATTR
 #define ICODE_ATTR_SPC              ICODE_ATTR
 #define ICONST_ATTR_SPC             ICONST_ATTR
+#define IDATA_ATTR_SPC              IDATA_ATTR
 /* Not enough IRAM available to move further data to it. */
 #define IBSS_ATTR_SPC_LARGE_IRAM
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -318,6 +323,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct Spc_Dsp;
 #if defined(CPU_ARM)
 #if ARM_ARCH &amp;gt;= 6
 #include "cpu/spc_dsp_armv6.h"
+#elif ARM_ARCH &amp;gt;= 5
+#include "cpu/spc_dsp_armv5.h"
 #else
 #include "cpu/spc_dsp_armv4.h"
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -329,6 +336,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct Spc_Dsp;
    function names. */
 #include "spc_dsp_generic.h"
 
+#if !SPC_NOINTERP &amp;amp;&amp;amp; !defined (GAUSS_TABLE_SCALE)
+#define GAUSS_TABLE_SCALE 0
+#endif
+
 struct Spc_Dsp
 {
     union
diff --git a/lib/rbcodec/codecs/libspc/spc_dsp.c b/lib/rbcodec/codecs/libspc/spc_dsp.c
index 6ad194a..28385c6 100644
--- a/lib/rbcodec/codecs/libspc/spc_dsp.c
+++ b/lib/rbcodec/codecs/libspc/spc_dsp.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -32,6 +32,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #if defined(CPU_ARM)
 #if ARM_ARCH &amp;gt;= 6
 #include "cpu/spc_dsp_armv6.c"
+#elif ARM_ARCH &amp;gt;= 5
+#include "cpu/spc_dsp_armv5.c"
 #else
 #include "cpu/spc_dsp_armv4.c"
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -55,7 +57,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static unsigned short const env_rates [0x20] ICONST_ATTR_SPC =
 #if !SPC_NOINTERP
 /* Interleved gauss table (to improve cache coherency). */
 /* gauss [i * 2 + j] = normal_gauss [(1 - j) * 256 + i] */
-static int16_t const gauss_table [512] ICONST_ATTR_SPC MEM_ALIGN_ATTR =
+static int16_t gauss_table [512] IDATA_ATTR_SPC MEM_ALIGN_ATTR =
 {
     370,1305, 366,1305, 362,1304, 358,1304,
     354,1304, 351,1304, 347,1304, 343,1303,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -956,6 +958,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void DSP_reset( struct Spc_Dsp* this )
         this-&amp;gt;wave_entry [i].start_addr = 0xffff;
 #endif /* SPC_BRRCACHE */
 
+#if !SPC_NOINTERP &amp;amp;&amp;amp; GAUSS_TABLE_SCALE
+    if (gauss_table[0] == 370)
+    {
+        /* Not yet scaled */
+        for ( int i = 0; i &amp;lt; 512; i++)
+            gauss_table[i] &amp;lt;&amp;lt;= GAUSS_TABLE_SCALE;
+    }
+#endif /* !SPC_NOINTERP &amp;amp;&amp;amp; GAUSS_TABLE_SCALE */
+
 #if !SPC_NOECHO
     this-&amp;gt;echo_pos = 0;
     echo_init(this);
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>gerrit&lt; at &gt;rockbox.org</dc:creator>
    <dc:date>2013-05-23T14:52:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32841">
    <title>Fix FS#12559: sigaltstack threads fortify failure</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32841</link>
    <description>&lt;pre&gt;commit f4954c4a9bda0edbdc8e93314b713c036c4ebfdd
Author: Boris Gjenero &amp;lt;boris.gjenero&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Thu Jan 26 20:33:28 2012 -0500

    Fix FS#12559: sigaltstack threads fortify failure
    
    Ubuntu defines _FORTIFY_SOURCE=2, which causes glibc longjmp() to check sp
    when gcc optimization is enabled. The check does not allow longjmp() to be
    used for switching threads and results in a "longjmp causes uninitialized
    stack frame" error. This disables the check.
    
    Change-Id: Idb8877b43ce711df880ca88875ba5477445a577a

diff --git a/firmware/thread.c b/firmware/thread.c
index 5e543c5..4c15fcc 100644
--- a/firmware/thread.c
+++ b/firmware/thread.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -19,6 +19,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *
  ****************************************************************************/
 #include "config.h"
+
+#ifdef HAVE_SIGALTSTACK_THREADS
+/*
+ * The sp check in glibc __longjmp_chk() will cause
+ * a fatal error when switching threads via longjmp().
+ */
+#undef _FORTIFY_SOURCE
+#endif
+
 #include &amp;lt;stdbool.h&amp;gt;
 #include &amp;lt;stdio.h&amp;gt;
 #include "thread.h"
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-27T07:59:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32840">
    <title>Update CONTRIBUTING to reflect our switch to git on gerrit.</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32840</link>
    <description>&lt;pre&gt;commit fee6f80fb8bca110a03fc7693a17f4c5e4b798d2
Author: Marcin Bukat &amp;lt;marcin.bukat&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue Jan 24 13:05:25 2012 +0100

    Update CONTRIBUTING to reflect our switch to git on gerrit.
    
    Fixes FS#12536
    
    Change-Id: Iee4700ef01eb23c92a026df5074ffcf0257fe0ec

diff --git a/docs/CONTRIBUTING b/docs/CONTRIBUTING
index 83f0aa6..f31b1a8 100644
--- a/docs/CONTRIBUTING
+++ b/docs/CONTRIBUTING
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,3 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-$Id$
-
                __________               __   ___.
      Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
      Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -55,7 +53,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Braces for function declarations are put in a new line under the name, as in:
   }
 
 Always indent your code with four spaces. Don't use TAB characters, as that
-will mess up code display in CVS, printing, and a zillion other places.
+will mess up code display, printing, and a zillion other places.
 
 Keep lines below 80 columns length. Use whitespace and newlines to make the
 code easy to browse/read.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -67,16 +65,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Use "unix style" line feeds: "LF" only. Do not use "CR+LF".
 Use UTF-8 character set, but try to refrain from using any non-ascii
 letters as they will only appear weird in some camps no matter what.
 
-Patches
+Contributing code
 -------
-Create a patch using 'svn diff &amp;gt; mychanges.patch
-Trim your patches so they only contain relevant changes.
+We have a public code review system based on git, which is also how you can
+check out the latest version of the Rockbox sources.
+See http://www.rockbox.org/wiki/UsingGit for details on how to setup your
+environment and how to upload a change you have made for review.
 
-Submit your patch to the project via our patch tracker:
-http://www.rockbox.org/tracker/index.php?type=4
+We'd prefer that you don't submit patches to the bug tracker any more,
+as it's much harder to read and discuss them there.
 
 Credits
 -------
 We believe in crediting all contributors by name. Before committing a patch to
-SVN, we ask that you give us your full real name (no pseudonyms or nicknames)
+Git, we ask that you give us your full real name (no pseudonyms or nicknames)
 for adding to the credits list.
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-24T15:58:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32839">
    <title>bertrik: r31646 - in trunk: apps/lang docs</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32839</link>
    <description>&lt;pre&gt;Date: 2012-01-09 22:19:14 +0100 (Mon, 09 Jan 2012)
New Revision: 31646

Log Message:
FS#12511 - Polish translation by Artur Juraszek

Modified:
   trunk/apps/lang/polski.lang
   trunk/docs/CREDITS

Modified: trunk/apps/lang/polski.lang
===================================================================
--- trunk/apps/lang/polski.lang2012-01-09 10:16:05 UTC (rev 31645)
+++ trunk/apps/lang/polski.lang2012-01-09 21:19:14 UTC (rev 31646)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -12075,15 +12075,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   user: core
   &amp;lt;source&amp;gt;
     *: none
-    gigabeats,mpiohd200,mpiohd300: "3-D Enhancement"
+    gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "3-D Enhancement"
   &amp;lt;/source&amp;gt;
   &amp;lt;dest&amp;gt;
     *: none
-    gigabeats,mpiohd200,mpiohd300: "Dźwięk 3-D"
+    gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "Efekt 3D"
   &amp;lt;/dest&amp;gt;
   &amp;lt;voice&amp;gt;
     *: none
-    gigabeats,mpiohd200,mpiohd300: "Dźwięk 3-D"
+    gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "Efekt 3D"
   &amp;lt;/voice&amp;gt;
 &amp;lt;/phrase&amp;gt;
 &amp;lt;phrase&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -12697,16 +12697,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 &amp;lt;/phrase&amp;gt;
 &amp;lt;phrase&amp;gt;
   id: LANG_SET_AS_PLAYLISTCAT_DIR
-  desc: used in the onplay menu to set a playlist catalog dir
+  desc: used in the onplay menu to set a playlist catalogue dir
   user: core
   &amp;lt;source&amp;gt;
-    *: "Set As Playlist Catalog Directory"
+    *: "Set As Playlist Catalogue Directory"
   &amp;lt;/source&amp;gt;
   &amp;lt;dest&amp;gt;
-    *: "Ustaw Jako Ścieżkę Katalogu List odtwarzania"
+    *: "Ustaw jako katalog listy odtwarzania"
   &amp;lt;/dest&amp;gt;
   &amp;lt;voice&amp;gt;
-    *: "Ustaw Jako Ścieżkę Katalogu List odtwarzania"
+    *: "Ustaw jako katalog listy odtwarzania"
   &amp;lt;/voice&amp;gt;
 &amp;lt;/phrase&amp;gt;
 &amp;lt;phrase&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -12728,12 +12728,192 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   desc:
   user: core
   &amp;lt;source&amp;gt;
-    *: "Reset Playlist Catalog Directory"
+    *: "Reset Playlist Catalogue Directory"
   &amp;lt;/source&amp;gt;
   &amp;lt;dest&amp;gt;
-    *: "Usuń Ścieżkę Katalogu List odtwarzania"
+    *: "Resetuj katalog listy odtwarzania"
   &amp;lt;/dest&amp;gt;
   &amp;lt;voice&amp;gt;
-    *: "Usuń Ścieżkę Katalogu List odtwarzania"
+    *: "Resetuj katalog listy odtwarzania"
   &amp;lt;/voice&amp;gt;
 &amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_GLYPHS
+  desc: in settings_menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Glyphs To Cache"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Kopiuj tekst do Schowka"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Kopiuj tekst do schowka"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_USB_SKIP_FIRST_DRIVE
+  desc: in settings_menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: none
+    multidrive_usb: "USB Hide Internal Drive"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: none
+    multidrive_usb: "Ukryj wewnętrzny dysk USB"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: none
+    multidrive_usb: "Ukryj wewnętrzny dysk USB"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_KEYCLICK_HARDWARE
+  desc: in keyclick settings menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: none
+    hardware_click: "Speaker Keyclick"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: none
+    hardware_click: "Dźwięk klawiszy (głośnik)"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: none
+    hardware_click: "Dźwięk klawiszy (głośnik)"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_KEYCLICK_SOFTWARE
+  desc: in keyclick settings menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: none
+    hardware_click: "Headphone Keyclick"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: none
+    hardware_click: "Dźwięk klawiszy (słuchawki)"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: none
+    hardware_click: "Dźwięk klawiszy (słuchawki)"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_LIST_LINE_PADDING
+  desc: list padding, in display settings
+  user: core
+  &amp;lt;source&amp;gt;
+    *: none
+    touchscreen: "Line Padding in Lists"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: none
+    touchscreen: "Line Padding in Lists"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: none
+    touchscreen: "Line Padding in Lists"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_AUTOMATIC
+  desc: generic automatic
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Automatic"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Automatycznie"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Automatycznie"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_SHORTCUTS
+  desc: Title in the shortcuts menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Shortcuts"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Skróty"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Skróty"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_SLEEP_TIMER_CANCEL_CURRENT
+  desc: shown instead of sleep timer when it's running
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Cancel Sleep Timer"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Anuluj budzik"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Anuluj budzik"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_STARTUP_SHUTDOWN
+  desc: in the general settings menu
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Startup/Shutdown"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Włącz/Wyłącz"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Włącz/Wyłącz"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
+  desc: whether to restart running sleep timer on keypress
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Restart Sleep Timer On Keypress"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Resetuj budzik po naciśnięciu klawisza"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Resetuj budzik po naciśnięciu klawisza"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_SLEEP_TIMER_DURATION
+  desc: default sleep timer duration in minutes (unused in UI)
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Default Sleep Timer Duration"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Domyślna pora alarmu"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Domyślna pora alarmu"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;
+&amp;lt;phrase&amp;gt;
+  id: LANG_SLEEP_TIMER_ON_POWER_UP
+  desc: whether sleep timer starts on power up
+  user: core
+  &amp;lt;source&amp;gt;
+    *: "Start Sleep Timer On Boot"
+  &amp;lt;/source&amp;gt;
+  &amp;lt;dest&amp;gt;
+    *: "Ustaw alarm przy włączeniu"
+  &amp;lt;/dest&amp;gt;
+  &amp;lt;voice&amp;gt;
+    *: "Ustaw alarm przy włączeniu"
+  &amp;lt;/voice&amp;gt;
+&amp;lt;/phrase&amp;gt;

Modified: trunk/docs/CREDITS
===================================================================
--- trunk/docs/CREDITS2012-01-09 10:16:05 UTC (rev 31645)
+++ trunk/docs/CREDITS2012-01-09 21:19:14 UTC (rev 31646)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -612,6 +612,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 Jean-Louis Biasini
 Lorenzo Miori
 James Hunt
+Artur Juraszek
 
 The libmad team
 The wavpack team

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs
&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-09T21:19:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32838">
    <title>jdgordon: r31645 - trunk/uisimulator/buttonmap</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32838</link>
    <description>&lt;pre&gt;Date: 2012-01-09 11:16:05 +0100 (Mon, 09 Jan 2012)
New Revision: 31645

Log Message:
r31444 missed a file. make fuzeplus sim build again

Modified:
   trunk/uisimulator/buttonmap/sansa-fuzeplus.c

Modified: trunk/uisimulator/buttonmap/sansa-fuzeplus.c
===================================================================
--- trunk/uisimulator/buttonmap/sansa-fuzeplus.c2012-01-09 05:23:25 UTC (rev 31644)
+++ trunk/uisimulator/buttonmap/sansa-fuzeplus.c2012-01-09 10:16:05 UTC (rev 31645)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -49,9 +49,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         case SDLK_KP9:
             new_btn = BUTTON_PLAYPAUSE;
             break;
-        case SDLK_KP0:
-            new_btn = BUTTON_TWO_FINGERS;
-            break;
         case SDLK_KP7:
             new_btn = BUTTON_BACK;
             break;

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-09T10:16:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32837">
    <title>jethead71: r31644 - trunk/firmware/export/config</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32837</link>
    <description>&lt;pre&gt;Date: 2012-01-09 06:23:25 +0100 (Mon, 09 Jan 2012)
New Revision: 31644

Log Message:
Fix Clip Zip bootloader build.

Modified:
   trunk/firmware/export/config/sansaclipzip.h

Modified: trunk/firmware/export/config/sansaclipzip.h
===================================================================
--- trunk/firmware/export/config/sansaclipzip.h2012-01-09 03:26:03 UTC (rev 31643)
+++ trunk/firmware/export/config/sansaclipzip.h2012-01-09 05:23:25 UTC (rev 31644)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,6 +13,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define HAVE_MULTIDRIVE
 #define NUM_DRIVES 2
 #define HAVE_HOTSWAP
+#define HAVE_RDS_CAP
 #endif
 
 #define HW_SAMPR_CAPS       SAMPR_CAP_ALL
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -33,8 +34,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
    explicitly if different */
 #define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO)
 
-#define HAVE_RDS_CAP
-
 /* define this if you have a bitmap LCD display */
 #define HAVE_LCD_BITMAP
 /* define this if you have a colour LCD */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -123,7 +122,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define PLUGIN_BUFFER_SIZE 0x80000
 
 #define AB_REPEAT_ENABLE
-
 /* FM Tuner */
 #define CONFIG_TUNER SI4700 /* in fact SI4702 */
 //#define HAVE_TUNER_PWR_CTRL

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-09T05:23:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32836">
    <title>saratoga: r31643 - in trunk: apps firmware</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32836</link>
    <description>&lt;pre&gt;Date: 2012-01-09 04:26:03 +0100 (Mon, 09 Jan 2012)
New Revision: 31643

Log Message:
Commit FS#12454 - Faster line scroll speed by Martin Sagmuller.

Modified:
   trunk/apps/settings_list.c
   trunk/firmware/scroll_engine.c

Modified: trunk/apps/settings_list.c
===================================================================
--- trunk/apps/settings_list.c2012-01-08 22:29:25 UTC (rev 31642)
+++ trunk/apps/settings_list.c2012-01-09 03:26:03 UTC (rev 31643)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -967,7 +967,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #endif
 #endif /* HAVE_BACKLIGHT */
     INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed",
-                UNIT_INT, 0, 15, 1, NULL, NULL, lcd_scroll_speed),
+                UNIT_INT, 0, 17, 1, NULL, NULL, lcd_scroll_speed),
     INT_SETTING(F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY, 1000,
                 "scroll delay", UNIT_MS, 0, 2500, 100, NULL,
                 NULL, lcd_scroll_delay),
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -975,7 +975,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll),
 #ifdef HAVE_REMOTE_LCD
     INT_SETTING(0, remote_scroll_speed, LANG_SCROLL_SPEED, 9,
-                "remote scroll speed", UNIT_INT, 0,15, 1,
+                "remote scroll speed", UNIT_INT, 0,17, 1,
                 NULL, NULL, lcd_remote_scroll_speed),
     INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6,
                 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL,

Modified: trunk/firmware/scroll_engine.c
===================================================================
--- trunk/firmware/scroll_engine.c2012-01-08 22:29:25 UTC (rev 31642)
+++ trunk/firmware/scroll_engine.c2012-01-09 03:26:03 UTC (rev 31643)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,10 +35,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #endif
 #include "scroll_engine.h"
 
-static const char scroll_tick_table[16] = {
- /* Hz values:
-    1, 1.25, 1.55, 2, 2.5, 3.12, 4, 5, 6.25, 8.33, 10, 12.5, 16.7, 20, 25, 33 */
-    100, 80, 64, 50, 40, 32, 25, 20, 16, 12, 10, 8, 6, 5, 4, 3
+static const char scroll_tick_table[18] = {
+ /* Hz values [f(x)=100.8/(x+.048)]:
+    1, 1.25, 1.55, 2, 2.5, 3.12, 4, 5, 6.25, 8.33, 10, 12.5, 16.7, 20, 25, 33, 49.2, 96.2 */
+    100, 80, 64, 50, 40, 32, 25, 20, 16, 12, 10, 8, 6, 5, 4, 3, 2, 1
 };
 
 static void scroll_thread(void);

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-09T03:26:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32835">
    <title>jethead71: r31642 - in trunk/firmware: . target/arm target/arm/as3525target/arm/as3525/sansa-fuzev2</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32835</link>
    <description>&lt;pre&gt;Date: 2012-01-08 23:29:25 +0100 (Sun, 08 Jan 2012)
New Revision: 31642

Log Message:
AS3525v1/2: Enable nested handling of interrupts

Mostly for the sake of reducing latency for audio servicing where other service
routines can take a long time to complete, leading to occasional drops of a
few samples, especially in recording, where they are fairly frequent.

One mystery that remains is GPIOA IRQ being interrupted causes strange
undefined instruction exceptions, most easily produced on my Fuze V2 with a
scrollwheel. Making GPIOA the top ISR for now, thus not interruptible, cures it.

SVC mode is used during the actual calls. Hopefully the SVC stack size is
sufficient. Prologue and epilogue code only uses the IRQ stack and is large
enough.

Any routine code that should not be interrupted should disable IRQ itself from
here on in.


Modified:
   trunk/firmware/kernel.c
   trunk/firmware/target/arm/as3525/fmradio-i2c-as3525.c
   trunk/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
   trunk/firmware/target/arm/as3525/sd-as3525.c
   trunk/firmware/target/arm/as3525/sd-as3525v2.c
   trunk/firmware/target/arm/as3525/system-as3525.c
   trunk/firmware/target/arm/crt0.S
   trunk/firmware/target/arm/system-arm.h

Modified: trunk/firmware/kernel.c
===================================================================
--- trunk/firmware/kernel.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/kernel.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1195,9 +1195,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * in 'semaphore_init'. */
 void semaphore_release(struct semaphore *s)
 {
-#if defined(HAVE_PRIORITY_SCHEDULING) &amp;amp;&amp;amp; defined(irq_enabled_checkval)
     unsigned int result = THREAD_NONE;
-#endif
     int oldlevel;
 
     oldlevel = disable_irq_save();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1209,11 +1207,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         KERNEL_ASSERT(s-&amp;gt;count == 0,
             "semaphore_release-&amp;gt;threads queued but count=%d!\n", s-&amp;gt;count);
         s-&amp;gt;queue-&amp;gt;retval = OBJ_WAIT_SUCCEEDED; /* indicate explicit wake */
-#if defined(HAVE_PRIORITY_SCHEDULING) &amp;amp;&amp;amp; defined(irq_enabled_checkval)
         result = wakeup_thread(&amp;amp;s-&amp;gt;queue);
-#else
-        wakeup_thread(&amp;amp;s-&amp;gt;queue);
-#endif
     }
     else
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1228,11 +1222,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     corelock_unlock(&amp;amp;s-&amp;gt;cl);
     restore_irq(oldlevel);
 
-#if defined(HAVE_PRIORITY_SCHEDULING) &amp;amp;&amp;amp; defined(irq_enabled_checkval)
-    /* No thread switch if IRQ disabled - it's probably called via ISR.
-     * switch_thread would as well enable them anyway. */
-    if((result &amp;amp; THREAD_SWITCH) &amp;amp;&amp;amp; irq_enabled_checkval(oldlevel))
+#if defined(HAVE_PRIORITY_SCHEDULING) &amp;amp;&amp;amp; defined(is_thread_context)
+    /* No thread switch if not thread context */
+    if((result &amp;amp; THREAD_SWITCH) &amp;amp;&amp;amp; is_thread_context())
         switch_thread();
 #endif
+    (void)result;
 }
 #endif /* HAVE_SEMAPHORE_OBJECTS */

Modified: trunk/firmware/target/arm/as3525/fmradio-i2c-as3525.c
===================================================================
--- trunk/firmware/target/arm/as3525/fmradio-i2c-as3525.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/as3525/fmradio-i2c-as3525.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -195,8 +195,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     /* read and clear the interrupt */
     if (GPIOA_MIS &amp;amp; (1&amp;lt;&amp;lt;4)) {
         semaphore_release(&amp;amp;rds_sema);
+        GPIOA_IC = (1&amp;lt;&amp;lt;4);
     }
-    GPIOA_IC = (1&amp;lt;&amp;lt;4);
 }
 
 /* Captures RDS data and processes it */

Modified: trunk/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
===================================================================
--- trunk/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,6 +30,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #ifdef HAVE_SCROLLWHEEL
 #define SCROLLWHEEL_BITS        (1&amp;lt;&amp;lt;7|1&amp;lt;&amp;lt;6)
+#define SCROLLWHEEL_BITS_POS    6
                                                       /* TIMER units */
 #define TIMER_TICK              (KERNEL_TIMER_FREQ/HZ)/* how long a tick lasts */
 #define TIMER_MS                (TIMER_TICK/(1000/HZ))/* how long a ms lasts */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -78,10 +79,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
     unsigned int btn = BUTTON_NONE;
 
-    if (old_wheel_value == wheel_tbl[0][wheel_value])
+    if (hold_button)
+    {
+    }
+    else if (old_wheel_value == wheel_tbl[0][wheel_value])
+    {
         btn = BUTTON_SCROLL_FWD;
+    }
     else if (old_wheel_value == wheel_tbl[1][wheel_value])
+    {
         btn = BUTTON_SCROLL_BACK;
+    }
 
     if (btn == BUTTON_NONE)
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -200,11 +208,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 {
 #if defined(HAVE_SCROLLWHEEL)
     /* scroll wheel handling */
-    if (GPIOA_MIS &amp;amp; SCROLLWHEEL_BITS)
-        scrollwheel(GPIOA_PIN_MASK(0xc0) &amp;gt;&amp;gt; 6);
+    unsigned long bits = GPIOA_MIS &amp;amp; SCROLLWHEEL_BITS;
 
-    /* ack interrupt */
-    GPIOA_IC = SCROLLWHEEL_BITS;
+    if (bits)
+    {
+        scrollwheel(GPIOA_PIN_MASK(SCROLLWHEEL_BITS) &amp;gt;&amp;gt; SCROLLWHEEL_BITS_POS);
+        GPIOA_IC = bits; /* ack interrupt */
+    }
 #endif
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -225,8 +235,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     int delay = 30;
     while(delay--) nop;
 
+    disable_irq();
+
     bool ccu_io_bit12 = CCU_IO &amp;amp; (1&amp;lt;&amp;lt;12);
-    bitclr32(&amp;amp;CCU_IO, 1&amp;lt;&amp;lt;12);
+    CCU_IO &amp;amp;= ~(1&amp;lt;&amp;lt;12);
 
     /* B1 is shared with FM i2c */
     bool gpiob_pin0_dir = GPIOB_DIR &amp;amp; (1&amp;lt;&amp;lt;1);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -256,8 +268,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         GPIOB_DIR |= 1&amp;lt;&amp;lt;1;
 
     if(ccu_io_bit12)
-        bitset32(&amp;amp;CCU_IO, 1&amp;lt;&amp;lt;12);
+        CCU_IO |= (1&amp;lt;&amp;lt;12);
 
+    enable_irq();
+
 #ifdef HAS_BUTTON_HOLD
 #ifndef BOOTLOADER
     /* light handling */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -265,12 +279,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     {
         hold_button = hold;
         backlight_hold_changed(hold);
-        /* mask scrollwheel irq so we don't need to check for
-         * the hold button in the isr */
-        if (hold)
-            GPIOA_IE &amp;amp;= ~SCROLLWHEEL_BITS;
-        else
-            GPIOA_IE |= SCROLLWHEEL_BITS;
     }
 #else
     hold_button = hold;

Modified: trunk/firmware/target/arm/as3525/sd-as3525.c
===================================================================
--- trunk/firmware/target/arm/as3525/sd-as3525.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/as3525/sd-as3525.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -178,10 +178,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 void sd_gpioa_isr(void)
 {
     static struct timeout sd1_oneshot;
+
     if (GPIOA_MIS &amp;amp; EXT_SD_BITS)
+    {
         timeout_register(&amp;amp;sd1_oneshot, sd1_oneshot_callback, (3*HZ/10), 0);
-    /* acknowledge interrupt */
-    GPIOA_IC = EXT_SD_BITS;
+        GPIOA_IC = EXT_SD_BITS; /* acknowledge interrupt */
+    }
 }
 #endif  /* HAVE_HOTSWAP */
 

Modified: trunk/firmware/target/arm/as3525/sd-as3525v2.c
===================================================================
--- trunk/firmware/target/arm/as3525/sd-as3525v2.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/as3525/sd-as3525v2.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1041,10 +1041,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 void sd_gpioa_isr(void)
 {
     static struct timeout sd1_oneshot;
+
     if (GPIOA_MIS &amp;amp; EXT_SD_BITS)
+    {
         timeout_register(&amp;amp;sd1_oneshot, sd1_oneshot_callback, (3*HZ/10), 0);
-    /* acknowledge interrupt */
-    GPIOA_IC = EXT_SD_BITS;
+        GPIOA_IC = EXT_SD_BITS; /* acknowledge interrupt */
+    }
 }
 #endif /* HAVE_HOTSWAP */
 

Modified: trunk/firmware/target/arm/as3525/system-as3525.c
===================================================================
--- trunk/firmware/target/arm/as3525/system-as3525.c2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/as3525/system-as3525.c2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,7 +51,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   extern __attribute__((weak,alias("UIRQ"))) void name (void)
 
 static void UIRQ (void) __attribute__((interrupt ("IRQ")));
-void irq_handler(void) __attribute__((interrupt ("IRQ")));
+void irq_handler(void) __attribute__((naked, interrupt ("IRQ")));
 void fiq_handler(void) __attribute__((interrupt ("FIQ")));
 
 default_interrupt(INT_WATCHDOG);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -121,6 +121,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 static const struct { int source; void (*isr) (void); } vec_int_srcs[] =
 {
     /* Highest priority at the top of the list */
+#if defined(HAVE_HOTSWAP) || defined(HAVE_RDS_CAP) || \
+    (defined(SANSA_FUZEV2) &amp;amp;&amp;amp; !INCREASED_SCROLLWHEEL_POLLING)
+    /* If GPIOA ISR is interrupted, things seem to go wonky ?? */
+    { INT_SRC_GPIOA, INT_GPIOA },
+#endif
 #ifdef HAVE_RECORDING
     { INT_SRC_I2SIN, INT_I2SIN }, /* For recording */
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -134,29 +139,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     { INT_SRC_TIMER2, INT_TIMER2 },
     { INT_SRC_I2C_AUDIO, INT_I2C_AUDIO },
     { INT_SRC_AUDIO, INT_AUDIO },
-#if defined(HAVE_HOTSWAP) || \
-    (defined(SANSA_FUZEV2) &amp;amp;&amp;amp; !INCREASED_SCROLLWHEEL_POLLING)
-    { INT_SRC_GPIOA, INT_GPIOA, },
-#endif
     /* Lowest priority at the end of the list */
 };
 
 static void setup_vic(void)
 {
-    const unsigned int n = sizeof(vec_int_srcs)/sizeof(vec_int_srcs[0]);
-    unsigned int i;
-
     CGU_PERI |= CGU_VIC_CLOCK_ENABLE; /* enable VIC */
     VIC_INT_EN_CLEAR = 0xffffffff; /* disable all interrupt lines */
     VIC_INT_SELECT = 0; /* only IRQ, no FIQ */
 
     *VIC_DEF_VECT_ADDR = UIRQ;
 
-    for(i = 0; i &amp;lt; n; i++)
+    for(unsigned int i = 0; i &amp;lt; ARRAYLEN(vec_int_srcs); i++)
     {
         VIC_VECT_ADDRS[i] = vec_int_srcs[i].isr;
         VIC_VECT_CNTLS[i] = (1&amp;lt;&amp;lt;5) | vec_int_srcs[i].source;
     }
+
+    /* Reset priority hardware */
+    for(unsigned int i = 0; i &amp;lt; 32; i++)
+        *VIC_VECT_ADDR = 0;
 }
 
 void INT_GPIOA(void)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -177,8 +179,36 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 void irq_handler(void)
 {
-    (*VIC_VECT_ADDR)(); /* call the isr */
-    *VIC_VECT_ADDR = (void*)VIC_VECT_ADDR; /* any write will ack the irq */
+    /* Worst-case IRQ stack usage with 10 vectors:
+     * 10*4*10 = 400 bytes (100 words)
+     *
+     * No SVC stack is used by pro/epi-logue code
+     */
+    asm volatile (
+        "sub    lr, lr, #4               \n" /* Create return address */
+        "stmfd  sp!, { r0-r5, r12, lr }  \n" /* Save what gets clobbered */
+        "ldr    r0, =0xc6010030          \n" /* Obtain VIC address (before SPSR read!) */
+        "ldr    r12, [r0]                \n" /* Load Vector */
+        "mrs    r1, spsr                 \n" /* Save SPSR_irq */
+        "stmfd  sp!, { r0-r1 }           \n" /* Must have something bet. mrs and msr */
+        "msr    cpsr_c, #0x13            \n" /* Switch to SVC mode, enable IRQ */
+        "and    r4, sp, #4               \n" /* Align SVC stack to 8 bytes, save */
+        "sub    sp, sp, r4               \n"
+        "mov    r5, lr                   \n" /* Save lr_SVC */
+#if ARM_ARCH &amp;gt;= 5
+        "blx    r12                      \n" /* Call handler */
+#else
+        "mov    lr, pc                   \n"
+        "bx     r12                      \n"
+#endif
+        "add    sp, sp, r4               \n" /* Undo alignment fudge */
+        "mov    lr, r5                   \n" /* Restore lr_SVC */
+        "msr    cpsr_c, #0x92            \n" /* Mask IRQ, return to IRQ mode */
+        "ldmfd  sp!, { r0-r1 }           \n" /* Pop VIC address, SPSR_irq */
+        "str    r0, [r0]                 \n" /* Ack end of ISR to VIC  */
+        "msr    spsr_cxsf, r1            \n" /* Restore SPSR_irq */
+        "ldmfd  sp!, { r0-r5, r12, pc }^ \n" /* Restore regs, and RFE */
+    );
 }
 
 void fiq_handler(void)

Modified: trunk/firmware/target/arm/crt0.S
===================================================================
--- trunk/firmware/target/arm/crt0.S2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/crt0.S2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -100,17 +100,23 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     strhi   r4, [r2], #4
     bhi     1b
 
-    /* Set up stack for IRQ mode */ 
+    /* Set up stack for IRQ mode */
     msr     cpsr_c, #0xd2
     ldr     sp, =irq_stack
 
-    /* Set up stack for FIQ mode */ 
+    msr     cpsr_c, #0xd3
+#if CONFIG_CPU == AS3525 || CONFIG_CPU == AS3525v2
+    /* Let abort and undefined modes use irq stack */
+    /* svc stack is for interrupt processing */
+    ldr     sp, =svc_stack
+#else
+    /* Let svc, abort and undefined modes use irq stack */
+    ldr     sp, =irq_stack
+
+    /* Set up stack for FIQ mode */
     msr     cpsr_c, #0xd1
     ldr     sp, =fiq_stack
-
-    /* Let svc, abort and undefined modes use irq stack */
-    msr     cpsr_c, #0xd3
-    ldr     sp, =irq_stack
+#endif
     msr     cpsr_c, #0xd7
     ldr     sp, =irq_stack
     msr     cpsr_c, #0xdb
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -159,15 +165,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     b      UIE
 
 data_abort_handler:
-    sub    r0, lr, #8 
+    sub    r0, lr, #8
     mov    r1, #2
     b      UIE
 
+/* Cache-align interrupt stacks */
+.balign    32
+
 /* 256 words of IRQ stack */
     .space 256*4
 irq_stack:
 
-/* 256 words of FIQ stack */
+/* 256 words of FIQ/SVC stack */
     .space 256*4
 fiq_stack:
-end:
+svc_stack:
+
+end:
\ No newline at end of file

Modified: trunk/firmware/target/arm/system-arm.h
===================================================================
--- trunk/firmware/target/arm/system-arm.h2012-01-08 20:09:59 UTC (rev 31641)
+++ trunk/firmware/target/arm/system-arm.h2012-01-08 22:29:25 UTC (rev 31642)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -76,6 +76,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define ints_enabled_checkval(val) \
     (((val) &amp;amp; IRQ_FIQ_STATUS) == 0)
 
+/* We run in SYS mode */
+#define is_thread_context() \
+    (get_processor_mode() == 0x1f)
 
 /* Core-level interrupt masking */
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,6 +112,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     return (cpsr &amp;amp; status) == 0;
 }
 
+static inline unsigned long get_processor_mode(void)
+{
+    unsigned long cpsr;
+    asm ("mrs %0, cpsr" : "=r"(cpsr));
+    return cpsr &amp;amp; 0x1f;
+}
+
 /* ARM_ARCH version section for architecture*/
 
 #if ARM_ARCH &amp;gt;= 6

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T22:29:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32834">
    <title>bluebrother: r31641 - trunk/tools</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32834</link>
    <description>&lt;pre&gt;Date: 2012-01-08 21:09:59 +0100 (Sun, 08 Jan 2012)
New Revision: 31641

Log Message:
Rename snprintf when building with MSVC to link with CRT.


Modified:
   trunk/tools/wavtrim.c

Modified: trunk/tools/wavtrim.c
===================================================================
--- trunk/tools/wavtrim.c2012-01-08 19:51:11 UTC (rev 31640)
+++ trunk/tools/wavtrim.c2012-01-08 20:09:59 UTC (rev 31641)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,6 +27,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "wavtrim.h"
 
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
 /* place a 32 bit value into memory, little endian */
 void Write32(unsigned char* pByte, unsigned long value)
 {

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T20:09:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32833">
    <title>bluebrother: r31640 - in trunk/rbutil: ipodpatcher sansapatcher</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32833</link>
    <description>&lt;pre&gt;Date: 2012-01-08 20:51:11 +0100 (Sun, 08 Jan 2012)
New Revision: 31640

Log Message:
MSVC compatibility adjustments.

When using a global variable from a DLL with MSVC special handling is necessary
to avoid going through additional redirection.


Modified:
   trunk/rbutil/ipodpatcher/ipodpatcher.h
   trunk/rbutil/sansapatcher/sansapatcher.h

Modified: trunk/rbutil/ipodpatcher/ipodpatcher.h
===================================================================
--- trunk/rbutil/ipodpatcher/ipodpatcher.h2012-01-08 17:59:52 UTC (rev 31639)
+++ trunk/rbutil/ipodpatcher/ipodpatcher.h2012-01-08 19:51:11 UTC (rev 31640)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,7 +31,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /* Size of buffer for disk I/O - 8MB is large enough for any version
    of the Apple firmware, but not the Nano's RSRC image. */
 #define BUFFER_SIZE 8*1024*1024
+
+#ifndef _MSC_VER
 extern unsigned char* ipod_sectorbuf;
+#else
+/* MSVC needs to use dllimport to allow using it directly from a DLL.
+ * See http://support.microsoft.com/kb/90530
+ * Building with MSVC is only when using as DLL.
+ */
+_declspec(dllimport) unsigned char* ipod_sectorbuf;
+#endif
+
 extern int ipod_verbose;
 
 #define FILETYPE_DOT_IPOD 0

Modified: trunk/rbutil/sansapatcher/sansapatcher.h
===================================================================
--- trunk/rbutil/sansapatcher/sansapatcher.h2012-01-08 17:59:52 UTC (rev 31639)
+++ trunk/rbutil/sansapatcher/sansapatcher.h2012-01-08 19:51:11 UTC (rev 31640)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -32,7 +32,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /* Size of buffer for disk I/O - 8MB is large enough for any version
    of the Apple firmware, but not the Nano's RSRC image. */
 #define BUFFER_SIZE 8*1024*1024
+#ifndef _MSC_VER
 extern unsigned char* sansa_sectorbuf;
+#else
+/* MSVC needs to use dllimport to allow using it directly from a DLL.
+ * See http://support.microsoft.com/kb/90530
+ * Building with MSVC is only when using as DLL.
+ */
+_declspec(dllimport) unsigned char* sansa_sectorbuf;
+#endif
 
 int sansa_read_partinfo(struct sansa_t* sansa, int silent);
 int is_sansa(struct sansa_t* sansa);

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T19:51:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32832">
    <title>amiconn: r31639 - trunk/tools</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32832</link>
    <description>&lt;pre&gt;Date: 2012-01-08 18:59:52 +0100 (Sun, 08 Jan 2012)
New Revision: 31639

Log Message:
Add missing languages from configure, and sort them in exactly the same order for easier maintenance.

Modified:
   trunk/tools/sapi_voice.vbs

Modified: trunk/tools/sapi_voice.vbs
===================================================================
--- trunk/tools/sapi_voice.vbs2012-01-08 17:38:40 UTC (rev 31638)
+++ trunk/tools/sapi_voice.vbs2012-01-08 17:59:52 UTC (rev 31639)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -270,6 +270,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     Dim aIDs
 
     Select Case sLanguage
+        Case "afrikaans"
+            LangIDs = Array(&amp;amp;h436)
         Case "arabic"
             LangIDs = Array( &amp;amp;h401,  &amp;amp;h801,  &amp;amp;hc01, &amp;amp;h1001, &amp;amp;h1401, &amp;amp;h1801, _
                             &amp;amp;h1c01, &amp;amp;h2001, &amp;amp;h2401, &amp;amp;h2801, &amp;amp;h2c01, &amp;amp;h3001, _
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -277,8 +279,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             ' Saudi Arabia, Iraq, Egypt, Libya, Algeria, Morocco, Tunisia,
             ' Oman, Yemen, Syria, Jordan, Lebanon, Kuwait, U.A.E., Bahrain,
             ' Qatar
-        Case "afrikaans"
-            LangIDs = Array(&amp;amp;h436)
+        Case "basque"
+            LangIDs = Array(&amp;amp;h42d)
         Case "bulgarian"
             LangIDs = Array(&amp;amp;h402)
         Case "catala"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -296,6 +298,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             ' Standard, Austrian, Luxembourg, Liechtenstein (Swiss -&amp;gt; wallisertitsch)
         Case "eesti"
             LangIDs = Array(&amp;amp;h425)
+        Case "english-us"
+            LangIDs = Array( &amp;amp;h409,  &amp;amp;h809,  &amp;amp;hc09, &amp;amp;h1009, &amp;amp;h1409, &amp;amp;h1809, _
+                            &amp;amp;h1c09, &amp;amp;h2009, &amp;amp;h2409, &amp;amp;h2809, &amp;amp;h2c09, &amp;amp;h3009, _
+                            &amp;amp;h3409)
+            ' American, British, Australian, Canadian, New Zealand, Ireland,
+            ' South Africa, Jamaika, Caribbean, Belize, Trinidad, Zimbabwe,
+            ' Philippines
         Case "english"
             LangIDs = Array( &amp;amp;h809,  &amp;amp;h409,  &amp;amp;hc09, &amp;amp;h1009, &amp;amp;h1409, &amp;amp;h1809, _
                             &amp;amp;h1c09, &amp;amp;h2009, &amp;amp;h2409, &amp;amp;h2809, &amp;amp;h2c09, &amp;amp;h3009, _
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -328,6 +337,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             LangIDs = Array(&amp;amp;h40d)
         Case "hindi"
             LangIDs = Array(&amp;amp;h439)
+        Case "hrvatski"
+            LangIDs = Array(&amp;amp;h41a, &amp;amp;h101a) ' Croatia, Bosnia and Herzegovina
         Case "islenska"
             LangIDs = Array(&amp;amp;h40f)
         Case "italiano"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -336,22 +347,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             LangIDs = Array(&amp;amp;h411)
         Case "korean"
             LangIDs = Array(&amp;amp;h412)
+        Case "latviesu"
+            LangIDs = Array(&amp;amp;h426)
         Case "lietuviu"
             LangIDs = Array(&amp;amp;h427)
         Case "magyar"
             LangIDs = Array(&amp;amp;h40e)
         Case "nederlands"
             LangIDs = Array(&amp;amp;h413, &amp;amp;h813) ' Standard, Belgian
+        Case "norsk-nynorsk"
+            LangIDs = Array(&amp;amp;h814)
         Case "norsk"
             LangIDs = Array(&amp;amp;h414) ' Bokmal
-        Case "norsk-nynorsk"
-            LangIDs = Array(&amp;amp;h814)
         Case "polski"
             LangIDs = Array(&amp;amp;h415)
+        Case "portugues-brasileiro"
+            LangIDs = Array(&amp;amp;h416)
         Case "portugues"
             LangIDs = Array(&amp;amp;h816)
-        Case "portugues-brasileiro"
-            LangIDs = Array(&amp;amp;h416)
         Case "romaneste"
             LangIDs = Array(&amp;amp;h418)
         Case "russian"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -370,6 +383,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             LangIDs = Array(&amp;amp;h41e)
         Case "turkce"
             LangIDs = Array(&amp;amp;h41f)
+        Case "ukrainian"
+            LangIDs = Array(&amp;amp;h422)
         Case "wallisertitsch"
             LangIDs = Array(&amp;amp;h807) ' Swiss German
         Case "walon"

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T17:59:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32831">
    <title>amiconn: r31638 - trunk/tools</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32831</link>
    <description>&lt;pre&gt;Date: 2012-01-08 18:38:40 +0100 (Sun, 08 Jan 2012)
New Revision: 31638

Log Message:
Remove outdated (and buggy) configuration option for the 8MB mod. This is configured by selecting memory size directly.


Modified:
   trunk/tools/configure

Modified: trunk/tools/configure
===================================================================
--- trunk/tools/configure2012-01-08 13:59:15 UTC (rev 31637)
+++ trunk/tools/configure2012-01-08 17:38:40 UTC (rev 31638)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -720,9 +720,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     printf "Enter your developer options (press only enter when done)\n\
 (D)EBUG, (L)ogf, Boot(c)hart, (S)imulator, (P)rofiling, (V)oice, (W)in32 crosscompile,\n\
 (T)est plugins, S(m)all C lib:"
-    if [ "$memory" = "2" ]; then
-      printf ", (8)MB MOD"
-    fi
     if [ "$modelname" = "archosplayer" ]; then
       printf ", Use (A)TA poweroff"
     fi
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -789,12 +786,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         echo "Voice build selected"
         voice="yes"
         ;;
-      8)
-        if [ "$memory" = "2" ]; then
-          memory="8"
-          echo "Memory size selected: 8MB"
-        fi
-        ;;
       [Aa])
         if [ "$modelname" = "archosplayer" ]; then
           have_ata_poweroff="#define HAVE_ATA_POWER_OFF"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1183,7 +1174,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 ARG_ARM_THUMB=
 ARG_PREFIX="$PREFIX"
 ARG_THREAD_SUPPORT=
-err=
+err=            
 for arg in "$&amp;lt; at &amp;gt;"; do
 case "$arg" in
 --ccache)     ARG_CCACHE=1;;

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T17:38:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32830">
    <title>amiconn: r31637 - trunk/tools</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32830</link>
    <description>&lt;pre&gt;Date: 2012-01-08 14:59:15 +0100 (Sun, 08 Jan 2012)
New Revision: 31637

Log Message:
Fix several flaws in argument handling and reconfiguring, mainly related to voice building: (1) Properly retain arguments containing spaces by re-quoting them. (2) Properly retain --tts when the default is selected by just pressing return. (3) Only append --tts and --language if they weren't already specified on the commandline, preventing duplication on 'make reconf'. (4) Never append --ttsopts and --encopts for the same reason. These are commandline only anyway.

Modified:
   trunk/tools/configure

Modified: trunk/tools/configure
===================================================================
--- trunk/tools/configure2012-01-08 12:57:02 UTC (rev 31636)
+++ trunk/tools/configure2012-01-08 13:59:15 UTC (rev 31637)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -29,7 +29,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 app_lcd_width=
 app_lcd_height=
 app_lcd_orientation=
-cmdline="$&amp;lt; at &amp;gt;"
+
+# Properly retain command line arguments containing spaces
+cmdline=
+for arg in "$&amp;lt; at &amp;gt;"; do
+  case "$arg" in
+    *\ *) cmdline="$cmdline \"$arg\"";;
+    *)    cmdline="$cmdline $arg";;
+  esac
+done
+
 #
 # Begin Function Definitions
 #
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -878,7 +887,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         DEFAULT_TTS="flite"
         DEFAULT_TTS_OPTS=$FLITE_OPTS
         DEFAULT_NOISEFLOOR="500"
-        DEFAULT_CHOICE="L"
+        DEFAULT_CHOICE="l"
     fi
     if [ -n "`findtool espeak`" ]; then
         ESPEAK="(e)Speak "
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -910,7 +919,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         DEFAULT_TTS="festival"
         DEFAULT_TTS_OPTS=$FESTIVAL_OPTS
         DEFAULT_NOISEFLOOR="500"
-        DEFAULT_CHOICE="F"
+        DEFAULT_CHOICE="f"
     fi
     if [ -n "`findtool swift`" ]; then
         SWIFT="S(w)ift "
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -927,7 +936,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         DEFAULT_TTS="sapi"
         DEFAULT_TTS_OPTS=$SAPI_OPTS
         DEFAULT_NOISEFLOOR="500"
-        DEFAULT_CHOICE="S"
+        DEFAULT_CHOICE="s"
     fi
 
     if [ "$FESTIVAL" = "$FLITE" ] &amp;amp;&amp;amp; [ "$FLITE" = "$ESPEAK" ] &amp;amp;&amp;amp; [ "$ESPEAK" = "$SAPI" ] &amp;amp;&amp;amp; [ "$SAPI" = "$SWIFT" ]; then
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -940,8 +949,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     else
         echo "TTS engine to use: ${FLITE}${FESTIVAL}${ESPEAK}${SAPI}${SWIFT}(${DEFAULT_CHOICE})?"
         option=`input`
+        if [ -z "$option" ]; then option=${DEFAULT_CHOICE}; fi
+        advopts="$advopts --tts=$option"
     fi
-    advopts="$advopts --tts=$option"
     case "$option" in
         [Ll])
         TTS_ENGINE="flite"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1008,7 +1018,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     # Read custom tts options from command line
     if [ "$ARG_TTSOPTS" ]; then
         TTS_OPTS="$ARG_TTSOPTS"
-        advopts="$advopts --ttsopts='$TTS_OPTS'"
         echo "$TTS_ENGINE options set to $TTS_OPTS"
     fi
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1031,7 +1040,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     # Read custom encoder options from command line
     if [ "$ARG_ENCOPTS" ]; then
         ENC_OPTS="$ARG_ENCOPTS"
-        advopts="$advopts --encopts='$ENC_OPTS'"
         echo "$ENCODER options set to $ENC_OPTS"
     fi
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1061,8 +1069,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             num=`expr $num + 1`
         done
         pick=`input`
+        advopts="$advopts --language=$pick"
     fi
-    advopts="$advopts --language=$pick"
 }
 
 whichlang() {

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T13:59:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32829">
    <title>bertrik: r31636 - trunk/firmware/target/arm/as3525</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32829</link>
    <description>&lt;pre&gt;Date: 2012-01-08 13:57:02 +0100 (Sun, 08 Jan 2012)
New Revision: 31636

Log Message:
Remove duplicate #include "button.h"

Modified:
   trunk/firmware/target/arm/as3525/button-e200v2-fuze.c

Modified: trunk/firmware/target/arm/as3525/button-e200v2-fuze.c
===================================================================
--- trunk/firmware/target/arm/as3525/button-e200v2-fuze.c2012-01-08 12:07:17 UTC (rev 31635)
+++ trunk/firmware/target/arm/as3525/button-e200v2-fuze.c2012-01-08 12:57:02 UTC (rev 31636)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,7 +23,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "config.h"
 #include "system.h"
 #include "button.h"
-#include "button.h"
 #include "backlight.h"
 #include "dbop-as3525.h"
 

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T12:57:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32828">
    <title>nick_p: r31635 - trunk/uisimulator/common</title>
    <link>http://comments.gmane.org/gmane.comp.systems.archos.rockbox.cvs/32828</link>
    <description>&lt;pre&gt;Date: 2012-01-08 13:07:17 +0100 (Sun, 08 Jan 2012)
New Revision: 31635

Log Message:
Simulator: Emulate a period of external power after charging.

Also a bit of optimisation of battery_status_update().

FS#12506


Modified:
   trunk/uisimulator/common/powermgmt-sim.c

Modified: trunk/uisimulator/common/powermgmt-sim.c
===================================================================
--- trunk/uisimulator/common/powermgmt-sim.c2012-01-08 11:50:04 UTC (rev 31634)
+++ trunk/uisimulator/common/powermgmt-sim.c2012-01-08 12:07:17 UTC (rev 31635)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,51 +30,76 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define BATT_MAXMVOLT   4300      /* maximum millivolts of battery */
 #define BATT_MAXRUNTIME (10 * 60) /* maximum runtime with full battery in
                                      minutes */
+/* Number of millivolts to discharge the battery every second */
+#define BATT_DISCHARGE_STEP ((BATT_MAXMVOLT - BATT_MINMVOLT) / 100)
+/* Number of millivolts to charge the battery every second */
+#define BATT_CHARGE_STEP (BATT_DISCHARGE_STEP * 2)
+#if CONFIG_CHARGING &amp;gt;= CHARGING_MONITOR
+/* Number of seconds to externally power before discharging again */
+#define POWER_AFTER_CHARGE_TICKS (8 * HZ)
+#endif
 
 extern int battery_percent;
 static bool charging = false;
-
 static unsigned int battery_millivolts = BATT_MAXMVOLT;
 
 void powermgmt_init_target(void) {}
 
 static void battery_status_update(void)
 {
-    static long last_tick = 0;
+    /* Delay next battery update until tick */
+    static long update_after_tick = 0;
+#if CONFIG_CHARGING &amp;gt;= CHARGING_MONITOR
+    /* When greater than 0, the tick to unplug the external power at */
+    static unsigned int ext_power_until_tick = 0;
+#endif
 
-    if (TIME_AFTER(current_tick, (last_tick+HZ))) {
-        last_tick = current_tick;
+    if TIME_BEFORE(current_tick, update_after_tick)
+        return;
 
-        /* change the values: */
-        if (charging) {
-            if (battery_millivolts &amp;gt;= BATT_MAXMVOLT) {
-#if CONFIG_CHARGING
-                /* Pretend the charger was disconnected */
-                charger_input_state = CHARGER_UNPLUGGED;
+    update_after_tick = current_tick + HZ;
+
+#if CONFIG_CHARGING &amp;gt;= CHARGING_MONITOR
+    /* Handle period of being externally powered */
+    if (ext_power_until_tick &amp;gt; 0) {
+        if (TIME_AFTER(current_tick, ext_power_until_tick)) {
+            /* Pretend the charger was disconnected */
+            charger_input_state = CHARGER_UNPLUGGED;
+            ext_power_until_tick = 0;
+        }
+        return;
+    }
 #endif
-                charging = false;
-            }
+
+    if (charging) {
+        battery_millivolts += BATT_CHARGE_STEP;
+        if (battery_millivolts &amp;gt;= BATT_MAXMVOLT) {
+            charging = false;
+            battery_percent = 100;
+#if CONFIG_CHARGING &amp;gt;= CHARGING_MONITOR
+            /* Keep external power until tick */
+            ext_power_until_tick = current_tick + POWER_AFTER_CHARGE_TICKS;
+#elif CONFIG_CHARGING 
+            /* Pretend the charger was disconnected */
+            charger_input_state = CHARGER_UNPLUGGED;
+#endif
+            return;
         }
-        else {
-            if (battery_millivolts &amp;lt;= BATT_MINMVOLT) {
+    } else {
+        battery_millivolts -= BATT_DISCHARGE_STEP;
+        if (battery_millivolts &amp;lt;= BATT_MINMVOLT) {
+            charging = true;
+            battery_percent = 0;
 #if CONFIG_CHARGING
-                /* Pretend the charger was connected */
-                charger_input_state = CHARGER_PLUGGED;
+            /* Pretend the charger was connected */
+            charger_input_state = CHARGER_PLUGGED;
 #endif
-                charging = true;
-            }
+            return;
         }
+    }
 
-        if (charging) {
-            battery_millivolts += (BATT_MAXMVOLT - BATT_MINMVOLT) / 50;
-        }
-        else {
-            battery_millivolts -= (BATT_MAXMVOLT - BATT_MINMVOLT) / 100;
-        }
-
-        battery_percent = 100 * (battery_millivolts - BATT_MINMVOLT) /
-                            (BATT_MAXMVOLT - BATT_MINMVOLT);
-    }
+    battery_percent = 100 * (battery_millivolts - BATT_MINMVOLT) /
+                        (BATT_MAXMVOLT - BATT_MINMVOLT);
 }
 
 const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = { 3200 };
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -96,7 +121,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #if CONFIG_CHARGING
 unsigned int power_input_status(void)
 {
-    return charging ? POWER_INPUT_CHARGER : POWER_INPUT_NONE;
+    return charger_input_state &amp;gt;= CHARGER_PLUGGED
+            ? POWER_INPUT_CHARGER : POWER_INPUT_NONE;
 }
 
 bool charging_state(void)

_______________________________________________
rockbox-cvs mailing list
rockbox-cvs&amp;lt; at &amp;gt;cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs

&lt;/pre&gt;</description>
    <dc:creator>mailer&lt; at &gt;svn.rockbox.org</dc:creator>
    <dc:date>2012-01-08T12:07:17</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.systems.archos.rockbox.cvs">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.systems.archos.rockbox.cvs</link>
  </textinput>
</rdf:RDF>
