Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 676d9735 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc

Pull rpmsg updates from Bjorn Andersson:
 "Refactor rpmsg module registration to follow other subsystems; by
  introduction of module_rpmsg_driver and hiding of THIS_MODULE from
  clients"

* tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc:
  rpmsg: use module_rpmsg_driver in existing drivers and examples
  rpmsg: add helper macro module_rpmsg_driver
  rpmsg: drop owner assignment from rpmsg_drivers
  rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core
parents 888dae53 b4f78259
Loading
Loading
Loading
Loading
+1 −13
Original line number Original line Diff line number Diff line
@@ -249,24 +249,12 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);


static struct rpmsg_driver rpmsg_sample_client = {
static struct rpmsg_driver rpmsg_sample_client = {
	.drv.name	= KBUILD_MODNAME,
	.drv.name	= KBUILD_MODNAME,
	.drv.owner	= THIS_MODULE,
	.id_table	= rpmsg_driver_sample_id_table,
	.id_table	= rpmsg_driver_sample_id_table,
	.probe		= rpmsg_sample_probe,
	.probe		= rpmsg_sample_probe,
	.callback	= rpmsg_sample_cb,
	.callback	= rpmsg_sample_cb,
	.remove		= rpmsg_sample_remove,
	.remove		= rpmsg_sample_remove,
};
};

module_rpmsg_driver(rpmsg_sample_client);
static int __init init(void)
{
	return register_rpmsg_driver(&rpmsg_sample_client);
}
module_init(init);

static void __exit fini(void)
{
	unregister_rpmsg_driver(&rpmsg_sample_client);
}
module_exit(fini);


Note: a similar sample which can be built and loaded can be found
Note: a similar sample which can be built and loaded can be found
in samples/rpmsg/.
in samples/rpmsg/.
+5 −3
Original line number Original line Diff line number Diff line
@@ -436,17 +436,19 @@ static struct bus_type rpmsg_bus = {
};
};


/**
/**
 * register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus
 * __register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus
 * @rpdrv: pointer to a struct rpmsg_driver
 * @rpdrv: pointer to a struct rpmsg_driver
 * @owner: owning module/driver
 *
 *
 * Returns 0 on success, and an appropriate error value on failure.
 * Returns 0 on success, and an appropriate error value on failure.
 */
 */
int register_rpmsg_driver(struct rpmsg_driver *rpdrv)
int __register_rpmsg_driver(struct rpmsg_driver *rpdrv, struct module *owner)
{
{
	rpdrv->drv.bus = &rpmsg_bus;
	rpdrv->drv.bus = &rpmsg_bus;
	rpdrv->drv.owner = owner;
	return driver_register(&rpdrv->drv);
	return driver_register(&rpdrv->drv);
}
}
EXPORT_SYMBOL(register_rpmsg_driver);
EXPORT_SYMBOL(__register_rpmsg_driver);


/**
/**
 * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
 * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
+17 −1
Original line number Original line Diff line number Diff line
@@ -169,7 +169,7 @@ struct rpmsg_driver {


int register_rpmsg_device(struct rpmsg_channel *dev);
int register_rpmsg_device(struct rpmsg_channel *dev);
void unregister_rpmsg_device(struct rpmsg_channel *dev);
void unregister_rpmsg_device(struct rpmsg_channel *dev);
int register_rpmsg_driver(struct rpmsg_driver *drv);
int __register_rpmsg_driver(struct rpmsg_driver *drv, struct module *owner);
void unregister_rpmsg_driver(struct rpmsg_driver *drv);
void unregister_rpmsg_driver(struct rpmsg_driver *drv);
void rpmsg_destroy_ept(struct rpmsg_endpoint *);
void rpmsg_destroy_ept(struct rpmsg_endpoint *);
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
@@ -177,6 +177,22 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
int
int
rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool);
rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool);


/* use a macro to avoid include chaining to get THIS_MODULE */
#define register_rpmsg_driver(drv) \
	__register_rpmsg_driver(drv, THIS_MODULE)

/**
 * module_rpmsg_driver() - Helper macro for registering an rpmsg driver
 * @__rpmsg_driver: rpmsg_driver struct
 *
 * Helper macro for rpmsg drivers which do not do anything special in module
 * init/exit. This eliminates a lot of boilerplate.  Each module may only
 * use this macro once, and calling it replaces module_init() and module_exit()
 */
#define module_rpmsg_driver(__rpmsg_driver) \
	module_driver(__rpmsg_driver, register_rpmsg_driver, \
			unregister_rpmsg_driver)

/**
/**
 * rpmsg_send() - send a message across to the remote processor
 * rpmsg_send() - send a message across to the remote processor
 * @rpdev: the rpmsg channel
 * @rpdev: the rpmsg channel
+1 −13
Original line number Original line Diff line number Diff line
@@ -77,24 +77,12 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);


static struct rpmsg_driver rpmsg_sample_client = {
static struct rpmsg_driver rpmsg_sample_client = {
	.drv.name	= KBUILD_MODNAME,
	.drv.name	= KBUILD_MODNAME,
	.drv.owner	= THIS_MODULE,
	.id_table	= rpmsg_driver_sample_id_table,
	.id_table	= rpmsg_driver_sample_id_table,
	.probe		= rpmsg_sample_probe,
	.probe		= rpmsg_sample_probe,
	.callback	= rpmsg_sample_cb,
	.callback	= rpmsg_sample_cb,
	.remove		= rpmsg_sample_remove,
	.remove		= rpmsg_sample_remove,
};
};

module_rpmsg_driver(rpmsg_sample_client);
static int __init rpmsg_client_sample_init(void)
{
	return register_rpmsg_driver(&rpmsg_sample_client);
}
module_init(rpmsg_client_sample_init);

static void __exit rpmsg_client_sample_fini(void)
{
	unregister_rpmsg_driver(&rpmsg_sample_client);
}
module_exit(rpmsg_client_sample_fini);


MODULE_DESCRIPTION("Remote processor messaging sample client driver");
MODULE_DESCRIPTION("Remote processor messaging sample client driver");
MODULE_LICENSE("GPL v2");
MODULE_LICENSE("GPL v2");