Path: blob/master/sound/aoa/soundbus/i2sbus/i2sbus.h
15125 views
/*1* i2sbus driver -- private definitions2*3* Copyright 2006 Johannes Berg <[email protected]>4*5* GPL v2, can be found in COPYING.6*/7#ifndef __I2SBUS_H8#define __I2SBUS_H9#include <linux/interrupt.h>10#include <linux/spinlock.h>11#include <linux/mutex.h>12#include <linux/completion.h>1314#include <sound/pcm.h>1516#include <asm/prom.h>17#include <asm/pmac_feature.h>18#include <asm/dbdma.h>1920#include "interface.h"21#include "../soundbus.h"2223struct i2sbus_control {24struct list_head list;25struct macio_chip *macio;26};2728#define MAX_DBDMA_COMMANDS 322930struct dbdma_command_mem {31dma_addr_t bus_addr;32dma_addr_t bus_cmd_start;33struct dbdma_cmd *cmds;34void *space;35int size;36u32 running:1;37u32 stopping:1;38};3940struct pcm_info {41u32 created:1, /* has this direction been created with alsa? */42active:1; /* is this stream active? */43/* runtime information */44struct snd_pcm_substream *substream;45int current_period;46u32 frame_count;47struct dbdma_command_mem dbdma_ring;48volatile struct dbdma_regs __iomem *dbdma;49struct completion *stop_completion;50};5152enum {53aoa_resource_i2smmio = 0,54aoa_resource_txdbdma,55aoa_resource_rxdbdma,56};5758struct i2sbus_dev {59struct soundbus_dev sound;60struct macio_dev *macio;61struct i2sbus_control *control;62volatile struct i2s_interface_regs __iomem *intfregs;6364struct resource resources[3];65struct resource *allocated_resource[3];66int interrupts[3];67char rnames[3][32];6869/* info about currently active substreams */70struct pcm_info out, in;71snd_pcm_format_t format;72unsigned int rate;7374/* list for a single controller */75struct list_head item;76/* number of bus on controller */77int bus_number;78/* for use by control layer */79struct pmf_function *enable,80*cell_enable,81*cell_disable,82*clock_enable,83*clock_disable;8485/* locks */86/* spinlock for low-level interrupt locking */87spinlock_t low_lock;88/* mutex for high-level consistency */89struct mutex lock;90};9192#define soundbus_dev_to_i2sbus_dev(sdev) \93container_of(sdev, struct i2sbus_dev, sound)9495/* pcm specific functions */96extern int97i2sbus_attach_codec(struct soundbus_dev *dev, struct snd_card *card,98struct codec_info *ci, void *data);99extern void100i2sbus_detach_codec(struct soundbus_dev *dev, void *data);101extern irqreturn_t102i2sbus_tx_intr(int irq, void *devid);103extern irqreturn_t104i2sbus_rx_intr(int irq, void *devid);105106extern void i2sbus_wait_for_stop_both(struct i2sbus_dev *i2sdev);107extern void i2sbus_pcm_prepare_both(struct i2sbus_dev *i2sdev);108109/* control specific functions */110extern int i2sbus_control_init(struct macio_dev* dev,111struct i2sbus_control **c);112extern void i2sbus_control_destroy(struct i2sbus_control *c);113extern int i2sbus_control_add_dev(struct i2sbus_control *c,114struct i2sbus_dev *i2sdev);115extern void i2sbus_control_remove_dev(struct i2sbus_control *c,116struct i2sbus_dev *i2sdev);117extern int i2sbus_control_enable(struct i2sbus_control *c,118struct i2sbus_dev *i2sdev);119extern int i2sbus_control_cell(struct i2sbus_control *c,120struct i2sbus_dev *i2sdev,121int enable);122extern int i2sbus_control_clock(struct i2sbus_control *c,123struct i2sbus_dev *i2sdev,124int enable);125#endif /* __I2SBUS_H */126127128