[ALSA] Remove xxx_t typedefs: SPARC CS4231
Remove xxx_t typedefs from the SPARC CS4231 driver. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
68094e3251
commit
be9b7e8c02
|
@ -62,49 +62,47 @@ MODULE_LICENSE("GPL");
|
||||||
MODULE_SUPPORTED_DEVICE("{{Sun,CS4231}}");
|
MODULE_SUPPORTED_DEVICE("{{Sun,CS4231}}");
|
||||||
|
|
||||||
#ifdef SBUS_SUPPORT
|
#ifdef SBUS_SUPPORT
|
||||||
typedef struct sbus_dma_info {
|
struct sbus_dma_info {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
int dir;
|
int dir;
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
} sbus_dma_info_t;
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct snd_cs4231 cs4231_t;
|
struct cs4231_dma_control {
|
||||||
|
|
||||||
typedef struct cs4231_dma_control {
|
|
||||||
void (*prepare)(struct cs4231_dma_control *dma_cont, int dir);
|
void (*prepare)(struct cs4231_dma_control *dma_cont, int dir);
|
||||||
void (*enable)(struct cs4231_dma_control *dma_cont, int on);
|
void (*enable)(struct cs4231_dma_control *dma_cont, int on);
|
||||||
int (*request)(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len);
|
int (*request)(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len);
|
||||||
unsigned int (*address)(struct cs4231_dma_control *dma_cont);
|
unsigned int (*address)(struct cs4231_dma_control *dma_cont);
|
||||||
void (*reset)(cs4231_t *chip);
|
void (*reset)(struct snd_cs4231 *chip);
|
||||||
void (*preallocate)(cs4231_t *chip, snd_pcm_t *pcm);
|
void (*preallocate)(struct snd_cs4231 *chip, struct snd_snd_pcm *pcm);
|
||||||
#ifdef EBUS_SUPPORT
|
#ifdef EBUS_SUPPORT
|
||||||
struct ebus_dma_info ebus_info;
|
struct ebus_dma_info ebus_info;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SBUS_SUPPORT
|
#ifdef SBUS_SUPPORT
|
||||||
struct sbus_dma_info sbus_info;
|
struct sbus_dma_info sbus_info;
|
||||||
#endif
|
#endif
|
||||||
} cs4231_dma_control_t;
|
};
|
||||||
|
|
||||||
struct snd_cs4231 {
|
struct snd_cs4231 {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
void __iomem *port;
|
void __iomem *port;
|
||||||
|
|
||||||
cs4231_dma_control_t p_dma;
|
struct cs4231_dma_control p_dma;
|
||||||
cs4231_dma_control_t c_dma;
|
struct cs4231_dma_control c_dma;
|
||||||
|
|
||||||
u32 flags;
|
u32 flags;
|
||||||
#define CS4231_FLAG_EBUS 0x00000001
|
#define CS4231_FLAG_EBUS 0x00000001
|
||||||
#define CS4231_FLAG_PLAYBACK 0x00000002
|
#define CS4231_FLAG_PLAYBACK 0x00000002
|
||||||
#define CS4231_FLAG_CAPTURE 0x00000004
|
#define CS4231_FLAG_CAPTURE 0x00000004
|
||||||
|
|
||||||
snd_card_t *card;
|
struct snd_card *card;
|
||||||
snd_pcm_t *pcm;
|
struct snd_pcm *pcm;
|
||||||
snd_pcm_substream_t *playback_substream;
|
struct snd_pcm_substream *playback_substream;
|
||||||
unsigned int p_periods_sent;
|
unsigned int p_periods_sent;
|
||||||
snd_pcm_substream_t *capture_substream;
|
struct snd_pcm_substream *capture_substream;
|
||||||
unsigned int c_periods_sent;
|
unsigned int c_periods_sent;
|
||||||
snd_timer_t *timer;
|
struct snd_timer *timer;
|
||||||
|
|
||||||
unsigned short mode;
|
unsigned short mode;
|
||||||
#define CS4231_MODE_NONE 0x0000
|
#define CS4231_MODE_NONE 0x0000
|
||||||
|
@ -132,7 +130,7 @@ struct snd_cs4231 {
|
||||||
struct snd_cs4231 *next;
|
struct snd_cs4231 *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
static cs4231_t *cs4231_list;
|
static struct snd_cs4231 *cs4231_list;
|
||||||
|
|
||||||
/* Eventually we can use sound/isa/cs423x/cs4231_lib.c directly, but for
|
/* Eventually we can use sound/isa/cs423x/cs4231_lib.c directly, but for
|
||||||
* now.... -DaveM
|
* now.... -DaveM
|
||||||
|
@ -341,12 +339,12 @@ static unsigned int rates[14] = {
|
||||||
27042, 32000, 33075, 37800, 44100, 48000
|
27042, 32000, 33075, 37800, 44100, 48000
|
||||||
};
|
};
|
||||||
|
|
||||||
static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
|
static struct snd_pcm_hw_constraint_list hw_constraints_rates = {
|
||||||
.count = 14,
|
.count = 14,
|
||||||
.list = rates,
|
.list = rates,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int snd_cs4231_xrate(snd_pcm_runtime_t *runtime)
|
static int snd_cs4231_xrate(struct snd_pcm_runtime *runtime)
|
||||||
{
|
{
|
||||||
return snd_pcm_hw_constraint_list(runtime, 0,
|
return snd_pcm_hw_constraint_list(runtime, 0,
|
||||||
SNDRV_PCM_HW_PARAM_RATE,
|
SNDRV_PCM_HW_PARAM_RATE,
|
||||||
|
@ -389,7 +387,7 @@ static unsigned char snd_cs4231_original_image[32] =
|
||||||
0x00, /* 1f/31 - cbrl */
|
0x00, /* 1f/31 - cbrl */
|
||||||
};
|
};
|
||||||
|
|
||||||
static u8 __cs4231_readb(cs4231_t *cp, void __iomem *reg_addr)
|
static u8 __cs4231_readb(struct snd_cs4231 *cp, void __iomem *reg_addr)
|
||||||
{
|
{
|
||||||
#ifdef EBUS_SUPPORT
|
#ifdef EBUS_SUPPORT
|
||||||
if (cp->flags & CS4231_FLAG_EBUS) {
|
if (cp->flags & CS4231_FLAG_EBUS) {
|
||||||
|
@ -404,7 +402,7 @@ static u8 __cs4231_readb(cs4231_t *cp, void __iomem *reg_addr)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __cs4231_writeb(cs4231_t *cp, u8 val, void __iomem *reg_addr)
|
static void __cs4231_writeb(struct snd_cs4231 *cp, u8 val, void __iomem *reg_addr)
|
||||||
{
|
{
|
||||||
#ifdef EBUS_SUPPORT
|
#ifdef EBUS_SUPPORT
|
||||||
if (cp->flags & CS4231_FLAG_EBUS) {
|
if (cp->flags & CS4231_FLAG_EBUS) {
|
||||||
|
@ -423,7 +421,7 @@ static void __cs4231_writeb(cs4231_t *cp, u8 val, void __iomem *reg_addr)
|
||||||
* Basic I/O functions
|
* Basic I/O functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void snd_cs4231_outm(cs4231_t *chip, unsigned char reg,
|
static void snd_cs4231_outm(struct snd_cs4231 *chip, unsigned char reg,
|
||||||
unsigned char mask, unsigned char value)
|
unsigned char mask, unsigned char value)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
|
@ -450,7 +448,7 @@ static void snd_cs4231_outm(cs4231_t *chip, unsigned char reg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_dout(cs4231_t *chip, unsigned char reg, unsigned char value)
|
static void snd_cs4231_dout(struct snd_cs4231 *chip, unsigned char reg, unsigned char value)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
|
|
||||||
|
@ -467,7 +465,7 @@ static void snd_cs4231_dout(cs4231_t *chip, unsigned char reg, unsigned char val
|
||||||
mb();
|
mb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_out(cs4231_t *chip, unsigned char reg, unsigned char value)
|
static void snd_cs4231_out(struct snd_cs4231 *chip, unsigned char reg, unsigned char value)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
|
|
||||||
|
@ -485,7 +483,7 @@ static void snd_cs4231_out(cs4231_t *chip, unsigned char reg, unsigned char valu
|
||||||
mb();
|
mb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char snd_cs4231_in(cs4231_t *chip, unsigned char reg)
|
static unsigned char snd_cs4231_in(struct snd_cs4231 *chip, unsigned char reg)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
unsigned char ret;
|
unsigned char ret;
|
||||||
|
@ -508,7 +506,7 @@ static unsigned char snd_cs4231_in(cs4231_t *chip, unsigned char reg)
|
||||||
* CS4231 detection / MCE routines
|
* CS4231 detection / MCE routines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void snd_cs4231_busy_wait(cs4231_t *chip)
|
static void snd_cs4231_busy_wait(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
|
|
||||||
|
@ -523,7 +521,7 @@ static void snd_cs4231_busy_wait(cs4231_t *chip)
|
||||||
udelay(1000);
|
udelay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_mce_up(cs4231_t *chip)
|
static void snd_cs4231_mce_up(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int timeout;
|
int timeout;
|
||||||
|
@ -544,7 +542,7 @@ static void snd_cs4231_mce_up(cs4231_t *chip)
|
||||||
spin_unlock_irqrestore(&chip->lock, flags);
|
spin_unlock_irqrestore(&chip->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_mce_down(cs4231_t *chip)
|
static void snd_cs4231_mce_down(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int timeout;
|
int timeout;
|
||||||
|
@ -602,9 +600,11 @@ static void snd_cs4231_mce_down(cs4231_t *chip)
|
||||||
spin_unlock_irqrestore(&chip->lock, flags);
|
spin_unlock_irqrestore(&chip->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_advance_dma(struct cs4231_dma_control *dma_cont, snd_pcm_substream_t *substream, unsigned int *periods_sent)
|
static void snd_cs4231_advance_dma(struct cs4231_dma_control *dma_cont,
|
||||||
|
struct snd_pcm_substream *substream,
|
||||||
|
unsigned int *periods_sent)
|
||||||
{
|
{
|
||||||
snd_pcm_runtime_t *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
unsigned int period_size = snd_pcm_lib_period_bytes(substream);
|
unsigned int period_size = snd_pcm_lib_period_bytes(substream);
|
||||||
|
@ -619,10 +619,11 @@ static void snd_cs4231_advance_dma(struct cs4231_dma_control *dma_cont, snd_pcm_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cs4231_dma_trigger(snd_pcm_substream_t *substream, unsigned int what, int on)
|
static void cs4231_dma_trigger(struct snd_pcm_substream *substream,
|
||||||
|
unsigned int what, int on)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
cs4231_dma_control_t *dma_cont;
|
struct cs4231_dma_control *dma_cont;
|
||||||
|
|
||||||
if (what & CS4231_PLAYBACK_ENABLE) {
|
if (what & CS4231_PLAYBACK_ENABLE) {
|
||||||
dma_cont = &chip->p_dma;
|
dma_cont = &chip->p_dma;
|
||||||
|
@ -650,9 +651,9 @@ static void cs4231_dma_trigger(snd_pcm_substream_t *substream, unsigned int what
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_trigger(snd_pcm_substream_t *substream, int cmd)
|
static int snd_cs4231_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
@ -660,7 +661,7 @@ static int snd_cs4231_trigger(snd_pcm_substream_t *substream, int cmd)
|
||||||
case SNDRV_PCM_TRIGGER_STOP:
|
case SNDRV_PCM_TRIGGER_STOP:
|
||||||
{
|
{
|
||||||
unsigned int what = 0;
|
unsigned int what = 0;
|
||||||
snd_pcm_substream_t *s;
|
struct snd_pcm_substream *s;
|
||||||
struct list_head *pos;
|
struct list_head *pos;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -711,7 +712,7 @@ static unsigned char snd_cs4231_get_rate(unsigned int rate)
|
||||||
return freq_bits[13];
|
return freq_bits[13];
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char snd_cs4231_get_format(cs4231_t *chip, int format, int channels)
|
static unsigned char snd_cs4231_get_format(struct snd_cs4231 *chip, int format, int channels)
|
||||||
{
|
{
|
||||||
unsigned char rformat;
|
unsigned char rformat;
|
||||||
|
|
||||||
|
@ -728,7 +729,7 @@ static unsigned char snd_cs4231_get_format(cs4231_t *chip, int format, int chann
|
||||||
return rformat;
|
return rformat;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_calibrate_mute(cs4231_t *chip, int mute)
|
static void snd_cs4231_calibrate_mute(struct snd_cs4231 *chip, int mute)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -768,7 +769,7 @@ static void snd_cs4231_calibrate_mute(cs4231_t *chip, int mute)
|
||||||
spin_unlock_irqrestore(&chip->lock, flags);
|
spin_unlock_irqrestore(&chip->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_playback_format(cs4231_t *chip, snd_pcm_hw_params_t *params,
|
static void snd_cs4231_playback_format(struct snd_cs4231 *chip, struct snd_pcm_hw_params *params,
|
||||||
unsigned char pdfr)
|
unsigned char pdfr)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -791,7 +792,7 @@ static void snd_cs4231_playback_format(cs4231_t *chip, snd_pcm_hw_params_t *para
|
||||||
up(&chip->mce_mutex);
|
up(&chip->mce_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_capture_format(cs4231_t *chip, snd_pcm_hw_params_t *params,
|
static void snd_cs4231_capture_format(struct snd_cs4231 *chip, struct snd_pcm_hw_params *params,
|
||||||
unsigned char cdfr)
|
unsigned char cdfr)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -824,18 +825,18 @@ static void snd_cs4231_capture_format(cs4231_t *chip, snd_pcm_hw_params_t *param
|
||||||
* Timer interface
|
* Timer interface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static unsigned long snd_cs4231_timer_resolution(snd_timer_t *timer)
|
static unsigned long snd_cs4231_timer_resolution(struct snd_timer *timer)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_timer_chip(timer);
|
struct snd_cs4231 *chip = snd_timer_chip(timer);
|
||||||
|
|
||||||
return chip->image[CS4231_PLAYBK_FORMAT] & 1 ? 9969 : 9920;
|
return chip->image[CS4231_PLAYBK_FORMAT] & 1 ? 9969 : 9920;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_timer_start(snd_timer_t *timer)
|
static int snd_cs4231_timer_start(struct snd_timer *timer)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int ticks;
|
unsigned int ticks;
|
||||||
cs4231_t *chip = snd_timer_chip(timer);
|
struct snd_cs4231 *chip = snd_timer_chip(timer);
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->lock, flags);
|
spin_lock_irqsave(&chip->lock, flags);
|
||||||
ticks = timer->sticks;
|
ticks = timer->sticks;
|
||||||
|
@ -856,10 +857,10 @@ static int snd_cs4231_timer_start(snd_timer_t *timer)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_timer_stop(snd_timer_t *timer)
|
static int snd_cs4231_timer_stop(struct snd_timer *timer)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
cs4231_t *chip = snd_timer_chip(timer);
|
struct snd_cs4231 *chip = snd_timer_chip(timer);
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->lock, flags);
|
spin_lock_irqsave(&chip->lock, flags);
|
||||||
snd_cs4231_out(chip, CS4231_ALT_FEATURE_1,
|
snd_cs4231_out(chip, CS4231_ALT_FEATURE_1,
|
||||||
|
@ -869,7 +870,7 @@ static int snd_cs4231_timer_stop(snd_timer_t *timer)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_init(cs4231_t *chip)
|
static void __init snd_cs4231_init(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -927,7 +928,7 @@ static void snd_cs4231_init(cs4231_t *chip)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_open(cs4231_t *chip, unsigned int mode)
|
static int snd_cs4231_open(struct snd_cs4231 *chip, unsigned int mode)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -962,7 +963,7 @@ static int snd_cs4231_open(cs4231_t *chip, unsigned int mode)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_close(cs4231_t *chip, unsigned int mode)
|
static void snd_cs4231_close(struct snd_cs4231 *chip, unsigned int mode)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -1013,21 +1014,21 @@ static void snd_cs4231_close(cs4231_t *chip, unsigned int mode)
|
||||||
* timer open/close
|
* timer open/close
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_timer_open(snd_timer_t *timer)
|
static int snd_cs4231_timer_open(struct snd_timer *timer)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_timer_chip(timer);
|
struct snd_cs4231 *chip = snd_timer_chip(timer);
|
||||||
snd_cs4231_open(chip, CS4231_MODE_TIMER);
|
snd_cs4231_open(chip, CS4231_MODE_TIMER);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_timer_close(snd_timer_t * timer)
|
static int snd_cs4231_timer_close(struct snd_timer * timer)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_timer_chip(timer);
|
struct snd_cs4231 *chip = snd_timer_chip(timer);
|
||||||
snd_cs4231_close(chip, CS4231_MODE_TIMER);
|
snd_cs4231_close(chip, CS4231_MODE_TIMER);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct _snd_timer_hardware snd_cs4231_timer_table =
|
static struct snd_timer_hardware snd_cs4231_timer_table =
|
||||||
{
|
{
|
||||||
.flags = SNDRV_TIMER_HW_AUTO,
|
.flags = SNDRV_TIMER_HW_AUTO,
|
||||||
.resolution = 9945,
|
.resolution = 9945,
|
||||||
|
@ -1043,10 +1044,10 @@ static struct _snd_timer_hardware snd_cs4231_timer_table =
|
||||||
* ok.. exported functions..
|
* ok.. exported functions..
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_playback_hw_params(snd_pcm_substream_t *substream,
|
static int snd_cs4231_playback_hw_params(struct snd_pcm_substream *substream,
|
||||||
snd_pcm_hw_params_t *hw_params)
|
struct snd_pcm_hw_params *hw_params)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
unsigned char new_pdfr;
|
unsigned char new_pdfr;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1061,15 +1062,15 @@ static int snd_cs4231_playback_hw_params(snd_pcm_substream_t *substream,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_playback_hw_free(snd_pcm_substream_t *substream)
|
static int snd_cs4231_playback_hw_free(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
return snd_pcm_lib_free_pages(substream);
|
return snd_pcm_lib_free_pages(substream);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_playback_prepare(snd_pcm_substream_t *substream)
|
static int snd_cs4231_playback_prepare(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
snd_pcm_runtime_t *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->lock, flags);
|
spin_lock_irqsave(&chip->lock, flags);
|
||||||
|
@ -1086,10 +1087,10 @@ static int snd_cs4231_playback_prepare(snd_pcm_substream_t *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_capture_hw_params(snd_pcm_substream_t *substream,
|
static int snd_cs4231_capture_hw_params(struct snd_pcm_substream *substream,
|
||||||
snd_pcm_hw_params_t *hw_params)
|
struct snd_pcm_hw_params *hw_params)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
unsigned char new_cdfr;
|
unsigned char new_cdfr;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1104,14 +1105,14 @@ static int snd_cs4231_capture_hw_params(snd_pcm_substream_t *substream,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_capture_hw_free(snd_pcm_substream_t *substream)
|
static int snd_cs4231_capture_hw_free(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
return snd_pcm_lib_free_pages(substream);
|
return snd_pcm_lib_free_pages(substream);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_capture_prepare(snd_pcm_substream_t *substream)
|
static int snd_cs4231_capture_prepare(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->lock, flags);
|
spin_lock_irqsave(&chip->lock, flags);
|
||||||
|
@ -1125,7 +1126,7 @@ static int snd_cs4231_capture_prepare(snd_pcm_substream_t *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_overrange(cs4231_t *chip)
|
static void snd_cs4231_overrange(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned char res;
|
unsigned char res;
|
||||||
|
@ -1138,10 +1139,8 @@ static void snd_cs4231_overrange(cs4231_t *chip)
|
||||||
chip->capture_substream->runtime->overrange++;
|
chip->capture_substream->runtime->overrange++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_play_callback(cs4231_t *cookie)
|
static void snd_cs4231_play_callback(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = cookie;
|
|
||||||
|
|
||||||
if (chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE) {
|
if (chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE) {
|
||||||
snd_pcm_period_elapsed(chip->playback_substream);
|
snd_pcm_period_elapsed(chip->playback_substream);
|
||||||
snd_cs4231_advance_dma(&chip->p_dma, chip->playback_substream,
|
snd_cs4231_advance_dma(&chip->p_dma, chip->playback_substream,
|
||||||
|
@ -1149,10 +1148,8 @@ static void snd_cs4231_play_callback(cs4231_t *cookie)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_capture_callback(cs4231_t *cookie)
|
static void snd_cs4231_capture_callback(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = cookie;
|
|
||||||
|
|
||||||
if (chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) {
|
if (chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) {
|
||||||
snd_pcm_period_elapsed(chip->capture_substream);
|
snd_pcm_period_elapsed(chip->capture_substream);
|
||||||
snd_cs4231_advance_dma(&chip->c_dma, chip->capture_substream,
|
snd_cs4231_advance_dma(&chip->c_dma, chip->capture_substream,
|
||||||
|
@ -1160,10 +1157,10 @@ static void snd_cs4231_capture_callback(cs4231_t *cookie)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static snd_pcm_uframes_t snd_cs4231_playback_pointer(snd_pcm_substream_t *substream)
|
static snd_pcm_uframes_t snd_cs4231_playback_pointer(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
cs4231_dma_control_t *dma_cont = &chip->p_dma;
|
struct cs4231_dma_control *dma_cont = &chip->p_dma;
|
||||||
size_t ptr;
|
size_t ptr;
|
||||||
|
|
||||||
if (!(chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE))
|
if (!(chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE))
|
||||||
|
@ -1175,10 +1172,10 @@ static snd_pcm_uframes_t snd_cs4231_playback_pointer(snd_pcm_substream_t *substr
|
||||||
return bytes_to_frames(substream->runtime, ptr);
|
return bytes_to_frames(substream->runtime, ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static snd_pcm_uframes_t snd_cs4231_capture_pointer(snd_pcm_substream_t * substream)
|
static snd_pcm_uframes_t snd_cs4231_capture_pointer(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
cs4231_dma_control_t *dma_cont = &chip->c_dma;
|
struct cs4231_dma_control *dma_cont = &chip->c_dma;
|
||||||
size_t ptr;
|
size_t ptr;
|
||||||
|
|
||||||
if (!(chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE))
|
if (!(chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE))
|
||||||
|
@ -1194,7 +1191,7 @@ static snd_pcm_uframes_t snd_cs4231_capture_pointer(snd_pcm_substream_t * substr
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_probe(cs4231_t *chip)
|
static int __init snd_cs4231_probe(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i, id, vers;
|
int i, id, vers;
|
||||||
|
@ -1259,7 +1256,7 @@ static int snd_cs4231_probe(cs4231_t *chip)
|
||||||
return 0; /* all things are ok.. */
|
return 0; /* all things are ok.. */
|
||||||
}
|
}
|
||||||
|
|
||||||
static snd_pcm_hardware_t snd_cs4231_playback =
|
static struct snd_pcm_hardware snd_cs4231_playback =
|
||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START),
|
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START),
|
||||||
|
@ -1279,7 +1276,7 @@ static snd_pcm_hardware_t snd_cs4231_playback =
|
||||||
.periods_max = 1024,
|
.periods_max = 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
static snd_pcm_hardware_t snd_cs4231_capture =
|
static struct snd_pcm_hardware snd_cs4231_capture =
|
||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START),
|
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START),
|
||||||
|
@ -1299,10 +1296,10 @@ static snd_pcm_hardware_t snd_cs4231_capture =
|
||||||
.periods_max = 1024,
|
.periods_max = 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int snd_cs4231_playback_open(snd_pcm_substream_t *substream)
|
static int snd_cs4231_playback_open(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
snd_pcm_runtime_t *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
runtime->hw = snd_cs4231_playback;
|
runtime->hw = snd_cs4231_playback;
|
||||||
|
@ -1319,10 +1316,10 @@ static int snd_cs4231_playback_open(snd_pcm_substream_t *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_capture_open(snd_pcm_substream_t *substream)
|
static int snd_cs4231_capture_open(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
snd_pcm_runtime_t *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
runtime->hw = snd_cs4231_capture;
|
runtime->hw = snd_cs4231_capture;
|
||||||
|
@ -1339,9 +1336,9 @@ static int snd_cs4231_capture_open(snd_pcm_substream_t *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_playback_close(snd_pcm_substream_t *substream)
|
static int snd_cs4231_playback_close(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
|
|
||||||
snd_cs4231_close(chip, CS4231_MODE_PLAY);
|
snd_cs4231_close(chip, CS4231_MODE_PLAY);
|
||||||
chip->playback_substream = NULL;
|
chip->playback_substream = NULL;
|
||||||
|
@ -1349,9 +1346,9 @@ static int snd_cs4231_playback_close(snd_pcm_substream_t *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_capture_close(snd_pcm_substream_t *substream)
|
static int snd_cs4231_capture_close(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_pcm_substream_chip(substream);
|
struct snd_cs4231 *chip = snd_pcm_substream_chip(substream);
|
||||||
|
|
||||||
snd_cs4231_close(chip, CS4231_MODE_RECORD);
|
snd_cs4231_close(chip, CS4231_MODE_RECORD);
|
||||||
chip->capture_substream = NULL;
|
chip->capture_substream = NULL;
|
||||||
|
@ -1363,7 +1360,7 @@ static int snd_cs4231_capture_close(snd_pcm_substream_t *substream)
|
||||||
* XXX the audio AUXIO register...
|
* XXX the audio AUXIO register...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static snd_pcm_ops_t snd_cs4231_playback_ops = {
|
static struct snd_pcm_ops snd_cs4231_playback_ops = {
|
||||||
.open = snd_cs4231_playback_open,
|
.open = snd_cs4231_playback_open,
|
||||||
.close = snd_cs4231_playback_close,
|
.close = snd_cs4231_playback_close,
|
||||||
.ioctl = snd_pcm_lib_ioctl,
|
.ioctl = snd_pcm_lib_ioctl,
|
||||||
|
@ -1374,7 +1371,7 @@ static snd_pcm_ops_t snd_cs4231_playback_ops = {
|
||||||
.pointer = snd_cs4231_playback_pointer,
|
.pointer = snd_cs4231_playback_pointer,
|
||||||
};
|
};
|
||||||
|
|
||||||
static snd_pcm_ops_t snd_cs4231_capture_ops = {
|
static struct snd_pcm_ops snd_cs4231_capture_ops = {
|
||||||
.open = snd_cs4231_capture_open,
|
.open = snd_cs4231_capture_open,
|
||||||
.close = snd_cs4231_capture_close,
|
.close = snd_cs4231_capture_close,
|
||||||
.ioctl = snd_pcm_lib_ioctl,
|
.ioctl = snd_pcm_lib_ioctl,
|
||||||
|
@ -1385,9 +1382,9 @@ static snd_pcm_ops_t snd_cs4231_capture_ops = {
|
||||||
.pointer = snd_cs4231_capture_pointer,
|
.pointer = snd_cs4231_capture_pointer,
|
||||||
};
|
};
|
||||||
|
|
||||||
int snd_cs4231_pcm(cs4231_t *chip)
|
static int __init snd_cs4231_pcm(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
snd_pcm_t *pcm;
|
struct snd_pcm *pcm;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if ((err = snd_pcm_new(chip->card, "CS4231", 0, 1, 1, &pcm)) < 0)
|
if ((err = snd_pcm_new(chip->card, "CS4231", 0, 1, 1, &pcm)) < 0)
|
||||||
|
@ -1408,16 +1405,10 @@ int snd_cs4231_pcm(cs4231_t *chip)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_timer_free(snd_timer_t *timer)
|
static int __init snd_cs4231_timer(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = timer->private_data;
|
struct snd_timer *timer;
|
||||||
chip->timer = NULL;
|
struct snd_timer_id tid;
|
||||||
}
|
|
||||||
|
|
||||||
int snd_cs4231_timer(cs4231_t *chip)
|
|
||||||
{
|
|
||||||
snd_timer_t *timer;
|
|
||||||
snd_timer_id_t tid;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Timer initialization */
|
/* Timer initialization */
|
||||||
|
@ -1430,7 +1421,6 @@ int snd_cs4231_timer(cs4231_t *chip)
|
||||||
return err;
|
return err;
|
||||||
strcpy(timer->name, "CS4231");
|
strcpy(timer->name, "CS4231");
|
||||||
timer->private_data = chip;
|
timer->private_data = chip;
|
||||||
timer->private_free = snd_cs4231_timer_free;
|
|
||||||
timer->hw = snd_cs4231_timer_table;
|
timer->hw = snd_cs4231_timer_table;
|
||||||
chip->timer = timer;
|
chip->timer = timer;
|
||||||
|
|
||||||
|
@ -1441,12 +1431,13 @@ int snd_cs4231_timer(cs4231_t *chip)
|
||||||
* MIXER part
|
* MIXER part
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_info_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
static int snd_cs4231_info_mux(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_info *uinfo)
|
||||||
{
|
{
|
||||||
static char *texts[4] = {
|
static char *texts[4] = {
|
||||||
"Line", "CD", "Mic", "Mix"
|
"Line", "CD", "Mic", "Mix"
|
||||||
};
|
};
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
|
|
||||||
snd_assert(chip->card != NULL, return -EINVAL);
|
snd_assert(chip->card != NULL, return -EINVAL);
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
|
||||||
|
@ -1459,9 +1450,10 @@ static int snd_cs4231_info_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *ui
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_get_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_get_mux(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->lock, flags);
|
spin_lock_irqsave(&chip->lock, flags);
|
||||||
|
@ -1474,9 +1466,10 @@ static int snd_cs4231_get_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *uc
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_put_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_put_mux(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned short left, right;
|
unsigned short left, right;
|
||||||
int change;
|
int change;
|
||||||
|
@ -1501,7 +1494,8 @@ static int snd_cs4231_put_mux(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *uc
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
static int snd_cs4231_info_single(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_info *uinfo)
|
||||||
{
|
{
|
||||||
int mask = (kcontrol->private_value >> 16) & 0xff;
|
int mask = (kcontrol->private_value >> 16) & 0xff;
|
||||||
|
|
||||||
|
@ -1514,9 +1508,10 @@ int snd_cs4231_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_get_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_get_single(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int reg = kcontrol->private_value & 0xff;
|
int reg = kcontrol->private_value & 0xff;
|
||||||
int shift = (kcontrol->private_value >> 8) & 0xff;
|
int shift = (kcontrol->private_value >> 8) & 0xff;
|
||||||
|
@ -1536,9 +1531,10 @@ int snd_cs4231_get_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontr
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_put_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_put_single(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int reg = kcontrol->private_value & 0xff;
|
int reg = kcontrol->private_value & 0xff;
|
||||||
int shift = (kcontrol->private_value >> 8) & 0xff;
|
int shift = (kcontrol->private_value >> 8) & 0xff;
|
||||||
|
@ -1563,7 +1559,8 @@ int snd_cs4231_put_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontr
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_info_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
static int snd_cs4231_info_double(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_info *uinfo)
|
||||||
{
|
{
|
||||||
int mask = (kcontrol->private_value >> 24) & 0xff;
|
int mask = (kcontrol->private_value >> 24) & 0xff;
|
||||||
|
|
||||||
|
@ -1576,9 +1573,10 @@ int snd_cs4231_info_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_get_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_get_double(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int left_reg = kcontrol->private_value & 0xff;
|
int left_reg = kcontrol->private_value & 0xff;
|
||||||
int right_reg = (kcontrol->private_value >> 8) & 0xff;
|
int right_reg = (kcontrol->private_value >> 8) & 0xff;
|
||||||
|
@ -1604,9 +1602,10 @@ int snd_cs4231_get_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontr
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int snd_cs4231_put_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
|
static int snd_cs4231_put_double(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = snd_kcontrol_chip(kcontrol);
|
struct snd_cs4231 *chip = snd_kcontrol_chip(kcontrol);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int left_reg = kcontrol->private_value & 0xff;
|
int left_reg = kcontrol->private_value & 0xff;
|
||||||
int right_reg = (kcontrol->private_value >> 8) & 0xff;
|
int right_reg = (kcontrol->private_value >> 8) & 0xff;
|
||||||
|
@ -1651,7 +1650,7 @@ int snd_cs4231_put_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontr
|
||||||
.get = snd_cs4231_get_double, .put = snd_cs4231_put_double, \
|
.get = snd_cs4231_get_double, .put = snd_cs4231_put_double, \
|
||||||
.private_value = left_reg | (right_reg << 8) | (shift_left << 16) | (shift_right << 19) | (mask << 24) | (invert << 22) }
|
.private_value = left_reg | (right_reg << 8) | (shift_left << 16) | (shift_right << 19) | (mask << 24) | (invert << 22) }
|
||||||
|
|
||||||
static snd_kcontrol_new_t snd_cs4231_controls[] = {
|
static struct snd_kcontrol_new snd_cs4231_controls[] __initdata = {
|
||||||
CS4231_DOUBLE("PCM Playback Switch", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1),
|
CS4231_DOUBLE("PCM Playback Switch", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1),
|
||||||
CS4231_DOUBLE("PCM Playback Volume", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1),
|
CS4231_DOUBLE("PCM Playback Volume", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1),
|
||||||
CS4231_DOUBLE("Line Playback Switch", 0, CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 7, 7, 1, 1),
|
CS4231_DOUBLE("Line Playback Switch", 0, CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 7, 7, 1, 1),
|
||||||
|
@ -1680,9 +1679,9 @@ CS4231_SINGLE("Line Out Switch", 0, CS4231_PIN_CTRL, 6, 1, 1),
|
||||||
CS4231_SINGLE("Headphone Out Switch", 0, CS4231_PIN_CTRL, 7, 1, 1)
|
CS4231_SINGLE("Headphone Out Switch", 0, CS4231_PIN_CTRL, 7, 1, 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
int snd_cs4231_mixer(cs4231_t *chip)
|
static int __init snd_cs4231_mixer(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
snd_card_t *card;
|
struct snd_card *card;
|
||||||
int err, idx;
|
int err, idx;
|
||||||
|
|
||||||
snd_assert(chip != NULL && chip->pcm != NULL, return -EINVAL);
|
snd_assert(chip != NULL && chip->pcm != NULL, return -EINVAL);
|
||||||
|
@ -1702,9 +1701,9 @@ int snd_cs4231_mixer(cs4231_t *chip)
|
||||||
|
|
||||||
static int dev;
|
static int dev;
|
||||||
|
|
||||||
static int cs4231_attach_begin(snd_card_t **rcard)
|
static int __init cs4231_attach_begin(struct snd_card **rcard)
|
||||||
{
|
{
|
||||||
snd_card_t *card;
|
struct snd_card *card;
|
||||||
|
|
||||||
*rcard = NULL;
|
*rcard = NULL;
|
||||||
|
|
||||||
|
@ -1727,7 +1726,7 @@ static int cs4231_attach_begin(snd_card_t **rcard)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cs4231_attach_finish(snd_card_t *card, cs4231_t *chip)
|
static int __init cs4231_attach_finish(struct snd_card *card, struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1761,7 +1760,7 @@ static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_re
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned char status;
|
unsigned char status;
|
||||||
u32 csr;
|
u32 csr;
|
||||||
cs4231_t *chip = dev_id;
|
struct snd_cs4231 *chip = dev_id;
|
||||||
|
|
||||||
/*This is IRQ is not raised by the cs4231*/
|
/*This is IRQ is not raised by the cs4231*/
|
||||||
if (!(__cs4231_readb(chip, CS4231P(chip, STATUS)) & CS4231_GLOBALIRQ))
|
if (!(__cs4231_readb(chip, CS4231P(chip, STATUS)) & CS4231_GLOBALIRQ))
|
||||||
|
@ -1806,12 +1805,12 @@ static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_re
|
||||||
* SBUS DMA routines
|
* SBUS DMA routines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int sbus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len)
|
static int sbus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 test, csr;
|
u32 test, csr;
|
||||||
int err;
|
int err;
|
||||||
sbus_dma_info_t *base = &dma_cont->sbus_info;
|
struct sbus_dma_info *base = &dma_cont->sbus_info;
|
||||||
|
|
||||||
if (len >= (1 << 24))
|
if (len >= (1 << 24))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1838,11 +1837,11 @@ out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbus_dma_prepare(struct cs4231_dma_control *dma_cont, int d)
|
static void sbus_dma_prepare(struct cs4231_dma_control *dma_cont, int d)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 csr, test;
|
u32 csr, test;
|
||||||
sbus_dma_info_t *base = &dma_cont->sbus_info;
|
struct sbus_dma_info *base = &dma_cont->sbus_info;
|
||||||
|
|
||||||
spin_lock_irqsave(&base->lock, flags);
|
spin_lock_irqsave(&base->lock, flags);
|
||||||
csr = sbus_readl(base->regs + APCCSR);
|
csr = sbus_readl(base->regs + APCCSR);
|
||||||
|
@ -1857,11 +1856,11 @@ void sbus_dma_prepare(struct cs4231_dma_control *dma_cont, int d)
|
||||||
spin_unlock_irqrestore(&base->lock, flags);
|
spin_unlock_irqrestore(&base->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
|
static void sbus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 csr, shift;
|
u32 csr, shift;
|
||||||
sbus_dma_info_t *base = &dma_cont->sbus_info;
|
struct sbus_dma_info *base = &dma_cont->sbus_info;
|
||||||
|
|
||||||
spin_lock_irqsave(&base->lock, flags);
|
spin_lock_irqsave(&base->lock, flags);
|
||||||
if (!on) {
|
if (!on) {
|
||||||
|
@ -1894,14 +1893,14 @@ void sbus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
|
||||||
spin_unlock_irqrestore(&base->lock, flags);
|
spin_unlock_irqrestore(&base->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int sbus_dma_addr(struct cs4231_dma_control *dma_cont)
|
static unsigned int sbus_dma_addr(struct cs4231_dma_control *dma_cont)
|
||||||
{
|
{
|
||||||
sbus_dma_info_t *base = &dma_cont->sbus_info;
|
struct sbus_dma_info *base = &dma_cont->sbus_info;
|
||||||
|
|
||||||
return sbus_readl(base->regs + base->dir + APCVA);
|
return sbus_readl(base->regs + base->dir + APCVA);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbus_dma_reset(cs4231_t *chip)
|
static void sbus_dma_reset(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
sbus_writel(APC_CHIP_RESET, chip->port + APCCSR);
|
sbus_writel(APC_CHIP_RESET, chip->port + APCCSR);
|
||||||
sbus_writel(0x00, chip->port + APCCSR);
|
sbus_writel(0x00, chip->port + APCCSR);
|
||||||
|
@ -1918,7 +1917,7 @@ void sbus_dma_reset(cs4231_t *chip)
|
||||||
chip->port + APCCSR);
|
chip->port + APCCSR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbus_dma_preallocate(cs4231_t *chip, snd_pcm_t *pcm)
|
static void sbus_dma_preallocate(struct snd_cs4231 *chip, struct snd_pcm *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_SBUS,
|
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_SBUS,
|
||||||
snd_dma_sbus_data(chip->dev_u.sdev),
|
snd_dma_sbus_data(chip->dev_u.sdev),
|
||||||
|
@ -1929,7 +1928,7 @@ void sbus_dma_preallocate(cs4231_t *chip, snd_pcm_t *pcm)
|
||||||
* Init and exit routines
|
* Init and exit routines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_sbus_free(cs4231_t *chip)
|
static int snd_cs4231_sbus_free(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
if (chip->irq[0])
|
if (chip->irq[0])
|
||||||
free_irq(chip->irq[0], chip);
|
free_irq(chip->irq[0], chip);
|
||||||
|
@ -1937,31 +1936,28 @@ static int snd_cs4231_sbus_free(cs4231_t *chip)
|
||||||
if (chip->port)
|
if (chip->port)
|
||||||
sbus_iounmap(chip->port, chip->regs_size);
|
sbus_iounmap(chip->port, chip->regs_size);
|
||||||
|
|
||||||
if (chip->timer)
|
|
||||||
snd_device_free(chip->card, chip->timer);
|
|
||||||
|
|
||||||
kfree(chip);
|
kfree(chip);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_sbus_dev_free(snd_device_t *device)
|
static int snd_cs4231_sbus_dev_free(struct snd_device *device)
|
||||||
{
|
{
|
||||||
cs4231_t *cp = device->device_data;
|
struct snd_cs4231 *cp = device->device_data;
|
||||||
|
|
||||||
return snd_cs4231_sbus_free(cp);
|
return snd_cs4231_sbus_free(cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static snd_device_ops_t snd_cs4231_sbus_dev_ops = {
|
static struct snd_device_ops snd_cs4231_sbus_dev_ops = {
|
||||||
.dev_free = snd_cs4231_sbus_dev_free,
|
.dev_free = snd_cs4231_sbus_dev_free,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init snd_cs4231_sbus_create(snd_card_t *card,
|
static int __init snd_cs4231_sbus_create(struct snd_card *card,
|
||||||
struct sbus_dev *sdev,
|
struct sbus_dev *sdev,
|
||||||
int dev,
|
int dev,
|
||||||
cs4231_t **rchip)
|
struct snd_cs4231 **rchip)
|
||||||
{
|
{
|
||||||
cs4231_t *chip;
|
struct snd_cs4231 *chip;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
*rchip = NULL;
|
*rchip = NULL;
|
||||||
|
@ -2032,11 +2028,11 @@ static int __init snd_cs4231_sbus_create(snd_card_t *card,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cs4231_sbus_attach(struct sbus_dev *sdev)
|
static int __init cs4231_sbus_attach(struct sbus_dev *sdev)
|
||||||
{
|
{
|
||||||
struct resource *rp = &sdev->resource[0];
|
struct resource *rp = &sdev->resource[0];
|
||||||
cs4231_t *cp;
|
struct snd_cs4231 *cp;
|
||||||
snd_card_t *card;
|
struct snd_card *card;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = cs4231_attach_begin(&card);
|
err = cs4231_attach_begin(&card);
|
||||||
|
@ -2062,14 +2058,14 @@ static int cs4231_sbus_attach(struct sbus_dev *sdev)
|
||||||
|
|
||||||
static void snd_cs4231_ebus_play_callback(struct ebus_dma_info *p, int event, void *cookie)
|
static void snd_cs4231_ebus_play_callback(struct ebus_dma_info *p, int event, void *cookie)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = cookie;
|
struct snd_cs4231 *chip = cookie;
|
||||||
|
|
||||||
snd_cs4231_play_callback(chip);
|
snd_cs4231_play_callback(chip);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void snd_cs4231_ebus_capture_callback(struct ebus_dma_info *p, int event, void *cookie)
|
static void snd_cs4231_ebus_capture_callback(struct ebus_dma_info *p, int event, void *cookie)
|
||||||
{
|
{
|
||||||
cs4231_t *chip = cookie;
|
struct snd_cs4231 *chip = cookie;
|
||||||
|
|
||||||
snd_cs4231_capture_callback(chip);
|
snd_cs4231_capture_callback(chip);
|
||||||
}
|
}
|
||||||
|
@ -2078,32 +2074,32 @@ static void snd_cs4231_ebus_capture_callback(struct ebus_dma_info *p, int event,
|
||||||
* EBUS DMA wrappers
|
* EBUS DMA wrappers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int _ebus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len)
|
static int _ebus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_addr, size_t len)
|
||||||
{
|
{
|
||||||
return ebus_dma_request(&dma_cont->ebus_info, bus_addr, len);
|
return ebus_dma_request(&dma_cont->ebus_info, bus_addr, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _ebus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
|
static void _ebus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
|
||||||
{
|
{
|
||||||
ebus_dma_enable(&dma_cont->ebus_info, on);
|
ebus_dma_enable(&dma_cont->ebus_info, on);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _ebus_dma_prepare(struct cs4231_dma_control *dma_cont, int dir)
|
static void _ebus_dma_prepare(struct cs4231_dma_control *dma_cont, int dir)
|
||||||
{
|
{
|
||||||
ebus_dma_prepare(&dma_cont->ebus_info, dir);
|
ebus_dma_prepare(&dma_cont->ebus_info, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int _ebus_dma_addr(struct cs4231_dma_control *dma_cont)
|
static unsigned int _ebus_dma_addr(struct cs4231_dma_control *dma_cont)
|
||||||
{
|
{
|
||||||
return ebus_dma_addr(&dma_cont->ebus_info);
|
return ebus_dma_addr(&dma_cont->ebus_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _ebus_dma_reset(cs4231_t *chip)
|
static void _ebus_dma_reset(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _ebus_dma_preallocate(cs4231_t *chip, snd_pcm_t *pcm)
|
static void _ebus_dma_preallocate(struct snd_cs4231 *chip, struct snd_pcm *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
|
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
|
||||||
snd_dma_pci_data(chip->dev_u.pdev),
|
snd_dma_pci_data(chip->dev_u.pdev),
|
||||||
|
@ -2114,7 +2110,7 @@ void _ebus_dma_preallocate(cs4231_t *chip, snd_pcm_t *pcm)
|
||||||
* Init and exit routines
|
* Init and exit routines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int snd_cs4231_ebus_free(cs4231_t *chip)
|
static int snd_cs4231_ebus_free(struct snd_cs4231 *chip)
|
||||||
{
|
{
|
||||||
if (chip->c_dma.ebus_info.regs) {
|
if (chip->c_dma.ebus_info.regs) {
|
||||||
ebus_dma_unregister(&chip->c_dma.ebus_info);
|
ebus_dma_unregister(&chip->c_dma.ebus_info);
|
||||||
|
@ -2127,31 +2123,29 @@ static int snd_cs4231_ebus_free(cs4231_t *chip)
|
||||||
|
|
||||||
if (chip->port)
|
if (chip->port)
|
||||||
iounmap(chip->port);
|
iounmap(chip->port);
|
||||||
if (chip->timer)
|
|
||||||
snd_device_free(chip->card, chip->timer);
|
|
||||||
|
|
||||||
kfree(chip);
|
kfree(chip);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_cs4231_ebus_dev_free(snd_device_t *device)
|
static int snd_cs4231_ebus_dev_free(struct snd_device *device)
|
||||||
{
|
{
|
||||||
cs4231_t *cp = device->device_data;
|
struct snd_cs4231 *cp = device->device_data;
|
||||||
|
|
||||||
return snd_cs4231_ebus_free(cp);
|
return snd_cs4231_ebus_free(cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static snd_device_ops_t snd_cs4231_ebus_dev_ops = {
|
static struct snd_device_ops snd_cs4231_ebus_dev_ops = {
|
||||||
.dev_free = snd_cs4231_ebus_dev_free,
|
.dev_free = snd_cs4231_ebus_dev_free,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init snd_cs4231_ebus_create(snd_card_t *card,
|
static int __init snd_cs4231_ebus_create(struct snd_card *card,
|
||||||
struct linux_ebus_device *edev,
|
struct linux_ebus_device *edev,
|
||||||
int dev,
|
int dev,
|
||||||
cs4231_t **rchip)
|
struct snd_cs4231 **rchip)
|
||||||
{
|
{
|
||||||
cs4231_t *chip;
|
struct snd_cs4231 *chip;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
*rchip = NULL;
|
*rchip = NULL;
|
||||||
|
@ -2241,10 +2235,10 @@ static int __init snd_cs4231_ebus_create(snd_card_t *card,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cs4231_ebus_attach(struct linux_ebus_device *edev)
|
static int __init cs4231_ebus_attach(struct linux_ebus_device *edev)
|
||||||
{
|
{
|
||||||
snd_card_t *card;
|
struct snd_card *card;
|
||||||
cs4231_t *chip;
|
struct snd_cs4231 *chip;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = cs4231_attach_begin(&card);
|
err = cs4231_attach_begin(&card);
|
||||||
|
@ -2317,10 +2311,10 @@ static int __init cs4231_init(void)
|
||||||
|
|
||||||
static void __exit cs4231_exit(void)
|
static void __exit cs4231_exit(void)
|
||||||
{
|
{
|
||||||
cs4231_t *p = cs4231_list;
|
struct snd_cs4231 *p = cs4231_list;
|
||||||
|
|
||||||
while (p != NULL) {
|
while (p != NULL) {
|
||||||
cs4231_t *next = p->next;
|
struct snd_cs4231 *next = p->next;
|
||||||
|
|
||||||
snd_card_free(p->card);
|
snd_card_free(p->card);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue