[PATCH v10 42/42] dummy device at mei_hdcp for comp purpose

Ramalingam C ramalingam.c at intel.com
Mon Jan 28 05:18:27 UTC 2019


Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c  |  2 ++
 drivers/misc/mei/hdcp/mei_hdcp.c | 46 +++++++++++++++++++++++++++++-----------
 2 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 39bdf1f72e0b..3096ecd688bd 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1720,6 +1720,7 @@ static int i915_component_master_bind(struct device *dev)
 	struct drm_i915_private *dev_priv = kdev_to_i915(dev);
 	int ret;
 
+	DRM_DEBUG("\n");
 	ret = component_bind_all(dev, dev_priv->comp_master);
 	if (ret < 0)
 		return ret;
@@ -1735,6 +1736,7 @@ static void i915_component_master_unbind(struct device *dev)
 {
 	struct drm_i915_private *dev_priv = kdev_to_i915(dev);
 
+	DRM_DEBUG("\n");
 	intel_audio_deinit_unlocked(dev_priv);
 	i915_driver_unload_head(dev_priv);
 	drm_atomic_helper_shutdown(&dev_priv->drm);
diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 8203cbda1865..9a4f773ac4e0 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -38,7 +38,9 @@ static struct {
 	 */
 	struct mutex mutex;
 	bool comp_registered;
-	struct device *orig_dev;
+	struct device *mei_dev;
+	struct device dev;
+	struct device_driver drv;
 } mei_data;
 
 /**
@@ -774,28 +776,28 @@ static struct i915_hdcp_component_ops mei_hdcp_ops = {
 	.close_hdcp_session = mei_close_hdcp_session,
 };
 
-static int mei_hdcp_component_bind(struct device *mei_kdev,
+static int mei_hdcp_component_bind(struct device *dev,
 				   struct device *i915_kdev, void *data)
 {
 	struct i915_component_master *master_comp = data;
 
-	dev_info(mei_kdev, "MEI HDCP comp bind\n");
+	dev_info(dev, "MEI HDCP comp bind\n");
 	WARN_ON(master_comp->hdcp_ops);
 	master_comp->hdcp_ops = &mei_hdcp_ops;
-	master_comp->mei_dev = mei_kdev;
+	master_comp->mei_dev = mei_data.mei_dev;
 
 	mei_data.master_comp = master_comp;
 
 	return 0;
 }
 
-static void mei_hdcp_component_unbind(struct device *mei_kdev,
+static void mei_hdcp_component_unbind(struct device *dev,
 				      struct device *i915_kdev, void *data)
 {
 	struct i915_component_master *master_comp = data;
 
-	if (!WARN_ON(!mei_kdev))
-		dev_info(mei_kdev, "MEI HDCP comp unbind\n");
+	if (!WARN_ON(!dev))
+		dev_info(dev, "MEI HDCP comp unbind\n");
 	master_comp->hdcp_ops = NULL;
 	master_comp->mei_dev = NULL;
 	mei_data.master_comp = NULL;
@@ -806,17 +808,21 @@ static const struct component_ops mei_hdcp_component_bind_ops = {
 	.unbind	= mei_hdcp_component_unbind,
 };
 
-static void mei_hdcp_component_init(struct device *dev)
+static void mei_hdcp_component_init(struct device *dev,
+				    struct device *mei_dev)
 {
 	int ret;
 
 	mutex_lock(&mei_data.mutex);
+	mei_data.mei_dev = mei_dev;
+
 	if (mei_data.comp_registered && mei_data.master_comp) {
 		/*
 		 * Component binding is not broken at driver->remove.
 		 * So at next driver probe, we need to update the dev ptr.
 		 */
-		mei_data.master_comp->mei_dev = dev;
+		dev_info(dev, "MEI HDCP comp init (repeated)\n");
+		mei_data.master_comp->mei_dev = mei_dev;
 		mutex_unlock(&mei_data.mutex);
 		return;
 	}
@@ -830,7 +836,6 @@ static void mei_hdcp_component_init(struct device *dev)
 	}
 
 	mei_data.comp_registered = true;
-	mei_data.orig_dev = dev;
 	mutex_unlock(&mei_data.mutex);
 }
 
@@ -841,6 +846,7 @@ static void mei_hdcp_component_cleanup(struct device *dev)
 	dev_info(dev, "MEI HDCP comp cleanup\n");
 	component_del(dev, &mei_hdcp_component_bind_ops);
 	mei_data.comp_registered = false;
+	mei_data.mei_dev = NULL;
 }
 
 static int mei_hdcp_probe(struct mei_cl_device *cldev,
@@ -853,7 +859,8 @@ static int mei_hdcp_probe(struct mei_cl_device *cldev,
 		dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret);
 		return ret;
 	}
-	mei_hdcp_component_init(&cldev->dev);
+
+	mei_hdcp_component_init(&mei_data.dev, &cldev->dev);
 
 	return 0;
 }
@@ -885,9 +892,22 @@ static struct mei_cl_driver mei_hdcp_driver = {
 	.remove		= mei_hdcp_remove,
 };
 
+static void mei_dev_release(struct device *dev)
+{
+}
+
 static int __init mei_hdcp_init(void)
 {
+	int ret;
+
 	mutex_init(&mei_data.mutex);
+
+	mei_data.dev.release = mei_dev_release;
+	device_initialize(&mei_data.dev);
+	mei_data.drv.name = "mei_hdcp";
+
+	mei_data.dev.driver = &mei_data.drv;
+
 	return mei_cldev_driver_register(&mei_hdcp_driver);
 }
 
@@ -895,10 +915,12 @@ static void __exit mei_hdcp_exit(void)
 {
 	mutex_lock(&mei_data.mutex);
 	if (mei_data.comp_registered)
-		mei_hdcp_component_cleanup(mei_data.orig_dev);
+		mei_hdcp_component_cleanup(&mei_data.dev);
 	mutex_unlock(&mei_data.mutex);
 
+	put_device(&mei_data.dev);
 	mei_cldev_driver_unregister(&mei_hdcp_driver);
+
 	mutex_destroy(&mei_data.mutex);
 }
 
-- 
2.7.4



More information about the Intel-gfx-trybot mailing list