Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp789760imm; Tue, 15 May 2018 09:12:00 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpJo+ZufJ1leZshIfKgkLQ0tFhaDJ2mN7LPoSwWhgXtWuRNLgSAIoHs4P0x8pf1ePSnybCG X-Received: by 2002:a17:902:14d:: with SMTP id 71-v6mr15096736plb.275.1526400720177; Tue, 15 May 2018 09:12:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526400720; cv=none; d=google.com; s=arc-20160816; b=XzhvQ3SZPVPWe5qrT8KqBvMWDOeWaCrC0NPpCgsw4eqipT58X6zJje8BP1eKENNaf9 VvWgYWYvmtDVcHkUA8fnDiaS5J0bHYouFv6/6a3Tt0R8Z5ylKAVeQ0/bR+3twQL60yR0 QgiEfwanH1f86pnZNX3o6US4JF3M+VEJBlA6i0hblLxeyYxAlSH77fFVdFTo13AN3rmW 5We4u6MKapXnzbRiYGYDeyOfLGZeSCbHTFwmuQo48YSwfVRn69MVBNNylfudQg2EhfFH 8E/v+qM9znNL8WcAfOHVupl44KydB5yEkWYUlpFVPIsYxv9oif/80yx+s8qA5Tae9kID ztnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:autocrypt:openpgp:from:references:cc:to :subject:dkim-signature:arc-authentication-results; bh=ZRFkmUxj0XbzY18lheabrtbo9ap/igVcNUlx263yLyQ=; b=uzjBhCEx3bUIQRyVwKug2zksTNSn2RyLQplo1NyX8bRo4oWP2yPWpWxal5VsxqgHGb 5LZeJ2BaAQUFTCDt+enBribJFFRIU6fhNPr3xJ2sOO+QjmKkccCH2aXcZSSpyXjvBRcY CRmEL2kBvA0y2uItPQ/QVSXU5vQhEXKAQfPjJtnCyHej+XGUBy/bSXq/OJEkwMOQnFip 52wgb8GU7QOt2gDrwIL1x8bCTRPubJ49rd9K3bdcBW41+vHhGaAcvdCUqn/GJgmaQ9nx RnAxQEZgsV249cC0x8c0dlfxxZlnfZgQrpXz3cUz8FKvoVQVyjiHi5C71JlR3gK2MIfG L0kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=XaagEWEo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 32-v6si327942ple.319.2018.05.15.09.11.45; Tue, 15 May 2018 09:12:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=XaagEWEo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753825AbeEOQLD (ORCPT + 99 others); Tue, 15 May 2018 12:11:03 -0400 Received: from mail-qt0-f195.google.com ([209.85.216.195]:43455 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752851AbeEOQK7 (ORCPT ); Tue, 15 May 2018 12:10:59 -0400 Received: by mail-qt0-f195.google.com with SMTP id f13-v6so951150qtp.10 for ; Tue, 15 May 2018 09:10:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:openpgp:autocrypt:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=ZRFkmUxj0XbzY18lheabrtbo9ap/igVcNUlx263yLyQ=; b=XaagEWEo0fw9UpSZ3hQqMac+06WD+yfnX4DKsNsJPtLnWfo3Wmd9XZgk0FkvI8nfJ1 Qnk/NAdnXG0V6fJ7+BEt0rT7lG32vZoZSsQjeSmumcwpM+AEZ54YveYGJxSxc8FFzWI8 G2MpwQB/xjrng5Edt7XspkeA3m2nBcQiVyDl/Z6xcLtLpVWNDJOfzkBynmYI0JQgtT7A xV44W7W80/GjsPsbp13FC7wUBCUMD/sUVeGrsf7N+XaHiSOOJk7Das6CiL1Y5d9lP5sf tf/crEz5GrdEs8uW/3iwR/T/JCEpe2a7V6e5DKFDCHHHsmmf7RUvUJS5waXfO+iLh9dA VYpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:openpgp:autocrypt :organization:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=ZRFkmUxj0XbzY18lheabrtbo9ap/igVcNUlx263yLyQ=; b=RyuNOTXIQDoCrIWdWYl7udP9jPKlz84VbRv5VX8luy/WHy0A8h0olrYDVJ5nogY0xD pEwggAIF6LSL1hSG0PF/MVsZuHdqYMWZy9BPgxOpa8mR6VXLc7EKQP0Uq6tLjtF0g0rl rFhLwejytghd8CJ1mh39FLGVef/WOwnFf2byAjezt3PDAfXYrk9KDpCQ3FcDd9pA+XQa QJk638IwIHd2Dd8ctwevhGWjl9TiRROjnHy+Aoji913v8WIo0usR9ZxI0N5dO1yDzoTW bziKLZcwXKd05pRjDHI0xWw2VfRGqL/Cmj8NbQU938bA2ojQ0vauDiXdNAhBBxKzD9CE kxtg== X-Gm-Message-State: ALKqPwcxQjME/ZCyodz9w/Yo/EDECNuXcpcwBPRd6vtVoyMbh3OQHf6u gAY72AeLh3uV4+tPWZgebJMGpqV+QAY= X-Received: by 2002:aed:3bae:: with SMTP id r43-v6mr14145864qte.362.1526400658540; Tue, 15 May 2018 09:10:58 -0700 (PDT) Received: from ?IPv6:2620:0:1043:fd00:748b:2433:2688:e1f? ([2620:0:1043:fd00:748b:2433:2688:e1f]) by smtp.gmail.com with ESMTPSA id m8-v6sm269009qth.24.2018.05.15.09.10.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 May 2018 09:10:57 -0700 (PDT) Subject: Re: [PATCH v2 1/5] media: cec-notifier: Get notifier by device and connector name To: Hans Verkuil , airlied@linux.ie, hans.verkuil@cisco.com, lee.jones@linaro.org, olof@lixom.net, seanpaul@google.com Cc: 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 References: <1526395342-15481-1-git-send-email-narmstrong@baylibre.com> <1526395342-15481-2-git-send-email-narmstrong@baylibre.com> <309fa9b4-0c0b-25af-31a3-84fe5fc00743@xs4all.nl> From: Neil Armstrong Openpgp: preference=signencrypt Autocrypt: addr=narmstrong@baylibre.com; prefer-encrypt=mutual; keydata= xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4 BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9 qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB AAHNKE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT7CwHsEEwEKACUC GyMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheABQJXDO2CAhkBAAoJEBaat7Gkz/iubGIH/iyk RqvgB62oKOFlgOTYCMkYpm2aAOZZLf6VKHKc7DoVwuUkjHfIRXdslbrxi4pk5VKU6ZP9AKsN NtMZntB8WrBTtkAZfZbTF7850uwd3eU5cN/7N1Q6g0JQihE7w4GlIkEpQ8vwSg5W7hkx3yQ6 2YzrUZh/b7QThXbNZ7xOeSEms014QXazx8+txR7jrGF3dYxBsCkotO/8DNtZ1R+aUvRfpKg5 ZgABTC0LmAQnuUUf2PHcKFAHZo5KrdO+tyfL+LgTUXIXkK+tenkLsAJ0cagz1EZ5gntuheLD YJuzS4zN+1Asmb9kVKxhjSQOcIh6g2tw7vaYJgL/OzJtZi6JlIXOwE0ETVkGzwEIALyKDN/O GURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYpQTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXM coJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hi SvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY4yG6xI99NIPEVE9lNBXBKIlewIyVlkOa YvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoMMtsyw18YoX9BqMFInxqYQQ3j/HpVgTSv mo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUXoUk33HEAEQEAAcLAXwQYAQIACQUCTVkG zwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfnM7IbRuiSZS1unlySUVYu3SD6YBYnNi3G 5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa33eDIHu/zr1HMKErm+2SD6PO9umRef8V8 2o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCSKmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+ RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJ C3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTTQbM0WUIBIcGmq38+OgUsMYu4NzLu7uZF Acmp6h8g Organization: Baylibre Message-ID: <19cebe7d-5217-de5e-c668-ea2926e5ea0f@baylibre.com> Date: Tue, 15 May 2018 18:10:53 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <309fa9b4-0c0b-25af-31a3-84fe5fc00743@xs4all.nl> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 15/05/2018 17:22, Hans Verkuil wrote: > On 05/15/2018 04:42 PM, 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. > > The patch looks good, but I'm curious about this paragraph above. > > Was this tested with devices with more than one HDMI output? Or only on > laptops with a single physical HDMI output? If there are two or more > outputs then I guess it is the HW designer that decides with output gets > CEC support? The driver exposes 2 HDMI connectors (I suspect one is connected to the USB-C alt mode mux along the DP port), and only one connected has the CEC line connected to the Embedded Controller. Neil > > Regards, > > Hans > >> >> Signed-off-by: Neil Armstrong >> --- >> 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 >> * >> * 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. >> + * >> + * 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 >> >