int drm_generic_detach(device_t kdev) { struct drm_device *dev; int i; dev = device_get_softc(kdev); drm_put_dev(dev); /* Clean up PCI resources allocated by drm_bufs.c. We're not really * worried about resource consumption while the DRM is inactive (between * lastclose and firstopen or unload) because these aren't actually * taking up KVA, just keeping the PCI resource allocated. */ for (i = 0; i < DRM_MAX_PCI_RESOURCE; i++) { if (dev->pcir[i] == NULL) continue; bus_release_resource(dev->dev, SYS_RES_MEMORY, dev->pcirid[i], dev->pcir[i]); dev->pcir[i] = NULL; } if (pci_disable_busmaster(dev->dev)) DRM_ERROR("Request to disable bus-master failed.\n"); return (0); }
static void vmw_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); pci_disable_device(pdev); drm_put_dev(dev); }
static void i915_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); drm_put_dev(dev); }
static int rcar_du_remove(struct platform_device *pdev) { struct rcar_du_device *rcdu = platform_get_drvdata(pdev); drm_put_dev(rcdu->ddev); return 0; }
static int fsl_dcu_drm_remove(struct platform_device *pdev) { struct fsl_dcu_drm_device *fsl_dev = platform_get_drvdata(pdev); drm_put_dev(fsl_dev->drm); return 0; }
static int xylon_drm_platform_remove(struct platform_device *pdev) { struct xylon_drm_device *xdev = platform_get_drvdata(pdev); drm_put_dev(xdev->dev); return 0; }
static void virtio_gpu_remove(struct virtio_device *vdev) { struct drm_device *dev = vdev->priv; drm_dev_unregister(dev); virtio_gpu_deinit(dev); drm_put_dev(dev); }
static int PVRSRVDrmRemove(struct platform_device *pDevice) { PVR_TRACE(("PVRSRVDrmRemove")); drm_put_dev(gpsPVRDRMDev); return 0; }
void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device) { struct drm_device *dev, *tmp; DRM_DEBUG("\n"); list_for_each_entry_safe(dev, tmp, &driver->device_list, driver_item) drm_put_dev(dev); DRM_INFO("Module unloaded\n"); }
static int pdev_remove(struct platform_device *device) { DBG(""); omap_disconnect_dssdevs(); omap_crtc_pre_uninit(); drm_put_dev(platform_get_drvdata(device)); return 0; }
static int fsl_dcu_drm_remove(struct platform_device *pdev) { struct fsl_dcu_drm_device *fsl_dev = platform_get_drvdata(pdev); clk_disable_unprepare(fsl_dev->clk); clk_disable_unprepare(fsl_dev->pix_clk); clk_unregister(fsl_dev->pix_clk); drm_put_dev(fsl_dev->drm); return 0; }
void drm_unplug_dev(struct drm_device *dev) { /* for a USB device */ drm_dev_unregister(dev); mutex_lock(&drm_global_mutex); drm_device_set_unplugged(dev); if (dev->open_count == 0) { drm_put_dev(dev); } mutex_unlock(&drm_global_mutex); }
static void etnaviv_unbind(struct device *dev) { struct drm_device *drm = dev_get_drvdata(dev); struct etnaviv_drm_private *priv = drm->dev_private; drm_dev_unregister(drm); flush_workqueue(priv->wq); destroy_workqueue(priv->wq); component_unbind_all(dev, drm); drm->dev_private = NULL; kfree(priv); drm_put_dev(drm); }
/** * Called via cleanup_module() at module unload time. * * Cleans up all DRM device, calling drm_lastclose(). * * \sa drm_init */ static void __exit drm_cleanup(drm_device_t * dev) { DRM_DEBUG("\n"); if (!dev) { DRM_ERROR("cleanup called no dev\n"); return; } drm_lastclose(dev); if (dev->maplist) { drm_free(dev->maplist, sizeof(*dev->maplist), DRM_MEM_MAPS); dev->maplist = NULL; } if (!drm_fb_loaded) pci_disable_device(dev->pdev); drm_ctxbitmap_cleanup(dev); if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) && dev->agp && dev->agp->agp_mtrr >= 0) { int retval; retval = mtrr_del(dev->agp->agp_mtrr, dev->agp->agp_info.aper_base, dev->agp->agp_info.aper_size * 1024 * 1024); DRM_DEBUG("mtrr_del=%d\n", retval); } if (drm_core_has_AGP(dev) && dev->agp) { drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } if (dev->driver->unload) dev->driver->unload(dev); drm_put_head(&dev->primary); if (drm_put_dev(dev)) DRM_ERROR("Cannot unload module\n"); }
static int armada_drm_remove(struct platform_device *pdev) { drm_put_dev(platform_get_drvdata(pdev)); return 0; }
static void virtio_gpu_remove(struct virtio_device *vdev) { struct drm_device *dev = vdev->priv; drm_put_dev(dev); }
static void armada_drm_unbind(struct device *dev) { drm_put_dev(dev_get_drvdata(dev)); }