/* * Simple synchronous serial port driver for ETRAX 100LX. * * Synchronous serial ports are used for continuous streamed data like audio. * The default setting for this driver is compatible with the STA 013 MP3 * decoder. The driver can easily be tuned to fit other audio encoder/decoders * and SPI * * Copyright (c) 2001-2008 Axis Communications AB * * Author: Mikael Starvik, Johan Adolfsson * */#include<linux/module.h>#include<linux/kernel.h>#include<linux/types.h>#include<linux/errno.h>#include<linux/major.h>#include<linux/sched.h>#include<linux/interrupt.h>#include<linux/poll.h>#include<linux/init.h>#include<linux/mutex.h>#include<linux/timer.h>#include<asm/irq.h>#include<asm/dma.h>#include<asm/io.h>#include<arch/svinto.h>#include<asm/uaccess.h>#include<asm/system.h>#include<asm/sync_serial.h>#include<arch/io_interface_mux.h>/* The receiver is a bit tricky because of the continuous stream of data.*//* *//* Three DMA descriptors are linked together. Each DMA descriptor is *//* responsible for port->bufchunk of a common buffer. *//* *//* +---------------------------------------------+ *//* | +----------+ +----------+ +----------+ | *//* +-> | Descr[0] |-->| Descr[1] |-->| Descr[2] |-+ *//* +----------+ +----------+ +----------+ *//* | | | *//* v v v *//* +-------------------------------------+ *//* | BUFFER | *//* +-------------------------------------+ *//* |<- data_avail ->| *//* readp writep *//* *//* If the application keeps up the pace readp will be right after writep.*//* If the application can't keep the pace we have to throw away data. *//* The idea is that readp should be ready with the data pointed out by *//* Descr[i] when the DMA has filled in Descr[i+1]. *//* Otherwise we will discard *//* the rest of the data pointed out by Descr1 and set readp to the start *//* of Descr2 */#define SYNC_SERIAL_MAJOR 125/* IN_BUFFER_SIZE should be a multiple of 6 to make sure that 24 bit *//* words can be handled */#define IN_BUFFER_SIZE 12288#define IN_DESCR_SIZE 256#define NUM_IN_DESCR (IN_BUFFER_SIZE/IN_DESCR_SIZE)#define OUT_BUFFER_SIZE 4096#define DEFAULT_FRAME_RATE 0#define DEFAULT_WORD_RATE 7/* NOTE: Enabling some debug will likely cause overrun or underrun,