summaryrefslogtreecommitdiff
path: root/drivers/media/cec
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2016-11-25 06:23:34 -0200
committerRay Zhang <rayz@codeaurora.org>2017-05-25 11:22:17 +0800
commitd62107c2c6937a4fc479befc05a3991bf13e1b9d (patch)
tree51bd1d3b3142b48cec9f5532427bbd162f3a1b6d /drivers/media/cec
parente509ffb5ccbe70af9d0911441216001b816170e6 (diff)
[media] cec: pass parent device in register(), not allocate()
The cec_allocate_adapter function doesn't need the parent device, only the cec_register_adapter function needs it. Drop the cec_devnode parent field, since devnode.dev.parent can be used instead. This change makes the framework consistent with other frameworks where the parent device is not used until the device is registered. Conflicts: Documentation/media/kapi/cec-core.rst drivers/media/i2c/adv7511.c drivers/media/i2c/adv7604.c drivers/media/i2c/adv7842.c drivers/media/platform/vivid/vivid-cec.c drivers/media/platform/vivid/vivid-cec.h drivers/media/platform/vivid/vivid-core.c drivers/media/usb/pulse8-cec/pulse8-cec.c drivers/staging/media/s5p-cec/s5p_cec.c drivers/staging/media/st-cec/stih-cec.c Change-Id: Id7a687308c4d3f2bc63ed2e8a55229b4e71fd8ed Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Git-commit: f51e80804f084de269954d875c0892b081b7df3c Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git [rayz@codeaurora.org: make some changes to fix the cherry-pick conflicts: (1) discard the CEC documentation change. (2) discard the CEC adapter driver changes for other vendors.] Signed-off-by: Ray Zhang <rayz@codeaurora.org>
Diffstat (limited to 'drivers/media/cec')
-rw-r--r--drivers/media/cec/cec-api.c2
-rw-r--r--drivers/media/cec/cec-core.c18
2 files changed, 11 insertions, 9 deletions
diff --git a/drivers/media/cec/cec-api.c b/drivers/media/cec/cec-api.c
index 597fbb62d829..8950b6c9d6a9 100644
--- a/drivers/media/cec/cec-api.c
+++ b/drivers/media/cec/cec-api.c
@@ -88,7 +88,7 @@ static long cec_adap_g_caps(struct cec_adapter *adap,
{
struct cec_caps caps = {};
- strlcpy(caps.driver, adap->devnode.parent->driver->name,
+ strlcpy(caps.driver, adap->devnode.dev.parent->driver->name,
sizeof(caps.driver));
strlcpy(caps.name, adap->name, sizeof(caps.name));
caps.available_log_addrs = adap->available_log_addrs;
diff --git a/drivers/media/cec/cec-core.c b/drivers/media/cec/cec-core.c
index b0137e247dc9..aca3ab83a8a1 100644
--- a/drivers/media/cec/cec-core.c
+++ b/drivers/media/cec/cec-core.c
@@ -132,7 +132,6 @@ static int __must_check cec_devnode_register(struct cec_devnode *devnode,
devnode->dev.bus = &cec_bus_type;
devnode->dev.devt = MKDEV(MAJOR(cec_dev_t), minor);
devnode->dev.release = cec_devnode_release;
- devnode->dev.parent = devnode->parent;
dev_set_name(&devnode->dev, "cec%d", devnode->minor);
device_initialize(&devnode->dev);
@@ -198,13 +197,11 @@ static void cec_devnode_unregister(struct cec_devnode *devnode)
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
void *priv, const char *name, u32 caps,
- u8 available_las, struct device *parent)
+ u8 available_las)
{
struct cec_adapter *adap;
int res;
- if (WARN_ON(!parent))
- return ERR_PTR(-EINVAL);
if (WARN_ON(!caps))
return ERR_PTR(-EINVAL);
if (WARN_ON(!ops))
@@ -214,8 +211,6 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
adap = kzalloc(sizeof(*adap), GFP_KERNEL);
if (!adap)
return ERR_PTR(-ENOMEM);
- adap->owner = parent->driver->owner;
- adap->devnode.parent = parent;
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;
@@ -264,7 +259,6 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
adap->rc->input_id.vendor = 0;
adap->rc->input_id.product = 0;
adap->rc->input_id.version = 1;
- adap->rc->dev.parent = parent;
adap->rc->driver_type = RC_DRIVER_SCANCODE;
adap->rc->driver_name = CEC_NAME;
adap->rc->allowed_protocols = RC_BIT_CEC;
@@ -278,14 +272,22 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
}
EXPORT_SYMBOL_GPL(cec_allocate_adapter);
-int cec_register_adapter(struct cec_adapter *adap)
+int cec_register_adapter(struct cec_adapter *adap,
+ struct device *parent)
{
int res;
if (IS_ERR_OR_NULL(adap))
return 0;
+ if (WARN_ON(!parent))
+ return -EINVAL;
+
+ adap->owner = parent->driver->owner;
+ adap->devnode.dev.parent = parent;
+
#if IS_REACHABLE(CONFIG_RC_CORE)
+ adap->rc->dev.parent = parent;
if (adap->capabilities & CEC_CAP_RC) {
res = rc_register_device(adap->rc);