mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
usb: gadget: OS descriptors: provide interface directory names
Function's interface directories need to be created when the function directory is created, but interface numbers are not known until the gadget is ready and bound to udc, so we cannot use numbers as part of interface directory names. Let the client decide what names to use. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
fe00b13829
commit
14574b546d
3 changed files with 7 additions and 3 deletions
|
@ -1216,6 +1216,7 @@ static struct configfs_attribute *interf_grp_attrs[] = {
|
||||||
int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
||||||
int n_interf,
|
int n_interf,
|
||||||
struct usb_os_desc **desc,
|
struct usb_os_desc **desc,
|
||||||
|
char **names,
|
||||||
struct module *owner)
|
struct module *owner)
|
||||||
{
|
{
|
||||||
struct config_group **f_default_groups, *os_desc_group,
|
struct config_group **f_default_groups, *os_desc_group,
|
||||||
|
@ -1257,8 +1258,8 @@ int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
||||||
d = desc[n_interf];
|
d = desc[n_interf];
|
||||||
d->owner = owner;
|
d->owner = owner;
|
||||||
config_group_init_type_name(&d->group, "", interface_type);
|
config_group_init_type_name(&d->group, "", interface_type);
|
||||||
config_item_set_name(&d->group.cg_item, "interface.%d",
|
config_item_set_name(&d->group.cg_item, "interface.%s",
|
||||||
n_interf);
|
names[n_interf]);
|
||||||
interface_groups[n_interf] = &d->group;
|
interface_groups[n_interf] = &d->group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ void unregister_gadget_item(struct config_item *item);
|
||||||
int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
int usb_os_desc_prepare_interf_dir(struct config_group *parent,
|
||||||
int n_interf,
|
int n_interf,
|
||||||
struct usb_os_desc **desc,
|
struct usb_os_desc **desc,
|
||||||
|
char **names,
|
||||||
struct module *owner);
|
struct module *owner);
|
||||||
|
|
||||||
static inline struct usb_os_desc *to_usb_os_desc(struct config_item *item)
|
static inline struct usb_os_desc *to_usb_os_desc(struct config_item *item)
|
||||||
|
|
|
@ -905,6 +905,7 @@ static struct usb_function_instance *rndis_alloc_inst(void)
|
||||||
{
|
{
|
||||||
struct f_rndis_opts *opts;
|
struct f_rndis_opts *opts;
|
||||||
struct usb_os_desc *descs[1];
|
struct usb_os_desc *descs[1];
|
||||||
|
char *names[1];
|
||||||
|
|
||||||
opts = kzalloc(sizeof(*opts), GFP_KERNEL);
|
opts = kzalloc(sizeof(*opts), GFP_KERNEL);
|
||||||
if (!opts)
|
if (!opts)
|
||||||
|
@ -922,8 +923,9 @@ static struct usb_function_instance *rndis_alloc_inst(void)
|
||||||
INIT_LIST_HEAD(&opts->rndis_os_desc.ext_prop);
|
INIT_LIST_HEAD(&opts->rndis_os_desc.ext_prop);
|
||||||
|
|
||||||
descs[0] = &opts->rndis_os_desc;
|
descs[0] = &opts->rndis_os_desc;
|
||||||
|
names[0] = "rndis";
|
||||||
usb_os_desc_prepare_interf_dir(&opts->func_inst.group, 1, descs,
|
usb_os_desc_prepare_interf_dir(&opts->func_inst.group, 1, descs,
|
||||||
THIS_MODULE);
|
names, THIS_MODULE);
|
||||||
config_group_init_type_name(&opts->func_inst.group, "",
|
config_group_init_type_name(&opts->func_inst.group, "",
|
||||||
&rndis_func_type);
|
&rndis_func_type);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue