diff --git a/display/Android.bp b/display/Android.bp
new file mode 100644
index 0000000..5dd3c29
--- /dev/null
+++ b/display/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "config/1.0",
+]
diff --git a/display/config/1.0/Android.bp b/display/config/1.0/Android.bp
new file mode 100644
index 0000000..6921126
--- /dev/null
+++ b/display/config/1.0/Android.bp
@@ -0,0 +1,60 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "vendor.display.config@1.0_hal",
+    srcs: [
+        "IDisplayConfig.hal",
+    ],
+}
+
+genrule {
+    name: "vendor.display.config@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hidl:system/libhidl/transport -rvendor:vendor/qcom/opensource/interfaces vendor.display.config@1.0",
+    srcs: [
+        ":vendor.display.config@1.0_hal",
+    ],
+    out: [
+        "vendor/display/config/1.0/DisplayConfigAll.cpp",
+    ],
+}
+
+genrule {
+    name: "vendor.display.config@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hidl:system/libhidl/transport -rvendor:vendor/qcom/opensource/interfaces vendor.display.config@1.0",
+    srcs: [
+        ":vendor.display.config@1.0_hal",
+    ],
+    out: [
+        "vendor/display/config/1.0/IDisplayConfig.h",
+        "vendor/display/config/1.0/IHwDisplayConfig.h",
+        "vendor/display/config/1.0/BnHwDisplayConfig.h",
+        "vendor/display/config/1.0/BpHwDisplayConfig.h",
+        "vendor/display/config/1.0/BsDisplayConfig.h",
+    ],
+}
+
+cc_library_shared {
+    name: "vendor.display.config@1.0",
+    generated_sources: ["vendor.display.config@1.0_genc++"],
+    generated_headers: ["vendor.display.config@1.0_genc++_headers"],
+    export_generated_headers: ["vendor.display.config@1.0_genc++_headers"],
+    vendor: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/display/config/1.0/IDisplayConfig.hal b/display/config/1.0/IDisplayConfig.hal
new file mode 100644
index 0000000..87925c8
--- /dev/null
+++ b/display/config/1.0/IDisplayConfig.hal
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2017 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.
+*/
+
+package vendor.display.config@1.0;
+
+interface IDisplayConfig {
+    enum DisplayType : int32_t {
+        INVALID = -1,
+
+        DISPLAY_PRIMARY = 0,
+        DISPLAY_EXTERNAL = 1,
+        DISPLAY_VIRTUAL = 2,
+    };
+
+    enum DisplayExternalStatus : int32_t {
+        INVALID = -1,
+
+        EXTERNAL_OFFLINE = 0,
+        EXTERNAL_ONLINE = 1,
+        EXTERNAL_PAUSE = 2,
+        EXTERNAL_RESUME = 3,
+    };
+
+    enum DisplayDynRefreshRateOp : int32_t {
+        INVALID = -1,
+
+        DISABLE_METADATA_DYN_REFRESH_RATE = 0,
+        ENABLE_METADATA_DYN_REFRESH_RATE = 1,
+        SET_BINDER_DYN_REFRESH_RATE = 2,
+    };
+
+    enum DisplayPortType : int32_t {
+        INVALID = -1,
+
+        DISPLAY_PORT_DEFAULT = 0,
+        DISPLAY_PORT_DSI = 1,
+        DISPLAY_PORT_DTV = 2,
+        DISPLAY_PORT_WRITEBACK = 3,
+        DISPLAY_PORT_LVDS = 4,
+        DISPLAY_PORT_EDP = 5,
+        DISPLAY_PORT_DP = 6,
+    };
+
+    struct DisplayAttributes {
+        uint32_t vsyncPeriod;
+        uint32_t xRes;
+        uint32_t yRes;
+        float xDpi;
+        float yDpi;
+        DisplayPortType panelType;
+        bool isYuv;
+    };
+
+    struct DisplayHDRCapabilities {
+        vec<int32_t> supportedHdrTypes;
+        float maxLuminance;
+        float maxAvgLuminance;
+        float minLuminance;
+    };
+
+    /*
+     * Returns connection status of an external display.
+     *
+     * @return true when connected, false when disconnected.
+     */
+    @callflow(next="*")
+    isDisplayConnected(DisplayType dpy) generates (int32_t error, bool status);
+
+    /*
+     * Sets the secondary display status (pause/resume/offline) etc.
+     *
+     * @param dpy display type.
+     * @param status next status to be set.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    setSecondayDisplayStatus(DisplayType dpy,
+                             DisplayExternalStatus status)
+                  generates (int32_t error);
+
+    /*
+     * Enable/Disable/Set refresh rate dynamically
+     *
+     * @param op operation code defined in DisplayDynRefreshRateOp.
+     * @param refreshRate refresh rate value.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    configureDynRefeshRate(DisplayDynRefreshRateOp op,
+                           uint32_t refreshRate)
+                generates (int32_t error);
+
+    /*
+     * Returns the number of configuration given display can support.
+     *
+     * @param dpy display type.
+     *
+     * @return error is NONE upon success.
+     *
+     * @param count number of configurations.
+     */
+    @callflow(next="*")
+    getConfigCount(DisplayType dpy) generates (int32_t error, uint32_t count);
+
+    /*
+     * Returns the index of config that is current set for the display.
+     *
+     * @param dpy display type.
+     *
+     * @return error is NONE upon success.
+     *
+     * @param config config index.
+     */
+    @callflow(next="*")
+    getActiveConfig(DisplayType dpy) generates (int32_t error, uint32_t config);
+
+    /*
+     * Set a new display configuration pointed by the index.
+     *
+     * @param dpy display type.
+     * @param config config index.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    setActiveConfig(DisplayType dpy, uint32_t config) generates (int32_t error);
+
+    /*
+     * Returns the attributes for the specified config for the display.
+     *
+     * @param configIndex config index.
+     * @param dpy display type.
+     *
+     * @return error is NONE upon success.
+     *
+     * @param attributes display attributes.
+     */
+    @callflow(next="*")
+    getDisplayAttributes(uint32_t configIndex,
+                         DisplayType dpy)
+              generates (int32_t error,
+                         DisplayAttributes attributes);
+
+    /*
+     * Sets the panel brightness of the primary display.
+     *
+     * @param level brightness level.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    setPanelBrightness(uint32_t level) generates (int32_t error);
+
+    /*
+     * Sets the panel brightness of the primary display.
+     *
+     * @return level brightness level.
+     */
+    @callflow(next="*")
+    getPanelBrightness() generates (int32_t error, uint32_t level);
+
+    /*
+     * Indicates display about a change in minimum encryption level.
+     *
+     * @param dpy display type.
+     * @param min_enc_level encryption level.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    minHdcpEncryptionLevelChanged(DisplayType dpy,
+                                  uint32_t min_enc_level)
+                      generates  (int32_t error);
+
+    /*
+     * Requests display to recompose and invalidate the display pipeline.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    refreshScreen() generates (int32_t error);
+
+    /*
+     * Enable/Disable partial update.
+     *
+     * @param dpy display type.
+     * @param enable enable/disable.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    controlPartialUpdate(DisplayType dpy,
+                         bool enable)
+              generates (int32_t error);
+
+    /*
+     * Toggle screen update.
+     *
+     * @param on Pause display and drop incoming draw cycles if true.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    toggleScreenUpdate(bool on) generates (int32_t error);
+
+    /*
+     * Set idle timeout value for video mode panels.
+     *
+     * @param value Idle timeout value.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    setIdleTimeout(uint32_t value) generates (int32_t error);
+
+    /*
+     * Returns HDR capabilities for the specified display.
+     *
+     * @param dpy display type.
+     *
+     * @return error is NONE upon success.
+     *
+     * @param caps HDR capabilities.
+     */
+    @callflow(next="*")
+    getHDRCapabilities(DisplayType dpy)
+            generates (int32_t error,
+                       DisplayHDRCapabilities caps);
+
+    /*
+     * Sets camera application start/stop status.
+     *
+     * @param on Camera is started if true.
+     *
+     * @return error is NONE upon success.
+     */
+    @callflow(next="*")
+    setCameraLaunchStatus(uint32_t on) generates (int32_t error);
+
+    /*
+     * Check bandwidth transaction status.
+     *
+     * @return status true if transaction is still pending.
+     */
+    @callflow(next="*")
+    displayBWTransactionPending() generates (int32_t error, bool status);
+};
diff --git a/display/config/Android.bp b/display/config/Android.bp
new file mode 100644
index 0000000..36d9b01
--- /dev/null
+++ b/display/config/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+    "1.0",
+]
\ No newline at end of file
