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

Commit d7bff772 authored by Vijayavardhan Vennapusa's avatar Vijayavardhan Vennapusa Committed by Gerrit - the friendly Code Review server
Browse files

f_audio_source: Implement get_alt() support



Implement get_alt() callback which is required to support multiple
alternate settings of audio_source interface.

Change-Id: Id857af047759687ae2d626839b2dd31ad59db452
Signed-off-by: default avatarVijayavardhan Vennapusa <vvreddy@codeaurora.org>
parent c2c950b4
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -591,14 +591,38 @@ static int audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)

	pr_debug("audio_set_alt intf %d, alt %d\n", intf, alt);

	if (!alt) {
		usb_ep_disable(audio->in_ep);
		return 0;
	}

	ret = config_ep_by_speed(cdev->gadget, f, audio->in_ep);
	if (ret)
	if (ret) {
		audio->in_ep->desc = NULL;
		pr_err("config_ep fail for audio ep ret %d\n", ret);
		return ret;
	}
	ret = usb_ep_enable(audio->in_ep);
	if (ret) {
		audio->in_ep->desc = NULL;
		pr_err("failed to enable audio ret %d\n", ret);
		return ret;
	}

	usb_ep_enable(audio->in_ep);
	return 0;
}

/*
 * Because the data interface supports multiple altsettings,
 * this audio_source function *MUST* implement a get_alt() method.
 */
static int audio_get_alt(struct usb_function *f, unsigned int intf)
{
	struct audio_dev	*audio = func_to_audio(f);

	return audio->in_ep->enabled ? 1 : 0;
}

static void audio_disable(struct usb_function *f)
{
	struct audio_dev	*audio = func_to_audio(f);
@@ -862,6 +886,7 @@ static struct audio_dev _audio_dev = {
		.bind = audio_bind,
		.unbind = audio_unbind,
		.set_alt = audio_set_alt,
		.get_alt = audio_get_alt,
		.setup = audio_setup,
		.disable = audio_disable,
		.free_func = audio_free_func,