Skip to content

Commit

Permalink
rpmsg: Create the rpmsg class in core instead of in rpmsg char
Browse files Browse the repository at this point in the history
Migrate the creation of the rpmsg class from the rpmsg_char
to the core that the class is usable by the rpmsg_char and
the future rpmsg_ctrl module.

Suggested-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220124102524.295783-3-arnaud.pouliquen@foss.st.com
  • Loading branch information
Arnaud Pouliquen authored and Bjorn Andersson committed Mar 13, 2022
1 parent 69265bc commit 608edd9
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
11 changes: 1 addition & 10 deletions drivers/rpmsg/rpmsg_char.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
#include <uapi/linux/rpmsg.h>

#include "rpmsg_char.h"
#include "rpmsg_internal.h"

#define RPMSG_DEV_MAX (MINORMASK + 1)

static dev_t rpmsg_major;
static struct class *rpmsg_class;

static DEFINE_IDA(rpmsg_ctrl_ida);
static DEFINE_IDA(rpmsg_ept_ida);
Expand Down Expand Up @@ -550,17 +550,9 @@ static int rpmsg_chrdev_init(void)
return ret;
}

rpmsg_class = class_create(THIS_MODULE, "rpmsg");
if (IS_ERR(rpmsg_class)) {
pr_err("failed to create rpmsg class\n");
unregister_chrdev_region(rpmsg_major, RPMSG_DEV_MAX);
return PTR_ERR(rpmsg_class);
}

ret = register_rpmsg_driver(&rpmsg_chrdev_driver);
if (ret < 0) {
pr_err("failed to register rpmsg driver\n");
class_destroy(rpmsg_class);
unregister_chrdev_region(rpmsg_major, RPMSG_DEV_MAX);
}

Expand All @@ -571,7 +563,6 @@ postcore_initcall(rpmsg_chrdev_init);
static void rpmsg_chrdev_exit(void)
{
unregister_rpmsg_driver(&rpmsg_chrdev_driver);
class_destroy(rpmsg_class);
unregister_chrdev_region(rpmsg_major, RPMSG_DEV_MAX);
}
module_exit(rpmsg_chrdev_exit);
Expand Down
15 changes: 13 additions & 2 deletions drivers/rpmsg/rpmsg_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@

#include "rpmsg_internal.h"

struct class *rpmsg_class;
EXPORT_SYMBOL(rpmsg_class);

/**
* rpmsg_create_channel() - create a new rpmsg channel
* using its name and address info.
Expand Down Expand Up @@ -662,17 +665,25 @@ static int __init rpmsg_init(void)
{
int ret;

rpmsg_class = class_create(THIS_MODULE, "rpmsg");
if (IS_ERR(rpmsg_class)) {
pr_err("failed to create rpmsg class\n");
return PTR_ERR(rpmsg_class);
}

ret = bus_register(&rpmsg_bus);
if (ret)
if (ret) {
pr_err("failed to register rpmsg bus: %d\n", ret);

class_destroy(rpmsg_class);
}
return ret;
}
postcore_initcall(rpmsg_init);

static void __exit rpmsg_fini(void)
{
bus_unregister(&rpmsg_bus);
class_destroy(rpmsg_class);
}
module_exit(rpmsg_fini);

Expand Down
2 changes: 2 additions & 0 deletions drivers/rpmsg/rpmsg_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev)
#define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv)

extern struct class *rpmsg_class;

/**
* struct rpmsg_device_ops - indirection table for the rpmsg_device operations
* @create_channel: create backend-specific channel, optional
Expand Down

0 comments on commit 608edd9

Please sign in to comment.