|
|
@@ -97,19 +97,12 @@ static struct ffs_function *ffs_func_from_usb(struct usb_function *f)
|
|
|
return container_of(f, struct ffs_function, function);
|
|
|
}
|
|
|
|
|
|
-#ifdef USB_FFS_INCLUDED
|
|
|
-static void ffs_func_free(struct ffs_function *func);
|
|
|
-#endif
|
|
|
|
|
|
static void ffs_func_eps_disable(struct ffs_function *func);
|
|
|
static int __must_check ffs_func_eps_enable(struct ffs_function *func);
|
|
|
|
|
|
static int ffs_func_bind(struct usb_configuration *,
|
|
|
struct usb_function *);
|
|
|
-#ifdef USB_FFS_INCLUDED
|
|
|
-static void old_ffs_func_unbind(struct usb_configuration *,
|
|
|
- struct usb_function *);
|
|
|
-#endif
|
|
|
static int ffs_func_set_alt(struct usb_function *, unsigned, unsigned);
|
|
|
static void ffs_func_disable(struct usb_function *);
|
|
|
static int ffs_func_setup(struct usb_function *,
|
|
|
@@ -165,9 +158,7 @@ ffs_sb_create_file(struct super_block *sb, const char *name, void *data,
|
|
|
/* Devices management *******************************************************/
|
|
|
|
|
|
DEFINE_MUTEX(ffs_lock);
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
EXPORT_SYMBOL(ffs_lock);
|
|
|
-#endif
|
|
|
|
|
|
static struct ffs_dev *ffs_find_dev(const char *name);
|
|
|
static void *ffs_acquire_dev(const char *dev_name);
|
|
|
@@ -1303,75 +1294,6 @@ static void ffs_epfiles_destroy(struct ffs_epfile *epfiles, unsigned count)
|
|
|
kfree(epfiles);
|
|
|
}
|
|
|
|
|
|
-#ifdef USB_FFS_INCLUDED
|
|
|
-
|
|
|
-static int functionfs_bind_config(struct usb_composite_dev *cdev,
|
|
|
- struct usb_configuration *c,
|
|
|
- struct ffs_data *ffs)
|
|
|
-{
|
|
|
- struct ffs_function *func;
|
|
|
- int ret;
|
|
|
-
|
|
|
- ENTER();
|
|
|
-
|
|
|
- func = kzalloc(sizeof *func, GFP_KERNEL);
|
|
|
- if (unlikely(!func))
|
|
|
- return -ENOMEM;
|
|
|
-
|
|
|
- func->function.name = "Function FS Gadget";
|
|
|
- func->function.strings = ffs->stringtabs;
|
|
|
-
|
|
|
- func->function.bind = ffs_func_bind;
|
|
|
- func->function.unbind = old_ffs_func_unbind;
|
|
|
- func->function.set_alt = ffs_func_set_alt;
|
|
|
- func->function.disable = ffs_func_disable;
|
|
|
- func->function.setup = ffs_func_setup;
|
|
|
- func->function.suspend = ffs_func_suspend;
|
|
|
- func->function.resume = ffs_func_resume;
|
|
|
-
|
|
|
- func->conf = c;
|
|
|
- func->gadget = cdev->gadget;
|
|
|
- func->ffs = ffs;
|
|
|
- ffs_data_get(ffs);
|
|
|
-
|
|
|
- ret = usb_add_function(c, &func->function);
|
|
|
- if (unlikely(ret))
|
|
|
- ffs_func_free(func);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-static void ffs_func_free(struct ffs_function *func)
|
|
|
-{
|
|
|
- struct ffs_ep *ep = func->eps;
|
|
|
- unsigned count = func->ffs->eps_count;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- ENTER();
|
|
|
-
|
|
|
- /* cleanup after autoconfig */
|
|
|
- spin_lock_irqsave(&func->ffs->eps_lock, flags);
|
|
|
- do {
|
|
|
- if (ep->ep && ep->req)
|
|
|
- usb_ep_free_request(ep->ep, ep->req);
|
|
|
- ep->req = NULL;
|
|
|
- ++ep;
|
|
|
- } while (--count);
|
|
|
- spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
|
|
|
-
|
|
|
- ffs_data_put(func->ffs);
|
|
|
-
|
|
|
- kfree(func->eps);
|
|
|
- /*
|
|
|
- * eps and interfaces_nums are allocated in the same chunk so
|
|
|
- * only one free is required. Descriptors are also allocated
|
|
|
- * in the same chunk.
|
|
|
- */
|
|
|
-
|
|
|
- kfree(func);
|
|
|
-}
|
|
|
-
|
|
|
-#endif
|
|
|
|
|
|
static void ffs_func_eps_disable(struct ffs_function *func)
|
|
|
{
|
|
|
@@ -2035,7 +1957,6 @@ static int __ffs_func_bind_do_nums(enum ffs_entity_type type, u8 *valuep,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
static inline struct f_fs_opts *ffs_do_functionfs_bind(struct usb_function *f,
|
|
|
struct usb_configuration *c)
|
|
|
{
|
|
|
@@ -2084,7 +2005,6 @@ static inline struct f_fs_opts *ffs_do_functionfs_bind(struct usb_function *f,
|
|
|
|
|
|
return ffs_opts;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
static int _ffs_func_bind(struct usb_configuration *c,
|
|
|
struct usb_function *f)
|
|
|
@@ -2190,12 +2110,10 @@ error:
|
|
|
static int ffs_func_bind(struct usb_configuration *c,
|
|
|
struct usb_function *f)
|
|
|
{
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
struct f_fs_opts *ffs_opts = ffs_do_functionfs_bind(f, c);
|
|
|
|
|
|
if (IS_ERR(ffs_opts))
|
|
|
return PTR_ERR(ffs_opts);
|
|
|
-#endif
|
|
|
|
|
|
return _ffs_func_bind(c, f);
|
|
|
}
|
|
|
@@ -2203,28 +2121,6 @@ static int ffs_func_bind(struct usb_configuration *c,
|
|
|
|
|
|
/* Other USB function hooks *************************************************/
|
|
|
|
|
|
-#ifdef USB_FFS_INCLUDED
|
|
|
-
|
|
|
-static void old_ffs_func_unbind(struct usb_configuration *c,
|
|
|
- struct usb_function *f)
|
|
|
-{
|
|
|
- struct ffs_function *func = ffs_func_from_usb(f);
|
|
|
- struct ffs_data *ffs = func->ffs;
|
|
|
-
|
|
|
- ENTER();
|
|
|
-
|
|
|
- if (ffs->func == func) {
|
|
|
- ffs_func_eps_disable(func);
|
|
|
- ffs->func = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- ffs_event_add(ffs, FUNCTIONFS_UNBIND);
|
|
|
-
|
|
|
- ffs_func_free(func);
|
|
|
-}
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
static int ffs_func_set_alt(struct usb_function *f,
|
|
|
unsigned interface, unsigned alt)
|
|
|
{
|
|
|
@@ -2401,8 +2297,6 @@ static struct ffs_dev *ffs_find_dev(const char *name)
|
|
|
|
|
|
/* Function registration interface ******************************************/
|
|
|
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
-
|
|
|
static void ffs_free_inst(struct usb_function_instance *f)
|
|
|
{
|
|
|
struct f_fs_opts *opts;
|
|
|
@@ -2507,8 +2401,6 @@ static struct usb_function *ffs_alloc(struct usb_function_instance *fi)
|
|
|
return &func->function;
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* ffs_lock must be taken by the caller of this function
|
|
|
*/
|
|
|
@@ -2567,9 +2459,7 @@ int ffs_name_dev(struct ffs_dev *dev, const char *name)
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
EXPORT_SYMBOL(ffs_name_dev);
|
|
|
-#endif
|
|
|
|
|
|
int ffs_single_dev(struct ffs_dev *dev)
|
|
|
{
|
|
|
@@ -2586,9 +2476,7 @@ int ffs_single_dev(struct ffs_dev *dev)
|
|
|
ffs_dev_unlock();
|
|
|
return ret;
|
|
|
}
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
EXPORT_SYMBOL(ffs_single_dev);
|
|
|
-#endif
|
|
|
|
|
|
/*
|
|
|
* ffs_lock must be taken by the caller of this function
|
|
|
@@ -2719,8 +2607,6 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len)
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
-#ifndef USB_FFS_INCLUDED
|
|
|
DECLARE_USB_FUNCTION_INIT(ffs, ffs_alloc_inst, ffs_alloc);
|
|
|
MODULE_LICENSE("GPL");
|
|
|
MODULE_AUTHOR("Michal Nazarewicz");
|
|
|
-#endif
|