LINUX.ORG.RU

История изменений

Исправление ChekPuk, (текущая версия) :

Ну? Дебьян, сорцы ядра 5.4 из бэкпортов, sound/usb/pcm.c

static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
					 struct usb_device *dev,
					 struct usb_interface_descriptor *altsd,
					 unsigned int attr)
{
	struct usb_host_interface *alts;
	struct usb_interface *iface;
	unsigned int ep;
	unsigned int ifnum;

	/* Implicit feedback sync EPs consumers are always playback EPs */
	if (subs->direction != SNDRV_PCM_STREAM_PLAYBACK)
		return 0;

	switch (subs->stream->chip->usb_id) {
	case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
	case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
		ep = 0x81;
		ifnum = 3;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
	case USB_ID(0x0763, 0x2081):
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8003): /* Fractal Audio Axe-Fx II */
		ep = 0x86;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx III */
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x1397, 0x0001): /* Behringer UFX1604 */
	case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */
		ep = 0x81;
		ifnum = 1;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
		ep = 0x84;
		ifnum = 0;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0582, 0x01d8): /* BOSS Katana */
		/* BOSS Katana amplifiers do not need quirks */
		return 0;
	}

	if (attr == USB_ENDPOINT_SYNC_ASYNC &&
	    altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
	    altsd->bInterfaceProtocol == 2 &&
	    altsd->bNumEndpoints == 1 &&
	    USB_ID_VENDOR(subs->stream->chip->usb_id) == 0x0582 /* Roland */ &&
	    search_roland_implicit_fb(dev, altsd->bInterfaceNumber + 1,
				      altsd->bAlternateSetting,
				      &alts, &ep) >= 0) {
		goto add_sync_ep;
	}

	/* No quirk */
	return 0;

Даже Катану включили. Если я правильно понимаю, то последний иф должен отрабатывать на всех ролландовских устройствах, да? Но если не работает, то добавить своё устройство и ТЕОРЕТИЧЕСКИ должно работать. Но надо ставить его именно последним.

Исправление ChekPuk, :

Ну? Дебьян, сорцы ядра 5.4 из бэкпортов, sount/usb/pcm.c

static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
					 struct usb_device *dev,
					 struct usb_interface_descriptor *altsd,
					 unsigned int attr)
{
	struct usb_host_interface *alts;
	struct usb_interface *iface;
	unsigned int ep;
	unsigned int ifnum;

	/* Implicit feedback sync EPs consumers are always playback EPs */
	if (subs->direction != SNDRV_PCM_STREAM_PLAYBACK)
		return 0;

	switch (subs->stream->chip->usb_id) {
	case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
	case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
		ep = 0x81;
		ifnum = 3;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
	case USB_ID(0x0763, 0x2081):
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8003): /* Fractal Audio Axe-Fx II */
		ep = 0x86;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx III */
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x1397, 0x0001): /* Behringer UFX1604 */
	case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */
		ep = 0x81;
		ifnum = 1;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
		ep = 0x84;
		ifnum = 0;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0582, 0x01d8): /* BOSS Katana */
		/* BOSS Katana amplifiers do not need quirks */
		return 0;
	}

	if (attr == USB_ENDPOINT_SYNC_ASYNC &&
	    altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
	    altsd->bInterfaceProtocol == 2 &&
	    altsd->bNumEndpoints == 1 &&
	    USB_ID_VENDOR(subs->stream->chip->usb_id) == 0x0582 /* Roland */ &&
	    search_roland_implicit_fb(dev, altsd->bInterfaceNumber + 1,
				      altsd->bAlternateSetting,
				      &alts, &ep) >= 0) {
		goto add_sync_ep;
	}

	/* No quirk */
	return 0;

Даже Катану включили. Если я правильно понимаю, то последний иф должен отрабатывать на всех ролландовских устройствах, да? Но если не работает, то добавить своё устройство и ТЕОРЕТИЧЕСКИ должно работать. Но надо ставить его именно последним.

Исходная версия ChekPuk, :

Ну? Дебьян, сорцы ядра из бэкпортов, sount/usb/pcm.c

static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
					 struct usb_device *dev,
					 struct usb_interface_descriptor *altsd,
					 unsigned int attr)
{
	struct usb_host_interface *alts;
	struct usb_interface *iface;
	unsigned int ep;
	unsigned int ifnum;

	/* Implicit feedback sync EPs consumers are always playback EPs */
	if (subs->direction != SNDRV_PCM_STREAM_PLAYBACK)
		return 0;

	switch (subs->stream->chip->usb_id) {
	case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
	case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
		ep = 0x81;
		ifnum = 3;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
	case USB_ID(0x0763, 0x2081):
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8003): /* Fractal Audio Axe-Fx II */
		ep = 0x86;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx III */
		ep = 0x81;
		ifnum = 2;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x1397, 0x0001): /* Behringer UFX1604 */
	case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */
		ep = 0x81;
		ifnum = 1;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
		ep = 0x84;
		ifnum = 0;
		goto add_sync_ep_from_ifnum;
	case USB_ID(0x0582, 0x01d8): /* BOSS Katana */
		/* BOSS Katana amplifiers do not need quirks */
		return 0;
	}

	if (attr == USB_ENDPOINT_SYNC_ASYNC &&
	    altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
	    altsd->bInterfaceProtocol == 2 &&
	    altsd->bNumEndpoints == 1 &&
	    USB_ID_VENDOR(subs->stream->chip->usb_id) == 0x0582 /* Roland */ &&
	    search_roland_implicit_fb(dev, altsd->bInterfaceNumber + 1,
				      altsd->bAlternateSetting,
				      &alts, &ep) >= 0) {
		goto add_sync_ep;
	}

	/* No quirk */
	return 0;

Даже Катану включили. Если я правильно понимаю, то последний иф должен отрабатывать на всех ролландовских устройствах, да? Но если не работает, то добавить своё устройство и ТЕОРЕТИЧЕСКИ должно работать. Но надо ставить его именно последним.