From patchwork Wed Apr 5 10:37:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 96838 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp198109qgd; Wed, 5 Apr 2017 03:39:54 -0700 (PDT) X-Received: by 10.98.80.1 with SMTP id e1mr29420657pfb.250.1491388794073; Wed, 05 Apr 2017 03:39:54 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i63si20244041pgc.265.2017.04.05.03.39.53; Wed, 05 Apr 2017 03:39:54 -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=@linaro.org; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933597AbdDEKiy (ORCPT + 14 others); Wed, 5 Apr 2017 06:38:54 -0400 Received: from mail-wr0-f177.google.com ([209.85.128.177]:33269 "EHLO mail-wr0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933321AbdDEKh7 (ORCPT ); Wed, 5 Apr 2017 06:37:59 -0400 Received: by mail-wr0-f177.google.com with SMTP id w43so7647963wrb.0 for ; Wed, 05 Apr 2017 03:37:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=gFRwKOWkruLyGP5Uv9NUu9OO+9gGbysW7etyjN2G0Hs=; b=ZGlliXANg4FC2jWK0zULuerbADyieog/4P/pCQeea5EaDbRgpRQgJHSBy6BWZzrXU1 zUhZnL4s+VTVYlatZm56O6XZlKDT+JaYHPeNj8xf9vYXN3GAPV5LZ0C6DAKw6VMAYKvO JMeOFce7rABbirQwvGcYXvDB3XVcOb59RPePM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=gFRwKOWkruLyGP5Uv9NUu9OO+9gGbysW7etyjN2G0Hs=; b=AKcjloxmVu1AK5sUZAMFrgYAd2/2RjsnfQBktm0pfAqSLGbQRd1qoYEcFlxkNyripr ABFOmY5rw7bQMqW18dLqflOczm61JRB51+h8Wh67bxySHDAgpnCy2ML4CF27fQ9bCHIg JmQlqe7sGUta/+aGvVnNT7a9CBdpYp2bsjzCDJoma+Swab86L8P911RfcEndhYrQV3aW g+K9xfzCLqUpouLyal7RJaLSJvH6e/4CQLN6VxF95ttpXNjIzrr1W8i1DRqxlXnfWvyK K2fI2+oy+lhVDSCrM1u7l7fc5kGfhfRdMvKEay/oAIBXxN++QKz9Borx/2vUo11EK1xu VqlA== X-Gm-Message-State: AFeK/H3WCPZ0PlM0+MhYkAse8/XdySQQ4y7X5Fbo4KIwIM3kkNhRY6FO zlbaY6nzFNi6a6AE X-Received: by 10.28.73.197 with SMTP id w188mr18679965wma.46.1491388678213; Wed, 05 Apr 2017 03:37:58 -0700 (PDT) Received: from localhost.localdomain ([2.31.167.174]) by smtp.gmail.com with ESMTPSA id 189sm21882284wmm.31.2017.04.05.03.37.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Apr 2017 03:37:57 -0700 (PDT) From: Lee Jones To: hans.verkuil@cisco.com, mchehab@kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@stlinux.com, patrice.chotard@st.com, linux-media@vger.kernel.org, benjamin.gaignard@st.com, linux@armlinux.org.uk, Lee Jones Subject: [PATCH 1/2] [media] rc-core: Add inlined stubs for core rc_* functions Date: Wed, 5 Apr 2017 11:37:51 +0100 Message-Id: <20170405103752.2057-1-lee.jones@linaro.org> X-Mailer: git-send-email 2.9.3 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently users have to use all sorts of ugly #ifery within their drivers in order to avoid linking issues at build time. This patch allows users to safely call these functions when !CONFIG_RC_CORE and make decisions based on the return value instead. This is a much more common and clean way of doing things within the Linux kernel. Signed-off-by: Lee Jones --- include/media/rc-core.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) -- 2.9.3 diff --git a/include/media/rc-core.h b/include/media/rc-core.h index 73ddd721..45ba739 100644 --- a/include/media/rc-core.h +++ b/include/media/rc-core.h @@ -209,7 +209,14 @@ struct rc_dev { * @rc_driver_type: specifies the type of the RC output to be allocated * returns a pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE struct rc_dev *rc_allocate_device(enum rc_driver_type); +#else +static inline struct rc_dev *rc_allocate_device(int unused) +{ + return NULL; +} +#endif /** * devm_rc_allocate_device - Managed RC device allocation @@ -218,21 +225,42 @@ struct rc_dev *rc_allocate_device(enum rc_driver_type); * @rc_driver_type: specifies the type of the RC output to be allocated * returns a pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE struct rc_dev *devm_rc_allocate_device(struct device *dev, enum rc_driver_type); +#else +static inline struct rc_dev *devm_rc_allocate_device(struct device *dev, int unused) +{ + return NULL; +} +#endif /** * rc_free_device - Frees a RC device * * @dev: pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE void rc_free_device(struct rc_dev *dev); +#else +static inline void rc_free_device(struct rc_dev *dev) +{ + return; +} +#endif /** * rc_register_device - Registers a RC device * * @dev: pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE int rc_register_device(struct rc_dev *dev); +#else +static inline int rc_register_device(struct rc_dev *dev) +{ + return -EOPNOTSUPP; +} +#endif /** * devm_rc_register_device - Manageded registering of a RC device @@ -240,14 +268,28 @@ int rc_register_device(struct rc_dev *dev); * @parent: pointer to struct device. * @dev: pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE int devm_rc_register_device(struct device *parent, struct rc_dev *dev); +#else +static inline int devm_rc_register_device(struct device *parent, struct rc_dev *dev) +{ + return -EOPNOTSUPP; +} +#endif /** * rc_unregister_device - Unregisters a RC device * * @dev: pointer to struct rc_dev. */ +#ifdef CONFIG_RC_CORE void rc_unregister_device(struct rc_dev *dev); +#else +static inline void rc_unregister_device(struct rc_dev *dev) +{ + return; +} +#endif /** * rc_open - Opens a RC device From patchwork Wed Apr 5 10:37:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 96839 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp198358qgd; Wed, 5 Apr 2017 03:40:40 -0700 (PDT) X-Received: by 10.98.13.219 with SMTP id 88mr15451092pfn.26.1491388840208; Wed, 05 Apr 2017 03:40:40 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q11si20264690pli.266.2017.04.05.03.40.39; Wed, 05 Apr 2017 03:40:40 -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=@linaro.org; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933580AbdDEKiy (ORCPT + 14 others); Wed, 5 Apr 2017 06:38:54 -0400 Received: from mail-wr0-f172.google.com ([209.85.128.172]:34569 "EHLO mail-wr0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933396AbdDEKiB (ORCPT ); Wed, 5 Apr 2017 06:38:01 -0400 Received: by mail-wr0-f172.google.com with SMTP id t20so7839322wra.1 for ; Wed, 05 Apr 2017 03:38:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yaC6sQ5EYbO3sfwbY4X+L6MZIWITac7cJ6D1IC2NUVc=; b=Zqdrp6NqmtEMWOwX8jhontshnuccGFVSTWoeWLtuZCmJlVYCepMgmF57OfAWiOWF2r zIPGqnLDX/AMPcv6Uhp41wTg8GR5Vr6aaTkif5XdjrOR69jOcJwKtVj2B+15j7keilMz +UzAZybfu0XkFbD/WIV04Nu0spr1RPZBcYiro= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yaC6sQ5EYbO3sfwbY4X+L6MZIWITac7cJ6D1IC2NUVc=; b=kAiqCENGBtkR9uGMnW0JhLPhObo600tVK+EHBephVZzSFfTMJN4PlhPrgOzTe2ErgQ FkpRz4cOp7CnWowTqQTj/AhDcLlxCW4aBMsR9ZhpEuH17mWTtn0g84gFsC80kjbEOlJ5 xcP3X3bLLOp6/rSnEP/Gj1H/6qceFwEUoFP1fRFOzNcIk574cZJdYShkirxkeHlVXv9A 2Th90ozH08QaMuEv9/igB5vjeVU9k9hrAQH91SY/tbYh3q6/pffQX67T/Ul6jUQHYIhc vaI7sTLTqQ8H2x9/WxGeAqFUTPWx9CJ9nMvNCNzRRwJPXtn5T4OmTYzwMmLVGfm27KNu 7o3w== X-Gm-Message-State: AFeK/H19WMKuzydguiKscr5ai3OCVvjpcDqTHzMOn2RXu5BxAqUA2Jagw7tSCfWj6T98ueY0 X-Received: by 10.223.151.217 with SMTP id t25mr25302241wrb.105.1491388679428; Wed, 05 Apr 2017 03:37:59 -0700 (PDT) Received: from localhost.localdomain ([2.31.167.174]) by smtp.gmail.com with ESMTPSA id 189sm21882284wmm.31.2017.04.05.03.37.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Apr 2017 03:37:58 -0700 (PDT) From: Lee Jones To: hans.verkuil@cisco.com, mchehab@kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@stlinux.com, patrice.chotard@st.com, linux-media@vger.kernel.org, benjamin.gaignard@st.com, linux@armlinux.org.uk, Lee Jones Subject: [PATCH 2/2] [media] cec: Handle RC capability more elegantly Date: Wed, 5 Apr 2017 11:37:52 +0100 Message-Id: <20170405103752.2057-2-lee.jones@linaro.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170405103752.2057-1-lee.jones@linaro.org> References: <20170405103752.2057-1-lee.jones@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If a user specifies the use of RC as a capability, they should really be enabling RC Core code. If they do not we WARN() them of this and disable the capability for them. Once we know RC Core code has not been enabled, we can update the user's capabilities and use them as a term of reference for other RC-only calls. This is preferable to having ugly #ifery scattered throughout C code. Most of the functions are actually safe to call, since they sensibly check for a NULL RC pointer before they attempt to deference it. Signed-off-by: Lee Jones --- drivers/media/cec/cec-core.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) -- 2.9.3 diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c index cfe414a..c859dcf 100644 --- a/drivers/media/cec/cec-core.c +++ b/drivers/media/cec/cec-core.c @@ -208,9 +208,15 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, return ERR_PTR(-EINVAL); if (WARN_ON(!available_las || available_las > CEC_MAX_LOG_ADDRS)) return ERR_PTR(-EINVAL); + + /* If RC Core is not available, remove driver-level capability */ + if (!IS_REACHABLE(CONFIG_RC_CORE)) + caps &= ~CEC_CAP_RC; + adap = kzalloc(sizeof(*adap), GFP_KERNEL); if (!adap) return ERR_PTR(-ENOMEM); + strlcpy(adap->name, name, sizeof(adap->name)); adap->phys_addr = CEC_PHYS_ADDR_INVALID; adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0; @@ -237,7 +243,6 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, if (!(caps & CEC_CAP_RC)) return adap; -#if IS_REACHABLE(CONFIG_RC_CORE) /* Prepare the RC input device */ adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE); if (!adap->rc) { @@ -264,9 +269,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, adap->rc->priv = adap; adap->rc->map_name = RC_MAP_CEC; adap->rc->timeout = MS_TO_NS(100); -#else - adap->capabilities &= ~CEC_CAP_RC; -#endif + return adap; } EXPORT_SYMBOL_GPL(cec_allocate_adapter); @@ -285,7 +288,6 @@ int cec_register_adapter(struct cec_adapter *adap, adap->owner = parent->driver->owner; adap->devnode.dev.parent = parent; -#if IS_REACHABLE(CONFIG_RC_CORE) if (adap->capabilities & CEC_CAP_RC) { adap->rc->dev.parent = parent; res = rc_register_device(adap->rc); @@ -298,15 +300,13 @@ int cec_register_adapter(struct cec_adapter *adap, return res; } } -#endif res = cec_devnode_register(&adap->devnode, adap->owner); if (res) { -#if IS_REACHABLE(CONFIG_RC_CORE) /* Note: rc_unregister also calls rc_free */ rc_unregister_device(adap->rc); adap->rc = NULL; -#endif + return res; } @@ -337,11 +337,10 @@ void cec_unregister_adapter(struct cec_adapter *adap) if (IS_ERR_OR_NULL(adap)) return; -#if IS_REACHABLE(CONFIG_RC_CORE) /* Note: rc_unregister also calls rc_free */ rc_unregister_device(adap->rc); adap->rc = NULL; -#endif + debugfs_remove_recursive(adap->cec_dir); cec_devnode_unregister(&adap->devnode); } @@ -357,9 +356,7 @@ void cec_delete_adapter(struct cec_adapter *adap) kthread_stop(adap->kthread); if (adap->kthread_config) kthread_stop(adap->kthread_config); -#if IS_REACHABLE(CONFIG_RC_CORE) rc_free_device(adap->rc); -#endif kfree(adap); } EXPORT_SYMBOL_GPL(cec_delete_adapter);