> -----Original Message----- > From: C, Ramalingam > Sent: Tuesday, April 03, 2018 16:57 > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx; > seanpaul@xxxxxxxxxxxx; daniel@xxxxxxxx; chris@xxxxxxxxxxxxxxxxxx; > jani.nikula@xxxxxxxxxxxxxxx; Winkler, Tomas <tomas.winkler@xxxxxxxxx>; > Usyskin, Alexander <alexander.usyskin@xxxxxxxxx> > Cc: Vivi, Rodrigo <rodrigo.vivi@xxxxxxxxx>; C, Ramalingam > <ramalingam.c@xxxxxxxxx> > Subject: [PATCH v3 05/40] misc/mei/hdcp: Notifier chain for mei cldev state > change > > Notifier Chain is defined to inform all its clients about the mei > client device state change. Routine is defined for the clients to > register and unregister for the notification on state change. > > v2: > Rebased. > v3: > Notifier chain is adopted for cldev state update [Tomas] > > Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> > --- May be I miss something, but bus subsystem already has notifier chain. (BUS_NOTIFY_ADD_DEVICE etc.) We only ought to make mei_cl_bus_type available in header. > drivers/misc/mei/hdcp/mei_hdcp.c | 36 +++++++++++++++++++++++++++--- > include/linux/mei_hdcp.h | 48 > ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 81 insertions(+), 3 deletions(-) > create mode 100644 include/linux/mei_hdcp.h > > diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c > b/drivers/misc/mei/hdcp/mei_hdcp.c > index b334615728a7..2811a25f8c57 100644 > --- a/drivers/misc/mei/hdcp/mei_hdcp.c > +++ b/drivers/misc/mei/hdcp/mei_hdcp.c > @@ -31,6 +31,32 @@ > #include <linux/slab.h> > #include <linux/uuid.h> > #include <linux/mei_cl_bus.h> > +#include <linux/notifier.h> > +#include <linux/mei_hdcp.h> > + > +static BLOCKING_NOTIFIER_HEAD(mei_cldev_notifier_list); > + > +void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool > enabled) > +{ > + if (enabled) > + blocking_notifier_call_chain(&mei_cldev_notifier_list, > + MEI_CLDEV_ENABLED, cldev); > + else > + blocking_notifier_call_chain(&mei_cldev_notifier_list, > + MEI_CLDEV_DISABLED, NULL); > +} > + > +int mei_cldev_register_notify(struct notifier_block *nb) > +{ > + return blocking_notifier_chain_register(&mei_cldev_notifier_list, > nb); > +} > +EXPORT_SYMBOL_GPL(mei_cldev_register_notify); > + > +int mei_cldev_unregister_notify(struct notifier_block *nb) > +{ > + return blocking_notifier_chain_unregister(&mei_cldev_notifier_list, > nb); > +} > +EXPORT_SYMBOL_GPL(mei_cldev_unregister_notify); > > static int mei_hdcp_probe(struct mei_cl_device *cldev, > const struct mei_cl_device_id *id) > @@ -38,14 +64,18 @@ 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_state_notify_clients(cldev, true); > + return 0; > } > > static int mei_hdcp_remove(struct mei_cl_device *cldev) > { > + mei_cldev_state_notify_clients(cldev, false); > mei_cldev_set_drvdata(cldev, NULL); > return mei_cldev_disable(cldev); > } > @@ -71,4 +101,4 @@ module_mei_cl_driver(mei_hdcp_driver); > > MODULE_AUTHOR("Intel Corporation"); > MODULE_LICENSE("Dual BSD/GPL"); > -MODULE_DESCRIPTION("HDCP"); > +MODULE_DESCRIPTION("MEI HDCP"); > diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h > new file mode 100644 > index 000000000000..3b46bebde718 > --- /dev/null > +++ b/include/linux/mei_hdcp.h > @@ -0,0 +1,48 @@ > +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ > +/* > + * Copyright © 2017-2018 Intel Corporation > + * > + * Permission to use, copy, modify, distribute, and sell this software and its > + * documentation for any purpose is hereby granted without fee, provided > that > + * the above copyright notice appear in all copies and that both that > copyright > + * notice and this permission notice appear in supporting documentation, > and > + * that the name of the copyright holders not be used in advertising or > + * publicity pertaining to distribution of the software without specific, > + * written prior permission. The copyright holders make no representations > + * about the suitability of this software for any purpose. It is provided "as > + * is" without express or implied warranty. > + * > + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO > THIS SOFTWARE, > + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND > FITNESS, IN NO > + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, > INDIRECT OR > + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING > FROM LOSS OF USE, > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE > OR OTHER > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE > OR PERFORMANCE > + * OF THIS SOFTWARE. > + * > + * Authors: > + * Ramalingam C <ramalingam.c@xxxxxxxxx> > + */ > + > +#ifndef _LINUX_MEI_HDCP_H > +#define _LINUX_MEI_HDCP_H > + > +enum mei_cldev_state { > + MEI_CLDEV_DISABLED, > + MEI_CLDEV_ENABLED > +}; > + > +#ifdef CONFIG_INTEL_MEI_HDCP > +int mei_cldev_register_notify(struct notifier_block *nb); > +int mei_cldev_unregister_notify(struct notifier_block *nb); > +#else > +static int mei_cldev_register_notify(struct notifier_block *nb) > +{ > + return -ENODEV; > +} > +static int mei_cldev_unregister_notify(struct notifier_block *nb) > +{ > + return -ENODEV; > +} > +#endif /* defined (CONFIG_INTEL_MEI_HDCP) */ > +#endif /* defined (_LINUX_MEI_HDCP_H) */ > -- > 2.7.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel