@@ -444,7 +444,7 @@ static int adp_setup_mode_config(struct adp_drv_private *adp)
if (IS_ERR(adp->connector))
return PTR_ERR(adp->connector);
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
drm_err(drm, "failed to initialize vblank");
return ret;
@@ -413,7 +413,7 @@ static int amdgpu_vkms_sw_init(struct amdgpu_ip_block *ip_block)
return r;
}
- r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
+ r = drm_vblank_init(adev_to_drm(adev));
if (r)
return r;
@@ -2809,7 +2809,7 @@ static int dce_v10_0_sw_init(struct amdgpu_ip_block *ip_block)
/* XXX: can this be enabled for DC? */
adev_to_drm(adev)->vblank_disable_immediate = true;
- r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
+ r = drm_vblank_init(adev_to_drm(adev));
if (r)
return r;
@@ -2759,7 +2759,7 @@ static int dce_v6_0_sw_init(struct amdgpu_ip_block *ip_block)
/* XXX: can this be enabled for DC? */
adev_to_drm(adev)->vblank_disable_immediate = true;
- r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
+ r = drm_vblank_init(adev_to_drm(adev));
if (r)
return r;
@@ -2728,7 +2728,7 @@ static int dce_v8_0_sw_init(struct amdgpu_ip_block *ip_block)
/* XXX: can this be enabled for DC? */
adev_to_drm(adev)->vblank_disable_immediate = true;
- r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
+ r = drm_vblank_init(adev_to_drm(adev));
if (r)
return r;
@@ -893,7 +893,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
adev_to_drm(adev)->mode_config.cursor_width = adev->dm.dc->caps.max_cursor_size;
adev_to_drm(adev)->mode_config.cursor_height = adev->dm.dc->caps.max_cursor_size;
- if (drm_vblank_init(adev_to_drm(adev), adev->dm.display_indexes_num)) {
+ if (drm_vblank_init(adev_to_drm(adev))) {
drm_err(adev_to_drm(adev),
"failed to initialize vblank for display support.\n");
goto error;
@@ -297,7 +297,7 @@ struct komeda_kms_dev *komeda_kms_attach(struct komeda_dev *mdev)
if (err)
goto cleanup_mode_config;
- err = drm_vblank_init(drm, kms->n_crtcs);
+ err = drm_vblank_init(drm);
if (err)
goto cleanup_mode_config;
@@ -275,7 +275,7 @@ static int hdlcd_drm_bind(struct device *dev)
pm_runtime_enable(dev);
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
DRM_ERROR("failed to initialise vblank\n");
goto err_vblank;
@@ -849,7 +849,7 @@ static int malidp_bind(struct device *dev)
if (ret < 0)
goto irq_init_fail;
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
DRM_ERROR("failed to initialise vblank\n");
goto vblank_fail;
@@ -122,7 +122,7 @@ static int armada_drm_bind(struct device *dev)
if (ret)
goto err_kms;
- ret = drm_vblank_init(&priv->drm, priv->drm.mode_config.num_crtc);
+ ret = drm_vblank_init(&priv->drm);
if (ret)
goto err_comp;
@@ -205,7 +205,7 @@ static int aspeed_gfx_load(struct drm_device *drm)
if (ret < 0)
return ret;
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
dev_err(drm->dev, "Failed to initialise vblank\n");
return ret;
@@ -867,7 +867,7 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
pm_runtime_enable(dev->dev);
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret < 0) {
drm_err(dev, "failed to initialize vblank\n");
goto err_periph_clk_disable;
@@ -536,18 +536,18 @@ static void drm_vblank_init_release(struct drm_device *dev, void *ptr)
/**
* drm_vblank_init - initialize vblank support
* @dev: DRM device
- * @num_crtcs: number of CRTCs supported by @dev
*
- * This function initializes vblank support for @num_crtcs display pipelines.
+ * This function initializes vblank support for display pipelines.
* Cleanup is handled automatically through a cleanup function added with
* drmm_add_action_or_reset().
*
* Returns:
* Zero on success or a negative error code on failure.
*/
-int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
+int drm_vblank_init(struct drm_device *dev)
{
int ret;
+ unsigned int num_crtcs = dev->mode_config.num_crtc;
unsigned int i;
spin_lock_init(&dev->vbl_lock);
@@ -273,7 +273,7 @@ static int exynos_drm_bind(struct device *dev)
if (ret)
goto err_mode_config_cleanup;
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret)
goto err_unbind_all;
@@ -122,7 +122,7 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags)
return dev_err_probe(dev->dev, ret, "failed to enable pixclk\n");
}
- ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
+ ret = drm_vblank_init(dev);
if (ret < 0) {
dev_err(dev->dev, "failed to initialize vblank\n");
goto done_vblank;
@@ -364,7 +364,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
acpi_video_register();
/* Setup vertical blanking handling */
- ret = drm_vblank_init(dev, dev_priv->num_pipe);
+ ret = drm_vblank_init(dev);
if (ret)
goto out_err;
@@ -398,7 +398,7 @@ static int hibmc_load(struct drm_device *dev)
if (ret)
goto err;
- ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
+ ret = drm_vblank_init(dev);
if (ret) {
drm_err(dev, "failed to initialize vblank: %d\n", ret);
goto err;
@@ -181,7 +181,7 @@ static int kirin_drm_kms_init(struct drm_device *dev,
}
/* vblank init */
- ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
+ ret = drm_vblank_init(dev);
if (ret) {
DRM_ERROR("failed to initialize vblank.\n");
goto err_unbind_all;
@@ -330,7 +330,7 @@ int hv_drm_mode_config_init(struct hv_drm_device *hv)
return ret;
}
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret)
return ret;
@@ -217,8 +217,7 @@ int intel_display_driver_probe_noirq(struct intel_display *display)
intel_bw_init_hw(display);
if (HAS_DISPLAY(display)) {
- ret = drm_vblank_init(display->drm,
- INTEL_NUM_PIPES(display));
+ ret = drm_vblank_init(display->drm);
if (ret)
goto cleanup_opregion;
}
@@ -118,7 +118,7 @@ int dc_kms_init(struct dc_drm_device *dc_drm)
return ret;
}
- ret = drm_vblank_init(drm, DC_DISPLAYS);
+ ret = drm_vblank_init(drm);
if (ret) {
dev_err(drm->dev, "failed to init vblank support: %d\n", ret);
return ret;
@@ -129,7 +129,7 @@ struct dcss_kms_dev *dcss_kms_attach(struct dcss_dev *dcss)
dcss_kms_mode_config_init(kms);
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret)
goto cleanup_mode_config;
@@ -233,7 +233,7 @@ static int imx_drm_bind(struct device *dev)
if (ret)
goto err_kms;
- ret = drm_vblank_init(drm, MAX_CRTC);
+ ret = drm_vblank_init(drm);
if (ret)
goto err_kms;
@@ -435,7 +435,7 @@ static int imx_lcdc_probe(struct platform_device *pdev)
if (ret < 0)
return dev_err_probe(drm->dev, ret, "Cannot setup simple display pipe\n");
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0)
return dev_err_probe(drm->dev, ret, "Failed to initialize vblank\n");
@@ -1348,7 +1348,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
goto err_drvdata;
}
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret) {
dev_err(dev, "Failed calling drm_vblank_init()\n");
goto err_drvdata;
@@ -191,7 +191,7 @@ static int kmb_setup_mode_config(struct drm_device *drm)
ret = kmb_dsi_encoder_init(drm, kmb->kmb_dsi);
/* Set the CRTC's port so that the encoder component can find it */
kmb->crtc.port = of_graph_get_port_by_id(drm->dev->of_node, 0);
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
drm_err(drm, "failed to initialize vblank\n");
pm_runtime_disable(drm->dev);
@@ -36,7 +36,7 @@ int logicvc_mode_init(struct logicvc_drm *logicvc)
uint32_t preferred_depth;
int ret;
- ret = drm_vblank_init(drm_dev, mode_config->num_crtc);
+ ret = drm_vblank_init(drm_dev);
if (ret) {
drm_err(drm_dev, "Failed to initialize vblank\n");
return ret;
@@ -296,7 +296,7 @@ static int lsdc_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
drmm_kms_helper_poll_init(ddev);
if (loongson_vblank) {
- ret = drm_vblank_init(ddev, descp->num_of_crtc);
+ ret = drm_vblank_init(ddev);
if (ret)
return ret;
@@ -174,7 +174,7 @@ static int mcde_modeset_init(struct drm_device *drm)
mode_config->min_height = 1;
mode_config->max_height = 1080;
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret) {
dev_err(drm->dev, "failed to init vblank\n");
return ret;
@@ -574,7 +574,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
*/
dma_set_max_seg_size(dma_dev, UINT_MAX);
- ret = drm_vblank_init(drm, MAX_CRTC);
+ ret = drm_vblank_init(drm);
if (ret < 0)
goto err_component_unbind;
@@ -262,7 +262,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
priv->vsync_irq = platform_get_irq(pdev, 0);
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret)
goto free_canvas_vd1_2;
@@ -317,7 +317,7 @@ int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv)
sched_set_fifo(ev_thread->worker->task);
}
- ret = drm_vblank_init(ddev, ddev->mode_config.num_crtc);
+ ret = drm_vblank_init(ddev);
if (ret < 0) {
DRM_DEV_ERROR(dev, "failed to initialize vblank\n");
goto err_msm_uninit;
@@ -175,7 +175,7 @@ static int lcdif_load(struct drm_device *drm)
return ret;
}
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
dev_err(drm->dev, "Failed to initialise vblank\n");
return ret;
@@ -257,7 +257,7 @@ static int mxsfb_load(struct drm_device *drm,
goto err_vblank;
}
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret < 0) {
dev_err(drm->dev, "Failed to initialise vblank\n");
goto err_vblank;
@@ -713,7 +713,7 @@ nouveau_display_create(struct drm_device *dev)
drm_mode_config_reset(dev);
if (dev->mode_config.num_crtc) {
- ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
+ ret = drm_vblank_init(dev);
if (ret)
goto vblank_err;
@@ -731,7 +731,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
}
/* Initialize vblank handling, start with all CRTCs disabled. */
- ret = drm_vblank_init(ddev, priv->num_pipes);
+ ret = drm_vblank_init(ddev);
if (ret) {
dev_err(priv->dev, "could not init vblank\n");
goto err_cleanup_modeset;
@@ -175,7 +175,7 @@ static int pl111_modeset_init(struct drm_device *dev)
return ret;
if (!priv->variant->broken_vblank) {
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret != 0) {
drm_err(dev, "Failed to init vblank\n");
goto out_bridge;
@@ -1304,7 +1304,7 @@ int qxl_modeset_init(struct qxl_device *qdev)
qxl_display_read_client_monitors_config(qdev);
- ret = drm_vblank_init(&qdev->ddev, qxl_num_crtc);
+ ret = drm_vblank_init(&qdev->ddev);
if (ret)
return ret;
@@ -314,7 +314,7 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
/* Disable vblank irqs aggressively for power-saving */
rdev_to_drm(rdev)->vblank_disable_immediate = true;
- r = drm_vblank_init(rdev_to_drm(rdev), rdev->num_crtc);
+ r = drm_vblank_init(rdev_to_drm(rdev));
if (r) {
return r;
}
@@ -888,7 +888,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
* Initialize vertical blanking interrupts handling. Start with vblank
* disabled for all CRTCs.
*/
- ret = drm_vblank_init(dev, rcdu->num_crtcs);
+ ret = drm_vblank_init(dev);
if (ret < 0)
return ret;
@@ -430,7 +430,7 @@ int rzg2l_du_modeset_init(struct rzg2l_du_device *rcdu)
* Initialize vertical blanking interrupts handling. Start with vblank
* disabled for all CRTCs.
*/
- ret = drm_vblank_init(dev, rcdu->num_crtcs);
+ ret = drm_vblank_init(dev);
if (ret < 0)
return ret;
@@ -228,7 +228,7 @@ static int shmob_drm_probe(struct platform_device *pdev)
if (ret)
return ret;
- ret = drm_vblank_init(ddev, 1);
+ ret = drm_vblank_init(ddev);
if (ret < 0) {
dev_err(&pdev->dev, "failed to initialize vblank\n");
return ret;
@@ -186,7 +186,7 @@ static int rockchip_drm_bind(struct device *dev)
if (ret)
goto err_unbind_all;
- ret = drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc);
+ ret = drm_vblank_init(drm_dev);
if (ret)
goto err_iommu_cleanup;
@@ -89,7 +89,7 @@ static int sprd_drm_bind(struct device *dev)
}
/* vblank init */
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret) {
drm_err(drm, "failed to initialize vblank.\n");
goto err_unbind_all;
@@ -145,7 +145,7 @@ static int sti_compositor_bind(struct device *dev,
}
}
- drm_vblank_init(drm_dev, crtc_id);
+ drm_vblank_init(drm_dev);
return 0;
}
@@ -2076,7 +2076,7 @@ int ltdc_load(struct drm_device *ddev)
goto err;
}
- ret = drm_vblank_init(ddev, NB_CRTC);
+ ret = drm_vblank_init(ddev);
if (ret) {
drm_err(ddev, "Failed calling drm_vblank_init()\n");
goto err;
@@ -95,7 +95,7 @@ static int sun4i_drv_bind(struct device *dev)
}
/* drm_vblank_init calls kcalloc, which can fail */
- ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ ret = drm_vblank_init(drm);
if (ret)
goto unbind_all;
@@ -1241,7 +1241,7 @@ static int host1x_drm_probe(struct host1x_device *dev)
/* syncpoints are used for full 32-bit hardware VBLANK counters */
drm->max_vblank_count = 0xffffffff;
- err = drm_vblank_init(drm, drm->mode_config.num_crtc);
+ err = drm_vblank_init(drm);
if (err < 0)
goto hub;
@@ -289,7 +289,7 @@ int tidss_modeset_init(struct tidss_device *tidss)
if (ret)
return ret;
- ret = drm_vblank_init(ddev, tidss->num_crtcs);
+ ret = drm_vblank_init(ddev);
if (ret)
return ret;
@@ -405,7 +405,7 @@ static int tilcdc_pdev_probe(struct platform_device *pdev)
goto unregister_cpufreq_notif;
}
- ret = drm_vblank_init(ddev, 1);
+ ret = drm_vblank_init(ddev);
if (ret < 0) {
drm_err(ddev, "failed to initialize vblank\n");
goto unregister_cpufreq_notif;
@@ -677,7 +677,7 @@ static int bochs_kms_init(struct bochs_device *bochs)
drm_connector_attach_edid_property(connector);
drm_connector_attach_encoder(connector, encoder);
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret)
return ret;
@@ -501,7 +501,7 @@ static int cirrus_pipe_init(struct cirrus_device *cirrus)
if (ret)
return ret;
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret)
return ret;
@@ -120,7 +120,7 @@ static int tve200_modeset_init(struct drm_device *dev)
dev_info(dev->dev, "attached to panel %s\n",
dev_name(panel->dev));
- ret = drm_vblank_init(dev, 1);
+ ret = drm_vblank_init(dev);
if (ret) {
dev_err(dev->dev, "failed to init vblank\n");
goto out_bridge;
@@ -1151,7 +1151,7 @@ int vc4_kms_load(struct drm_device *dev)
/* Set support for vblank irq fast disable, before drm_vblank_init() */
dev->vblank_disable_immediate = true;
- ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
+ ret = drm_vblank_init(dev);
if (ret < 0) {
dev_err(dev->dev, "failed to initialize vblank\n");
return ret;
@@ -121,7 +121,7 @@ int vs_drm_initialize(struct vs_dc *dc, struct platform_device *pdev)
vdrm->crtcs[i] = crtc;
}
- ret = drm_vblank_init(drm, dc->identity.display_count);
+ ret = drm_vblank_init(drm);
if (ret)
return ret;
@@ -381,7 +381,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
for (i = 0 ; i < vgdev->num_scanouts; ++i)
vgdev_output_init(vgdev, i);
- ret = drm_vblank_init(vgdev->ddev, vgdev->num_scanouts);
+ ret = drm_vblank_init(vgdev->ddev);
if (ret)
return ret;
@@ -192,8 +192,7 @@ int vkms_create(struct vkms_config *config)
goto out_devres;
}
- ret = drm_vblank_init(&vkms_device->drm,
- vkms_config_get_num_crtcs(config));
+ ret = drm_vblank_init(&vkms_device->drm);
if (ret) {
DRM_ERROR("Failed to vblank\n");
goto out_devres;
@@ -212,7 +212,7 @@ vmw_vkms_init(struct vmw_private *vmw)
ret = kstrtobool(buffer, &vmw->vkms_enabled);
if (!ret && vmw->vkms_enabled) {
- ret = drm_vblank_init(&vmw->drm, VMWGFX_NUM_DISPLAY_UNITS);
+ ret = drm_vblank_init(&vmw->drm);
vmw->vkms_enabled = (ret == 0);
}
@@ -504,7 +504,7 @@ int zynqmp_dpsub_drm_init(struct zynqmp_dpsub *dpsub)
drm->mode_config.max_width = ZYNQMP_DISP_MAX_WIDTH;
drm->mode_config.max_height = ZYNQMP_DISP_MAX_HEIGHT;
- ret = drm_vblank_init(drm, 1);
+ ret = drm_vblank_init(drm);
if (ret)
return ret;
@@ -285,7 +285,7 @@ struct drm_vblank_crtc {
};
struct drm_vblank_crtc *drm_crtc_vblank_crtc(struct drm_crtc *crtc);
-int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs);
+int drm_vblank_init(struct drm_device *dev);
bool drm_dev_has_vblank(const struct drm_device *dev);
u64 drm_crtc_vblank_count(struct drm_crtc *crtc);
u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,