diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-07 01:38:31 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-07 01:38:31 +0300 |
commit | 426b8eeb058a16c63759b3f48394601e1ed74e31 (patch) | |
tree | 3331982f3a02962d784053d09420e6b03a20e5f7 /drivers/rpmsg/rpmsg_core.c | |
parent | 0dfaeb618f6cd2010b23e8b2be3c892c35d39633 (diff) | |
parent | f4ce85281139214cd50900d0ff38b7d97766318f (diff) | |
download | linux-426b8eeb058a16c63759b3f48394601e1ed74e31.tar.xz |
Merge tag 'rpmsg-v4.13' of git://github.com/andersson/remoteproc
Pull rpmsg updates from Bjorn Andersson:
"This introduces the Qualcomm GLINK protocol driver and
DeviceTree-based modalias support, as well as a number of smaller
fixes"
* tag 'rpmsg-v4.13' of git://github.com/andersson/remoteproc:
rpmsg: Make modalias work for DeviceTree based devices
rpmsg: Drop VIRTUALIZATION dependency from RPMSG_VIRTIO
rpmsg: Don't overwrite release op of rpdev
rpmsg: virtio_rpmsg_bus: cleanup multiple assignment to ops
rpmsg: virtio_rpmsg_bus: fix nameservice address
rpmsg: cleanup incorrect function in dev_err message
rpmsg: virtio_rpmsg_bus: fix announce for devices without endpoint
rpmsg: Introduce Qualcomm RPM glink driver
soc: qcom: Add device tree binding for GLINK RPM
rpmsg: Release rpmsg devices in backends
Diffstat (limited to 'drivers/rpmsg/rpmsg_core.c')
-rw-r--r-- | drivers/rpmsg/rpmsg_core.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index ad3d2a9df287..dffa3aab7178 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -343,6 +343,11 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { struct rpmsg_device *rpdev = to_rpmsg_device(dev); + ssize_t len; + + len = of_device_modalias(dev, buf, PAGE_SIZE); + if (len != -ENODEV) + return len; return sprintf(buf, RPMSG_DEVICE_MODALIAS_FMT "\n", rpdev->id.name); } @@ -387,6 +392,11 @@ static int rpmsg_dev_match(struct device *dev, struct device_driver *drv) static int rpmsg_uevent(struct device *dev, struct kobj_uevent_env *env) { struct rpmsg_device *rpdev = to_rpmsg_device(dev); + int ret; + + ret = of_device_uevent_modalias(dev, env); + if (ret != -ENODEV) + return ret; return add_uevent_var(env, "MODALIAS=" RPMSG_DEVICE_MODALIAS_FMT, rpdev->id.name); @@ -464,13 +474,6 @@ static struct bus_type rpmsg_bus = { .remove = rpmsg_dev_remove, }; -static void rpmsg_release_device(struct device *dev) -{ - struct rpmsg_device *rpdev = to_rpmsg_device(dev); - - kfree(rpdev); -} - int rpmsg_register_device(struct rpmsg_device *rpdev) { struct device *dev = &rpdev->dev; @@ -480,7 +483,6 @@ int rpmsg_register_device(struct rpmsg_device *rpdev) rpdev->id.name, rpdev->src, rpdev->dst); rpdev->dev.bus = &rpmsg_bus; - rpdev->dev.release = rpmsg_release_device; ret = device_register(&rpdev->dev); if (ret) { |