[PATCH v3 05/40] misc/mei/hdcp: Notifier chain for mei cldev state change

Usyskin, Alexander alexander.usyskin at intel.com
Wed Apr 4 06:12:39 UTC 2018


> -----Original Message-----
> From: C, Ramalingam
> Sent: Tuesday, April 03, 2018 16:57
> To: intel-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org;
> seanpaul at chromium.org; daniel at ffwll.ch; chris at chris-wilson.co.uk;
> jani.nikula at linux.intel.com; Winkler, Tomas <tomas.winkler at intel.com>;
> Usyskin, Alexander <alexander.usyskin at intel.com>
> Cc: Vivi, Rodrigo <rodrigo.vivi at intel.com>; C, Ramalingam
> <ramalingam.c at intel.com>
> 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 at intel.com>
> ---

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 at intel.com>
> + */
> +
> +#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



More information about the dri-devel mailing list