g_audio
DEFINE_V4L_STUB_FUNC(g_audio)
u_audio_stop_playback(&uac1->g_audio);
u_audio_stop_capture(&uac1->g_audio);
u_audio_suspend(&uac1->g_audio);
static int f_audio_validate_opts(struct g_audio *audio, struct device *dev)
struct g_audio *audio = func_to_g_audio(f);
struct g_audio *audio;
struct g_audio *audio = func_to_g_audio(f);
uac1->g_audio.func.name = "uac1_func";
uac1->g_audio.func.bind = f_audio_bind;
uac1->g_audio.func.unbind = f_audio_unbind;
uac1->g_audio.func.set_alt = f_audio_set_alt;
uac1->g_audio.func.get_alt = f_audio_get_alt;
uac1->g_audio.func.setup = f_audio_setup;
uac1->g_audio.func.disable = f_audio_disable;
uac1->g_audio.func.suspend = f_audio_suspend;
uac1->g_audio.func.free_func = f_audio_free;
return &uac1->g_audio.func;
struct g_audio g_audio;
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *audio = req->context;
static int audio_notify(struct g_audio *audio, int unit_id, int cs)
struct g_audio *audio = func_to_g_audio(fn);
return container_of(f, struct f_uac1, g_audio.func);
struct g_audio *audio = func_to_g_audio(fn);
static inline struct f_uac1_opts *g_audio_to_uac1_opts(struct g_audio *audio)
struct g_audio *audio = func_to_g_audio(fn);
struct g_audio *audio = func_to_g_audio(fn);
struct g_audio *audio = req->context;
struct g_audio *audio = func_to_g_audio(fn);
struct g_audio *audio = func_to_g_audio(f);
ret = u_audio_start_capture(&uac1->g_audio);
u_audio_stop_capture(&uac1->g_audio);
ret = u_audio_start_playback(&uac1->g_audio);
u_audio_stop_playback(&uac1->g_audio);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = req->context;
afunc_notify(struct g_audio *agdev, int unit_id, int cs)
struct g_audio *agdev = func_to_g_audio(fn);
ret = u_audio_start_capture(&uac2->g_audio);
u_audio_stop_capture(&uac2->g_audio);
ret = u_audio_start_playback(&uac2->g_audio);
u_audio_stop_playback(&uac2->g_audio);
struct g_audio *agdev = func_to_g_audio(fn);
u_audio_stop_capture(&uac2->g_audio);
u_audio_stop_playback(&uac2->g_audio);
u_audio_suspend(&uac2->g_audio);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = req->context;
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev = func_to_g_audio(fn);
struct g_audio *agdev;
struct g_audio *agdev = func_to_g_audio(f);
uac2->g_audio.func.name = "uac2_func";
uac2->g_audio.func.bind = afunc_bind;
uac2->g_audio.func.unbind = afunc_unbind;
uac2->g_audio.func.set_alt = afunc_set_alt;
uac2->g_audio.func.get_alt = afunc_get_alt;
uac2->g_audio.func.disable = afunc_disable;
uac2->g_audio.func.suspend = afunc_suspend;
uac2->g_audio.func.setup = afunc_setup;
uac2->g_audio.func.free_func = afunc_free;
return &uac2->g_audio.func;
struct g_audio g_audio;
return container_of(f, struct f_uac2, g_audio.func);
struct f_uac2_opts *g_audio_to_uac2_opts(struct g_audio *agdev)
static int afunc_notify(struct g_audio *agdev, int unit_id, int cs);
static int afunc_validate_opts(struct g_audio *agdev, struct device *dev)
struct g_audio *audio_dev = uac->audio_dev;
struct g_audio *audio_dev = uac->audio_dev;
int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
if (!g_audio)
g_audio->uac = uac;
uac->audio_dev = g_audio;
params = &g_audio->params;
prm->max_psize = g_audio->out_ep_maxpsize;
prm->max_psize = g_audio->in_ep_maxpsize;
err = snd_card_new(&g_audio->gadget->dev,
if ((c_chmask && g_audio->in_ep_fback)
if (c_chmask && g_audio->in_ep_fback) {
void g_audio_cleanup(struct g_audio *g_audio)
if (!g_audio || !g_audio->uac)
uac = g_audio->uac;
g_audio->uac = NULL;
struct g_audio *audio_dev = uac->audio_dev;
struct g_audio *audio_dev;
struct g_audio *audio_dev;
struct g_audio *audio_dev;
int u_audio_set_capture_srate(struct g_audio *audio_dev, int srate)
int u_audio_get_capture_srate(struct g_audio *audio_dev, u32 *val)
int u_audio_set_playback_srate(struct g_audio *audio_dev, int srate)
int u_audio_get_playback_srate(struct g_audio *audio_dev, u32 *val)
int u_audio_start_capture(struct g_audio *audio_dev)
void u_audio_stop_capture(struct g_audio *audio_dev)
int u_audio_start_playback(struct g_audio *audio_dev)
struct g_audio *audio_dev;
void u_audio_stop_playback(struct g_audio *audio_dev)
void u_audio_suspend(struct g_audio *audio_dev)
int u_audio_get_volume(struct g_audio *audio_dev, int playback, s16 *val)
int u_audio_set_volume(struct g_audio *audio_dev, int playback, s16 val)
int u_audio_get_mute(struct g_audio *audio_dev, int playback, int *val)
int u_audio_set_mute(struct g_audio *audio_dev, int playback, int val)
struct g_audio *audio_dev = uac->audio_dev;
struct g_audio *audio_dev = uac->audio_dev;
struct g_audio *audio_dev = uac->audio_dev;
int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
void g_audio_cleanup(struct g_audio *g_audio);
int u_audio_start_capture(struct g_audio *g_audio);
void u_audio_stop_capture(struct g_audio *g_audio);
int u_audio_start_playback(struct g_audio *g_audio);
void u_audio_stop_playback(struct g_audio *g_audio);
int u_audio_get_capture_srate(struct g_audio *audio_dev, u32 *val);
int u_audio_set_capture_srate(struct g_audio *audio_dev, int srate);
int u_audio_get_playback_srate(struct g_audio *audio_dev, u32 *val);
int u_audio_set_playback_srate(struct g_audio *audio_dev, int srate);
int u_audio_get_volume(struct g_audio *g_audio, int playback, s16 *val);
int u_audio_set_volume(struct g_audio *g_audio, int playback, s16 val);
int u_audio_get_mute(struct g_audio *g_audio, int playback, int *val);
int u_audio_set_mute(struct g_audio *g_audio, int playback, int val);
void u_audio_suspend(struct g_audio *g_audio);
int (*notify)(struct g_audio *g_audio, int unit_id, int cs);
static inline struct g_audio *func_to_g_audio(struct usb_function *f)
return container_of(f, struct g_audio, func);