| @@ -26,7 +26,7 @@ · 25 unmodified lines |
| 26 | 26 | * @rpdev: rpmsg device |
| 27 | 27 | * @chinfo: channel_info to bind |
| 28 | 28 | * |
| 29 | | − * Returns a pointer to the new rpmsg device on success, or NULL on error. |
| 29 | + * Return: a pointer to the new rpmsg device on success, or NULL on error. |
| 30 | 30 | */ |
| 31 | 31 | struct rpmsg_device *rpmsg_create_channel(struct rpmsg_device *rpdev, |
| 32 | 32 | struct rpmsg_channel_info *chinfo) |
| @@ -48,7 +48,7 @@ EXPORT_SYMBOL(rpmsg_create_channel); · 15 unmodified lines |
| 48 | 48 | * @rpdev: rpmsg device |
| 49 | 49 | * @chinfo: channel_info to bind |
| 50 | 50 | * |
| 51 | | − * Returns 0 on success or an appropriate error value. |
| 51 | + * Return: 0 on success or an appropriate error value. |
| 52 | 52 | */ |
| 53 | 53 | int rpmsg_release_channel(struct rpmsg_device *rpdev, |
| 54 | 54 | struct rpmsg_channel_info *chinfo) |
| @@ -102,7 +102,7 @@ EXPORT_SYMBOL(rpmsg_release_channel); · 47 unmodified lines |
| 102 | 102 | * dynamically assign them an available rpmsg address (drivers should have |
| 103 | 103 | * a very good reason why not to always use RPMSG_ADDR_ANY here). |
| 104 | 104 | * |
| 105 | | − * Returns a pointer to the endpoint on success, or NULL on error. |
| 105 | + * Return: a pointer to the endpoint on success, or NULL on error. |
| 106 | 106 | */ |
| 107 | 107 | struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *rpdev, |
| 108 | 108 | rpmsg_rx_cb_t cb, void *priv, |
| @@ -146,7 +146,7 @@ EXPORT_SYMBOL(rpmsg_destroy_ept); · 37 unmodified lines |
| 146 | 146 | * |
| 147 | 147 | * Can only be called from process context (for now). |
| 148 | 148 | * |
| 149 | | − * Returns 0 on success and an appropriate error value on failure. |
| 149 | + * Return: 0 on success and an appropriate error value on failure. |
| 150 | 150 | */ |
| 151 | 151 | int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len) |
| 152 | 152 | { |
| @@ -175,7 +175,7 @@ EXPORT_SYMBOL(rpmsg_send); · 22 unmodified lines |
| 175 | 175 | * |
| 176 | 176 | * Can only be called from process context (for now). |
| 177 | 177 | * |
| 178 | | − * Returns 0 on success and an appropriate error value on failure. |
| 178 | + * Return: 0 on success and an appropriate error value on failure. |
| 179 | 179 | */ |
| 180 | 180 | int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst) |
| 181 | 181 | { |
| @@ -206,7 +206,7 @@ EXPORT_SYMBOL(rpmsg_sendto); · 24 unmodified lines |
| 206 | 206 | * |
| 207 | 207 | * Can only be called from process context (for now). |
| 208 | 208 | * |
| 209 | | − * Returns 0 on success and an appropriate error value on failure. |
| 209 | + * Return: 0 on success and an appropriate error value on failure. |
| 210 | 210 | */ |
| 211 | 211 | int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, |
| 212 | 212 | void *data, int len) |
| @@ -235,7 +235,7 @@ EXPORT_SYMBOL(rpmsg_send_offchannel); · 22 unmodified lines |
| 235 | 235 | * |
| 236 | 236 | * Can only be called from process context (for now). |
| 237 | 237 | * |
| 238 | | − * Returns 0 on success and an appropriate error value on failure. |
| 238 | + * Return: 0 on success and an appropriate error value on failure. |
| 239 | 239 | */ |
| 240 | 240 | int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len) |
| 241 | 241 | { |
| @@ -263,7 +263,7 @@ EXPORT_SYMBOL(rpmsg_trysend); · 21 unmodified lines |
| 263 | 263 | * |
| 264 | 264 | * Can only be called from process context (for now). |
| 265 | 265 | * |
| 266 | | − * Returns 0 on success and an appropriate error value on failure. |
| 266 | + * Return: 0 on success and an appropriate error value on failure. |
| 267 | 267 | */ |
| 268 | 268 | int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst) |
| 269 | 269 | { |
| @@ -282,7 +282,7 @@ EXPORT_SYMBOL(rpmsg_trysendto); · 12 unmodified lines |
| 282 | 282 | * @filp: file for poll_wait() |
| 283 | 283 | * @wait: poll_table for poll_wait() |
| 284 | 284 | * |
| 285 | | − * Returns mask representing the current state of the endpoint's send buffers |
| 285 | + * Return: mask representing the current state of the endpoint's send buffers |
| 286 | 286 | */ |
| 287 | 287 | __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp, |
| 288 | 288 | poll_table *wait) |
| @@ -313,7 +313,7 @@ EXPORT_SYMBOL(rpmsg_poll); · 24 unmodified lines |
| 313 | 313 | * |
| 314 | 314 | * Can only be called from process context (for now). |
| 315 | 315 | * |
| 316 | | − * Returns 0 on success and an appropriate error value on failure. |
| 316 | + * Return: 0 on success and an appropriate error value on failure. |
| 317 | 317 | */ |
| 318 | 318 | int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, |
| 319 | 319 | void *data, int len) |
| @@ -540,13 +540,25 @@ static int rpmsg_dev_probe(struct device *dev) · 220 unmodified lines |
| 540 | 540 | err = rpdrv->probe(rpdev); |
| 541 | 541 | if (err) { |
| 542 | 542 | dev_err(dev, "%s: failed: %d\n", __func__, err); |
| 543 | | − if (ept) |
| 544 | | − rpmsg_destroy_ept(ept); |
| 545 | | − goto out; |
| 543 | + goto destroy_ept; |
| 546 | 544 | } |
| 547 | 545 | |
| 548 | | − if (ept && rpdev->ops->announce_create) |
| 546 | + if (ept && rpdev->ops->announce_create) { |
| 549 | 547 | err = rpdev->ops->announce_create(rpdev); |
| 548 | + if (err) { |
| 549 | + dev_err(dev, "failed to announce creation\n"); |
| 550 | + goto remove_rpdev; |
| 551 | + } |
| 552 | + } |
| 553 | + |
| 554 | + return 0; |
| 555 | + |
| 556 | +remove_rpdev: |
| 557 | + if (rpdrv->remove) |
| 558 | + rpdrv->remove(rpdev); |
| 559 | +destroy_ept: |
| 560 | + if (ept) |
| 561 | + rpmsg_destroy_ept(ept); |
| 550 | 562 | out: |
| 551 | 563 | return err; |
| 552 | 564 | } |
| @@ -623,7 +635,7 @@ EXPORT_SYMBOL(rpmsg_unregister_device); · 70 unmodified lines |
| 623 | 635 | * @rpdrv: pointer to a struct rpmsg_driver |
| 624 | 636 | * @owner: owning module/driver |
| 625 | 637 | * |
| 626 | | − * Returns 0 on success, and an appropriate error value on failure. |
| 638 | + * Return: 0 on success, and an appropriate error value on failure. |
| 627 | 639 | */ |
| 628 | 640 | int __register_rpmsg_driver(struct rpmsg_driver *rpdrv, struct module *owner) |
| 629 | 641 | { |
| @@ -637,7 +649,7 @@ EXPORT_SYMBOL(__register_rpmsg_driver); · 7 unmodified lines |
| 637 | 649 | * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus |
| 638 | 650 | * @rpdrv: pointer to a struct rpmsg_driver |
| 639 | 651 | * |
| 640 | | − * Returns 0 on success, and an appropriate error value on failure. |
| 652 | + * Return: 0 on success, and an appropriate error value on failure. |
| 641 | 653 | */ |
| 642 | 654 | void unregister_rpmsg_driver(struct rpmsg_driver *rpdrv) |
| 643 | 655 | { |