summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJason Chen <b02280@freescale.com>2011-02-18 11:33:39 +0800
committerJason Chen <b02280@freescale.com>2011-02-18 11:33:39 +0800
commit51918e1af6c0baa5ff0ef4d64bb2323b4a1681ed (patch)
treeb825e59cb325addb5267b23f424261e50c3ba395 /drivers
parent4bebb4122d44fee4952e63a1fefe1f019a8931f1 (diff)
ENGR00139423 mxc edid: add edid attr sysnode
After this patch, you can check edid info under /sys/devices/platform/sii902x.0/edid for sii902x HDMI. And under /sys/devices/platform/mxc_ddc.0/edid for common DDC. Signed-off-by: Jason Chen <b02280@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/mxc/mxc_edid.c27
-rw-r--r--drivers/video/mxc/mxcfb_sii902x.c28
2 files changed, 50 insertions, 5 deletions
diff --git a/drivers/video/mxc/mxc_edid.c b/drivers/video/mxc/mxc_edid.c
index 0eafe0f1fd4e..c64b7f85b809 100644
--- a/drivers/video/mxc/mxc_edid.c
+++ b/drivers/video/mxc/mxc_edid.c
@@ -38,6 +38,8 @@
#include <mach/mxc_edid.h>
#include "../edid.h"
+#define MXC_EDID_LENGTH (EDID_LENGTH*2)
+
struct mxc_ddc_data {
struct platform_device *pdev;
struct i2c_client *client;
@@ -45,7 +47,7 @@ struct mxc_ddc_data {
struct fb_info *fbi;
struct mxc_edid_cfg edid_cfg;
u8 cable_plugin;
- u8 edid[256];
+ u8 edid[MXC_EDID_LENGTH];
u32 di;
void (*init)(void);
@@ -354,6 +356,23 @@ static ssize_t mxc_ddc_show_state(struct device *dev,
static DEVICE_ATTR(cable_state, S_IRUGO, mxc_ddc_show_state, NULL);
+static ssize_t mxc_ddc_show_edid(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ int i, j, len = 0;
+
+ for (j = 0; j < MXC_EDID_LENGTH/16; j++) {
+ for (i = 0; i < 16; i++)
+ len += sprintf(buf+len, "0x%02X ",
+ mxc_ddc.edid[j*16 + i]);
+ len += sprintf(buf+len, "\n");
+ }
+
+ return len;
+}
+
+static DEVICE_ATTR(edid, S_IRUGO, mxc_ddc_show_edid, NULL);
+
static void det_worker(struct work_struct *work)
{
char event_string[16];
@@ -497,7 +516,11 @@ static int __devinit mxc_ddc_probe(struct i2c_client *client,
ret = device_create_file(&mxc_ddc.pdev->dev, &dev_attr_cable_state);
if (ret < 0)
dev_warn(&client->dev,
- "MXC ddc: cound not crate sys node\n");
+ "MXC ddc: cound not create sys node for cable state\n");
+ ret = device_create_file(&mxc_ddc.pdev->dev, &dev_attr_edid);
+ if (ret < 0)
+ dev_warn(&client->dev,
+ "MXC ddc: cound not create sys node for edid\n");
}
}
diff --git a/drivers/video/mxc/mxcfb_sii902x.c b/drivers/video/mxc/mxcfb_sii902x.c
index 502c4a48d081..89a81c1a02c9 100644
--- a/drivers/video/mxc/mxcfb_sii902x.c
+++ b/drivers/video/mxc/mxcfb_sii902x.c
@@ -50,6 +50,7 @@
#include <mach/mxc_edid.h>
#define IPU_DISP_PORT 0
+#define SII_EDID_LEN 256
static bool g_enable_hdmi;
struct sii902x_data {
@@ -59,7 +60,7 @@ struct sii902x_data {
struct fb_info *fbi;
struct mxc_edid_cfg edid_cfg;
u8 cable_plugin;
- u8 edid[256];
+ u8 edid[SII_EDID_LEN];
} sii902x;
static void sii902x_poweron(void);
@@ -88,7 +89,24 @@ static ssize_t sii902x_show_state(struct device *dev,
return strlen(buf);
}
-static DEVICE_ATTR(cable_state, S_IRUGO | S_IWUSR, sii902x_show_state, NULL);
+static DEVICE_ATTR(cable_state, S_IRUGO, sii902x_show_state, NULL);
+
+static ssize_t sii902x_show_edid(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ int i, j, len = 0;
+
+ for (j = 0; j < SII_EDID_LEN/16; j++) {
+ for (i = 0; i < 16; i++)
+ len += sprintf(buf+len, "0x%02X ",
+ sii902x.edid[j*16 + i]);
+ len += sprintf(buf+len, "\n");
+ }
+
+ return len;
+}
+
+static DEVICE_ATTR(edid, S_IRUGO, sii902x_show_edid, NULL);
static void sii902x_setup(struct fb_info *fbi)
{
@@ -351,7 +369,11 @@ static int __devinit sii902x_probe(struct i2c_client *client,
ret = device_create_file(&sii902x.pdev->dev, &dev_attr_cable_state);
if (ret < 0)
dev_warn(&sii902x.client->dev,
- "Sii902x: cound not crate sys node\n");
+ "Sii902x: cound not create sys node for cable state\n");
+ ret = device_create_file(&sii902x.pdev->dev, &dev_attr_edid);
+ if (ret < 0)
+ dev_warn(&sii902x.client->dev,
+ "Sii902x: cound not create sys node for edid\n");
}
fb_register_client(&nb);