Index: firmware/sound.c
===================================================================
--- firmware/sound.c	(revision 12673)
+++ firmware/sound.c	(working copy)
@@ -56,39 +56,39 @@
 
 static const struct sound_settings_info sound_settings_table[] = {
 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
-    [SOUND_VOLUME]        = {"dB", 0,  1,-100,  12, -25, sound_set_volume},
-    [SOUND_BASS]          = {"dB", 0,  1, -12,  12,   6, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  1, -12,  12,   6, sound_set_treble},
+    [SOUND_VOLUME]        = {"dB", 1, 10,-1000, 120, -250, sound_set_volume},
+    [SOUND_BASS]          = {"dB", 1, 10, -120, 120,    6, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 10, -120, 120,    6, sound_set_treble},
 #elif defined(HAVE_UDA1380)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -84,   0, -25, sound_set_volume},
-    [SOUND_BASS]          = {"dB", 0,  2,   0,  24,   0, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  2,   0,   6,   0, sound_set_treble},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -840,   0, -250, sound_set_volume},
+    [SOUND_BASS]          = {"dB", 1, 20,    0, 240,    0, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 20,    0,  60,    0, sound_set_treble},
 #elif defined(HAVE_TLV320)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -73,   6, -20, sound_set_volume},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -730,  60, -200, sound_set_volume},
 #elif defined(HAVE_WM8975) || defined(HAVE_WM8751)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -74,   6, -25, sound_set_volume},
-    [SOUND_BASS]          = {"dB", 0,  1,  -6,   9,   0, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  1,  -6,   9,   0, sound_set_treble},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -740,  60, -250, sound_set_volume},
+    [SOUND_BASS]          = {"dB", 1, 15,  -60,  90,    0, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 15,  -60,  90,    0, sound_set_treble},
 #elif defined(HAVE_WM8758)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -58,   6, -25, sound_set_volume},
-    [SOUND_BASS]          = {"dB", 0,  1,  -6,   9,   0, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  1,  -6,   9,   0, sound_set_treble},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -580,  60, -250, sound_set_volume},
+    [SOUND_BASS]          = {"dB", 1, 15,  -60,  90,    0, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 15,  -60,  90,    0, sound_set_treble},
 #elif defined(HAVE_WM8731) || defined(HAVE_WM8721)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -74,   6, -25, sound_set_volume},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -740,  60, -250, sound_set_volume},
 #elif (CONFIG_CPU == PNX0101)
-    [SOUND_VOLUME]        = {"dB", 0,  1, -48,  15,   0, sound_set_volume},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -480, 150,    0, sound_set_volume},
 #elif defined(HAVE_PP5024_CODEC)
 /* TODO: Make this correct */
-    [SOUND_VOLUME]        = {"dB", 0,  1, -74,   6, -25, sound_set_volume},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -740,  60, -250, sound_set_volume},
 #else /* MAS3507D */
-    [SOUND_VOLUME]        = {"dB", 0,  1, -78,  18, -18, sound_set_volume},
-    [SOUND_BASS]          = {"dB", 0,  1, -15,  15,   7, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  1, -15,  15,   7, sound_set_treble},
+    [SOUND_VOLUME]        = {"dB", 1, 10, -780, 180, -180, sound_set_volume},
+    [SOUND_BASS]          = {"dB", 1, 10, -150, 150,   70, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 10, -150, 150,   70, sound_set_treble},
 #endif
 /* Override any other potentially existing treble/bass controllers if wanted */
 #ifdef HAVE_SW_TONE_CONTROLS
-    [SOUND_BASS]          = {"dB", 0,  1, -24,  24,   0, sound_set_bass},
-    [SOUND_TREBLE]        = {"dB", 0,  1, -24,  24,   0, sound_set_treble},
+    [SOUND_BASS]          = {"dB", 1, 10, -240, 240,    0, sound_set_bass},
+    [SOUND_TREBLE]        = {"dB", 1, 10, -240, 240,    0, sound_set_treble},
 #endif
     [SOUND_BALANCE]       = {"%",  0,  1,-100, 100,   0, sound_set_balance},
     [SOUND_CHANNELS]      = {"",   0,  1,   0,   5,   0, sound_set_channels},
@@ -472,16 +472,16 @@
     if(!audio_is_initialized)
         return;
 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
-    unsigned tmp = ((unsigned)(value + 115) & 0xff) << 8;
+    unsigned tmp = ((unsigned)(value / 10 + 115) & 0xff) << 8;
     mas_codec_writereg(0x10, tmp);
 #elif (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 \
    || defined HAVE_WM8975 || defined HAVE_WM8758 || defined HAVE_WM8731 \
    || defined(HAVE_WM8721) || defined(HAVE_TLV320) || defined(HAVE_WM8751) \
    || defined(HAVE_PP5024_CODEC)
-    current_volume = value * 10;     /* tenth of dB */
+    current_volume = value;
     set_prescaled_volume();                          
 #elif CONFIG_CPU == PNX0101
-    int tmp = (60 - value * 4) & 0xff;
+    int tmp = (60 - value * 4 / 10) & 0xff;
     CODECVOL = tmp | (tmp << 8);
 #endif
 }
@@ -509,23 +509,19 @@
     if(!audio_is_initialized)
         return;
 #if defined(HAVE_SW_TONE_CONTROLS)
-    current_bass = value * 10;
+    current_bass = value;
     dsp_callback(DSP_CALLBACK_SET_BASS, current_bass);
     set_prescaled_volume();
 #elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
-    unsigned tmp = ((unsigned)(value * 8) & 0xff) << 8;
+    unsigned tmp = ((unsigned)(value * 8 / 10) & 0xff) << 8;
     mas_codec_writereg(0x14, tmp);
 #elif CONFIG_CODEC == MAS3507D
-    mas_writereg(MAS_REG_KBASS, bass_table[value+15]);
-    current_bass = value * 10;
+    mas_writereg(MAS_REG_KBASS, bass_table[value / 10 + 15]);
+    current_bass = value;
     set_prescaled_volume();
-#elif defined(HAVE_UDA1380)
-    audiohw_set_bass(value >> 1);
-    current_bass = value * 10;
-    set_prescaled_volume();
-#elif defined HAVE_WM8975 || defined HAVE_WM8758 \
+#elif defined(HAVE_UDA1380) || defined HAVE_WM8975 || defined HAVE_WM8758 \
     || defined HAVE_WM8731 || defined(HAVE_WM8721) || defined(HAVE_WM8751)
-    current_bass = value * 10;
+    current_bass = value;
     audiohw_set_bass(value);
     set_prescaled_volume();
 #elif CONFIG_CPU == PNX0101 || defined(HAVE_PP5024_CODEC)
@@ -539,24 +535,20 @@
     if(!audio_is_initialized)
         return;
 #if defined(HAVE_SW_TONE_CONTROLS)
-    current_treble = value * 10;
+    current_treble = value;
     dsp_callback(DSP_CALLBACK_SET_TREBLE, current_treble);
     set_prescaled_volume();
 #elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
-    unsigned tmp = ((unsigned)(value * 8) & 0xff) << 8;
+    unsigned tmp = ((unsigned)(value * 8 / 10) & 0xff) << 8;
     mas_codec_writereg(0x15, tmp);
 #elif CONFIG_CODEC == MAS3507D
-    mas_writereg(MAS_REG_KTREBLE, treble_table[value+15]);
-    current_treble = value * 10;
+    mas_writereg(MAS_REG_KTREBLE, treble_table[value / 10  + 15]);
+    current_treble = value;
     set_prescaled_volume();
-#elif defined(HAVE_UDA1380)
-    audiohw_set_treble(value >> 1);
-    current_treble = value * 10;
-    set_prescaled_volume();
-#elif defined(HAVE_WM8975) || defined(HAVE_WM8758) \
+#elif defined(HAVE_UDA1380) || defined(HAVE_WM8975) || defined(HAVE_WM8758) \
    || defined(HAVE_WM8731) || defined(HAVE_WM8721) || defined(HAVE_WM8751)
     audiohw_set_treble(value);
-    current_treble = value * 10;
+    current_treble = value;
     set_prescaled_volume();
 #elif CONFIG_CPU == PNX0101 || defined(HAVE_PP5024_CODEC)
     /* TODO: implement for iFP and Sansa */
Index: firmware/export/wm8731l.h
===================================================================
--- firmware/export/wm8731l.h	(revision 12673)
+++ firmware/export/wm8731l.h	(working copy)
@@ -32,8 +32,6 @@
 extern void audiohw_enable_output(bool enable);
 extern int audiohw_set_master_vol(int vol_l, int vol_r);
 extern int audiohw_set_mixer_vol(int channel1, int channel2);
-extern void audiohw_set_bass(int value);
-extern void audiohw_set_treble(int value);
 extern int audiohw_mute(int mute);
 extern void audiohw_close(void);
 extern void audiohw_set_nsorder(int order);
Index: firmware/drivers/wm8975.c
===================================================================
--- firmware/drivers/wm8975.c	(revision 12673)
+++ firmware/drivers/wm8975.c	(working copy)
@@ -167,26 +167,24 @@
 
 void audiohw_set_bass(int value)
 {
-    const int regvalues[] = {
-        11, 10, 10, 9, 8, 8, 0xf, 6, 6, 5, 4, 4, 3, 2, 1, 0
-    };
-
-    if ((value >= -6) && (value <= 9)) {
-        /* We use linear bass control with 200 Hz cutoff */
-        wmcodec_write(BASSCTRL, regvalues[value + 6] | 0x40);
-    }
+    /* Map to device range */
+    if (value == 0)
+        value = 0xf;
+    else
+        value = 7 - value/15;
+    /* We use linear bass control with 200 Hz cutoff */
+    wmcodec_write(BASSCTRL, value | 0x40);
 }
 
 void audiohw_set_treble(int value)
 {
-    const int regvalues[] = {
-        11, 10, 10, 9, 8, 8, 0xf, 6, 6, 5, 4, 4, 3, 2, 1, 0
-    };
-
-    if ((value >= -6) && (value <= 9)) {
-        /* We use linear treble control with 4 kHz cutoff */
-        wmcodec_write(TREBCTRL, regvalues[value + 6] | 0x40);
-    }
+    /* Map to device range */
+    if (value == 0)
+        value = 0xf;
+    else
+        value = 7 - value/15;
+    /* We use linear treble control with 4 kHz cutoff */
+    wmcodec_write(TREBCTRL, value | 0x40);
 }
 
 int audiohw_mute(int mute)
@@ -223,10 +221,9 @@
 }
 
 /* Note: Disable output before calling this function */
-void audiohw_set_sample_rate(int sampling_control) {
-
-  wmcodec_write(0x08, sampling_control);
-
+void audiohw_set_sample_rate(int sampling_control)
+{
+    wmcodec_write(0x08, sampling_control);
 }
 
 void audiohw_enable_recording(bool source_mic)
@@ -294,7 +291,8 @@
     }
 }
  
-void audiohw_disable_recording(void) {
+void audiohw_disable_recording(void)
+{
     /* 1. Set DACMU = 1 to soft-mute the audio DACs. */
     wmcodec_write(0x05, 0x8);
 
@@ -305,14 +303,14 @@
     wmcodec_write(0x19, 0x0);        /*Pwr Mgmt(1)*/
 }
 
-void audiohw_set_recvol(int left, int right, int type) {
-
+void audiohw_set_recvol(int left, int right, int type)
+{
     (void)left;
     (void)right;
     (void)type;
 }
 
-void audiohw_set_monitor(int enable) {
-
+void audiohw_set_monitor(int enable)
+{
     (void)enable;
 }
Index: firmware/drivers/wm8731l.c
===================================================================
--- firmware/drivers/wm8731l.c	(revision 12673)
+++ firmware/drivers/wm8731l.c	(working copy)
@@ -176,16 +176,6 @@
     return 0;
 }
 
-void audiohw_set_bass(int value)
-{
-    (void)value;
-}
-
-void audiohw_set_treble(int value)
-{
-    (void)value;
-}
-
 /* Nice shutdown of WM8731 codec */
 void audiohw_close(void)
 {
Index: firmware/drivers/uda1380.c
===================================================================
--- firmware/drivers/uda1380.c	(revision 12673)
+++ firmware/drivers/uda1380.c	(working copy)
@@ -139,19 +139,21 @@
 }
 
 /**
- * Sets the bass value (0-12)
+ * Sets the bass value (0-240)
  */
 void audiohw_set_bass(int value)
 {
+    value = (value / 10) >> 1;
     uda1380_write_reg(REG_EQ, (uda1380_regs[REG_EQ] & ~BASS_MASK)
                               | BASSL(value) | BASSR(value));
 }
 
 /**
- * Sets the treble value (0-3)
+ * Sets the treble value (0-60)
  */
 void audiohw_set_treble(int value)
 {
+    value = (value / 10) >> 1;
     uda1380_write_reg(REG_EQ, (uda1380_regs[REG_EQ] & ~TREBLE_MASK)
                               | TREBLEL(value) | TREBLER(value));
 }
Index: apps/gui/gwps.c
===================================================================
--- apps/gui/gwps.c	(revision 12673)
+++ apps/gui/gwps.c	(working copy)
@@ -294,7 +294,7 @@
                 /* volume up */
             case ACTION_WPS_VOLUP:
             {
-                global_settings.volume++;
+                global_settings.volume += 10;
                 bool res = false;
                 setvol();
                 FOR_NB_SCREENS(i)
@@ -312,7 +312,7 @@
                 /* volume down */
             case ACTION_WPS_VOLDOWN:
             {
-                global_settings.volume--;
+                global_settings.volume -= 10;
                 setvol();
                 bool res = false;
                 FOR_NB_SCREENS(i)
Index: apps/gui/gwps-common.c
===================================================================
--- apps/gui/gwps-common.c	(revision 12673)
+++ apps/gui/gwps-common.c	(working copy)
@@ -701,7 +701,7 @@
 
                 case 'v': /* volume */
                     *flags |= WPS_REFRESH_DYNAMIC;
-                    snprintf(buf, buf_size, "%d", global_settings.volume);
+                    snprintf(buf, buf_size, "%d", global_settings.volume / 10);
                     *intval = limit * (global_settings.volume 
                                     - sound_min(SOUND_VOLUME))
                                  / (sound_max(SOUND_VOLUME)
@@ -2336,8 +2336,8 @@
     gui_wps_refresh(gwps, 0, WPS_REFRESH_NON_STATIC);
 
 #ifdef HAVE_LCD_CHARCELLS
-    gui_splash(gwps->display,0, false, "Vol: %d dB   ",
-                   sound_val2phys(SOUND_VOLUME, global_settings.volume));
+    gui_splash(gwps->display, 0, false, "Vol: %d dB   ",
+                   sound_val2phys(SOUND_VOLUME, global_settings.volume) / 10);
     return true;
 #endif
     return false;
