MS7724 android-2.1_r1
diff --git a/AndroidBoard.mk b/AndroidBoard.mk
index 162d8ad..9b21e79 100644
--- a/AndroidBoard.mk
+++ b/AndroidBoard.mk
@@ -42,5 +42,10 @@
 ####################################################################
 ### Copy necessary files to target root filesystem
 
-PRODUCT_COPY_FILES = \
-	vendor/renesas/ms7724/vold.conf:system/etc/vold.conf
+PRODUCT_COPY_FILES += \
+	vendor/renesas/ms7724/vold.conf:system/etc/vold.conf \
+	vendor/renesas/ms7724/asound.conf:system/etc/asound.conf
+
+
+# Pick up some sounds
+include frameworks/base/data/sounds/OriginalAudio.mk
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 0dbc608..fcb711a 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -9,10 +9,11 @@
 TARGET_NO_BOOTLOADER := true
 TARGET_NO_KERNEL := true
 TARGET_NO_RADIOIMAGE := true
-TARGET_CPU_ABI := sh
+TARGET_CPU_ABI := sh4abi
 TARGET_PROVIDES_INIT_RC := true
-USE_CAMERA_STUB := true
+TARGET_BOOTLOADER_BOARD_NAME := ms7724
+USE_CAMERA_STUB := false
 HAVE_HTC_AUDIO_DRIVER := false
-BOARD_USES_GENERIC_AUDIO := true
-BOARD_USES_ALSA_AUDIO := false
-BUILD_WITH_ALSA_UTILS := false
+BOARD_USES_GENERIC_AUDIO := false
+BOARD_USES_ALSA_AUDIO := true
+BUILD_WITH_ALSA_UTILS := true
diff --git a/asound.conf b/asound.conf
new file mode 100644
index 0000000..ad96a93
--- /dev/null
+++ b/asound.conf
@@ -0,0 +1,406 @@
+# #
+# # Mixer devices
+# #
+ctl.AndroidPlayback {
+        type hw
+        card 0 # Can replace with drivers name from /proc/asound/cards
+}
+ctl.AndroidCapture {
+        type hw
+        card 0
+}
+
+# #
+# # Playback devices
+# #
+pcm.AndroidPlayback {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Earpiece {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Earpiece_normal {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Earpiece_ringtone {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Earpiece_incall {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Speaker {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Speaker_normal {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Speaker_ringtone {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Speaker_incall {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Bluetooth {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Headset {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_Bluetooth-A2DP {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidPlayback_FM {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
+
+pcm.AndroidCapture {
+        type hooks
+        slave.pcm {
+                type hw
+                card 0
+                device 0
+        }
+        hooks.0 {
+                type ctl_elems
+                hook_args [
+                        { name 'DAC Gain'                     value [ 39 39 ] }
+                        { name 'HeadPhone Playback Volume'    value [ 45 45 ] }
+                        { name 'Mic Capture Volume'           value [  0  0 ] }
+                        { name 'In PGA Gain'                  value [  0  0 ] }
+                        { name 'Mic Bias'                     value true }
+                        { name 'Mic Bias Voltage'             value '1.5' }
+                        { name 'In Mixer Right MIC_R Switch'  value false }
+                        { name 'In Mixer Left MIC_L Switch'   value false }
+                        { name 'Out Mixer Right DAC_R Switch' value true  }
+                        { name 'Out Mixer Left DAC_L Switch'  value true  }
+                        { name 'MicR Enable Switch'           value false }
+                        { name 'MicL Enable Switch'           value false }
+                        { name 'HPR Enable Switch'            value true  }
+                        { name 'HPL Enable Switch'            value true  }
+                ]
+        }
+}
diff --git a/init.r0p7724.rc b/init.r0p7724.rc
index a0df321..4f7208c 100644
--- a/init.r0p7724.rc
+++ b/init.r0p7724.rc
@@ -1,8 +1,5 @@
 on boot
     setprop ro.radio.use-ppp no
-    setprop ro.product.board ms7724
-    setprop ro.build.product generic
-    setprop ro.product.device generic
 
 # fake some battery state
     setprop status.battery.state Slow
diff --git a/init.r0p7724.sh b/init.r0p7724.sh
index 1b0437e..061c00f 100755
--- a/init.r0p7724.sh
+++ b/init.r0p7724.sh
@@ -6,10 +6,6 @@
     255) netcfg eth0 dhcp ;;
 esac
 
-# remove previous browser session
-rm -r /data/data/com.android.browser/cache
-rm -r /data/data/com.android.browser/databases
-
 # disable boot animation for a faster boot sequence when needed
 boot_anim=`getprop ro.kernel.android.bootanim`
 case "$boot_anim" in
diff --git a/init.rc b/init.rc
index 8a4ff36..4674a1d 100644
--- a/init.rc
+++ b/init.rc
@@ -17,12 +17,14 @@
 
 # Backward compatibility
     symlink /system/etc /etc
+    symlink /sys/kernel/debug /d
 
 # create mountpoints and mount tmpfs on sqlite_stmt_journals
     mkdir /sdcard 0000 system system
     mkdir /system
     mkdir /data 0771 system system
     mkdir /cache 0770 system cache
+    mkdir /config 0500 root root
     mkdir /sqlite_stmt_journals 01777 root root
     mount tmpfs tmpfs /sqlite_stmt_journals size=4m
 
@@ -32,6 +34,7 @@
     write /proc/sys/kernel/sched_latency_ns 10000000
     write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
     write /proc/sys/kernel/sched_compat_yield 1
+    write /proc/sys/kernel/sched_child_runs_first 0
 
 # Create cgroup mount points for process groups
     mkdir /dev/cpuctl
@@ -56,6 +59,25 @@
     chown system system /data
     chmod 0771 /data
 
+    # Create dump dir and collect dumps.
+    # Do this before we mount cache so eventually we can use cache for
+    # storing dumps on platforms which do not have a dedicated dump partition.
+
+    mkdir /data/dontpanic
+    chown root log /data/dontpanic
+    chmod 0750 /data/dontpanic
+
+    # Collect apanic data, free resources and re-arm trigger
+    copy /proc/apanic_console /data/dontpanic/apanic_console
+    chown root log /data/dontpanic/apanic_console
+    chmod 0640 /data/dontpanic/apanic_console
+
+    copy /proc/apanic_threads /data/dontpanic/apanic_threads
+    chown root log /data/dontpanic/apanic_threads
+    chmod 0640 /data/dontpanic/apanic_threads
+
+    write /proc/apanic_console 1
+
     # Same reason as /data above
     chown system cache /cache
     chmod 0770 /cache
@@ -64,16 +86,22 @@
     chown system system /cache/recovery
     chmod 0770 /cache/recovery
 
+    #change permissions on vmallocinfo so we can grab it from bugreports
+    chown root log /proc/vmallocinfo
+    chmod 0440 /proc/vmallocinfo
+
 # create basic filesystem structure
     mkdir /data/misc 01771 system misc
-    mkdir /data/misc/keystore 0770 keystore keystore
+    mkdir /data/misc/keystore 0700 keystore keystore
     mkdir /data/local 0771 shell shell
     mkdir /data/local/tmp 0771 shell shell
     mkdir /data/data 0771 system system
     mkdir /data/app-private 0771 system system
-    mkdir /data/app 0771 system system
+    chown system system /data/app
+    chmod 0771 /data/app
     mkdir /data/property 0700 root root
 
+
     # create dalvik-cache and double-check the perms
     mkdir /data/dalvik-cache 0771 system system
     chown system system /data/dalvik-cache
@@ -132,6 +160,10 @@
     # Set init its forked children's oom_adj.
     write /proc/1/oom_adj -16
 
+    # Tweak background writeout
+    write /proc/sys/vm/dirty_expire_centisecs 200
+    write /proc/sys/vm/dirty_background_ratio  5
+
     # Permissions for System Server and daemons.
     chown radio system /sys/android_power/state
     chown radio system /sys/android_power/request_state
@@ -171,6 +203,14 @@
     chown system system /sys/kernel/ipv4/tcp_rmem_max
     chown root radio /proc/cmdline
 
+# ALSA mixer property setting
+    setprop alsa.mixer.playback.master HeadPhone
+    setprop alsa.mixer.capture.master Mic
+    setprop alsa.mixer.playback.earpiece HeadPhone
+    setprop alsa.mixer.capture.earpiece Mic
+    setprop alsa.mixer.playback.headset HeadPhone
+    setprop alsa.mixer.playback.speaker HeadPhone
+
 # Define TCP buffer sizes for various networks
 #   ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
     setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
@@ -186,6 +226,20 @@
 service console /system/bin/sh
     console
 
+# adbd is controlled by the persist.service.adb.enable system property
+service adbd /sbin/adbd
+    disabled
+
+# adbd on at boot in emulator
+on property:ro.kernel.qemu=1
+    start adbd
+
+on property:persist.service.adb.enable=1
+    start adbd
+
+on property:persist.service.adb.enable=0
+    stop adbd
+
 service servicemanager /system/bin/servicemanager
     user system
     critical
@@ -203,6 +257,7 @@
     socket zygote stream 666
     onrestart write /sys/android_power/request_state wake
     onrestart write /sys/power/state on
+    onrestart restart media
 
 service media /system/bin/mediaserver
     user media
@@ -217,8 +272,12 @@
 service installd /system/bin/installd
     socket installd stream 600 system system
 
-service keystore /system/bin/keystore
+service keystore /system/bin/keystore /data/misc/keystore
     user keystore
     group keystore
     socket keystore stream 666
 
+service dumpstate /system/bin/dumpstate -s
+    socket dumpstate stream 0660 shell log
+    disabled
+    oneshot