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

Commit f2437a7f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: android: Fix multiple issues seen with audio_source"

parents 62c92c98 6020b7ad
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -2752,20 +2752,11 @@ static int audio_source_function_bind_config(struct android_usb_function *f,
	return usb_add_function(c, config->f_aud);
}

static void audio_source_function_unbind_config(struct android_usb_function *f,
						struct usb_configuration *c)
{
	struct audio_source_function_config *config = f->config;

	usb_remove_function(c, config->f_aud);
}

static struct android_usb_function audio_source_function = {
	.name		= "audio_source",
	.init		= audio_source_function_init,
	.cleanup	= audio_source_function_cleanup,
	.bind_config	= audio_source_function_bind_config,
	.unbind_config	= audio_source_function_unbind_config,
};

static struct android_usb_function *supported_functions[] = {
+10 −45
Original line number Diff line number Diff line
@@ -659,17 +659,14 @@ audio_bind(struct usb_configuration *c, struct usb_function *f)
	int status;
	struct usb_ep *ep;
	struct usb_request *req;
	struct audio_source_instance *fi_audio = to_fi_audio_source(f->fi);
	struct audio_source_config *config = fi_audio->config;
	int i;
	int err;

	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
		struct audio_source_instance *fi_audio =
				to_fi_audio_source(f->fi);
		struct audio_source_config *config =
				fi_audio->config;

	err = snd_card_setup(c, config);
		if (err)
	if (err) {
		pr_err("snd_card_setup failed with %d\n", err);
		return err;
	}

@@ -728,6 +725,8 @@ audio_unbind(struct usb_configuration *c, struct usb_function *f)
{
	struct audio_dev *audio = func_to_audio(f);
	struct usb_request *req;
	struct audio_source_instance *fi_audio = to_fi_audio_source(f->fi);
	struct audio_source_config *config = fi_audio->config;

	while ((req = audio_req_get(audio)))
		audio_request_free(req, audio->in_ep);
@@ -737,17 +736,9 @@ audio_unbind(struct usb_configuration *c, struct usb_function *f)
	audio->pcm = NULL;
	audio->substream = NULL;
	audio->in_ep = NULL;

	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
		struct audio_source_instance *fi_audio =
				to_fi_audio_source(f->fi);
		struct audio_source_config *config =
				fi_audio->config;

	config->card = -1;
	config->device = -1;
}
}

static void audio_pcm_playback_start(struct audio_dev *audio)
{
@@ -922,32 +913,6 @@ static struct snd_pcm_ops audio_playback_ops = {
	.mmap		= audio_pcm_mmap,
};

int audio_source_bind_config(struct usb_configuration *c,
		struct audio_source_config *config)
{
	struct audio_dev *audio;
	int err;

	config->card = -1;
	config->device = -1;

	audio = &_audio_dev;

	err = snd_card_setup(c, config);
	if (err)
		return err;

	err = usb_add_function(c, &audio->func);
	if (err)
		goto add_fail;

	return 0;

add_fail:
	snd_card_free(audio->card);
	return err;
}

static int snd_card_setup(struct usb_configuration *c,
		struct audio_source_config *config)
{