/*
// Copyright (c) 2014 Intel Corporation 
//
// 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.
*/
#include <common/utils/HwcTrace.h>
#include <platforms/merrifield_plus/PlatfExternalDevice.h>
#include <ips/common/VsyncControl.h>
#include <ips/common/BlankControl.h>
#include <ips/common/HdcpControl.h>


namespace android {
namespace intel {

PlatfExternalDevice::PlatfExternalDevice(Hwcomposer& hwc,
                                       DisplayPlaneManager& dpm)
    : ExternalDevice(hwc, dpm)
{
    CTRACE();
}

PlatfExternalDevice::~PlatfExternalDevice()
{
    CTRACE();
}

IVsyncControl* PlatfExternalDevice::createVsyncControl()
{
    return new VsyncControl();
}

IBlankControl* PlatfExternalDevice::createBlankControl()
{
    return new BlankControl();
}

IHdcpControl* PlatfExternalDevice::createHdcpControl()
{
    return new HdcpControl();
}

} // namespace intel
} // namespace android


