[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