On Fri, Oct 21, 2016 at 09:26:18AM +0200, Jean-Francois Moine wrote: > +static int de2_drm_bind(struct device *dev) > +{ > + struct drm_device *drm; > + struct priv *priv; > + int ret; > + > + drm = drm_dev_alloc(&de2_drm_driver, dev); > + if (!drm) > + return -ENOMEM; > + > + priv = kzalloc(sizeof(*priv), GFP_KERNEL); > + if (!priv) { > + dev_err(dev, "failed to allocate private area\n"); > + ret = -ENOMEM; > + goto out1; > + } > + > + dev_set_drvdata(dev, drm); > + drm->dev_private = priv; > + > + drm_mode_config_init(drm); > + drm->mode_config.min_width = 32; /* needed for cursor */ > + drm->mode_config.min_height = 32; > + drm->mode_config.max_width = 1920; > + drm->mode_config.max_height = 1080; > + drm->mode_config.funcs = &de2_mode_config_funcs; > + > + drm->irq_enabled = true; > + > + /* initialize the display engine */ > + priv->soc_type = (int) of_match_device(de2_drm_of_match, dev)->data; > + ret = de2_de_init(priv, dev); > + if (ret) > + goto out2; > + > + /* start the subdevices */ > + ret = component_bind_all(dev, drm); > + if (ret < 0) > + goto out2; > + > + ret = drm_dev_register(drm, 0); This needs to be the very last step in your driver load sequence. Kerneldoc explains why. Similar, but inverted for unloading: drm_dev_unregister is the very first thing you must call. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel