am 68a9f6d3: Merge "Allow init to rm /dev/diag"

* commit '68a9f6d3e326a80bd70efe8844cf1d18f2132052':
  Allow init to rm /dev/diag
diff --git a/apns-full-conf.xml b/apns-full-conf.xml
index 457cc30..468bc24 100644
--- a/apns-full-conf.xml
+++ b/apns-full-conf.xml
@@ -695,6 +695,270 @@
       mvno_type="spn"
   />
 
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807500"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807500"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807501"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807501"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807502"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807502"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807503"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807503"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807504"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807504"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807505"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807505"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807506"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807506"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807507"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807507"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807508"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807508"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="2040807509"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="2040807509"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="UPC mobiel internet"
+      mcc="204"
+      mnc="08"
+      apn="internet.nl.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="204080751"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="UPC MMS"
+      mcc="204"
+      mnc="08"
+      apn="mms.nl.upcmobile.com"
+      mmsc="http://mms.nl.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="204080751"
+      mvno_type="imsi"
+      protocol="IPV4V6"
+  />
+
+  <apn carrier="upcnet"
+      mcc="204"
+      mnc="08"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="204080752"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="204"
+      mnc="08"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="204080752"
+      mvno_type="imsi"
+  />
+
   <apn carrier="Telfort Internet"
       mcc="204"
       mnc="12"
@@ -3000,6 +3264,27 @@
       type="mms"
   />
 
+  <apn carrier="upcnet"
+      mcc="228"
+      mnc="53"
+      apn="internet.ch.upcmobile.com"
+      type="default,supl"
+      mvno_match_data="22853xxxxxxxxxx"
+      mvno_type="imsi"
+  />
+
+  <apn carrier="upcmms"
+      mcc="228"
+      mnc="53"
+      apn="mms.ch.upcmobile.com"
+      mmsc="http://mms.ch.upcmobile.com:8080/servlets/mms"
+      mmsproxy="62.179.127.18"
+      mmsport="8080"
+      type="mms"
+      mvno_match_data="22853xxxxxxxxxx"
+      mvno_type="imsi"
+  />
+
   <apn carrier="T-Mobile CZ"
       mcc="230"
       mnc="01"
@@ -3279,10 +3564,10 @@
       type="mms"
   />
 
-  <apn carrier="yesss!"
+  <apn carrier="Internet"
       mcc="232"
       mnc="12"
-      apn="web.yesss.at"
+      apn="webapn.at"
       type="default,supl"
   />
 
@@ -6018,8 +6303,6 @@
       user="vodafone"
       password="vodafone"
       authtype="1"
-      proxy="iproxy.vodafone.pt"
-      port="80"
       mmsc="http://mms.vodafone.pt/servlets/mms"
       mmsproxy="iproxy.vodafone.pt"
       mmsport="80"
@@ -6034,39 +6317,6 @@
       type="dun"
   />
 
-  <apn carrier="ZON Internet"
-      mcc="268"
-      mnc="01"
-      apn=""
-      type="ia"
-      mvno_match_data="ZON"
-      mvno_type="spn"
-  />
-
-  <apn carrier="ZON Internet"
-      mcc="268"
-      mnc="01"
-      apn="internet.zon.pt"
-      type="default,supl"
-      mvno_match_data="ZON"
-      mvno_type="spn"
-  />
-
-  <apn carrier="ZON MMS"
-      mcc="268"
-      mnc="01"
-      apn="vas.zon.pt"
-      user="vas"
-      password="vas"
-      authtype="1"
-      mmsc="http://mms/servlets/mms"
-      mmsproxy="213.30.27.63"
-      mmsport="8799"
-      type="mms"
-      mvno_match_data="ZON"
-      mvno_type="spn"
-  />
-
   <apn carrier="PortalOptimus"
       mcc="268"
       mnc="03"
@@ -6746,7 +6996,7 @@
       mvno_type="gid"
   />
 
-  <apn carrier="PC mobile"
+  <apn carrier="Mobile Internet"
       mcc="302"
       mnc="220"
       apn="sp.mb.com"
@@ -6758,15 +7008,6 @@
       mvno_type="gid"
   />
 
-  <apn carrier="Tethered Mobile Internet"
-      mcc="302"
-      mnc="220"
-      apn="isp.mb.com"
-      type="dun"
-      mvno_type="gid"
-      mvno_match_data="50"
-  />
-
   <apn carrier="Mobile Internet"
        mcc="302"
        mnc="220"
@@ -6779,24 +7020,6 @@
        mvno_match_data="4D4F"
   />
 
-  <apn carrier="Tethered Mobile Internet"
-      mcc="302"
-      mnc="220"
-      apn="isp.mb.com"
-      type="dun"
-      mvno_type="gid"
-      mvno_match_data="4D4F"
-  />
-
-  <apn carrier="TELUS ISP"
-      mcc="302"
-      mnc="220"
-      apn="isp.telus.com"
-      type="dun"
-      mvno_type="gid"
-      mvno_match_data="54"
-  />
-
   <apn carrier="TELUS"
       mcc="302"
       mnc="221"
@@ -6869,31 +7092,6 @@
       type="default,supl"
   />
 
-  <apn carrier="Fido Tethering"
-      mcc="302"
-      mnc="370"
-      apn="ltedata.apn"
-      type="dun"
-      mvno_match_data="DD"
-      mvno_type="gid"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-  />
-
-  <apn carrier="Fido Internet"
-      mcc="302"
-      mnc="370"
-      apn="ltemobile.apn"
-      type="default,mms,agps,supl,fota,hipri"
-      mmsproxy="mmsproxy.fido.ca"
-      mmsc="http://mms.fido.ca"
-      mmsport="80"
-      mvno_match_data="DD"
-      mvno_type="gid"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-  />
-
   <apn carrier="MTS"
       mcc="302"
       mnc="370"
@@ -6908,17 +7106,6 @@
       mvno_type="gid"
   />
 
-  <apn carrier="MTS Tethering S"
-      mcc="302"
-      mnc="370"
-      apn="internet.mts"
-      type="dun"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-      mvno_type="gid"
-      mvno_match_data="2C"
-  />
-
   <apn carrier="Fido LTE"
       mcc="302"
       mnc="370"
@@ -6995,17 +7182,6 @@
       mvno_type="gid"
   />
 
-  <apn carrier="MTS Tethering"
-      mcc="302"
-      mnc="660"
-      apn="internet.mts"
-      type="dun"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-      mvno_type="gid"
-      mvno_match_data="2C"
-  />
-
   <apn carrier="Rogers LTE"
       mcc="302"
       mnc="720"
@@ -7034,28 +7210,6 @@
       mvno_type="imsi"
   />
 
-  <apn carrier="Chatr Tethering"
-      mcc="302"
-      mnc="720"
-      apn="chatrisp.apn"
-      type="dun"
-      mvno_type="imsi"
-      mvno_match_data="302720x94"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-  />
-
-  <apn carrier="Tbaytel Tethering"
-      mcc="302"
-      mnc="720"
-      apn="ltedata.apn"
-      type="dun"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-      mvno_type="gid"
-      mvno_match_data="BA"
-  />
-
   <apn carrier="Tbaytel Internet"
       mnc="720"
       mcc="302"
@@ -7070,17 +7224,6 @@
       mvno_match_data="BA"
   />
 
-  <apn carrier="Cityfone Tethering"
-      mcc="302"
-      mnc="720"
-      apn="ltedata.apn"
-      type="dun"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-      mvno_type="spn"
-      mvno_match_data="CITYFONE"
-  />
-
   <apn carrier="Cityfone Internet"
       mnc="720"
       mcc="302"
@@ -7095,31 +7238,6 @@
       mvno_match_data="CITYFONE"
   />
 
-  <apn carrier="Rogers Tethering"
-      mcc="302"
-      mnc="720"
-      apn="ltedata.apn"
-      type="dun"
-      mvno_match_data="ROGERS"
-      mvno_type="spn"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-  />
-
-  <apn carrier="Rogers Internet"
-      mcc="302"
-      mnc="720"
-      apn="ltemobile.apn"
-      type="default,mms,agps,supl,fota,hipri"
-      mmsproxy="mmsproxy.rogers.com"
-      mmsc="http://mms.gprs.rogers.com"
-      mmsport="80"
-      mvno_match_data="ROGERS"
-      mvno_type="spn"
-      protocol="IPV4V6"
-      roaming_protocol="IP"
-  />
-
   <apn carrier="SaskTel"
       mcc="302"
       mnc="780"
@@ -8684,10 +8802,6 @@
       type="default,supl"
   />
 
-  <!-- Need two APNs for CDMA technologies: a default that is used normally -->
-  <!-- and a second APN to be used when DUN is required.  Even though the -->
-  <!-- parameters appear the same, the profileID sent to the radio when requesting -->
-  <!-- a DUN connection will be different -->
   <!-- 1xRTT - CDMA -->
   <apn carrier="Sprint"
       mcc="310"
@@ -8699,16 +8813,6 @@
       mmsport="80"
       bearer="6"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="6"
-  />
 
   <!-- EVDO_0 - CDMA -->
   <apn carrier="Sprint"
@@ -8721,16 +8825,6 @@
       mmsport="80"
       bearer="7"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="7"
-  />
 
   <!-- EVDO_A - CDMA -->
   <apn carrier="Sprint"
@@ -8743,16 +8837,6 @@
       mmsport="80"
       bearer="8"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="8"
-  />
 
   <!-- EVDO_B - CDMA -->
   <apn carrier="Sprint"
@@ -8765,16 +8849,6 @@
       mmsport="80"
       bearer="12"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="12"
-  />
 
   <!-- IS95A - CDMA -->
   <apn carrier="Sprint"
@@ -8787,16 +8861,6 @@
       mmsport="80"
       bearer="4"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="4"
-  />
 
   <!-- IS95B - CDMA -->
   <apn carrier="Sprint"
@@ -8809,17 +8873,6 @@
       mmsport="80"
       bearer="5"
   />
-  <apn carrier="Sprint"
-      mcc="310"
-      mnc="120"
-      apn="sprint"
-      type="default,supl,mms,ims,cbs,dun"
-      mmsc="http://mms.sprintpcs.com"
-      mmsproxy="68.28.31.7"
-      mmsport="80"
-      bearer="5"
-  />
-
 
   <!-- this APN will be deleted and replaced by a new ia APN by the HFA provisioning process.
        This is just a bootstrap APN to enable HFA -->
@@ -25907,15 +25960,7 @@
       mcc="419"
       mnc="03"
       apn="action.wataniya.com"
-      type="default,supl"
-  />
-
-  <apn carrier="WAPAction"
-      mcc="419"
-      mnc="03"
-      apn="wap.wataniya.com"
-      proxy="194.126.53.64"
-      port="8080"
+      authtype="0"
       type="default,supl"
   />
 
@@ -25926,6 +25971,7 @@
       mmsc="http://action.wataniya.com"
       mmsproxy="194.126.53.64"
       mmsport="8080"
+      authtype="0"
       type="mms"
   />
 
@@ -26289,14 +26335,6 @@
       type="default,supl"
   />
 
-  <apn carrier="PC HOT mobile"
-      mcc="425"
-      mnc="07"
-      apn="pc.hotm"
-      type="dun"
-      authtype="0"
-  />
-
   <apn carrier="MMS HOT mobile"
       mcc="425"
       mnc="07"
@@ -26949,12 +26987,12 @@
       mcc="440"
       mnc="20"
       apn="plus.acs.jp"
-      user="plusw6q9tattkmpk"
-      password="msfbbam83bsdetxb"
-      mmsproxy="andmms.plusacs.ne.jp"
+      user="ym"
+      password="ym"
+      mmsproxy="andmms.plus.acs.ne.jp"
       mmsport="8080"
       mmsc="http://mms-s"
-      type="default,mms,supl"
+      type="default,mms,supl,hipri"
       authtype="2"
   />
 
@@ -27286,7 +27324,7 @@
       type="default,supl,mms"
   />
 
-  <apn carrier="one2free"
+  <apn carrier="csl"
       mcc="454"
       mnc="00"
       apn="mobile"
@@ -27300,7 +27338,7 @@
   <apn carrier="NWMOBILE"
       mcc="454"
       mnc="00"
-      apn="NWMOBILE"
+      apn="nwmobile"
       mmsproxy="192.168.59.61"
       mmsport="8080"
       mmsc="http://192.168.58.171:8002"
@@ -27319,7 +27357,7 @@
       type="default,supl,mms"
   />
 
-  <apn carrier="one2free"
+  <apn carrier="csl"
       mcc="454"
       mnc="02"
       apn="mobile"
@@ -27333,7 +27371,7 @@
   <apn carrier="NWMOBILE"
       mcc="454"
       mnc="02"
-      apn="NWMOBILE"
+      apn="nwmobile"
       mmsproxy="192.168.59.61"
       mmsport="8080"
       mmsc="http://192.168.58.171:8002"
@@ -27400,7 +27438,7 @@
       type="default,supl"
   />
 
-  <apn carrier="one2free"
+  <apn carrier="csl"
       mcc="454"
       mnc="10"
       apn="hkcsl"
@@ -27452,14 +27490,14 @@
       type="default,supl,mms"
   />
 
-  <apn carrier="PCCW-HKT"
+  <apn carrier="csl"
       mcc="454"
       mnc="16"
-      apn="pccw"
-      mmsc="http://3gmms.pccwmobile.com:8080/was"
+      apn="PCCW"
+      mmsc="http://mms.hkcsl.com:8080"
       mmsproxy="10.140.14.10"
       mmsport="8080"
-      authtype="1"
+      authtype="3"
       type="default,supl,mms"
   />
 
@@ -27485,7 +27523,7 @@
       type="default,supl,mms"
   />
 
-  <apn carrier="one2free"
+  <apn carrier="csl"
       mcc="454"
       mnc="18"
       apn="mobile"
@@ -27499,7 +27537,7 @@
   <apn carrier="NWMOBILE"
       mcc="454"
       mnc="18"
-      apn="NWMOBILE"
+      apn="nwmobile"
       mmsproxy="192.168.59.61"
       mmsport="8080"
       mmsc="http://192.168.58.171:8002"
@@ -27507,14 +27545,14 @@
       type="default,supl,mms"
   />
 
-  <apn carrier="PCCW-HKT"
+  <apn carrier="csl"
       mcc="454"
       mnc="19"
-      apn="pccw"
-      mmsc="http://3gmms.pccwmobile.com:8080/was"
+      apn="PCCW"
+      mmsc="http://mms.hkcsl.com:8080"
       mmsproxy="10.140.14.10"
       mmsport="8080"
-      authtype="1"
+      authtype="3"
       type="default,supl,mms"
   />
 
@@ -27857,13 +27895,6 @@
       type="mms"
   />
 
-  <apn carrier="VIBO-vibo"
-      mcc="466"
-      mnc="89"
-      apn="vibo"
-      type="default,supl"
-  />
-
   <apn carrier="T Star-internet"
       mcc="466"
       mnc="89"
@@ -27871,6 +27902,13 @@
       type="default,supl"
   />
 
+  <apn carrier="VIBO-vibo"
+      mcc="466"
+      mnc="89"
+      apn="vibo"
+      type="default,supl"
+  />
+
   <apn carrier="VIBOONE"
       mcc="466"
       mnc="89"
diff --git a/audio_policy.conf b/audio_policy.conf
index 6b815af..e9d431b 100644
--- a/audio_policy.conf
+++ b/audio_policy.conf
@@ -48,7 +48,7 @@
         flags AUDIO_OUTPUT_FLAG_DIRECT
       }
       compress_offload {
-        sampling_rates 8000|11025|16000|22050|32000|44100|48000
+        sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
         channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO
         formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2
         devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE
@@ -112,8 +112,8 @@
     inputs {
       usb_device {
         sampling_rates dynamic
-        channel_masks AUDIO_CHANNEL_IN_STEREO
-        formats AUDIO_FORMAT_PCM_16_BIT
+        channel_masks dynamic
+        formats dynamic
         devices AUDIO_DEVICE_IN_USB_DEVICE
       }
     }
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index 2ef3fd3..4dc5a3b 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -241,6 +241,11 @@
         return NO_INIT;
     }
 
+    if(m_bIsActive) {
+        ALOGD("%s: Attempt to start active channel", __func__);
+        return rc;
+    }
+
     for (int i = 0; i < m_numStreams; i++) {
         if (mStreams[i] != NULL) {
             mStreams[i]->start();
@@ -460,6 +465,7 @@
  *==========================================================================*/
 QCamera3RegularChannel::~QCamera3RegularChannel()
 {
+    mMemory.unregisterBuffers();
 }
 
 /*===========================================================================
@@ -741,11 +747,6 @@
     return &mMemory;
 }
 
-void QCamera3RegularChannel::putStreamBufs()
-{
-    mMemory.unregisterBuffers();
-}
-
 int QCamera3RegularChannel::kMaxBuffers = 7;
 
 QCamera3MetadataChannel::QCamera3MetadataChannel(uint32_t cam_handle,
@@ -1101,10 +1102,6 @@
     }
 
     m_postprocessor.stop();
-    rc = m_postprocessor.deinit();
-    if (rc != 0) {
-        ALOGE("De-init Postprocessor failed");
-    }
 
     rc |= QCamera3Channel::stop();
     return rc;
@@ -1113,6 +1110,11 @@
 QCamera3PicChannel::~QCamera3PicChannel()
 {
    stop();
+
+   int32_t rc = m_postprocessor.deinit();
+   if (rc != 0) {
+       ALOGE("De-init Postprocessor failed");
+   }
 }
 
 int32_t QCamera3PicChannel::initialize()
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.h b/camera/QCamera2/HAL3/QCamera3Channel.h
index a74650f..685cd39 100755
--- a/camera/QCamera2/HAL3/QCamera3Channel.h
+++ b/camera/QCamera2/HAL3/QCamera3Channel.h
@@ -139,7 +139,7 @@
                                             QCamera3Stream *stream);
 
     virtual QCamera3Memory *getStreamBufs(uint32_t len);
-    virtual void putStreamBufs();
+    virtual void putStreamBufs() {};
     mm_camera_buf_def_t* getInternalFormatBuffer(buffer_handle_t* buffer);
     virtual int32_t registerBuffer(buffer_handle_t *buffer);
 
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 639f26f..dd76459 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -56,6 +56,7 @@
 #define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX )
 
 #define EMPTY_PIPELINE_DELAY 2
+#define CAM_MAX_SYNC_LATENCY 4
 
 cam_capability_t *gCamCapability[MM_CAMERA_MAX_NUM_SENSORS];
 const camera_metadata_t *gStaticMetadata[MM_CAMERA_MAX_NUM_SENSORS];
@@ -140,6 +141,7 @@
 
 const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FACEDETECT_MODES_MAP[] = {
     { ANDROID_STATISTICS_FACE_DETECT_MODE_OFF,    CAM_FACE_DETECT_MODE_OFF     },
+    { ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE, CAM_FACE_DETECT_MODE_SIMPLE  },
     { ANDROID_STATISTICS_FACE_DETECT_MODE_FULL,   CAM_FACE_DETECT_MODE_FULL    }
 };
 
@@ -236,6 +238,7 @@
       mParameters(NULL),
       mPrevParameters(NULL),
       mLoopBackResult(NULL),
+      mFlush(false),
       mMinProcessedFrameDuration(0),
       mMinJpegFrameDuration(0),
       mMinRawFrameDuration(0),
@@ -1734,6 +1737,11 @@
 
     mPendingRequestsList.push_back(pendingRequest);
 
+    if (mFlush) {
+        pthread_mutex_unlock(&mMutex);
+        return NO_ERROR;
+    }
+
     // Notify metadata channel we receive a request
     mMetadataChannel->request(NULL, frameNumber);
 
@@ -1882,6 +1890,10 @@
 
     ALOGV("%s: Unblocking Process Capture Request", __func__);
 
+    pthread_mutex_lock(&mMutex);
+    mFlush = true;
+    pthread_mutex_unlock(&mMutex);
+
     memset(&result, 0, sizeof(camera3_capture_result_t));
 
     // Stop the Streams/Channels
@@ -2047,7 +2059,24 @@
     mPendingBuffersMap.mPendingBufferList.clear();
     ALOGV("%s: Cleared all the pending buffers ", __func__);
 
+    mFlush = false;
+
     mFirstRequest = true;
+
+    // Start the Streams/Channels
+    if (mMetadataChannel) {
+        /* If content of mStreamInfo is not 0, there is metadata stream */
+        mMetadataChannel->start();
+    }
+    for (List<stream_info_t *>::iterator it = mStreamInfo.begin();
+        it != mStreamInfo.end(); it++) {
+        QCamera3Channel *channel = (QCamera3Channel *)(*it)->stream->priv;
+        channel->start();
+    }
+    if (mSupportChannel) {
+        mSupportChannel->start();
+    }
+
     pthread_mutex_unlock(&mMutex);
     return 0;
 }
@@ -2141,31 +2170,25 @@
              int32_t faceIds[MAX_ROI];
              uint8_t faceScores[MAX_ROI];
              int32_t faceRectangles[MAX_ROI * 4];
-             int32_t faceLandmarks[MAX_ROI * 6];
-             int j = 0, k = 0;
+             int j = 0;
              for (int i = 0; i < numFaces; i++) {
                  faceIds[i] = faceDetectionInfo->faces[i].face_id;
                  faceScores[i] = faceDetectionInfo->faces[i].score;
                  convertToRegions(faceDetectionInfo->faces[i].face_boundary,
                          faceRectangles+j, -1);
-                 convertLandmarks(faceDetectionInfo->faces[i], faceLandmarks+k);
                  j+= 4;
-                 k+= 6;
              }
 
              if (numFaces <= 0) {
                 memset(faceIds, 0, sizeof(int32_t) * MAX_ROI);
                 memset(faceScores, 0, sizeof(uint8_t) * MAX_ROI);
                 memset(faceRectangles, 0, sizeof(int32_t) * MAX_ROI * 4);
-                memset(faceLandmarks, 0, sizeof(int32_t) * MAX_ROI * 6);
              }
 
              camMetadata.update(ANDROID_STATISTICS_FACE_IDS, faceIds, numFaces);
              camMetadata.update(ANDROID_STATISTICS_FACE_SCORES, faceScores, numFaces);
              camMetadata.update(ANDROID_STATISTICS_FACE_RECTANGLES,
                faceRectangles, numFaces*4);
-             camMetadata.update(ANDROID_STATISTICS_FACE_LANDMARKS,
-               faceLandmarks, numFaces*6);
             break;
             }
          case CAM_INTF_META_COLOR_CORRECT_MODE:{
@@ -2405,6 +2428,10 @@
              uint8_t fwk_faceDetectMode = (uint8_t)lookupFwkName(FACEDETECT_MODES_MAP,
                                                         sizeof(FACEDETECT_MODES_MAP)/sizeof(FACEDETECT_MODES_MAP[0]),
                                                         *faceDetectMode);
+             /* Downgrade to simple mode */
+             if (fwk_faceDetectMode == ANDROID_STATISTICS_FACE_DETECT_MODE_FULL) {
+                 fwk_faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE;
+             }
              camMetadata.update(ANDROID_STATISTICS_FACE_DETECT_MODE, &fwk_faceDetectMode, 1);
              break;
           }
@@ -3537,7 +3564,7 @@
 
     uint8_t availableFaceDetectModes[] = {
             ANDROID_STATISTICS_FACE_DETECT_MODE_OFF,
-            ANDROID_STATISTICS_FACE_DETECT_MODE_FULL };
+            ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE };
     staticInfo.update(ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
                       availableFaceDetectModes,
                       sizeof(availableFaceDetectModes));
@@ -3843,6 +3870,8 @@
     available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE;
     available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR;
     available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING;
+    available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS;
+    available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE;
     if (facingBack) {
         available_capabilities[available_capabilities_count++] = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW;
     }
@@ -3859,7 +3888,7 @@
     staticInfo.update(ANDROID_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP,
                       io_format_map, 0);
 
-    int32_t max_latency = (facingBack)? ANDROID_SYNC_MAX_LATENCY_PER_FRAME_CONTROL:ANDROID_SYNC_MAX_LATENCY_UNKNOWN;
+    int32_t max_latency = (facingBack)? ANDROID_SYNC_MAX_LATENCY_PER_FRAME_CONTROL:CAM_MAX_SYNC_LATENCY;
     staticInfo.update(ANDROID_SYNC_MAX_LATENCY,
                       &max_latency,
                       1);
@@ -4650,7 +4679,7 @@
     static const int32_t testpatternMode = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;
     settings.update(ANDROID_SENSOR_TEST_PATTERN_MODE, &testpatternMode, 1);
 
-    static const uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_FULL;
+    static const uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
     settings.update(ANDROID_STATISTICS_FACE_DETECT_MODE, &faceDetectMode, 1);
 
     static const uint8_t histogramMode = ANDROID_STATISTICS_HISTOGRAM_MODE_OFF;
@@ -4711,7 +4740,7 @@
     scaler_crop_region[3] = gCamCapability[mCameraId]->active_array_size.height;
     settings.update(ANDROID_SCALER_CROP_REGION, scaler_crop_region, 4);
 
-    static const uint8_t antibanding_mode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ;
+    static const uint8_t antibanding_mode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
     settings.update(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &antibanding_mode, 1);
 
     static const uint8_t vs_mode = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF;
@@ -4781,10 +4810,6 @@
     uint8_t blacklevel_lock = ANDROID_BLACK_LEVEL_LOCK_OFF;
     settings.update(ANDROID_BLACK_LEVEL_LOCK, &blacklevel_lock, 1);
 
-    /* face detect mode */
-    uint8_t facedetect_mode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
-    settings.update(ANDROID_STATISTICS_FACE_DETECT_MODE, &facedetect_mode, 1);
-
     //special defaults for manual template
     if (type == CAMERA3_TEMPLATE_MANUAL) {
         static const uint8_t manualControlMode = ANDROID_CONTROL_MODE_OFF;
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index 70244a7..2a5f7b4 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -274,6 +274,7 @@
     int32_t mCurrentRequestId;
     camera3_capture_result_t *mLoopBackResult;
     nsecs_t mLoopBackTimestamp;
+    bool mFlush;
 
     //mutex for serialized access to camera3_device_ops_t functions
     pthread_mutex_t mMutex;
diff --git a/camera/QCamera2/HAL3/QCamera3PostProc.cpp b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
index a529e04..d967516 100644
--- a/camera/QCamera2/HAL3/QCamera3PostProc.cpp
+++ b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
@@ -227,6 +227,12 @@
 {
     m_dataProcTh.sendCmd(CAMERA_CMD_TYPE_STOP_DATA_PROC, TRUE, TRUE);
 
+    if (m_pReprocChannel != NULL) {
+        m_pReprocChannel->stop();
+        delete m_pReprocChannel;
+        m_pReprocChannel = NULL;
+    }
+
     return NO_ERROR;
 }
 
@@ -1027,6 +1033,15 @@
             ALOGD("%s: start data proc", __func__);
             is_active = TRUE;
             needNewSess = TRUE;
+
+            pme->m_ongoingPPQ.init();
+            pme->m_inputJpegQ.init();
+            pme->m_inputPPQ.init();
+            pme->m_inputRawQ.init();
+            pme->m_inputMetaQ.init();
+            pme->m_ongoingJpegQ.init();
+            pme->m_jpegSettingsQ.init();
+
             break;
         case CAMERA_CMD_TYPE_STOP_DATA_PROC:
             {
diff --git a/camera/QCamera2/HAL3/QCamera3Stream.cpp b/camera/QCamera2/HAL3/QCamera3Stream.cpp
index 793aa00..035329f 100644
--- a/camera/QCamera2/HAL3/QCamera3Stream.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Stream.cpp
@@ -177,8 +177,7 @@
         mStreamInfoBuf(NULL),
         mStreamBufs(NULL),
         mBufDefs(NULL),
-        mChannel(channel),
-        m_bActive(false)
+        mChannel(channel)
 {
     mMemVtbl.user_data = this;
     mMemVtbl.get_bufs = get_bufs;
@@ -341,10 +340,9 @@
 int32_t QCamera3Stream::start()
 {
     int32_t rc = 0;
+
+    mDataQ.init();
     rc = mProcTh.launch(dataProcRoutine, this);
-    if (rc == NO_ERROR) {
-        m_bActive = true;
-    }
     return rc;
 }
 
@@ -363,7 +361,6 @@
 {
     int32_t rc = 0;
     rc = mProcTh.exit();
-    m_bActive = false;
     return rc;
 }
 
@@ -383,8 +380,7 @@
 {
     ALOGV("%s: E\n", __func__);
     int32_t rc;
-    if (m_bActive) {
-        mDataQ.enqueue((void *)frame);
+    if (mDataQ.enqueue((void *)frame)) {
         rc = mProcTh.sendCmd(CAMERA_CMD_TYPE_DO_NEXT_JOB, FALSE, FALSE);
     } else {
         ALOGD("%s: Stream thread is not active, no ops here", __func__);
diff --git a/camera/QCamera2/HAL3/QCamera3Stream.h b/camera/QCamera2/HAL3/QCamera3Stream.h
index aab2a30..0187efb 100644
--- a/camera/QCamera2/HAL3/QCamera3Stream.h
+++ b/camera/QCamera2/HAL3/QCamera3Stream.h
@@ -107,7 +107,6 @@
     cam_frame_len_offset_t mFrameLenOffset;
     cam_padding_info_t mPaddingInfo;
     QCamera3Channel *mChannel;
-    bool m_bActive; // if stream mProcTh is active
 
     static int32_t get_bufs(
                      cam_frame_len_offset_t *offset,
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index 6f039fb..dfd5c5c 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -36,7 +36,7 @@
 #include <inttypes.h>
 #include <media/msmb_camera.h>
 
-#define CAM_MAX_NUM_BUFS_PER_STREAM 24
+#define CAM_MAX_NUM_BUFS_PER_STREAM 64
 #define MAX_METADATA_PAYLOAD_SIZE 1024
 
 #define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
@@ -51,7 +51,7 @@
 #define MAX_STREAM_NUM_IN_BUNDLE 4
 #define MAX_NUM_STREAMS          8
 #define MAX_TEST_PATTERN_CNT     8
-#define MAX_AVAILABLE_CAPABILITIES 4
+#define MAX_AVAILABLE_CAPABILITIES 6
 
 #define GPS_PROCESSING_METHOD_SIZE 33
 
diff --git a/camera/QCamera2/util/QCameraQueue.cpp b/camera/QCamera2/util/QCameraQueue.cpp
index b4aac9c..d254169 100644
--- a/camera/QCamera2/util/QCameraQueue.cpp
+++ b/camera/QCamera2/util/QCameraQueue.cpp
@@ -51,6 +51,7 @@
     m_size = 0;
     m_dataFn = NULL;
     m_userData = NULL;
+    m_active = true;
 }
 
 /*===========================================================================
@@ -71,6 +72,7 @@
     m_size = 0;
     m_dataFn = data_rel_fn;
     m_userData = user_data;
+    m_active = true;
 }
 
 /*===========================================================================
@@ -89,6 +91,22 @@
 }
 
 /*===========================================================================
+ * FUNCTION   : init
+ *
+ * DESCRIPTION: Put the queue to active state (ready to enqueue and dequeue)
+ *
+ * PARAMETERS : None
+ *
+ * RETURN     : None
+ *==========================================================================*/
+void QCameraQueue::init()
+{
+    pthread_mutex_lock(&m_lock);
+    m_active = true;
+    pthread_mutex_unlock(&m_lock);
+}
+
+/*===========================================================================
  * FUNCTION   : isEmpty
  *
  * DESCRIPTION: return if the queue is empty or not
@@ -120,6 +138,7 @@
  *==========================================================================*/
 bool QCameraQueue::enqueue(void *data)
 {
+    bool rc;
     camera_q_node *node =
         (camera_q_node *)malloc(sizeof(camera_q_node));
     if (NULL == node) {
@@ -131,10 +150,16 @@
     node->data = data;
 
     pthread_mutex_lock(&m_lock);
-    cam_list_add_tail_node(&node->list, &m_head.list);
-    m_size++;
+    if (m_active) {
+        cam_list_add_tail_node(&node->list, &m_head.list);
+        m_size++;
+        rc = true;
+    } else {
+        free(node);
+        rc = false;
+    }
     pthread_mutex_unlock(&m_lock);
-    return true;
+    return rc;
 }
 
 /*===========================================================================
@@ -150,6 +175,7 @@
  *==========================================================================*/
 bool QCameraQueue::enqueueWithPriority(void *data)
 {
+    bool rc;
     camera_q_node *node =
         (camera_q_node *)malloc(sizeof(camera_q_node));
     if (NULL == node) {
@@ -161,16 +187,22 @@
     node->data = data;
 
     pthread_mutex_lock(&m_lock);
-    struct cam_list *p_next = m_head.list.next;
+    if (m_active) {
+        struct cam_list *p_next = m_head.list.next;
 
-    m_head.list.next = &node->list;
-    p_next->prev = &node->list;
-    node->list.next = p_next;
-    node->list.prev = &m_head.list;
+        m_head.list.next = &node->list;
+        p_next->prev = &node->list;
+        node->list.next = p_next;
+        node->list.prev = &m_head.list;
 
-    m_size++;
+        m_size++;
+        rc = true;
+    } else {
+        free(node);
+        rc = false;
+    }
     pthread_mutex_unlock(&m_lock);
-    return true;
+    return rc;
 }
 
 /*===========================================================================
@@ -192,16 +224,18 @@
     struct cam_list *pos = NULL;
 
     pthread_mutex_lock(&m_lock);
-    head = &m_head.list;
-    if (bFromHead) {
-        pos = head->next;
-    } else {
-        pos = head->prev;
-    }
-    if (pos != head) {
-        node = member_of(pos, camera_q_node, list);
-        cam_list_del_node(&node->list);
-        m_size--;
+    if (m_active) {
+        head = &m_head.list;
+        if (bFromHead) {
+            pos = head->next;
+        } else {
+            pos = head->prev;
+        }
+        if (pos != head) {
+            node = member_of(pos, camera_q_node, list);
+            cam_list_del_node(&node->list);
+            m_size--;
+        }
     }
     pthread_mutex_unlock(&m_lock);
 
@@ -229,25 +263,28 @@
     struct cam_list *pos = NULL;
 
     pthread_mutex_lock(&m_lock);
-    head = &m_head.list;
-    pos = head->next;
+    if (m_active) {
+        head = &m_head.list;
+        pos = head->next;
 
-    while(pos != head) {
-        node = member_of(pos, camera_q_node, list);
-        pos = pos->next;
-        cam_list_del_node(&node->list);
-        m_size--;
+        while(pos != head) {
+            node = member_of(pos, camera_q_node, list);
+            pos = pos->next;
+            cam_list_del_node(&node->list);
+            m_size--;
 
-        if (NULL != node->data) {
-            if (m_dataFn) {
-                m_dataFn(node->data, m_userData);
+            if (NULL != node->data) {
+                if (m_dataFn) {
+                    m_dataFn(node->data, m_userData);
+                }
+                free(node->data);
             }
-            free(node->data);
-        }
-        free(node);
+            free(node);
 
+        }
+        m_size = 0;
+        m_active = false;
     }
-    m_size = 0;
     pthread_mutex_unlock(&m_lock);
 }
 
@@ -272,23 +309,25 @@
     }
 
     pthread_mutex_lock(&m_lock);
-    head = &m_head.list;
-    pos = head->next;
+    if (m_active) {
+        head = &m_head.list;
+        pos = head->next;
 
-    while(pos != head) {
-        node = member_of(pos, camera_q_node, list);
-        pos = pos->next;
-        if ( match(node->data, m_userData) ) {
-            cam_list_del_node(&node->list);
-            m_size--;
+        while(pos != head) {
+            node = member_of(pos, camera_q_node, list);
+            pos = pos->next;
+            if ( match(node->data, m_userData) ) {
+                cam_list_del_node(&node->list);
+                m_size--;
 
-            if (NULL != node->data) {
-                if (m_dataFn) {
-                    m_dataFn(node->data, m_userData);
+                if (NULL != node->data) {
+                    if (m_dataFn) {
+                        m_dataFn(node->data, m_userData);
+                    }
+                    free(node->data);
                 }
-                free(node->data);
+                free(node);
             }
-            free(node);
         }
     }
     pthread_mutex_unlock(&m_lock);
diff --git a/camera/QCamera2/util/QCameraQueue.h b/camera/QCamera2/util/QCameraQueue.h
index 6e2c759..c94e342 100644
--- a/camera/QCamera2/util/QCameraQueue.h
+++ b/camera/QCamera2/util/QCameraQueue.h
@@ -43,8 +43,11 @@
     QCameraQueue();
     QCameraQueue(release_data_fn data_rel_fn, void *user_data);
     virtual ~QCameraQueue();
+    void init();
     bool enqueue(void *data);
     bool enqueueWithPriority(void *data);
+    /* This call will put queue into uninitialized state.
+     * Need to call init() in order to use the queue again */
     void flush();
     void flushNodes(match_fn match);
     void* dequeue(bool bFromHead = true);
@@ -57,6 +60,7 @@
 
     camera_q_node m_head; // dummy head
     int m_size;
+    bool m_active;
     pthread_mutex_t m_lock;
     release_data_fn m_dataFn;
     void * m_userData;
diff --git a/device.mk b/device.mk
index eff60d7..a7b6d3d 100644
--- a/device.mk
+++ b/device.mk
@@ -113,11 +113,7 @@
 PRODUCT_COPY_FILES += \
     device/lge/hammerhead/spn-conf.xml:system/etc/spn-conf.xml
 
-# This device is xhdpi.  However the platform doesn't
-# currently contain all of the bitmaps at xhdpi density so
-# we do this little trick to fall back to the hdpi version
-# if the xhdpi doesn't exist.
-PRODUCT_AAPT_CONFIG := normal hdpi xhdpi xxhdpi
+PRODUCT_AAPT_CONFIG := normal
 PRODUCT_AAPT_PREF_CONFIG := xxhdpi
 
 PRODUCT_CHARACTERISTICS := nosdcard
@@ -277,6 +273,15 @@
     ro.qti.sensors.smgr_mag_cal_en=true \
     ro.qti.sensors.step_detector=true \
     ro.qti.sensors.step_counter=true
+    ro.qti.sensors.tap=false \
+    ro.qti.sensors.facing=false \
+    ro.qti.sensors.tilt=false \
+    ro.qti.sensors.amd=false \
+    ro.qti.sensors.rmd=false \
+    ro.qti.sensors.vmd=false \
+    ro.qti.sensors.pedometer=false \
+    ro.qti.sensors.pam=false \
+    ro.qti.sdk.sensors.gestures=false
 
 # Enable some debug messages by default
 PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/dumpstate/dumpstate.c b/dumpstate/dumpstate.c
index a33cf47..9c336dd 100644
--- a/dumpstate/dumpstate.c
+++ b/dumpstate/dumpstate.c
@@ -25,4 +25,5 @@
     dump_file("SMD Log", "/d/ipc_logging/smd/log");
     dump_file("SMD PKT Log", "/d/ipc_logging/smd_pkt/log");
     dump_file("IPC Router Log", "/d/ipc_logging/ipc_router/log");
+    run_command("ION HEAPS", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for f in $(ls /d/ion/*); do echo $f; cat $f; done", NULL);
 };
diff --git a/kernel-headers/sound/compress_params.h b/kernel-headers/sound/compress_params.h
index f4e520c..adb147c 100644
--- a/kernel-headers/sound/compress_params.h
+++ b/kernel-headers/sound/compress_params.h
@@ -22,242 +22,267 @@
 #define MAX_NUM_CODEC_DESCRIPTORS 32
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MAX_NUM_BITRATES 32
+#define MAX_NUM_SAMPLE_RATES 32
 #define MAX_NUM_FRAMES_PER_BUFFER 1
 #define COMPRESSED_META_DATA_MODE 0x10
-#define META_DATA_LEN_BYTES 36
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define META_DATA_LEN_BYTES 36
 #define Q6_AC3_DECODER 0x00010BF6
 #define Q6_EAC3_DECODER 0x00010C3C
 #define Q6_DTS 0x00010D88
-#define Q6_DTS_LBR 0x00010DBB
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define Q6_DTS_LBR 0x00010DBB
 #define SND_AUDIOCODEC_PCM ((__u32) 0x00000001)
 #define SND_AUDIOCODEC_MP3 ((__u32) 0x00000002)
 #define SND_AUDIOCODEC_AMR ((__u32) 0x00000003)
-#define SND_AUDIOCODEC_AMRWB ((__u32) 0x00000004)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCODEC_AMRWB ((__u32) 0x00000004)
 #define SND_AUDIOCODEC_AMRWBPLUS ((__u32) 0x00000005)
 #define SND_AUDIOCODEC_AAC ((__u32) 0x00000006)
 #define SND_AUDIOCODEC_WMA ((__u32) 0x00000007)
-#define SND_AUDIOCODEC_REAL ((__u32) 0x00000008)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCODEC_REAL ((__u32) 0x00000008)
 #define SND_AUDIOCODEC_VORBIS ((__u32) 0x00000009)
 #define SND_AUDIOCODEC_FLAC ((__u32) 0x0000000A)
 #define SND_AUDIOCODEC_IEC61937 ((__u32) 0x0000000B)
-#define SND_AUDIOCODEC_G723_1 ((__u32) 0x0000000C)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCODEC_G723_1 ((__u32) 0x0000000C)
 #define SND_AUDIOCODEC_G729 ((__u32) 0x0000000D)
 #define SND_AUDIOCODEC_AC3 ((__u32) 0x0000000E)
 #define SND_AUDIOCODEC_DTS ((__u32) 0x0000000F)
-#define SND_AUDIOCODEC_AC3_PASS_THROUGH ((__u32) 0x00000010)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCODEC_AC3_PASS_THROUGH ((__u32) 0x00000010)
 #define SND_AUDIOCODEC_WMA_PRO ((__u32) 0x00000011)
 #define SND_AUDIOCODEC_DTS_PASS_THROUGH ((__u32) 0x00000012)
 #define SND_AUDIOCODEC_DTS_LBR ((__u32) 0x00000013)
-#define SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK ((__u32) 0x00000014)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SND_AUDIOCODEC_MAX SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK
+#define SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK ((__u32) 0x00000014)
+#define SND_AUDIOCODEC_PASS_THROUGH ((__u32) 0x00000015)
+#define SND_AUDIOCODEC_MP2 ((__u32) 0x00000016)
+#define SND_AUDIOCODEC_DTS_LBR_PASS_THROUGH ((__u32) 0x00000017)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCODEC_EAC3 ((__u32) 0x00000018)
+#define SND_AUDIOCODEC_MAX SND_AUDIOCODEC_EAC3
 #define SND_AUDIOPROFILE_PCM ((__u32) 0x00000001)
 #define SND_AUDIOCHANMODE_MP3_MONO ((__u32) 0x00000001)
-#define SND_AUDIOCHANMODE_MP3_STEREO ((__u32) 0x00000002)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOCHANMODE_MP3_STEREO ((__u32) 0x00000002)
 #define SND_AUDIOCHANMODE_MP3_JOINTSTEREO ((__u32) 0x00000004)
 #define SND_AUDIOCHANMODE_MP3_DUAL ((__u32) 0x00000008)
 #define SND_AUDIOPROFILE_AMR ((__u32) 0x00000001)
-#define SND_AUDIOMODE_AMR_DTX_OFF ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_AMR_DTX_OFF ((__u32) 0x00000001)
 #define SND_AUDIOMODE_AMR_VAD1 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_AMR_VAD2 ((__u32) 0x00000004)
 #define SND_AUDIOSTREAMFORMAT_UNDEFINED ((__u32) 0x00000000)
-#define SND_AUDIOSTREAMFORMAT_CONFORMANCE ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOSTREAMFORMAT_CONFORMANCE ((__u32) 0x00000001)
 #define SND_AUDIOSTREAMFORMAT_IF1 ((__u32) 0x00000002)
 #define SND_AUDIOSTREAMFORMAT_IF2 ((__u32) 0x00000004)
 #define SND_AUDIOSTREAMFORMAT_FSF ((__u32) 0x00000008)
-#define SND_AUDIOSTREAMFORMAT_RTPPAYLOAD ((__u32) 0x00000010)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOSTREAMFORMAT_RTPPAYLOAD ((__u32) 0x00000010)
 #define SND_AUDIOSTREAMFORMAT_ITU ((__u32) 0x00000020)
 #define SND_AUDIOPROFILE_AMRWB ((__u32) 0x00000001)
 #define SND_AUDIOMODE_AMRWB_DTX_OFF ((__u32) 0x00000001)
-#define SND_AUDIOMODE_AMRWB_VAD1 ((__u32) 0x00000002)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_AMRWB_VAD1 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_AMRWB_VAD2 ((__u32) 0x00000004)
 #define SND_AUDIOPROFILE_AMRWBPLUS ((__u32) 0x00000001)
 #define SND_AUDIOPROFILE_AAC ((__u32) 0x00000001)
-#define SND_AUDIOMODE_AAC_MAIN ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_AAC_MAIN ((__u32) 0x00000001)
 #define SND_AUDIOMODE_AAC_LC ((__u32) 0x00000002)
 #define SND_AUDIOMODE_AAC_SSR ((__u32) 0x00000004)
 #define SND_AUDIOMODE_AAC_LTP ((__u32) 0x00000008)
-#define SND_AUDIOMODE_AAC_HE ((__u32) 0x00000010)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_AAC_HE ((__u32) 0x00000010)
 #define SND_AUDIOMODE_AAC_SCALABLE ((__u32) 0x00000020)
 #define SND_AUDIOMODE_AAC_ERLC ((__u32) 0x00000040)
 #define SND_AUDIOMODE_AAC_LD ((__u32) 0x00000080)
-#define SND_AUDIOMODE_AAC_HE_PS ((__u32) 0x00000100)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_AAC_HE_PS ((__u32) 0x00000100)
 #define SND_AUDIOMODE_AAC_HE_MPS ((__u32) 0x00000200)
 #define SND_AUDIOSTREAMFORMAT_MP2ADTS ((__u32) 0x00000001)
 #define SND_AUDIOSTREAMFORMAT_MP4ADTS ((__u32) 0x00000002)
-#define SND_AUDIOSTREAMFORMAT_MP4LOAS ((__u32) 0x00000004)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOSTREAMFORMAT_MP4LOAS ((__u32) 0x00000004)
 #define SND_AUDIOSTREAMFORMAT_MP4LATM ((__u32) 0x00000008)
 #define SND_AUDIOSTREAMFORMAT_ADIF ((__u32) 0x00000010)
 #define SND_AUDIOSTREAMFORMAT_MP4FF ((__u32) 0x00000020)
-#define SND_AUDIOSTREAMFORMAT_RAW ((__u32) 0x00000040)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOSTREAMFORMAT_RAW ((__u32) 0x00000040)
 #define SND_AUDIOPROFILE_WMA7 ((__u32) 0x00000001)
 #define SND_AUDIOPROFILE_WMA8 ((__u32) 0x00000002)
 #define SND_AUDIOPROFILE_WMA9 ((__u32) 0x00000004)
-#define SND_AUDIOPROFILE_WMA10 ((__u32) 0x00000008)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOPROFILE_WMA10 ((__u32) 0x00000008)
 #define SND_AUDIOMODE_WMA_LEVEL1 ((__u32) 0x00000001)
 #define SND_AUDIOMODE_WMA_LEVEL2 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_WMA_LEVEL3 ((__u32) 0x00000004)
-#define SND_AUDIOMODE_WMA_LEVEL4 ((__u32) 0x00000008)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_WMA_LEVEL4 ((__u32) 0x00000008)
 #define SND_AUDIOMODE_WMAPRO_LEVELM0 ((__u32) 0x00000010)
 #define SND_AUDIOMODE_WMAPRO_LEVELM1 ((__u32) 0x00000020)
 #define SND_AUDIOMODE_WMAPRO_LEVELM2 ((__u32) 0x00000040)
-#define SND_AUDIOMODE_WMAPRO_LEVELM3 ((__u32) 0x00000080)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_WMAPRO_LEVELM3 ((__u32) 0x00000080)
 #define SND_AUDIOSTREAMFORMAT_WMA_ASF ((__u32) 0x00000001)
 #define SND_AUDIOSTREAMFORMAT_WMA_NOASF_HDR ((__u32) 0x00000002)
 #define SND_AUDIOPROFILE_REALAUDIO ((__u32) 0x00000001)
-#define SND_AUDIOMODE_REALAUDIO_G2 ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_REALAUDIO_G2 ((__u32) 0x00000001)
 #define SND_AUDIOMODE_REALAUDIO_8 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_REALAUDIO_10 ((__u32) 0x00000004)
 #define SND_AUDIOMODE_REALAUDIO_SURROUND ((__u32) 0x00000008)
-#define SND_AUDIOPROFILE_VORBIS ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOPROFILE_VORBIS ((__u32) 0x00000001)
 #define SND_AUDIOMODE_VORBIS ((__u32) 0x00000001)
 #define SND_AUDIOPROFILE_FLAC ((__u32) 0x00000001)
 #define SND_AUDIOMODE_FLAC_LEVEL0 ((__u32) 0x00000001)
-#define SND_AUDIOMODE_FLAC_LEVEL1 ((__u32) 0x00000002)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_FLAC_LEVEL1 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_FLAC_LEVEL2 ((__u32) 0x00000004)
 #define SND_AUDIOMODE_FLAC_LEVEL3 ((__u32) 0x00000008)
 #define SND_AUDIOMODE_FLAC_LEVEL4 ((__u32) 0x00000010)
-#define SND_AUDIOMODE_FLAC_LEVEL5 ((__u32) 0x00000020)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_FLAC_LEVEL5 ((__u32) 0x00000020)
 #define SND_AUDIOMODE_FLAC_LEVEL6 ((__u32) 0x00000040)
 #define SND_AUDIOMODE_FLAC_LEVEL7 ((__u32) 0x00000080)
 #define SND_AUDIOMODE_FLAC_LEVEL8 ((__u32) 0x00000100)
-#define SND_AUDIOSTREAMFORMAT_FLAC ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOSTREAMFORMAT_FLAC ((__u32) 0x00000001)
 #define SND_AUDIOSTREAMFORMAT_FLAC_OGG ((__u32) 0x00000002)
 #define SND_AUDIOPROFILE_IEC61937 ((__u32) 0x00000001)
 #define SND_AUDIOPROFILE_IEC61937_SPDIF ((__u32) 0x00000002)
-#define SND_AUDIOMODE_IEC_REF_STREAM_HEADER ((__u32) 0x00000000)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_IEC_REF_STREAM_HEADER ((__u32) 0x00000000)
 #define SND_AUDIOMODE_IEC_LPCM ((__u32) 0x00000001)
 #define SND_AUDIOMODE_IEC_AC3 ((__u32) 0x00000002)
 #define SND_AUDIOMODE_IEC_MPEG1 ((__u32) 0x00000004)
-#define SND_AUDIOMODE_IEC_MP3 ((__u32) 0x00000008)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_IEC_MP3 ((__u32) 0x00000008)
 #define SND_AUDIOMODE_IEC_MPEG2 ((__u32) 0x00000010)
 #define SND_AUDIOMODE_IEC_AACLC ((__u32) 0x00000020)
 #define SND_AUDIOMODE_IEC_DTS ((__u32) 0x00000040)
-#define SND_AUDIOMODE_IEC_ATRAC ((__u32) 0x00000080)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_IEC_ATRAC ((__u32) 0x00000080)
 #define SND_AUDIOMODE_IEC_SACD ((__u32) 0x00000100)
 #define SND_AUDIOMODE_IEC_EAC3 ((__u32) 0x00000200)
 #define SND_AUDIOMODE_IEC_DTS_HD ((__u32) 0x00000400)
-#define SND_AUDIOMODE_IEC_MLP ((__u32) 0x00000800)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_IEC_MLP ((__u32) 0x00000800)
 #define SND_AUDIOMODE_IEC_DST ((__u32) 0x00001000)
 #define SND_AUDIOMODE_IEC_WMAPRO ((__u32) 0x00002000)
 #define SND_AUDIOMODE_IEC_REF_CXT ((__u32) 0x00004000)
-#define SND_AUDIOMODE_IEC_HE_AAC ((__u32) 0x00008000)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_IEC_HE_AAC ((__u32) 0x00008000)
 #define SND_AUDIOMODE_IEC_HE_AAC2 ((__u32) 0x00010000)
 #define SND_AUDIOMODE_IEC_MPEG_SURROUND ((__u32) 0x00020000)
 #define SND_AUDIOPROFILE_G723_1 ((__u32) 0x00000001)
-#define SND_AUDIOMODE_G723_1_ANNEX_A ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_G723_1_ANNEX_A ((__u32) 0x00000001)
 #define SND_AUDIOMODE_G723_1_ANNEX_B ((__u32) 0x00000002)
 #define SND_AUDIOMODE_G723_1_ANNEX_C ((__u32) 0x00000004)
 #define SND_AUDIOPROFILE_G729 ((__u32) 0x00000001)
-#define SND_AUDIOMODE_G729_ANNEX_A ((__u32) 0x00000001)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SND_AUDIOMODE_G729_ANNEX_A ((__u32) 0x00000001)
 #define SND_AUDIOMODE_G729_ANNEX_B ((__u32) 0x00000002)
 #define SND_RATECONTROLMODE_CONSTANTBITRATE ((__u32) 0x00000001)
 #define SND_RATECONTROLMODE_VARIABLEBITRATE ((__u32) 0x00000002)
-struct snd_enc_wma {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_enc_wma {
  __u32 super_block_align;
  __u32 bits_per_sample;
  __u32 channelmask;
- __u32 encodeopt;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 encodeopt;
  __u32 encodeopt1;
  __u32 encodeopt2;
 };
-struct snd_enc_vorbis {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_enc_vorbis {
  __s32 quality;
  __u32 managed;
  __u32 max_bit_rate;
- __u32 min_bit_rate;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 min_bit_rate;
  __u32 downmix;
 };
 struct snd_enc_real {
- __u32 quant_bits;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 quant_bits;
  __u32 start_region;
  __u32 num_regions;
 };
-struct snd_enc_flac {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_enc_flac {
  __u32 num;
  __u32 gain;
 };
-struct snd_enc_generic {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_enc_generic {
  __u32 bw;
  __s32 reserved[15];
 };
-union snd_codec_options {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_dec_dts {
+ __u32 modelIdLength;
+ __u8 *modelId;
+};
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct snd_dec_ddp {
+ __u32 params_length;
+ __u8 *params;
+ __u32 params_id[18];
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 params_value[18];
+};
+union snd_codec_options {
  struct snd_enc_wma wma;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  struct snd_enc_vorbis vorbis;
  struct snd_enc_real real;
  struct snd_enc_flac flac;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  struct snd_enc_generic generic;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ struct snd_dec_dts dts;
+ struct snd_dec_ddp ddp;
 };
 struct snd_codec_desc {
- __u32 max_ch;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- __u32 sample_rates;
+ __u32 max_ch;
+ __u32 sample_rates[MAX_NUM_SAMPLE_RATES];
+ __u32 num_sample_rates;
  __u32 bit_rate[MAX_NUM_BITRATES];
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 num_bitrates;
  __u32 rate_control;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 profiles;
  __u32 modes;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 formats;
  __u32 min_buffer;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 reserved[15];
 };
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct snd_codec {
  __u32 id;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 ch_in;
  __u32 ch_out;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 sample_rate;
  __u32 bit_rate;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 rate_control;
  __u32 profile;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 level;
  __u32 ch_mode;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  __u32 format;
  __u32 align;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 transcode_dts;
+ struct snd_dec_dts dts;
  union snd_codec_options options;
  __u32 reserved[3];
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/original-kernel-headers/sound/compress_params.h b/original-kernel-headers/sound/compress_params.h
index 866c0f9..71ada15 100644
--- a/original-kernel-headers/sound/compress_params.h
+++ b/original-kernel-headers/sound/compress_params.h
@@ -55,6 +55,7 @@
 #define MAX_NUM_CODECS 32
 #define MAX_NUM_CODEC_DESCRIPTORS 32
 #define MAX_NUM_BITRATES 32
+#define MAX_NUM_SAMPLE_RATES 32
 
 /* compressed TX */
 #define MAX_NUM_FRAMES_PER_BUFFER 1
@@ -86,7 +87,11 @@
 #define SND_AUDIOCODEC_DTS_PASS_THROUGH      ((__u32) 0x00000012)
 #define SND_AUDIOCODEC_DTS_LBR               ((__u32) 0x00000013)
 #define SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK ((__u32) 0x00000014)
-#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK
+#define SND_AUDIOCODEC_PASS_THROUGH          ((__u32) 0x00000015)
+#define SND_AUDIOCODEC_MP2                   ((__u32) 0x00000016)
+#define SND_AUDIOCODEC_DTS_LBR_PASS_THROUGH  ((__u32) 0x00000017)
+#define SND_AUDIOCODEC_EAC3                  ((__u32) 0x00000018)
+#define SND_AUDIOCODEC_MAX  SND_AUDIOCODEC_EAC3
 
 /*
  * Profile and modes are listed with bit masks. This allows for a
@@ -332,18 +337,30 @@
 	__u32 bw;	/* encoder bandwidth */
 	__s32 reserved[15];
 };
-
+struct snd_dec_dts {
+	__u32 modelIdLength;
+	__u8 *modelId;
+};
+struct snd_dec_ddp {
+	__u32 params_length;
+	__u8 *params;
+	__u32 params_id[18];
+	__u32 params_value[18];
+};
 union snd_codec_options {
 	struct snd_enc_wma wma;
 	struct snd_enc_vorbis vorbis;
 	struct snd_enc_real real;
 	struct snd_enc_flac flac;
 	struct snd_enc_generic generic;
+	struct snd_dec_dts dts;
+	struct snd_dec_ddp ddp;
 };
 
 /** struct snd_codec_desc - description of codec capabilities
  * @max_ch: Maximum number of audio channels
- * @sample_rates: Sampling rates in Hz, use SNDRV_PCM_RATE_xxx for this
+ * @sample_rates: Sampling rates in Hz, use values like 48000 for this
+ * @num_sample_rates: Number of valid values in sample_rates array
  * @bit_rate: Indexed array containing supported bit rates
  * @num_bitrates: Number of valid values in bit_rate array
  * @rate_control: value is specified by SND_RATECONTROLMODE defines.
@@ -365,7 +382,8 @@
 
 struct snd_codec_desc {
 	__u32 max_ch;
-	__u32 sample_rates;
+	__u32 sample_rates[MAX_NUM_SAMPLE_RATES];
+	__u32 num_sample_rates;
 	__u32 bit_rate[MAX_NUM_BITRATES];
 	__u32 num_bitrates;
 	__u32 rate_control;
@@ -383,7 +401,8 @@
  * @ch_out: Number of output channels. In case of contradiction between
  *		this field and the channelMode field, the channelMode field
  *		overrides.
- * @sample_rate: Audio sample rate of input data
+ * @sample_rate: Audio sample rate of input data in Hz, use values like 48000
+ *             for this.
  * @bit_rate: Bitrate of encoded data. May be ignored by decoders
  * @rate_control: Encoding rate control. See SND_RATECONTROLMODE defines.
  *               Encoders may rely on profiles for quality levels.
@@ -412,6 +431,8 @@
 	__u32 ch_mode;
 	__u32 format;
 	__u32 align;
+	__u32 transcode_dts;
+	struct snd_dec_dts dts;
 	union snd_codec_options options;
 	__u32 reserved[3];
 };
diff --git a/overlay/frameworks/base/core/res/res/values-mcc310-mnc260/config.xml b/overlay/frameworks/base/core/res/res/values-mcc310-mnc260/config.xml
index d1d5c71..6edde35 100644
--- a/overlay/frameworks/base/core/res/res/values-mcc310-mnc260/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc310-mnc260/config.xml
@@ -37,6 +37,8 @@
          TETHER_DUN_APN.  Value is a comma separated series of strings:
          "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
          note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
-    <string translatable="false" name="config_tether_apndata">T-Mobile Tethering,pcweb.tmobile.com,,,,,,,,,310,260,,DUN</string>
+    <string-array translatable="false" name="config_tether_apndata">
+        <item>T-Mobile Tethering,pcweb.tmobile.com,,,,,,,,,310,260,,DUN</item>
+    </string-array>
 
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc530-mnc05/config.xml b/overlay/frameworks/base/core/res/res/values-mcc530-mnc05/config.xml
index 8bfac39..e04b2de 100644
--- a/overlay/frameworks/base/core/res/res/values-mcc530-mnc05/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc530-mnc05/config.xml
@@ -20,6 +20,10 @@
 <!-- These resources are around just to allow their values to be customized
      for different hardware and product builds. -->
 <resources>
+    <!-- If this value is true, The mms content-disposition field is supported correctly.
+         If false, Content-disposition fragments are ignored -->
+    <bool name="config_mms_content_disposition_support">false</bool>
+
     <!-- MMS user agent prolfile url -->
     <string name="config_mms_user_agent_profile_url" translatable="false">http://gsm.lge.com/html/gsm/Nexus5-M6.xml</string>
 </resources>
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc02/config.xml b/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc02/config.xml
deleted file mode 100644
index 2c8b820..0000000
--- a/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc02/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
-     for different hardware and product builds. -->
-<resources>
-    <!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
-    <bool name="config_show4GForLTE">true</bool>
-</resources>
-
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc03/config.xml b/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc03/config.xml
deleted file mode 100644
index 2c8b820..0000000
--- a/overlay/frameworks/base/packages/SystemUI/res/values-mcc260-mnc03/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
-     for different hardware and product builds. -->
-<resources>
-    <!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
-    <bool name="config_show4GForLTE">true</bool>
-</resources>
-
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values-mcc262-mnc07/config.xml b/overlay/frameworks/base/packages/SystemUI/res/values-mcc262-mnc07/config.xml
deleted file mode 100644
index 2c8b820..0000000
--- a/overlay/frameworks/base/packages/SystemUI/res/values-mcc262-mnc07/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
-     for different hardware and product builds. -->
-<resources>
-    <!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
-    <bool name="config_show4GForLTE">true</bool>
-</resources>
-
diff --git a/spn-conf.xml b/spn-conf.xml
index fe0b98d..f9f2443 100644
--- a/spn-conf.xml
+++ b/spn-conf.xml
@@ -22,8 +22,6 @@
     <spnOverride numeric="40554" spn="airtel"/>
     <spnOverride numeric="40555" spn="airtel"/>
     <spnOverride numeric="40556" spn="airtel"/>
-    <spnOverride numeric="42502" spn="Cellcom"/>
-    <spnOverride numeric="42503" spn="Pelephone"/>
     <spnOverride numeric="42507" spn="HOT mobile"/>
     <spnOverride numeric="42508" spn="Golan Telecom"/>
     <spnOverride numeric="42510" spn="Orange-IL"/>