16a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul/* 26a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Copyright (C) 2015 The Android Open Source Project 36a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * 46a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Licensed under the Apache License, Version 2.0 (the "License"); 56a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * you may not use this file except in compliance with the License. 66a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * You may obtain a copy of the License at 76a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * 86a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * http://www.apache.org/licenses/LICENSE-2.0 96a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * 106a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Unless required by applicable law or agreed to in writing, software 116a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * distributed under the License is distributed on an "AS IS" BASIS, 126a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * See the License for the specific language governing permissions and 146a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * limitations under the License. 156a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul */ 166a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 17877be974a2d4fc518700be8ffe803a50cb716eadSean Paul#define LOG_TAG "hwc-drm-crtc" 18877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 196a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmcrtc.h" 206a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmresources.h" 216a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 226a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <stdint.h> 236a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <xf86drmMode.h> 246a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 25877be974a2d4fc518700be8ffe803a50cb716eadSean Paul#include <cutils/log.h> 26877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 276a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulnamespace android { 286a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 29877be974a2d4fc518700be8ffe803a50cb716eadSean PaulDrmCrtc::DrmCrtc(DrmResources *drm, drmModeCrtcPtr c, unsigned pipe) 30877be974a2d4fc518700be8ffe803a50cb716eadSean Paul : drm_(drm), 31877be974a2d4fc518700be8ffe803a50cb716eadSean Paul id_(c->crtc_id), 326a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul pipe_(pipe), 336a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul display_(-1), 346a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul x_(c->x), 356a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul y_(c->y), 366a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul width_(c->width), 376a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul height_(c->height), 386a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul mode_(&c->mode), 395f9339cc2d9206bdaea047fef4e1d06d2911c81bSean Paul mode_valid_(c->mode_valid) { 406a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 416a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 42877be974a2d4fc518700be8ffe803a50cb716eadSean Paulint DrmCrtc::Init() { 43877be974a2d4fc518700be8ffe803a50cb716eadSean Paul int ret = drm_->GetCrtcProperty(*this, "ACTIVE", &active_property_); 44877be974a2d4fc518700be8ffe803a50cb716eadSean Paul if (ret) { 45877be974a2d4fc518700be8ffe803a50cb716eadSean Paul ALOGE("Failed to get ACTIVE property"); 46877be974a2d4fc518700be8ffe803a50cb716eadSean Paul return ret; 47877be974a2d4fc518700be8ffe803a50cb716eadSean Paul } 48877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 49877be974a2d4fc518700be8ffe803a50cb716eadSean Paul ret = drm_->GetCrtcProperty(*this, "MODE_ID", &mode_property_); 50877be974a2d4fc518700be8ffe803a50cb716eadSean Paul if (ret) { 51877be974a2d4fc518700be8ffe803a50cb716eadSean Paul ALOGE("Failed to get MODE_ID property"); 52877be974a2d4fc518700be8ffe803a50cb716eadSean Paul return ret; 53877be974a2d4fc518700be8ffe803a50cb716eadSean Paul } 54877be974a2d4fc518700be8ffe803a50cb716eadSean Paul return 0; 55877be974a2d4fc518700be8ffe803a50cb716eadSean Paul} 56877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 576a55e9fb8e16c63c2e42bde31814f963205f722dSean Pauluint32_t DrmCrtc::id() const { 586a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul return id_; 596a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 606a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 616a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulunsigned DrmCrtc::pipe() const { 626a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul return pipe_; 636a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 646a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 656a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulint DrmCrtc::display() const { 666a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul return display_; 676a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 686a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 696a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulvoid DrmCrtc::set_display(int display) { 706a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul display_ = display; 716a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 726a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul 736a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulbool DrmCrtc::can_bind(int display) const { 746a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul return display_ == -1 || display_ == display; 756a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 76877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 77877be974a2d4fc518700be8ffe803a50cb716eadSean Paulconst DrmProperty &DrmCrtc::active_property() const { 78877be974a2d4fc518700be8ffe803a50cb716eadSean Paul return active_property_; 79877be974a2d4fc518700be8ffe803a50cb716eadSean Paul} 80877be974a2d4fc518700be8ffe803a50cb716eadSean Paul 81877be974a2d4fc518700be8ffe803a50cb716eadSean Paulconst DrmProperty &DrmCrtc::mode_property() const { 82877be974a2d4fc518700be8ffe803a50cb716eadSean Paul return mode_property_; 83877be974a2d4fc518700be8ffe803a50cb716eadSean Paul} 846a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul} 85