[PATCH V6] drm: edid: add support for E-DDC
Shirish S
shirish.s12 at gmail.com
Fri Sep 7 19:30:49 PDT 2012
Hi Dave,
Gentle Reminder!
This patch is required for passing the very first test case of HDMI
Compliance test suite.
Regards,
Shirish S
On Mon, Sep 3, 2012 at 8:54 AM, Shirish S <shirish.s12 at gmail.com> wrote:
> Hello Dave,
>
> My patch-set for adding support for 4 block EDID is now reviewed and ready.
> Please let me know if you want any further clarification
>
> Regards,
> Shirish S
>
>
> On Thu, Aug 30, 2012 at 12:04 AM, Shirish S <s.shirish at samsung.com> wrote:
>
>> The current logic for probing ddc is limited to
>> 2 blocks (256 bytes), this patch adds support
>> for the 4 block (512) data.
>>
>> To do this, a single 8-bit segment index is
>> passed to the display via the I2C address 30h.
>> Data from the selected segment is then immediately
>> read via the regular DDC2 address using a repeated
>> I2C 'START' signal.
>>
>> Signed-off-by: Shirish S <s.shirish at samsung.com>
>> Reviewed-by: Jean Delvare <jdelvare at suse.de>
>> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
>> Reviewed-by: Ville Syrjala <ville.syrjala at linux.intel.com>
>> ---
>> drivers/gpu/drm/drm_edid.c | 19 ++++++++++++++++---
>> 1 files changed, 16 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index bcc4725..7f62de5 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -254,6 +254,8 @@ drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
>> unsigned char *buf,
>> int block, int len)
>> {
>> unsigned char start = block * EDID_LENGTH;
>> + unsigned char segment = block >> 1;
>> + unsigned char xfers = segment ? 3 : 2;
>> int ret, retries = 5;
>>
>> /* The core i2c driver will automatically retry the transfer if
>> the
>> @@ -265,6 +267,11 @@ drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
>> unsigned char *buf,
>> do {
>> struct i2c_msg msgs[] = {
>> {
>> + .addr = DDC_SEGMENT_ADDR,
>> + .flags = 0,
>> + .len = 1,
>> + .buf = &segment,
>> + }, {
>> .addr = DDC_ADDR,
>> .flags = 0,
>> .len = 1,
>> @@ -276,15 +283,21 @@ drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
>> unsigned char *buf,
>> .buf = buf,
>> }
>> };
>> - ret = i2c_transfer(adapter, msgs, 2);
>> +
>> + /*
>> + * Avoid sending the segment addr to not upset non-compliant ddc
>> + * monitors.
>> + */
>> + ret = i2c_transfer(adapter, &msgs[3 - xfers], xfers);
>> +
>> if (ret == -ENXIO) {
>> DRM_DEBUG_KMS("drm: skipping non-existent adapter
>> %s\n",
>> adapter->name);
>> break;
>> }
>> - } while (ret != 2 && --retries);
>> + } while (ret != xfers && --retries);
>>
>> - return ret == 2 ? 0 : -1;
>> + return ret == xfers ? 0 : -1;
>> }
>>
>> static bool drm_edid_is_zero(u8 *in_edid, int length)
>> --
>> 1.7.0.4
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20120907/04e173e9/attachment.html>
More information about the dri-devel
mailing list