Merge the android-9.0.0_r55 release tag
Android 9.0.0 Release 55 (6197209)

* tag 'android-9.0.0_r55':
  Fix accidental implicit fallthroughs

Change-Id: I08d8c31484b620c67be00c47c5bca68afe5c31a0
diff --git a/include/hardware/audio_amplifier.h b/include/hardware/audio_amplifier.h
new file mode 100644
index 0000000..26e58a1
--- /dev/null
+++ b/include/hardware/audio_amplifier.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2015, The CyanogenMod 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.
+ */
+
+#ifndef CM_AUDIO_AMPLIFIER_INTERFACE_H
+#define CM_AUDIO_AMPLIFIER_INTERFACE_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include <hardware/audio.h>
+#include <hardware/hardware.h>
+
+#include <system/audio.h>
+
+__BEGIN_DECLS
+
+#define AMPLIFIER_HARDWARE_MODULE_ID "audio_amplifier"
+
+#define AMPLIFIER_HARDWARE_INTERFACE "audio_amplifier_hw_if"
+
+#define AMPLIFIER_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1)
+
+#define AMPLIFIER_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION(1, 0)
+#define AMPLIFIER_DEVICE_API_VERSION_2_0 HARDWARE_DEVICE_API_VERSION(2, 0)
+#define AMPLIFIER_DEVICE_API_VERSION_2_1 HARDWARE_DEVICE_API_VERSION(2, 1)
+#define AMPLIFIER_DEVICE_API_VERSION_CURRENT AMPLIFIER_DEVICE_API_VERSION_2_1
+
+struct str_parms;
+
+typedef struct amplifier_device {
+    /**
+     * Common methods of the amplifier device. This *must* be the first member
+     * of amplifier_device as users of this structure will cast a hw_device_t
+     * to amplifier_device pointer in contexts where it's known
+     * the hw_device_t references a amplifier_device.
+     */
+    struct hw_device_t common;
+
+    /**
+     * Notify amplifier device of current input devices
+     *
+     * This function should handle only input devices.
+     */
+    int (*set_input_devices)(struct amplifier_device *device, uint32_t devices);
+
+    /**
+     * Notify amplifier device of current output devices
+     *
+     * This function should handle only output devices.
+     */
+    int (*set_output_devices)(struct amplifier_device *device, uint32_t devices);
+
+    /**
+     * Notify amplifier device of output device enable/disable
+     *
+     * This function should handle only output devices.
+     */
+    int (*enable_output_devices)(struct amplifier_device *device,
+            uint32_t devices, bool enable);
+
+    /**
+     * Notify amplifier device of input device enable/disable
+     *
+     * This function should handle only input devices.
+     */
+    int (*enable_input_devices)(struct amplifier_device *device,
+            uint32_t devices, bool enable);
+
+    /**
+     * Notify amplifier device about current audio mode
+     */
+    int (*set_mode)(struct amplifier_device *device, audio_mode_t mode);
+
+    /**
+     * Notify amplifier device that an output stream has started
+     */
+    int (*output_stream_start)(struct amplifier_device *device,
+            struct audio_stream_out *stream, bool offload);
+
+    /**
+     * Notify amplifier device that an input stream has started
+     */
+    int (*input_stream_start)(struct amplifier_device *device,
+            struct audio_stream_in *stream);
+
+    /**
+     * Notify amplifier device that an output stream has stopped
+     */
+    int (*output_stream_standby)(struct amplifier_device *device,
+            struct audio_stream_out *stream);
+
+    /**
+     * Notify amplifier device that an input stream has stopped
+     */
+    int (*input_stream_standby)(struct amplifier_device *device,
+            struct audio_stream_in *stream);
+
+    /**
+     * set/get audio device parameters.
+     */
+    int (*set_parameters)(struct amplifier_device *device,
+        struct str_parms *parms);
+
+    /**
+     * set/get output stream parameters.
+     */
+    int (*out_set_parameters)(struct amplifier_device *device,
+        struct str_parms *parms);
+
+    /**
+     * set/get input stream parameters.
+     */
+    int (*in_set_parameters)(struct amplifier_device *device,
+        struct str_parms *parms);
+} amplifier_device_t;
+
+typedef struct amplifier_module {
+    /**
+     * Common methods of the amplifier module. This *must* be the first member
+     * of amplifier_module as users of this structure will cast a hw_module_t
+     * to amplifier_module pointer in contexts where it's known
+     * the hw_module_t references a amplifier_module.
+     */
+    struct hw_module_t common;
+} amplifier_module_t;
+
+/** convenience API for opening and closing a supported device */
+
+static inline int amplifier_device_open(const struct hw_module_t *module,
+        struct amplifier_device **device)
+{
+    return module->methods->open(module, AMPLIFIER_HARDWARE_INTERFACE,
+            (struct hw_device_t **) device);
+}
+
+static inline int amplifier_device_close(struct amplifier_device *device)
+{
+    return device->common.close(&device->common);
+}
+
+__END_DECLS
+
+#endif  // CM_AUDIO_AMPLIFIER_INTERFACE_H
diff --git a/include/hardware/display_defs.h b/include/hardware/display_defs.h
new file mode 100644
index 0000000..0ec356f
--- /dev/null
+++ b/include/hardware/display_defs.h
@@ -0,0 +1,79 @@
+/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ANDROID_INCLUDE_DISPLAY_DEFS_H
+#define ANDROID_INCLUDE_DISPLAY_DEFS_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+
+#include <hardware/hwcomposer.h>
+
+__BEGIN_DECLS
+
+/* Will need to update below enums if hwcomposer_defs.h is updated */
+
+/* Extended events for hwc_methods::eventControl() */
+enum {
+    HWC_EVENT_ORIENTATION             = HWC_EVENT_VSYNC + 1
+};
+
+
+/* Extended hwc_layer_t::compositionType values */
+enum {
+    /* this layer will be handled in the HWC, using a blit engine */
+    HWC_BLIT                          = 0xFF
+};
+
+/* Extended hwc_layer_t::flags values
+ * Flags are set by SurfaceFlinger and read by the HAL
+ */
+enum {
+    /*
+     * HWC_SCREENSHOT_ANIMATOR_LAYER is set by surfaceflinger to indicate
+     * that this layer is a screenshot animating layer. HWC uses this
+     * info to disable rotation animation on External Display
+     */
+    HWC_SCREENSHOT_ANIMATOR_LAYER     = 0x00000004
+};
+
+/* This enum represents different types of 3D mode supported. This definition
+ * is maintained by HWC and exposed to its clients.
+ */
+enum {
+    HWC_S3DMODE_NONE = 0,
+    HWC_S3DMODE_LR,
+    HWC_S3DMODE_RL,
+    HWC_S3DMODE_TB,
+    HWC_S3DMODE_FP,
+    HWC_S3DMODE_MAX,
+};
+
+__END_DECLS
+
+#endif /* ANDROID_INCLUDE_DISPLAY_DEFS_H*/
diff --git a/modules/audio/Android.bp b/modules/audio/Android.bp
index a7467c2..940a536 100644
--- a/modules/audio/Android.bp
+++ b/modules/audio/Android.bp
@@ -61,3 +61,16 @@
     ],
     cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"],
 }
+
+// The stub audio amplifier HAL module that can be used as a skeleton for
+// new implementations.
+cc_library_shared {
+    name: "audio_amplifier.default",
+    relative_install_path: "hw",
+    proprietary: true,
+    srcs: ["audio_amplifier.c"],
+    shared_libs: [
+        "liblog",
+    ],
+    cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"],
+}
diff --git a/modules/audio/audio_amplifier.c b/modules/audio/audio_amplifier.c
new file mode 100644
index 0000000..c0d840f
--- /dev/null
+++ b/modules/audio/audio_amplifier.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod 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.
+ */
+
+#define LOG_TAG "amplifier_default"
+//#define LOG_NDEBUG 0
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include <cutils/log.h>
+#include <cutils/str_parms.h>
+
+#include <hardware/audio_amplifier.h>
+#include <hardware/hardware.h>
+
+static int amp_set_input_devices(amplifier_device_t *device, uint32_t devices)
+{
+    return 0;
+}
+
+static int amp_set_output_devices(amplifier_device_t *device, uint32_t devices)
+{
+    return 0;
+}
+
+static int amp_enable_output_devices(amplifier_device_t *device,
+        uint32_t devices, bool enable)
+{
+    return 0;
+}
+
+static int amp_enable_input_devices(amplifier_device_t *device,
+        uint32_t devices, bool enable)
+{
+    return 0;
+}
+
+static int amp_set_mode(amplifier_device_t *device, audio_mode_t mode)
+{
+    return 0;
+}
+
+static int amp_output_stream_start(amplifier_device_t *device,
+        struct audio_stream_out *stream, bool offload)
+{
+    return 0;
+}
+
+static int amp_input_stream_start(amplifier_device_t *device,
+        struct audio_stream_in *stream)
+{
+    return 0;
+}
+
+static int amp_output_stream_standby(amplifier_device_t *device,
+        struct audio_stream_out *stream)
+{
+    return 0;
+}
+
+static int amp_input_stream_standby(amplifier_device_t *device,
+        struct audio_stream_in *stream)
+{
+    return 0;
+}
+
+static int amp_set_parameters(struct amplifier_device *device,
+        struct str_parms *parms)
+{
+    return 0;
+}
+
+static int amp_out_set_parameters(struct amplifier_device *device,
+        struct str_parms *parms)
+{
+    return 0;
+}
+
+static int amp_in_set_parameters(struct amplifier_device *device,
+        struct str_parms *parms)
+{
+    return 0;
+}
+
+static int amp_dev_close(hw_device_t *device)
+{
+    if (device)
+        free(device);
+
+    return 0;
+}
+
+static int amp_module_open(const hw_module_t *module, const char *name,
+        hw_device_t **device)
+{
+    if (strcmp(name, AMPLIFIER_HARDWARE_INTERFACE)) {
+        ALOGE("%s:%d: %s does not match amplifier hardware interface name\n",
+                __func__, __LINE__, name);
+        return -ENODEV;
+    }
+
+    amplifier_device_t *amp_dev = calloc(1, sizeof(amplifier_device_t));
+    if (!amp_dev) {
+        ALOGE("%s:%d: Unable to allocate memory for amplifier device\n",
+                __func__, __LINE__);
+        return -ENOMEM;
+    }
+
+    amp_dev->common.tag = HARDWARE_DEVICE_TAG;
+    amp_dev->common.module = (hw_module_t *) module;
+    amp_dev->common.version = HARDWARE_DEVICE_API_VERSION(1, 0);
+    amp_dev->common.close = amp_dev_close;
+
+    amp_dev->set_input_devices = amp_set_input_devices;
+    amp_dev->set_output_devices = amp_set_output_devices;
+    amp_dev->enable_output_devices = amp_enable_output_devices;
+    amp_dev->enable_input_devices = amp_enable_input_devices;
+    amp_dev->set_mode = amp_set_mode;
+    amp_dev->output_stream_start = amp_output_stream_start;
+    amp_dev->input_stream_start = amp_input_stream_start;
+    amp_dev->output_stream_standby = amp_output_stream_standby;
+    amp_dev->input_stream_standby = amp_input_stream_standby;
+    amp_dev->set_parameters = amp_set_parameters;
+    amp_dev->out_set_parameters = amp_out_set_parameters;
+    amp_dev->in_set_parameters = amp_in_set_parameters;
+
+    *device = (hw_device_t *) amp_dev;
+
+    return 0;
+}
+
+static struct hw_module_methods_t hal_module_methods = {
+    .open = amp_module_open,
+};
+
+amplifier_module_t HAL_MODULE_INFO_SYM = {
+    .common = {
+        .tag = HARDWARE_MODULE_TAG,
+        .module_api_version = AMPLIFIER_MODULE_API_VERSION_0_1,
+        .hal_api_version = HARDWARE_HAL_API_VERSION,
+        .id = AMPLIFIER_HARDWARE_MODULE_ID,
+        .name = "Default audio amplifier HAL",
+        .author = "The CyanogenMod Open Source Project",
+        .methods = &hal_module_methods,
+    },
+};