merge in jb-mr2-release history after reset to jb-mr2-dev
diff --git a/include/camera/ICameraServiceListener.h b/include/camera/ICameraServiceListener.h
index 207116a..88860dd 100644
--- a/include/camera/ICameraServiceListener.h
+++ b/include/camera/ICameraServiceListener.h
@@ -28,11 +28,30 @@
 {
 public:
 
+    /**
+     * Initial status will be transmitted with onStatusChange immediately
+     * after this listener is added to the service listener list.
+     *
+     * Allowed transitions:
+     *
+     *     (Any)               -> NOT_PRESENT
+     *     NOT_PRESENT         -> PRESENT
+     *     NOT_PRESENT         -> ENUMERATING
+     *     ENUMERATING         -> PRESENT
+     *     PRESENT             -> AVAILABLE
+     *     AVAILABLE           -> NOT_AVAILABLE
+     *     NOT_AVAILABLE       -> AVAILABLE
+     *
+     * A state will never immediately transition back to itself.
+     */
     enum Status {
         // Device physically unplugged
-        STATUS_PRESENT          = CAMERA_DEVICE_STATUS_PRESENT,
-        // Device physically re-plugged
         STATUS_NOT_PRESENT      = CAMERA_DEVICE_STATUS_NOT_PRESENT,
+        // Device physically has been plugged in
+        STATUS_PRESENT          = CAMERA_DEVICE_STATUS_PRESENT,
+        // Device physically has been plugged in
+        //   but it will not be connect-able until enumeration is complete
+        STATUS_ENUMERATING      = CAMERA_DEVICE_STATUS_ENUMERATING,
 
         // Camera can be used exclusively
         STATUS_AVAILABLE        = 0x80000000,
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp
index 056271d..d3adbdc 100644
--- a/services/camera/libcameraservice/Camera2Client.cpp
+++ b/services/camera/libcameraservice/Camera2Client.cpp
@@ -1255,7 +1255,7 @@
             ANDROID_STATISTICS_FACE_DETECT_MODE_OFF) {
         ALOGE("%s: Camera %d: Face detection not supported",
                 __FUNCTION__, mCameraId);
-        return INVALID_OPERATION;
+        return BAD_VALUE;
     }
     if (l.mParameters.enableFaceDetect) return OK;
 
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp
index 859e2e9..d13fe8b 100644
--- a/services/camera/libcameraservice/camera2/Parameters.cpp
+++ b/services/camera/libcameraservice/camera2/Parameters.cpp
@@ -534,6 +534,8 @@
         if (!noSceneModes) {
             params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES,
                     supportedSceneModes);
+        } else {
+            params.remove(CameraParameters::KEY_SCENE_MODE);
         }
     }