Auxiliary Bus support tag for 5.11-rc1
This is a signed tag for other subsystems to be able to pull in the auxiliary bus support into their trees for the 5.11-rc1 merge. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCX8oseA8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylqGQCdF2TND5jjcETWHIrunPAX6iEDLecAnjyIMc4q cIr5piwCq+m6/S2gSCpA =t7EL -----END PGP SIGNATURE----- Merge tag 'auxbus-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core into driver-core-next Auxiliary Bus support tag for 5.11-rc1 This is a signed tag for other subsystems to be able to pull in the auxiliary bus support into their trees for the 5.11-rc1 merge. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
2e37d91cad
9 changed files with 609 additions and 0 deletions
77
include/linux/auxiliary_bus.h
Normal file
77
include/linux/auxiliary_bus.h
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2019-2020 Intel Corporation
|
||||
*
|
||||
* Please see Documentation/driver-api/auxiliary_bus.rst for more information.
|
||||
*/
|
||||
|
||||
#ifndef _AUXILIARY_BUS_H_
|
||||
#define _AUXILIARY_BUS_H_
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
struct auxiliary_device {
|
||||
struct device dev;
|
||||
const char *name;
|
||||
u32 id;
|
||||
};
|
||||
|
||||
struct auxiliary_driver {
|
||||
int (*probe)(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id);
|
||||
void (*remove)(struct auxiliary_device *auxdev);
|
||||
void (*shutdown)(struct auxiliary_device *auxdev);
|
||||
int (*suspend)(struct auxiliary_device *auxdev, pm_message_t state);
|
||||
int (*resume)(struct auxiliary_device *auxdev);
|
||||
const char *name;
|
||||
struct device_driver driver;
|
||||
const struct auxiliary_device_id *id_table;
|
||||
};
|
||||
|
||||
static inline struct auxiliary_device *to_auxiliary_dev(struct device *dev)
|
||||
{
|
||||
return container_of(dev, struct auxiliary_device, dev);
|
||||
}
|
||||
|
||||
static inline struct auxiliary_driver *to_auxiliary_drv(struct device_driver *drv)
|
||||
{
|
||||
return container_of(drv, struct auxiliary_driver, driver);
|
||||
}
|
||||
|
||||
int auxiliary_device_init(struct auxiliary_device *auxdev);
|
||||
int __auxiliary_device_add(struct auxiliary_device *auxdev, const char *modname);
|
||||
#define auxiliary_device_add(auxdev) __auxiliary_device_add(auxdev, KBUILD_MODNAME)
|
||||
|
||||
static inline void auxiliary_device_uninit(struct auxiliary_device *auxdev)
|
||||
{
|
||||
put_device(&auxdev->dev);
|
||||
}
|
||||
|
||||
static inline void auxiliary_device_delete(struct auxiliary_device *auxdev)
|
||||
{
|
||||
device_del(&auxdev->dev);
|
||||
}
|
||||
|
||||
int __auxiliary_driver_register(struct auxiliary_driver *auxdrv, struct module *owner,
|
||||
const char *modname);
|
||||
#define auxiliary_driver_register(auxdrv) \
|
||||
__auxiliary_driver_register(auxdrv, THIS_MODULE, KBUILD_MODNAME)
|
||||
|
||||
void auxiliary_driver_unregister(struct auxiliary_driver *auxdrv);
|
||||
|
||||
/**
|
||||
* module_auxiliary_driver() - Helper macro for registering an auxiliary driver
|
||||
* @__auxiliary_driver: auxiliary driver struct
|
||||
*
|
||||
* Helper macro for auxiliary 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_auxiliary_driver(__auxiliary_driver) \
|
||||
module_driver(__auxiliary_driver, auxiliary_driver_register, auxiliary_driver_unregister)
|
||||
|
||||
struct auxiliary_device *auxiliary_find_device(struct device *start,
|
||||
const void *data,
|
||||
int (*match)(struct device *dev, const void *data));
|
||||
|
||||
#endif /* _AUXILIARY_BUS_H_ */
|
||||
|
|
@ -838,4 +838,12 @@ struct mhi_device_id {
|
|||
kernel_ulong_t driver_data;
|
||||
};
|
||||
|
||||
#define AUXILIARY_NAME_SIZE 32
|
||||
#define AUXILIARY_MODULE_PREFIX "auxiliary:"
|
||||
|
||||
struct auxiliary_device_id {
|
||||
char name[AUXILIARY_NAME_SIZE];
|
||||
kernel_ulong_t driver_data;
|
||||
};
|
||||
|
||||
#endif /* LINUX_MOD_DEVICETABLE_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue