<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi Jose,<br>
</p>
<br>
<div class="moz-cite-prefix">在 2017年02月23日 18:17, Jose Abreu 写道:<br>
</div>
<blockquote
cite="mid:b391d2dd-3352-08b5-fe82-cd24381a10a6@synopsys.com"
type="cite">
<pre wrap="">Hi Nickey,
On 22-02-2017 11:11, Nickey.Yang wrote:
</pre>
<blockquote type="cite">
<pre wrap="">Read EDID func is drm_do_probe_ddc_edid (in
drivers/gpu/drm/drm_edid.c Line:1215)
when block = 3 means &msgs[3].addr = DDC_SEGMENT_ADDR(0x30)
,but in dw_hdmi_i2c_xfer
line 299 msgs[i].addr != addr (0x50), it will printk
"unsupported transfer, changed slave address"
and return -EOPNOTSUPP.
in fact,0x30 not means change slave address but means segment
address.
</pre>
</blockquote>
<pre wrap="">
I am reading the drm_do_probe_ddc_edid and I have one question:
There are 2 writes and one read, but your patch only handles the
write of segment address. What about the start address?
</pre>
</blockquote>
<br>
write start address operations<br>
{<br>
1235 .addr = DDC_ADDR,<br>
1236 .flags = 0,<br>
1237 .len = 1,<br>
1238 .buf = &start,<br>
}<br>
will be handle by dw_hdmi_i2c_write. it seems we do need to send
start signal actully,<br>
because in dw_hdmi_i2c_write will do length-- and it will skip <br>
while (length--) {<br>
<pre wrap=""> /* */
}
In DesignWare HDMI Transmitter Controller Databook,
2.10 E-DID/HDCP/SCDC I 2 C E-DDC Interface
/* I 2 C Master Interface Normal Mode */<b>
</b>S slaveaddr[6:0] W A addr[7:0] datao[7:0] A/A PA/A
/* I 2 C Master Interface Extended Read Mode */
S segaddr[6:0] W X segpointer[7:0] X Sr slaveaddr[6:0] W A addr[7:0] A datai[7:0] A P
so we just need add handles the write of segment address
to support I2C Master Interface Extended Read Mode.
</pre>
<blockquote
cite="mid:b391d2dd-3352-08b5-fe82-cd24381a10a6@synopsys.com"
type="cite">
<pre wrap="">
I am refering to this structure:
1228 struct i2c_msg msgs[] = {
1229 {
1230 .addr = DDC_SEGMENT_ADDR,
1231 .flags = 0,
1232 .len = 1,
1233 .buf = &segment,
1234 }, {
1235 .addr = DDC_ADDR,
1236 .flags = 0,
1237 .len = 1,
1238 .buf = &start,
1239 }, {
1240 .addr = DDC_ADDR,
1241 .flags = I2C_M_RD,
1242 .len = len,
1243 .buf = buf,
1244 }
There is a write which indicates DDC segment address and then
there is another write which indicates start address. Shouldn't
this be handled?
Best regards,
Jose Miguel Abreu
</pre>
</blockquote>
<br>
<pre wrap="">Best regards,</pre>
Nickey,<br>
<blockquote
cite="mid:b391d2dd-3352-08b5-fe82-cd24381a10a6@synopsys.com"
type="cite">
<pre wrap="">
</pre>
</blockquote>
<br>
</body>
</html>