diff --git a/include/hardware/vehicle_camera.h b/include/hardware/vehicle_camera.h
deleted file mode 100644
index c288796..0000000
--- a/include/hardware/vehicle_camera.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-#ifndef ANDROID_VEHICLE_CAMERA_INTERFACE_H
-#define ANDROID_VEHICLE_CAMERA_INTERFACE_H
-
-#include <errno.h>
-#include <stdint.h>
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-#include <hardware/hardware.h>
-#include <cutils/native_handle.h>
-#include <system/window.h>
-
-__BEGIN_DECLS
-
-/*****************************************************************************/
-
-#define VEHICLE_CAMERA_HEADER_VERSION          1
-#define VEHICLE_CAMERA_MODULE_API_VERSION_1_0  HARDWARE_MODULE_API_VERSION(1, 0)
-#define VEHICLE_CAMERA_DEVICE_API_VERSION_1_0  HARDWARE_DEVICE_API_VERSION_2(1, 0, VEHICLE_CAMERA_HEADER_VERSION)
-
-/**
- * Vehicle Camera to provide interfaces for controlling cameras
- */
-
-/**
- * The id of this module
- */
-#define VEHICLE_CAMERA_HARDWARE_MODULE_ID  "vehicle_camera"
-
-/**
- *  Name of the vehicle device to open.  Extend this list as
- *  more cameras are added.  Each camera defined in vehicle_camera_type_t
- *  shall have a string defined for it.
- */
-#define VEHICLE_CAMERA_RVC_DEVICE       "vehicle_camera_rvc_device"
-
-/**
- * Each camera on the car shall be enumerated
- */
-typedef enum {
-    VEHICLE_CAMERA_RVC = 1,
-} vehicle_camera_type_t;
-
-/**
- * Describes the current state of camera device
- */
-typedef struct {
-    uint32_t overlay_on;
-    uint32_t camera_on;
-} vehicle_camera_state_t;
-
-/**
- * Bitmask of features supported by a camera module
- */
-typedef enum {
-    VEHICLE_CAMERA_CONFIG_FLAG_ANDROID_OVERLAY_SUPPORT      = 0x1,
-    VEHICLE_CAMERA_CONFIG_FLAG_CAMERA_CROP_SUPPORT          = 0x2,
-    VEHICLE_CAMERA_CONFIG_FLAG_CAMERA_POSITIONING_SUPPORT   = 0x4
-} vehicle_camera_config_flag;
-
-typedef struct {
-    uint32_t capabilites_flags;
-    uint32_t camera_width;
-    uint32_t camera_height;
-    uint32_t display_width;
-    uint32_t display_height;
-} vehicle_camera_cap_t;
-
-/************************************************************************************/
-
-/**
- * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
- * and the fields of this data structure must begin with hw_module_t
- * followed by module specific information.
- */
-typedef struct {
-    struct hw_module_t common;
-    /**
-     * Queries the HW for the cameras installed on the vehicle
-     * @param num_cameras - number of camera devices available.  If
-     *                    0 is returned, an error has occurred and
-     *                    the return pointer shall be NULL.
-     * @return pointer to an array of vehicle_camera_type_t to
-     *         denote which cameras are installed.  This pointer is
-     *         only valid while the vehicle hal is loaded.  If the
-     *         pointer is NULL, then an error has occurred and
-     *         num_cameras shall be 0.
-     */
-    const uint32_t * (*get_camera_device_list)(uint32_t *num_cameras);
-} vehicle_camera_module_t;
-
-
-typedef struct vehicle_camera_device_t {
-    struct hw_device_t common;
-
-    uint32_t camera_type;
-
-    /**
-     * Returns the capabilities of this camera.
-     * @param device - device handle
-     * @param cap - pointer to capabilities flags being returned
-     * @return 0 on success
-     *          -EPERM if device is invalid or not initialized
-     */
-    int (*get_capabilities)(struct vehicle_camera_device_t *device, vehicle_camera_cap_t *cap);
-
-    /**
-     * Gets the current camera crop settings.
-     * @param device - device handle
-     * @param rect - current camera crop settings
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     *          -errno on error
-     */
-    int (*get_camera_crop)(struct vehicle_camera_device_t *device, android_native_rect_t *rect);
-
-    /**
-     * Sets the camera crop.
-     * @param device - device handle
-     * @param rect - area of camera input to crop.  Must fit within
-     *             camera width and height from camera capabilities.
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     *          -errno on error
-     */
-    int (*set_camera_crop)(struct vehicle_camera_device_t *device, const android_native_rect_t *rect);
-
-    /**
-     * Gets position of the camera on the display.
-     * @param device - device handle
-     * @param rect - area of display the camera will appear when on
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     *          -errno on error
-     */
-    int (*get_camera_position)(struct vehicle_camera_device_t *device, android_native_rect_t *rect);
-
-    /**
-     * Sets position of the camera on the display.
-     * @param device - device handle
-     * @param rect - area of display the camera will appear when on.
-     *             Must fit within display width and height from
-     *             camera capabilities.
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     *          -errno on error
-     */
-    int (*set_camera_position)(struct vehicle_camera_device_t *device, const android_native_rect_t *rect);
-
-    /**
-     * Gets the current camera state.
-     * @param device - device handle
-     * @param state - last setting for the camera
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     */
-    int (*get_camera_state)(struct vehicle_camera_device_t *device, vehicle_camera_state_t *state);
-
-    /**
-     * Sets the camera state.
-     * @param device - device handle
-     * @param state - desired setting for the camera
-     * @return 0 on success
-     *          -EPERM if device is not initialized
-     *          -errno on error
-     */
-    int (*set_camera_state)(struct vehicle_camera_device_t *device, const vehicle_camera_state_t *state);
-} vehicle_camera_device_t;
-
-__END_DECLS
-
-#endif  // ANDROID_VEHICLE_CAMERA_INTERFACE_H
