diff options
author | Jason Chen <b02280@freescale.com> | 2011-02-18 11:33:39 +0800 |
---|---|---|
committer | Andy Voltz <andy.voltz@timesys.com> | 2011-06-01 13:20:54 -0400 |
commit | 08af1e7fdd0c036323b24e8a2f6f974e0bb6bf1f (patch) | |
tree | b825e59cb325addb5267b23f424261e50c3ba395 /drivers | |
parent | 50fdc603cfba2fa08ff12049c81abbf9df3945c7 (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.c | 27 | ||||
-rw-r--r-- | drivers/video/mxc/mxcfb_sii902x.c | 28 |
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); |