/*
* sound/ubicom32/ubi32.h
* Common header file for all ubi32- sound drivers
*
* (C) Copyright 2009, Ubicom, Inc.
*
* This file is part of the Ubicom32 Linux Kernel Port.
*
* The Ubicom32 Linux Kernel Port 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, either version 2 of the
* License, or (at your option) any later version.
*
* The Ubicom32 Linux Kernel Port is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the Ubicom32 Linux Kernel Port. If not,
* see .
*/
#ifndef _UBI32_H
#define _UBI32_H
#define SND_UBI32_DEBUG 0 // Debug flag
#include
#include
#include
#include
struct ubi32_snd_priv;
typedef int (*set_channels_t)(struct ubi32_snd_priv *priv, int channels);
typedef int (*set_rate_t)(struct ubi32_snd_priv *priv, int rate);
struct ubi32_snd_priv {
/*
* Any variables that are needed locally here but NOT in
* the VP itself should go in here.
*/
struct snd_card *card;
struct snd_pcm *pcm;
/*
* capture (1) or playback (0)
*/
int is_capture;
/*
* DAC parameters. These are the parameters for the specific
* DAC we are driving. The I2S component can run at a range
* of frequencies, but the DAC may be limited. We may want
* to make this an array of some sort in the future?
*
* min/max_sample_rate if set to 0 are ignored.
*/
int max_sample_rate;
int min_sample_rate;
/*
* The size a period (group) of audio samples. The VP does
* not need to know this; each DMA transfer is made to be
* one period.
*/
u32_t period_size;
spinlock_t ubi32_lock;
struct audio_regs *ar;
struct audio_dev_regs *adr;
u32 irq_idx;
u8 tx_irq;
u8 rx_irq;
void *client;
/*
* Operations which the base DAC driver can implement
*/
set_channels_t set_channels;
set_rate_t set_rate;
/*
* platform data
*/
struct ubi32pcm_platform_data *pdata;
/*
* Private driver data (used for DAC driver control, etc)
*/
void *drvdata;
};
#define snd_ubi32_priv_get_drv(priv) ((priv)->drvdata)
#define snd_ubi32_priv_set_drv(priv, data) (((priv)->drvdata) = (void *)(data))
extern int snd_ubi32_pcm_probe(struct ubi32_snd_priv *ubi32_priv, struct platform_device *pdev);
extern void snd_ubi32_pcm_remove(struct ubi32_snd_priv *ubi32_priv);
#endif