From: Sean Paul <seanpaul@chromium.org>
To: Neil Armstrong <narmstrong@baylibre.com>
Cc: airlied@linux.ie, hans.verkuil@cisco.com, lee.jones@linaro.org,
olof@lixom.net, seanpaul@google.com, sadolfsson@google.com,
felixe@google.com, bleung@google.com, darekm@google.com,
marcheu@chromium.org, fparent@baylibre.com,
dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/5] media: cec-notifier: Get notifier by device and connector name
Date: Fri, 18 May 2018 11:48:19 -0400 [thread overview]
Message-ID: <20180518154819.GL3373@art_vandelay> (raw)
In-Reply-To: <1526648704-16873-2-git-send-email-narmstrong@baylibre.com>
On Fri, May 18, 2018 at 03:05:00PM +0200, Neil Armstrong wrote:
> In non device-tree world, we can need to get the notifier by the driver
> name directly and eventually defer probe if not yet created.
>
> This patch adds a variant of the get function by using the device name
> instead and will not create a notifier if not yet created.
>
> But the i915 driver exposes at least 2 HDMI connectors, this patch also
> adds the possibility to add a connector name tied to the notifier device
> to form a tuple and associate different CEC controllers for each HDMI
> connectors.
>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Hi Neil,
Thanks for posting these!
> ---
> drivers/media/cec/cec-notifier.c | 11 ++++++++---
> include/media/cec-notifier.h | 27 ++++++++++++++++++++++++---
> 2 files changed, 32 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/media/cec/cec-notifier.c b/drivers/media/cec/cec-notifier.c
> index 16dffa0..dd2078b 100644
> --- a/drivers/media/cec/cec-notifier.c
> +++ b/drivers/media/cec/cec-notifier.c
> @@ -21,6 +21,7 @@ struct cec_notifier {
> struct list_head head;
> struct kref kref;
> struct device *dev;
> + const char *conn;
> struct cec_adapter *cec_adap;
> void (*callback)(struct cec_adapter *adap, u16 pa);
>
> @@ -30,13 +31,14 @@ struct cec_notifier {
> static LIST_HEAD(cec_notifiers);
> static DEFINE_MUTEX(cec_notifiers_lock);
>
> -struct cec_notifier *cec_notifier_get(struct device *dev)
> +struct cec_notifier *cec_notifier_get_conn(struct device *dev, const char *conn)
> {
> struct cec_notifier *n;
>
> mutex_lock(&cec_notifiers_lock);
> list_for_each_entry(n, &cec_notifiers, head) {
> - if (n->dev == dev) {
> + if (n->dev == dev &&
> + (!conn || !strcmp(n->conn, conn))) {
> kref_get(&n->kref);
> mutex_unlock(&cec_notifiers_lock);
> return n;
> @@ -46,6 +48,8 @@ struct cec_notifier *cec_notifier_get(struct device *dev)
> if (!n)
> goto unlock;
> n->dev = dev;
> + if (conn)
> + n->conn = kstrdup(conn, GFP_KERNEL);
> n->phys_addr = CEC_PHYS_ADDR_INVALID;
> mutex_init(&n->lock);
> kref_init(&n->kref);
> @@ -54,7 +58,7 @@ struct cec_notifier *cec_notifier_get(struct device *dev)
> mutex_unlock(&cec_notifiers_lock);
> return n;
> }
> -EXPORT_SYMBOL_GPL(cec_notifier_get);
> +EXPORT_SYMBOL_GPL(cec_notifier_get_conn);
>
> static void cec_notifier_release(struct kref *kref)
> {
> @@ -62,6 +66,7 @@ static void cec_notifier_release(struct kref *kref)
> container_of(kref, struct cec_notifier, kref);
>
> list_del(&n->head);
> + kfree(n->conn);
> kfree(n);
> }
>
> diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h
> index cf0add7..814eeef 100644
> --- a/include/media/cec-notifier.h
> +++ b/include/media/cec-notifier.h
> @@ -20,8 +20,10 @@ struct cec_notifier;
> #if IS_REACHABLE(CONFIG_CEC_CORE) && IS_ENABLED(CONFIG_CEC_NOTIFIER)
>
> /**
> - * cec_notifier_get - find or create a new cec_notifier for the given device.
> + * cec_notifier_get_conn - find or create a new cec_notifier for the given
> + * device and connector tuple.
> * @dev: device that sends the events.
> + * @conn: the connector name from which the event occurs
Probably best to use "name" instead of connector, since it doesn't necessarily
_have_ to be a connector name. So, cec_notifier_get_by_name(dev, name)
> *
> * If a notifier for device @dev already exists, then increase the refcount
> * and return that notifier.
> @@ -31,7 +33,8 @@ struct cec_notifier;
> *
> * Return NULL if the memory could not be allocated.
> */
> -struct cec_notifier *cec_notifier_get(struct device *dev);
> +struct cec_notifier *cec_notifier_get_conn(struct device *dev,
> + const char *conn);
>
> /**
> * cec_notifier_put - decrease refcount and delete when the refcount reaches 0.
> @@ -85,7 +88,8 @@ void cec_register_cec_notifier(struct cec_adapter *adap,
> struct cec_notifier *notifier);
>
> #else
> -static inline struct cec_notifier *cec_notifier_get(struct device *dev)
> +static inline struct cec_notifier *cec_notifier_get_conn(struct device *dev,
> + const char *conn)
> {
> /* A non-NULL pointer is expected on success */
> return (struct cec_notifier *)0xdeadfeed;
> @@ -121,6 +125,23 @@ static inline void cec_register_cec_notifier(struct cec_adapter *adap,
> #endif
>
> /**
> + * cec_notifier_get - find or create a new cec_notifier for the given device.
> + * @dev: device that sends the events.
> + *
> + * If a notifier for device @dev already exists, then increase the refcount
> + * and return that notifier.
> + *
> + * If it doesn't exist, then allocate a new notifier struct and return a
> + * pointer to that new struct.
You might also want to cover the case where you have multiple named notifiers
for the same device. It looks like it just grabs the first one?
Sean
> + *
> + * Return NULL if the memory could not be allocated.
> + */
> +static inline struct cec_notifier *cec_notifier_get(struct device *dev)
> +{
> + return cec_notifier_get_conn(dev, NULL);
> +}
> +
> +/**
> * cec_notifier_phys_addr_invalidate() - set the physical address to INVALID
> *
> * @n: the CEC notifier
> --
> 2.7.4
>
--
Sean Paul, Software Engineer, Google / Chromium OS
next prev parent reply other threads:[~2018-05-18 15:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-18 13:04 [PATCH v2 0/5] Add ChromeOS EC CEC Support Neil Armstrong
2018-05-18 13:05 ` [PATCH v2 1/5] media: cec-notifier: Get notifier by device and connector name Neil Armstrong
2018-05-18 15:48 ` Sean Paul [this message]
2018-05-21 8:53 ` Neil Armstrong
2018-05-18 13:05 ` [PATCH v2 2/5] drm/i915: hdmi: add CEC notifier to intel_hdmi Neil Armstrong
2018-05-18 13:24 ` Ville Syrjälä
2018-05-21 8:54 ` Neil Armstrong
2018-05-18 13:05 ` [PATCH v2 3/5] mfd: cros-ec: Introduce CEC commands and events definitions Neil Armstrong
2018-05-18 16:19 ` Enric Balletbo Serra
2018-05-21 9:00 ` Neil Armstrong
2018-05-24 5:47 ` Benson Leung
2018-05-24 8:36 ` Neil Armstrong
2018-05-18 13:05 ` [PATCH v2 4/5] mfd: cros_ec_dev: Add CEC sub-device registration Neil Armstrong
2018-05-18 13:41 ` Enric Balletbo Serra
2018-05-18 13:05 ` [PATCH v2 5/5] media: platform: Add Chrome OS EC CEC driver Neil Armstrong
2018-05-18 15:02 ` Enric Balletbo Serra
2018-05-21 9:01 ` Neil Armstrong
2018-05-18 14:04 ` [PATCH v2 0/5] Add ChromeOS EC CEC Support Enric Balletbo Serra
2018-05-21 9:02 ` Neil Armstrong
-- strict thread matches above, loose matches on Subject: below --
2018-05-15 14:42 Neil Armstrong
2018-05-15 14:42 ` [PATCH v2 1/5] media: cec-notifier: Get notifier by device and connector name Neil Armstrong
2018-05-15 15:22 ` Hans Verkuil
2018-05-15 16:10 ` Neil Armstrong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180518154819.GL3373@art_vandelay \
--to=seanpaul@chromium.org \
--cc=airlied@linux.ie \
--cc=bleung@google.com \
--cc=darekm@google.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=felixe@google.com \
--cc=fparent@baylibre.com \
--cc=hans.verkuil@cisco.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=lee.jones@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=marcheu@chromium.org \
--cc=narmstrong@baylibre.com \
--cc=olof@lixom.net \
--cc=sadolfsson@google.com \
--cc=seanpaul@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox