blob: 108514b5daedd0af9e43412be6b523079f885ee2 [file] [log] [blame]
Uday Kiran Pichika2d3a3072018-06-04 16:42:13 +05301/*
2 * Copyright (c) 2013, 2018 The Linux Foundation. All rights reserved.
3
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <unistd.h>
31#include <gralloc_priv.h>
32#include "qd_utils.h"
33
34static const int kFBNodeMax = 4;
35namespace qdutils {
36
37static int getExternalNode(const char *type) {
38 FILE *displayDeviceFP = NULL;
39 char fbType[MAX_FRAME_BUFFER_NAME_SIZE];
40 char msmFbTypePath[MAX_FRAME_BUFFER_NAME_SIZE];
41 int j = 0;
42
43 for(j = 0; j < kFBNodeMax; j++) {
44 snprintf (msmFbTypePath, sizeof(msmFbTypePath),
45 "/sys/devices/virtual/graphics/fb%d/msm_fb_type", j);
46 displayDeviceFP = fopen(msmFbTypePath, "r");
47 if(displayDeviceFP) {
48 fread(fbType, sizeof(char), MAX_FRAME_BUFFER_NAME_SIZE,
49 displayDeviceFP);
50 if(strncmp(fbType, type, strlen(type)) == 0) {
51 ALOGD("%s: %s is at fb%d", __func__, type, j);
52 fclose(displayDeviceFP);
53 break;
54 }
55 fclose(displayDeviceFP);
56 } else {
57 ALOGE("%s: Failed to open fb node %s", __func__, msmFbTypePath);
58 }
59 }
60
61 if (j < kFBNodeMax)
62 return j;
63 else
64 ALOGE("%s: Failed to find %s node", __func__, type);
65
66 return -1;
67}
68
69int getHDMINode(void) {
70 return getExternalNode("dtv panel");
71}
72
73int getEdidRawData(char *buffer)
74{
75 int size;
76 int edidFile;
77 char msmFbTypePath[MAX_FRAME_BUFFER_NAME_SIZE];
78 int node_id = getHDMINode();
79
80 if (node_id < 0) {
81 ALOGE("%s no HDMI node found", __func__);
82 return 0;
83 }
84
85 snprintf(msmFbTypePath, sizeof(msmFbTypePath),
86 "/sys/devices/virtual/graphics/fb%d/edid_raw_data", node_id);
87
88 edidFile = open(msmFbTypePath, O_RDONLY, 0);
89
90 if (edidFile < 0) {
91 ALOGE("%s no edid raw data found %s", __func__,msmFbTypePath);
92 return 0;
93 }
94
95 size = (int)read(edidFile, (char*)buffer, EDID_RAW_DATA_SIZE);
96 close(edidFile);
97 return size;
98}
99
100}; //namespace qdutils