Re: [PATCH v5 1/7] drm: sunxi: Add a basic DRM driver for Allwinner DE2
From: Daniel Vetter <hidden>
Date: 2016-10-25 06:46:45
Also in:
alsa-devel, dri-devel, linux-arm-kernel
On Tue, Oct 25, 2016 at 08:44:22AM +0200, Daniel Vetter wrote:
On Fri, Oct 21, 2016 at 09:26:18AM +0200, Jean-Francois Moine wrote:quoted
+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);
Oh and you might want to look into drm_dev_init, allows you to use subclassing instead of pointer chasing for your driver-private data. -Daniel
quoted
+ 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
-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html