浏览代码

Merge branch 'drm-hisilicon-next' of github.com:xin3liang/linux into drm-next

misc hisilicon cleanups.

* 'drm-hisilicon-next' of github.com:xin3liang/linux:
  drm/hisilicon: Fix DRM_INFO printed issue
  drm/hisilicon: Make kirin_drm_unbind sufficient
  drm/hisilicon: Use drm_connector_register_all
Dave Airlie 9 年之前
父节点
当前提交
93f517c4a7
共有 2 个文件被更改,包括 9 次插入32 次删除
  1. 2 1
      drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
  2. 7 31
      drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c

+ 2 - 1
drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c

@@ -430,12 +430,13 @@ static void dsi_set_mipi_phy(void __iomem *base,
 	 * wait for phy's clock ready
 	 */
 	delay_count = 100;
-	while (delay_count--) {
+	while (delay_count) {
 		val = readl(base +  PHY_STATUS);
 		if ((BIT(0) | BIT(2)) & val)
 			break;
 
 		udelay(1);
+		delay_count--;
 	}
 
 	if (!delay_count)

+ 7 - 31
drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c

@@ -201,35 +201,6 @@ static int compare_of(struct device *dev, void *data)
 	return dev->of_node == data;
 }
 
-static int kirin_drm_connectors_register(struct drm_device *dev)
-{
-	struct drm_connector *connector;
-	struct drm_connector *failed_connector;
-	int ret;
-
-	mutex_lock(&dev->mode_config.mutex);
-	drm_for_each_connector(connector, dev) {
-		ret = drm_connector_register(connector);
-		if (ret) {
-			failed_connector = connector;
-			goto err;
-		}
-	}
-	mutex_unlock(&dev->mode_config.mutex);
-
-	return 0;
-
-err:
-	drm_for_each_connector(connector, dev) {
-		if (failed_connector == connector)
-			break;
-		drm_connector_unregister(connector);
-	}
-	mutex_unlock(&dev->mode_config.mutex);
-
-	return ret;
-}
-
 static int kirin_drm_bind(struct device *dev)
 {
 	struct drm_driver *driver = &kirin_drm_driver;
@@ -251,7 +222,7 @@ static int kirin_drm_bind(struct device *dev)
 		goto err_kms_cleanup;
 
 	/* connectors should be registered after drm device register */
-	ret = kirin_drm_connectors_register(drm_dev);
+	ret = drm_connector_register_all(drm_dev);
 	if (ret)
 		goto err_drm_dev_unregister;
 
@@ -273,7 +244,12 @@ err_drm_dev_unref:
 
 static void kirin_drm_unbind(struct device *dev)
 {
-	drm_put_dev(dev_get_drvdata(dev));
+	struct drm_device *drm_dev = dev_get_drvdata(dev);
+
+	drm_connector_unregister_all(drm_dev);
+	drm_dev_unregister(drm_dev);
+	kirin_drm_kms_cleanup(drm_dev);
+	drm_dev_unref(drm_dev);
 }
 
 static const struct component_master_ops kirin_drm_ops = {