[PATCH v5 1/2] drm/bridge: Add sii902x driver

Boris Brezillon boris.brezillon at free-electrons.com
Fri Jun 3 06:56:11 UTC 2016


Hi Enric,

On Thu, 2 Jun 2016 23:47:23 +0200
Enric Balletbo Serra <eballetbo at gmail.com> wrote:



> > +static int sii902x_get_modes(struct drm_connector *connector)
> > +{
> > +       struct sii902x *sii902x = connector_to_sii902x(connector);
> > +       struct regmap *regmap = sii902x->regmap;
> > +       u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> > +       unsigned int status;
> > +       struct edid *edid;
> > +       int num = 0;
> > +       int ret;
> > +       int i;  
> 
> Is the i variable really needed? (see my comments below)
> 
> > +
> > +       ret = regmap_update_bits(regmap, SIL902X_SYS_CTRL_DATA,
> > +                                SIL902X_SYS_CTRL_DDC_BUS_REQ,
> > +                                SIL902X_SYS_CTRL_DDC_BUS_REQ);
> > +       if (ret)
> > +               return ret;
> > +
> > +       i = 0;  
> 
> You assign i to 0
> 
> > +       do {
> > +               ret = regmap_read(regmap, SIL902X_SYS_CTRL_DATA, &status);
> > +               if (ret)
> > +                       return ret;
> > +               i++;  
> 
> And you increment i, for what?

Oops, this is a leftover from when I was debugging the implementation.

> 
> > +       } while (!(status & SIL902X_SYS_CTRL_DDC_BUS_GRTD));
> > +
> > +       ret = regmap_write(regmap, SIL902X_SYS_CTRL_DATA, status);
> > +       if (ret)
> > +               return ret;
> > +
> > +       edid = drm_get_edid(connector, sii902x->i2c->adapter);
> > +       drm_mode_connector_update_edid_property(connector, edid);
> > +       if (edid) {
> > +               num += drm_add_edid_modes(connector, edid);  
> 
> This is always 0 + the returned value, so you can do:
>   num = drm_add_edid_modes(connector, edid);
> It's more clear for me.

Sure.

> 
> > +               kfree(edid);
> > +       }
> > +
> > +       ret = drm_display_info_set_bus_formats(&connector->display_info,
> > +                                              &bus_format, 1);
> > +       if (ret)
> > +               return ret;
> > +
> > +       regmap_read(regmap, SIL902X_SYS_CTRL_DATA, &status);
> > +       if (ret)
> > +               return ret;
> > +
> > +       ret = regmap_update_bits(regmap, SIL902X_SYS_CTRL_DATA,
> > +                                SIL902X_SYS_CTRL_DDC_BUS_REQ |
> > +                                SIL902X_SYS_CTRL_DDC_BUS_GRTD, 0);
> > +       if (ret)
> > +               return ret;
> > +
> > +       i = 0;  
> 
> Again, you can remove the i variable, here and the i++ from the loop below
> 
> > +       do {
> > +               ret = regmap_read(regmap, SIL902X_SYS_CTRL_DATA, &status);
> > +               if (ret)
> > +                       return ret;
> > +               i++;
> > +       } while (status & (SIL902X_SYS_CTRL_DDC_BUS_REQ |
> > +                          SIL902X_SYS_CTRL_DDC_BUS_GRTD));
> > +
> > +       return num;
> > +}

[...]

> > +static void sii902x_bridge_nop(struct drm_bridge *bridge)
> > +{
> > +}
> > +  
> 
> You can remove this dummy callback function now.
> 
> > +static const struct drm_bridge_funcs sii902x_bridge_funcs = {
> > +       .attach = sii902x_bridge_attach,
> > +       .mode_set = sii902x_bridge_mode_set,
> > +       .disable = sii902x_bridge_disable,
> > +       .post_disable = sii902x_bridge_nop,
> > +       .pre_enable = sii902x_bridge_nop,  
> 
> Remove .pre_enable

I guess ->{pre,post}_enable() were mandatory when I started the
development of this driver. I'll drop both.

> 
> > +       .enable = sii902x_bridge_enable,
> > +};
> > +

[...]

> > +
> > +#ifdef CONFIG_OF  
> 
> You already depend on OF in Kconfig so this will always be evaluated.

Indeed.

> 
> > +static const struct of_device_id sii902x_dt_ids[] = {
> > +       { .compatible = "sil,sii9022", },
> > +       { }
> > +};
> > +MODULE_DEVICE_TABLE(of, sii902x_dt_ids);
> > +#endif
> > +
> > +static const struct i2c_device_id sii902x_i2c_ids[] = {
> > +       { "sii9022", 0 },
> > +       { },
> > +};
> > +MODULE_DEVICE_TABLE(i2c, sii902x_i2c_ids);
> > +
> > +static struct i2c_driver sii902x_driver = {
> > +       .probe = sii902x_probe,
> > +       .remove = sii902x_remove,
> > +       .driver = {
> > +               .name = "sii902x",
> > +               .of_match_table = of_match_ptr(sii902x_dt_ids),  
> 
> You already depend on OF in Kconfig so you don't need of_match_ptr()
> here, of_match_ptr(x) will always evaluate to x.

I'll directly pass sii902x_dt_ids.

Thanks for your review.

Regards,

Boris

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com


More information about the dri-devel mailing list