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