/*
 * Line 6 Linux USB driver
 *
 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License as
 *	published by the Free Software Foundation, version 2.
 *
 */

#ifndef PLAYBACK_H
#define PLAYBACK_H

#include <sound/pcm.h>

#include "driver.h"

/*
 * When the TonePort is used with jack in full duplex mode and the outputs are
 * not connected, the software monitor produces an ugly noise since everything
 * written to the output buffer (i.e., the input signal) will be repeated in
 * the next period (sounds like a delay effect). As a workaround, the output
 * buffer is cleared after the data have been read, but there must be a better
 * solution. Until one is found, this workaround can be used to fix the
 * problem.
 */
#define USE_CLEAR_BUFFER_WORKAROUND 1

extern struct snd_pcm_ops snd_line6_playback_ops;

extern int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm);
extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm);

#endif
