Ejemplo n.º 1
0
static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *cdev,
                                    struct snd_rawmidi_substream *substream)
{
    int len, ret;
    struct device *dev = caiaqdev_to_dev(cdev);

    cdev->midi_out_buf[0] = EP1_CMD_MIDI_WRITE;
    cdev->midi_out_buf[1] = 0; /* port */
    len = snd_rawmidi_transmit(substream, cdev->midi_out_buf + 3,
                               EP1_BUFSIZE - 3);

    if (len <= 0)
        return;

    cdev->midi_out_buf[2] = len;
    cdev->midi_out_urb.transfer_buffer_length = len+3;

    ret = usb_submit_urb(&cdev->midi_out_urb, GFP_ATOMIC);
    if (ret < 0)
        dev_err(dev,
                "snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed,"
                "ret=%d, len=%d\n", substream, ret, len);
    else
        cdev->midi_out_active = 1;
}
Ejemplo n.º 2
0
int snd_usb_caiaq_set_audio_params (struct snd_usb_caiaqdev *cdev,
		   		    int rate, int depth, int bpp)
{
	int ret;
	char tmp[5];
	struct device *dev = caiaqdev_to_dev(cdev);

	switch (rate) {
	case 44100:	tmp[0] = SAMPLERATE_44100;   break;
	case 48000:	tmp[0] = SAMPLERATE_48000;   break;
	case 88200:	tmp[0] = SAMPLERATE_88200;   break;
	case 96000:	tmp[0] = SAMPLERATE_96000;   break;
	case 192000:	tmp[0] = SAMPLERATE_192000;  break;
	default:	return -EINVAL;
	}

	switch (depth) {
	case 16:	tmp[1] = DEPTH_16;   break;
	case 24:	tmp[1] = DEPTH_24;   break;
	default:	return -EINVAL;
	}

	tmp[2] = bpp & 0xff;
	tmp[3] = bpp >> 8;
	tmp[4] = 1; /* packets per microframe */

	dev_dbg(dev, "setting audio params: %d Hz, %d bits, %d bpp\n",
		rate, depth, bpp);

	cdev->audio_parm_answer = -1;
	ret = snd_usb_caiaq_send_command(cdev, EP1_CMD_AUDIO_PARAMS,
					 tmp, sizeof(tmp));

	if (ret)
		return ret;

	if (!wait_event_timeout(cdev->ep1_wait_queue,
	    cdev->audio_parm_answer >= 0, HZ))
		return -EPIPE;

	if (cdev->audio_parm_answer != 1)
		dev_dbg(dev, "unable to set the device's audio params\n");
	else
		cdev->bpp = bpp;

	return cdev->audio