question about drivers/gpu/drm/i915/dvo_ch7xxx.c

Daniel Vetter daniel at ffwll.ch
Sun Oct 7 13:45:18 PDT 2012


On Sat, Oct 06, 2012 at 03:20:19PM +0200, Julia Lawall wrote:
> Hello,
> 
> I am looking at introducing some macros for i2c_msg initialization,
> and Ryan Mallon suggested that sometimes it could be useful to at
> the same time replace explicit lengths with the size of the
> associated buffer.  But in some cases the sizes are not the same.
> An example is as follows, in drivers/gpu/drm/i915/dvo_ch7xxx.c:
> 
> static bool ch7xxx_readb(struct intel_dvo_device *dvo, int addr,
> uint8_t *ch)
> {
>         struct ch7xxx_priv *ch7xxx = dvo->dev_priv;
>         struct i2c_adapter *adapter = dvo->i2c_bus;
>         u8 out_buf[2];
>         u8 in_buf[2];
> 
>         struct i2c_msg msgs[] = {
>                 {
>                         .addr = dvo->slave_addr,
>                         .flags = 0,
>                         .len = 1,
>                         .buf = out_buf,
>                 },
>                 {
>                         .addr = dvo->slave_addr,
>                         .flags = I2C_M_RD,
>                         .len = 1,
>                         .buf = in_buf,
>                 }
>         };
> 
>         out_buf[0] = addr;
>         out_buf[1] = 0;
> 
>         if (i2c_transfer(adapter, msgs, 2) == 2) {
>                 *ch = in_buf[0];
>                 return true;
>         };
> 
>         if (!ch7xxx->quiet) {
>                 DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n",
>                           addr, adapter->name, dvo->slave_addr);
>         }
>         return false;
> }
> 
> The buffers both have size 2, but only one byte is asked to be read
> or written.  Is there any need for the buffers to have size 2 in
> this case?

Looks like the 2 byte buffer size is just copy&pasta from writeb. And
didn't find any other reson for it not being just 1 byte.

> Unrelatedly, is it correct that ch has type uint8_t and out_buf and
> in_buf have type u8?

drm/i915 is totally confused about the (u)int*_t vs (s|t)* types
unfortunately. I think nowadays we mostly stick to _t typedefs, but not
consistenly.

Yours, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list