| /* |
| // Copyright (c) 2014 Intel Corporation |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| */ |
| #ifndef __DRM_H__ |
| #define __DRM_H__ |
| |
| #include <utils/Mutex.h> |
| #include <hardware/hwcomposer.h> |
| |
| // TODO: psb_drm.h is IP specific defintion |
| #include <linux/psb_drm.h> |
| |
| extern "C" { |
| #include "xf86drm.h" |
| #include "xf86drmMode.h" |
| } |
| |
| namespace android { |
| namespace intel { |
| |
| enum { |
| PANEL_ORIENTATION_0 = 0, |
| PANEL_ORIENTATION_180 |
| }; |
| |
| class Drm { |
| public: |
| Drm(); |
| virtual ~Drm(); |
| public: |
| bool initialize(); |
| void deinitialize(); |
| bool detect(int device); |
| bool setDrmMode(int device, drmModeModeInfo& value); |
| bool setRefreshRate(int device, int hz); |
| bool writeReadIoctl(unsigned long cmd, void *data, |
| unsigned long size); |
| bool writeIoctl(unsigned long cmd, void *data, |
| unsigned long size); |
| bool readIoctl(unsigned long cmd, void *data, |
| unsigned long size); |
| |
| bool isConnected(int device); |
| bool setDpmsMode(int device, int mode); |
| int getDrmFd() const; |
| bool getModeInfo(int device, drmModeModeInfo& mode); |
| bool getPhysicalSize(int device, uint32_t& width, uint32_t& height); |
| bool isSameDrmMode(drmModeModeInfoPtr mode, drmModeModeInfoPtr base) const; |
| int getPanelOrientation(int device); |
| drmModeModeInfoPtr detectAllConfigs(int device, int *modeCount); |
| |
| private: |
| bool initDrmMode(int index); |
| bool setDrmMode(int index, drmModeModeInfoPtr mode); |
| void resetOutput(int index); |
| |
| // map device type to output index, return -1 if not mapped |
| inline int getOutputIndex(int device); |
| |
| private: |
| // DRM object index |
| enum { |
| OUTPUT_PRIMARY = 0, |
| OUTPUT_EXTERNAL, |
| OUTPUT_MAX, |
| }; |
| |
| struct DrmOutput { |
| drmModeConnectorPtr connector; |
| drmModeEncoderPtr encoder; |
| drmModeCrtcPtr crtc; |
| drmModeModeInfo mode; |
| buffer_handle_t fbHandle; |
| uint32_t fbId; |
| int connected; |
| int panelOrientation; |
| } mOutputs[OUTPUT_MAX]; |
| |
| int mDrmFd; |
| Mutex mLock; |
| bool mInitialized; |
| }; |
| |
| } // namespace intel |
| } // namespace android |
| |
| |
| |
| #endif /* __DRM_H__ */ |