>-----Original Message----- >From: C, Ramalingam >Sent: Saturday, July 14, 2018 8:45 AM >To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx; >daniel@xxxxxxxx; seanpaul@xxxxxxxxxxxx; Winkler, Tomas ><tomas.winkler@xxxxxxxxx>; Usyskin, Alexander <alexander.usyskin@xxxxxxxxx>; >Shankar, Uma <uma.shankar@xxxxxxxxx> >Cc: Sharma, Shashank <shashank.sharma@xxxxxxxxx>; C, Ramalingam ><ramalingam.c@xxxxxxxxx> >Subject: [PATCH v6 23/35] misc/mei/hdcp: Component framework for I915 >Interface > >Mei hdcp driver is designed as component slave for the I915 component master. > >v2: > Rebased. >v3: > Notifier chain is adopted for cldev state update [Tomas] >v4: > Made static dummy functions as inline in mei_hdcp.h > API for polling client device status > IS_ENABLED used in header, for config status for mei_hdcp. >v5: > Replacing the notifier with component framework. [Daniel] >v6: > Rebased on the I915 comp master redesign. > >Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> >--- > drivers/misc/mei/hdcp/mei_hdcp.c | 89 >+++++++++++++++++++++++++++++++++++++++- > 1 file changed, 87 insertions(+), 2 deletions(-) > >diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c >b/drivers/misc/mei/hdcp/mei_hdcp.c >index 4cd6fdd01181..adfb14a2ea4f 100644 >--- a/drivers/misc/mei/hdcp/mei_hdcp.c >+++ b/drivers/misc/mei/hdcp/mei_hdcp.c >@@ -31,6 +31,80 @@ > #include <linux/slab.h> > #include <linux/uuid.h> > #include <linux/mei_cl_bus.h> >+#include <linux/component.h> >+#include <drm/i915_component.h> >+ >+bool mei_hdcp_component_registered; Make this static. >+static struct mei_cl_device *mei_cldev; >+ >+struct i915_hdcp_component_ops mei_hdcp_component_ops = { >+ .owner = THIS_MODULE, >+ .initiate_hdcp2_session = NULL, >+ .verify_receiver_cert_prepare_km = NULL, >+ .verify_hprime = NULL, >+ .store_pairing_info = NULL, >+ .initiate_locality_check = NULL, >+ .verify_lprime = NULL, >+ .get_session_key = NULL, >+ .repeater_check_flow_prepare_ack = NULL, >+ .verify_mprime = NULL, >+ .enable_hdcp_authentication = NULL, >+ .close_hdcp_session = NULL, >+}; >+ >+static int mei_hdcp_component_bind(struct device *mei_kdev, >+ struct device *i915_kdev, void *data) { >+ struct i915_component_master *comp = data; >+ >+ dev_info(mei_kdev, "MEI HDCP comp bind\n"); >+ WARN_ON(comp->hdcp_ops); >+ >+ comp->hdcp_ops = &mei_hdcp_component_ops; >+ comp->i915_kdev = i915_kdev; >+ comp->mei_cldev = mei_cldev; >+ mei_cldev_set_drvdata(mei_cldev, (void *)comp); >+ >+ return 0; >+} >+ >+static void mei_hdcp_component_unbind(struct device *mei_kdev, >+ struct device *i915_kdev, void *data) { >+ struct i915_component_master *comp = data; >+ >+ dev_info(mei_kdev, "MEI HDCP comp unbind\n"); >+ comp->hdcp_ops = NULL; >+ comp->mei_cldev = NULL; >+} >+ >+static const struct component_ops mei_hdcp_component_bind_ops = { >+ .bind = mei_hdcp_component_bind, >+ .unbind = mei_hdcp_component_unbind, >+}; >+ >+void mei_hdcp_component_init(struct device *dev) { >+ int ret; >+ >+ dev_err(dev, "MEI HDCP comp init\n"); >+ ret = component_add(dev, &mei_hdcp_component_bind_ops); >+ if (ret < 0) { >+ dev_err(dev, "Failed to add MEI HDCP comp (%d)\n", ret); >+ return; >+ } >+ >+ mei_hdcp_component_registered = true; >+} >+ >+void mei_hdcp_component_cleanup(struct device *dev) { >+ if (!mei_hdcp_component_registered) >+ return; >+ >+ component_del(dev, &mei_hdcp_component_bind_ops); >+ mei_hdcp_component_registered = false; } > > static int mei_hdcp_probe(struct mei_cl_device *cldev, > const struct mei_cl_device_id *id) @@ -38,15 +112,26 >@@ static int mei_hdcp_probe(struct mei_cl_device *cldev, > int ret; > > ret = mei_cldev_enable(cldev); >- if (ret < 0) >+ if (ret < 0) { > dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret); >+ return ret; >+ } > >- return ret; >+ mei_cldev = cldev; >+ mei_hdcp_component_init(&cldev->dev); Leave a blank line here. With the above fixed. Reviewed-by: Uma Shankar <uma.shankar@xxxxxxxxx> >+ return 0; > } > > static int mei_hdcp_remove(struct mei_cl_device *cldev) { >+ struct i915_hdcp_component *comp; >+ >+ comp = mei_cldev_get_drvdata(cldev); >+ mei_hdcp_component_cleanup(&cldev->dev); >+ >+ mei_cldev = NULL; > mei_cldev_set_drvdata(cldev, NULL); >+ > return mei_cldev_disable(cldev); > } > >-- >2.7.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel