minui: Add API to support multiple connectors detection

Add API to support multiple connectors detection

Bug: 227468133
Test: check log in recovery mode
Change-Id: I18c5e0f373a29b153aab038bd289eed18847f2af
This commit is contained in:
Weizhung Ding 2022-07-19 16:34:43 +08:00
parent 266e0ce537
commit afd0a1b666
7 changed files with 20 additions and 1 deletions

View file

@ -502,3 +502,7 @@ void gr_fb_blank(bool blank, int index) {
void gr_rotate(GRRotation rot) { void gr_rotate(GRRotation rot) {
rotation = rot; rotation = rot;
} }
bool gr_has_multiple_connectors() {
return gr_backend->HasMultipleConnectors();
}

View file

@ -40,8 +40,11 @@ class MinuiBackend {
// Blank (or unblank) the specific screen. // Blank (or unblank) the specific screen.
virtual void Blank(bool blank, DrmConnector index) = 0; virtual void Blank(bool blank, DrmConnector index) = 0;
// Return true if the device supports multiple connectors.
virtual bool HasMultipleConnectors() = 0;
// Device cleanup when drawing is done. // Device cleanup when drawing is done.
virtual ~MinuiBackend() {}; virtual ~MinuiBackend() = default;
}; };
#endif // _GRAPHICS_H_ #endif // _GRAPHICS_H_

View file

@ -200,6 +200,10 @@ void MinuiBackendDrm::Blank(bool blank, DrmConnector index) {
} }
} }
bool MinuiBackendDrm::HasMultipleConnectors() {
return (drm[DRM_SEC].GRSurfaceDrms[0] && drm[DRM_SEC].GRSurfaceDrms[1]);
}
static drmModeCrtc* find_crtc_for_connector(int fd, drmModeRes* resources, static drmModeCrtc* find_crtc_for_connector(int fd, drmModeRes* resources,
drmModeConnector* connector) { drmModeConnector* connector) {
// Find the encoder. If we already have one, just use it. // Find the encoder. If we already have one, just use it.

View file

@ -60,6 +60,7 @@ class MinuiBackendDrm : public MinuiBackend {
GRSurface* Flip() override; GRSurface* Flip() override;
void Blank(bool) override; void Blank(bool) override;
void Blank(bool blank, DrmConnector index) override; void Blank(bool blank, DrmConnector index) override;
bool HasMultipleConnectors() override;
private: private:
void DrmDisableCrtc(int drm_fd, drmModeCrtc* crtc); void DrmDisableCrtc(int drm_fd, drmModeCrtc* crtc);

View file

@ -47,6 +47,11 @@ void MinuiBackendFbdev::Blank(bool blank, DrmConnector index) {
fprintf(stderr, "Unsupported multiple connectors, blank = %d, index = %d\n", blank, index); fprintf(stderr, "Unsupported multiple connectors, blank = %d, index = %d\n", blank, index);
} }
bool MinuiBackendFbdev::HasMultipleConnectors() {
fprintf(stderr, "Unsupported multiple connectors\n");
return false;
}
void MinuiBackendFbdev::SetDisplayedFramebuffer(size_t n) { void MinuiBackendFbdev::SetDisplayedFramebuffer(size_t n) {
if (n > 1 || !double_buffered) return; if (n > 1 || !double_buffered) return;

View file

@ -57,6 +57,7 @@ class MinuiBackendFbdev : public MinuiBackend {
GRSurface* Flip() override; GRSurface* Flip() override;
void Blank(bool) override; void Blank(bool) override;
void Blank(bool blank, DrmConnector index) override; void Blank(bool blank, DrmConnector index) override;
bool HasMultipleConnectors() override;
private: private:
void SetDisplayedFramebuffer(size_t n); void SetDisplayedFramebuffer(size_t n);

View file

@ -129,6 +129,7 @@ int gr_fb_height();
void gr_flip(); void gr_flip();
void gr_fb_blank(bool blank); void gr_fb_blank(bool blank);
void gr_fb_blank(bool blank, int index); void gr_fb_blank(bool blank, int index);
bool gr_has_multiple_connectors();
// Clears entire surface to current color. // Clears entire surface to current color.
void gr_clear(); void gr_clear();