ALOGE("Could not get CRTC_ID property\n");
return ret;
}
+ ret = drm_->GetConnectorProperty(*this, "EDID", &edid_property_);
+ if (ret) {
+ ALOGE("Could not get EDID property\n");
+ return ret;
+ }
if (writeback()) {
ret = drm_->GetConnectorProperty(*this, "WRITEBACK_PIXEL_FORMATS",
&writeback_pixel_formats_);
return crtc_id_property_;
}
+const DrmProperty &DrmConnector::edid_property() const {
+ return edid_property_;
+}
+
const DrmProperty &DrmConnector::writeback_pixel_formats() const {
return writeback_pixel_formats_;
}
return *num_types ? HWC2::Error::HasChanges : HWC2::Error::None;
}
+HWC2::Error DrmHwcTwo::HwcDisplay::GetDisplayIdentificationData(
+ uint8_t *outPort, uint32_t *outDataSize, uint8_t *outData) {
+ supported(__func__);
+
+ drmModePropertyBlobPtr blob;
+ int ret;
+ uint64_t blob_id;
+
+ std::tie(ret, blob_id) = connector_->edid_property().value();
+ if (ret) {
+ ALOGE("Failed to get edid property value.");
+ return HWC2::Error::Unsupported;
+ }
+
+ blob = drmModeGetPropertyBlob(drm_->fd(), blob_id);
+
+ outData = static_cast<uint8_t *>(blob->data);
+
+ *outPort = connector_->id();
+ *outDataSize = blob->length;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error DrmHwcTwo::HwcDisplay::GetDisplayCapabilities(
+ uint32_t *outNumCapabilities, uint32_t *outCapabilities) {
+ unsupported(__func__, outCapabilities);
+
+ if (outNumCapabilities == NULL) {
+ return HWC2::Error::BadParameter;
+ }
+
+ *outNumCapabilities = 0;
+
+ return HWC2::Error::None;
+}
+
HWC2::Error DrmHwcTwo::HwcLayer::SetCursorPosition(int32_t x, int32_t y) {
supported(__func__);
cursor_x_ = x;
return ToHook<HWC2_PFN_VALIDATE_DISPLAY>(
DisplayHook<decltype(&HwcDisplay::ValidateDisplay),
&HwcDisplay::ValidateDisplay, uint32_t *, uint32_t *>);
+ case HWC2::FunctionDescriptor::GetDisplayIdentificationData:
+ return ToHook<HWC2_PFN_GET_DISPLAY_IDENTIFICATION_DATA>(
+ DisplayHook<decltype(&HwcDisplay::GetDisplayIdentificationData),
+ &HwcDisplay::GetDisplayIdentificationData, uint8_t *,
+ uint32_t *, uint8_t *>);
+ case HWC2::FunctionDescriptor::GetDisplayCapabilities:
+ return ToHook<HWC2_PFN_GET_DISPLAY_CAPABILITIES>(
+ DisplayHook<decltype(&HwcDisplay::GetDisplayCapabilities),
+ &HwcDisplay::GetDisplayCapabilities, uint32_t *,
+ uint32_t *>);
// Layer functions
case HWC2::FunctionDescriptor::SetCursorPosition:
const DrmProperty &dpms_property() const;
const DrmProperty &crtc_id_property() const;
+ const DrmProperty &edid_property() const;
const DrmProperty &writeback_pixel_formats() const;
const DrmProperty &writeback_fb_id() const;
const DrmProperty &writeback_out_fence() const;
DrmProperty dpms_property_;
DrmProperty crtc_id_property_;
+ DrmProperty edid_property_;
DrmProperty writeback_pixel_formats_;
DrmProperty writeback_fb_id_;
DrmProperty writeback_out_fence_;
uint32_t *num_elements, hwc2_layer_t *layers,
int32_t *layer_requests);
HWC2::Error GetDisplayType(int32_t *type);
+ HWC2::Error GetDisplayIdentificationData(uint8_t *outPort,
+ uint32_t *outDataSize,
+ uint8_t *outData);
+ HWC2::Error GetDisplayCapabilities(uint32_t *outNumCapabilities,
+ uint32_t *outCapabilities);
HWC2::Error GetDozeSupport(int32_t *support);
HWC2::Error GetHdrCapabilities(uint32_t *num_types, int32_t *types,
float *max_luminance,