display: Get panel type from framebuffer
Change-Id: I5dc16125bbb7d864dcb7106166e91b950a44d686
This commit is contained in:
parent
bd86fcfff6
commit
912842f62d
@ -24,6 +24,7 @@
|
||||
|
||||
#include <overlay.h>
|
||||
#include <fb_priv.h>
|
||||
#include <mdp_version.h>
|
||||
#include "hwc_utils.h"
|
||||
#include "hwc_qbuf.h"
|
||||
#include "hwc_video.h"
|
||||
|
@ -380,7 +380,7 @@ bool CopyBit::canUseCopybit(hwc_context_t *ctx, const hwc_layer_list_t* list,
|
||||
{
|
||||
// XXX : TODO , currently returning false for MDP4 targets,
|
||||
// This has to be modified after adding C2D support.
|
||||
if(ctx->hasOverlay)
|
||||
if(ctx->mMDP.hasOverlay)
|
||||
return false;
|
||||
|
||||
framebuffer_device_t* fbDev = ctx->mFbDev;
|
||||
@ -397,7 +397,7 @@ bool CopyBit::canUseCopybit(hwc_context_t *ctx, const hwc_layer_list_t* list,
|
||||
LINK_eglGetCurrentSurface == NULL )
|
||||
return false;
|
||||
|
||||
if(!ctx->hasOverlay) {
|
||||
if(!ctx->mMDP.hasOverlay) {
|
||||
if (numYUVBuffers)
|
||||
return true;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ bool UIMirrorOverlay::prepare(hwc_context_t *ctx, hwc_layer_list_t *list) {
|
||||
sState = ovutils::OV_CLOSED;
|
||||
sIsUiMirroringOn = false;
|
||||
|
||||
if(!ctx->hasOverlay) {
|
||||
if(!ctx->mMDP.hasOverlay) {
|
||||
ALOGD_IF(HWC_UI_MIRROR, "%s, this hw doesnt support mirroring",
|
||||
__FUNCTION__);
|
||||
return false;
|
||||
|
@ -40,8 +40,9 @@ void initContext(hwc_context_t *ctx)
|
||||
openFramebufferDevice(ctx);
|
||||
ctx->mOverlay = overlay::Overlay::getInstance();
|
||||
ctx->qbuf = new QueuedBufferStore();
|
||||
ctx->mdpVersion = qdutils::MDPVersion::getInstance().getMDPVersion();
|
||||
ctx->hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
|
||||
ctx->mMDP.version = qdutils::MDPVersion::getInstance().getMDPVersion();
|
||||
ctx->mMDP.hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
|
||||
ctx->mMDP.panel = qdutils::MDPVersion::getInstance().getPanelType();
|
||||
ctx->mCopybitEngine = CopybitEngine::getInstance();
|
||||
ctx->mExtDisplay = new ExternalDisplay(ctx);
|
||||
MDPComp::init(ctx);
|
||||
@ -49,7 +50,7 @@ void initContext(hwc_context_t *ctx)
|
||||
init_uevent_thread(ctx);
|
||||
|
||||
ALOGI("Initializing Qualcomm Hardware Composer");
|
||||
ALOGI("MDP version: %d", ctx->mdpVersion);
|
||||
ALOGI("MDP version: %d", ctx->mMDP.version);
|
||||
}
|
||||
|
||||
void closeContext(hwc_context_t *ctx)
|
||||
|
@ -37,6 +37,14 @@ class Overlay;
|
||||
namespace qhwc {
|
||||
//fwrd decl
|
||||
class QueuedBufferStore;
|
||||
class ExternalDisplay;
|
||||
class CopybitEngine;
|
||||
|
||||
struct MDPInfo {
|
||||
int version;
|
||||
char panel;
|
||||
bool hasOverlay;
|
||||
};
|
||||
|
||||
enum external_display_type {
|
||||
EXT_TYPE_NONE,
|
||||
@ -57,8 +65,6 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
class ExternalDisplay;
|
||||
class CopybitEngine;
|
||||
// -----------------------------------------------------------------------------
|
||||
// Utility functions - implemented in hwc_utils.cpp
|
||||
void dumpLayer(hwc_layer_t const* l);
|
||||
@ -102,8 +108,6 @@ inline void getLayerResolution(const hwc_layer_t* layer,
|
||||
struct hwc_context_t {
|
||||
hwc_composer_device_t device;
|
||||
int numHwLayers;
|
||||
int mdpVersion;
|
||||
bool hasOverlay;
|
||||
int overlayInUse;
|
||||
|
||||
//Framebuffer device
|
||||
@ -121,6 +125,8 @@ struct hwc_context_t {
|
||||
// External display related information
|
||||
qhwc::ExternalDisplay *mExtDisplay;
|
||||
|
||||
qhwc::MDPInfo mMDP;
|
||||
|
||||
};
|
||||
|
||||
#endif //HWC_UTILS_H
|
||||
|
@ -35,7 +35,7 @@ bool VideoOverlay::sIsLayerSkip = false;
|
||||
//Cache stats, figure out the state, config overlay
|
||||
bool VideoOverlay::prepare(hwc_context_t *ctx, hwc_layer_list_t *list) {
|
||||
sIsModeOn = false;
|
||||
if(!ctx->hasOverlay) {
|
||||
if(!ctx->mMDP.hasOverlay) {
|
||||
ALOGD_IF(VIDEO_DEBUG,"%s, this hw doesnt support overlay", __FUNCTION__);
|
||||
return false;
|
||||
}
|
||||
|
@ -34,10 +34,11 @@
|
||||
ANDROID_SINGLETON_STATIC_INSTANCE(qdutils::MDPVersion);
|
||||
namespace qdutils {
|
||||
|
||||
static int getMDPVersionFromFB()
|
||||
MDPVersion::MDPVersion()
|
||||
{
|
||||
int fb_fd = open("/dev/graphics/fb0", O_RDWR);
|
||||
int mdp_version = MDP_V_UNKNOWN;
|
||||
char panel_type = 0;
|
||||
struct fb_fix_screeninfo fb_finfo;
|
||||
if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fb_finfo) < 0) {
|
||||
ALOGE("FBIOGET_FSCREENINFO failed");
|
||||
@ -61,18 +62,18 @@ static int getMDPVersionFromFB()
|
||||
} else {
|
||||
mdp_version = MDP_V_UNKNOWN;
|
||||
}
|
||||
int len = strlen("msmfbXX_");
|
||||
if (mdp_version == MDP_V3_0_3)
|
||||
len++;
|
||||
panel_type = fb_finfo.id[len];
|
||||
|
||||
}
|
||||
close(fb_fd);
|
||||
return mdp_version;
|
||||
}
|
||||
|
||||
MDPVersion::MDPVersion()
|
||||
{
|
||||
mMDPVersion = getMDPVersionFromFB();
|
||||
mMDPVersion = mdp_version;
|
||||
mHasOverlay = false;
|
||||
if((mMDPVersion >= MDP_V4_0) || (mMDPVersion == MDP_V_UNKNOWN))
|
||||
mHasOverlay = true;
|
||||
else
|
||||
mHasOverlay = false;
|
||||
mPanelType = panel_type;
|
||||
}
|
||||
}; //namespace qdutils
|
||||
|
||||
|
@ -52,15 +52,29 @@ enum mdp_version {
|
||||
MDSS_V5 = 500,
|
||||
};
|
||||
|
||||
#define MDDI_PANEL '1'
|
||||
#define EBI2_PANEL '2'
|
||||
#define LCDC_PANEL '3'
|
||||
#define EXT_MDDI_PANEL '4'
|
||||
#define TV_PANEL '5'
|
||||
#define DTV_PANEL '7'
|
||||
#define MIPI_VIDEO_PANEL '8'
|
||||
#define MIPI_CMD_PANEL '9'
|
||||
#define WRITEBACK_PANEL 'a'
|
||||
#define LVDS_PANEL 'b'
|
||||
|
||||
|
||||
class MDPVersion : public Singleton <MDPVersion>
|
||||
{
|
||||
public:
|
||||
MDPVersion();
|
||||
~MDPVersion() { }
|
||||
int getMDPVersion() {return mMDPVersion;}
|
||||
char getPanelType() {return mPanelType;}
|
||||
bool hasOverlay() {return mHasOverlay;}
|
||||
private:
|
||||
int mMDPVersion;
|
||||
char mPanelType;
|
||||
bool mHasOverlay;
|
||||
};
|
||||
}; //namespace qdutils
|
||||
|
Loading…
x
Reference in New Issue
Block a user