aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/als4000.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2005-11-17 09:02:01 -0500
committerJaroslav Kysela <perex@suse.cz>2006-01-03 06:19:21 -0500
commit17c39d9a59cbf4b3a51a2694134754fc1d3668e7 (patch)
treee5b29d68fd324693fe72f78c3df67accfa62d41a /sound/pci/als4000.c
parent02c2de69d0bb0ed39b413188241beb4a29d05378 (diff)
[ALSA] Remove xxx_t typedefs: PCI ALS4000
Modules: ALS4000 driver Remove xxx_t typedefs from the PCI ALS4000 driver. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/als4000.c')
-rw-r--r--sound/pci/als4000.c126
1 files changed, 63 insertions, 63 deletions
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index 48b5175c59c..8d0d9c0222c 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -105,14 +105,14 @@ module_param_array(joystick_port, int, NULL, 0444);
105MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)"); 105MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)");
106#endif 106#endif
107 107
108typedef struct { 108struct snd_card_als4000 {
109 /* most frequent access first */ 109 /* most frequent access first */
110 unsigned long gcr; 110 unsigned long gcr;
111 struct pci_dev *pci; 111 struct pci_dev *pci;
112#ifdef SUPPORT_JOYSTICK 112#ifdef SUPPORT_JOYSTICK
113 struct gameport *gameport; 113 struct gameport *gameport;
114#endif 114#endif
115} snd_card_als4000_t; 115};
116 116
117static struct pci_device_id snd_als4000_ids[] = { 117static struct pci_device_id snd_als4000_ids[] = {
118 { 0x4005, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ALS4000 */ 118 { 0x4005, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* ALS4000 */
@@ -127,7 +127,7 @@ static inline void snd_als4000_gcr_write_addr(unsigned long port, u32 reg, u32 v
127 outl(val, port+0x08); 127 outl(val, port+0x08);
128} 128}
129 129
130static inline void snd_als4000_gcr_write(sb_t *sb, u32 reg, u32 val) 130static inline void snd_als4000_gcr_write(struct snd_sb *sb, u32 reg, u32 val)
131{ 131{
132 snd_als4000_gcr_write_addr(sb->alt_port, reg, val); 132 snd_als4000_gcr_write_addr(sb->alt_port, reg, val);
133} 133}
@@ -138,12 +138,12 @@ static inline u32 snd_als4000_gcr_read_addr(unsigned long port, u32 reg)
138 return inl(port+0x08); 138 return inl(port+0x08);
139} 139}
140 140
141static inline u32 snd_als4000_gcr_read(sb_t *sb, u32 reg) 141static inline u32 snd_als4000_gcr_read(struct snd_sb *sb, u32 reg)
142{ 142{
143 return snd_als4000_gcr_read_addr(sb->alt_port, reg); 143 return snd_als4000_gcr_read_addr(sb->alt_port, reg);
144} 144}
145 145
146static void snd_als4000_set_rate(sb_t *chip, unsigned int rate) 146static void snd_als4000_set_rate(struct snd_sb *chip, unsigned int rate)
147{ 147{
148 if (!(chip->mode & SB_RATE_LOCK)) { 148 if (!(chip->mode & SB_RATE_LOCK)) {
149 snd_sbdsp_command(chip, SB_DSP_SAMPLE_RATE_OUT); 149 snd_sbdsp_command(chip, SB_DSP_SAMPLE_RATE_OUT);
@@ -152,13 +152,15 @@ static void snd_als4000_set_rate(sb_t *chip, unsigned int rate)
152 } 152 }
153} 153}
154 154
155static inline void snd_als4000_set_capture_dma(sb_t *chip, dma_addr_t addr, unsigned size) 155static inline void snd_als4000_set_capture_dma(struct snd_sb *chip,
156 dma_addr_t addr, unsigned size)
156{ 157{
157 snd_als4000_gcr_write(chip, 0xa2, addr); 158 snd_als4000_gcr_write(chip, 0xa2, addr);
158 snd_als4000_gcr_write(chip, 0xa3, (size-1)); 159 snd_als4000_gcr_write(chip, 0xa3, (size-1));
159} 160}
160 161
161static inline void snd_als4000_set_playback_dma(sb_t *chip, dma_addr_t addr, unsigned size) 162static inline void snd_als4000_set_playback_dma(struct snd_sb *chip,
163 dma_addr_t addr, unsigned size)
162{ 164{
163 snd_als4000_gcr_write(chip, 0x91, addr); 165 snd_als4000_gcr_write(chip, 0x91, addr);
164 snd_als4000_gcr_write(chip, 0x92, (size-1)|0x180000); 166 snd_als4000_gcr_write(chip, 0x92, (size-1)|0x180000);
@@ -168,7 +170,7 @@ static inline void snd_als4000_set_playback_dma(sb_t *chip, dma_addr_t addr, uns
168#define ALS4000_FORMAT_16BIT (1<<1) 170#define ALS4000_FORMAT_16BIT (1<<1)
169#define ALS4000_FORMAT_STEREO (1<<2) 171#define ALS4000_FORMAT_STEREO (1<<2)
170 172
171static int snd_als4000_get_format(snd_pcm_runtime_t *runtime) 173static int snd_als4000_get_format(struct snd_pcm_runtime *runtime)
172{ 174{
173 int result; 175 int result;
174 176
@@ -220,23 +222,22 @@ CMD_SIGNED|CMD_STEREO, /* ALS4000_FORMAT_S16L_STEREO */
220}; 222};
221#define capture_cmd(chip) (capture_cmd_vals[(chip)->capture_format]) 223#define capture_cmd(chip) (capture_cmd_vals[(chip)->capture_format])
222 224
223static int snd_als4000_hw_params(snd_pcm_substream_t * substream, 225static int snd_als4000_hw_params(struct snd_pcm_substream *substream,
224 snd_pcm_hw_params_t * hw_params) 226 struct snd_pcm_hw_params *hw_params)
225{ 227{
226 return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); 228 return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
227} 229}
228 230
229static int snd_als4000_hw_free(snd_pcm_substream_t * substream) 231static int snd_als4000_hw_free(struct snd_pcm_substream *substream)
230{ 232{
231 snd_pcm_lib_free_pages(substream); 233 snd_pcm_lib_free_pages(substream);
232 return 0; 234 return 0;
233} 235}
234 236
235static int snd_als4000_capture_prepare(snd_pcm_substream_t * substream) 237static int snd_als4000_capture_prepare(struct snd_pcm_substream *substream)
236{ 238{
237 sb_t *chip = snd_pcm_substream_chip(substream); 239 struct snd_sb *chip = snd_pcm_substream_chip(substream);
238 snd_pcm_runtime_t *runtime = substream->runtime; 240 struct snd_pcm_runtime *runtime = substream->runtime;
239 unsigned long flags;
240 unsigned long size; 241 unsigned long size;
241 unsigned count; 242 unsigned count;
242 243
@@ -249,22 +250,21 @@ static int snd_als4000_capture_prepare(snd_pcm_substream_t * substream)
249 count >>=1; 250 count >>=1;
250 count--; 251 count--;
251 252
252 spin_lock_irqsave(&chip->reg_lock, flags); 253 spin_lock_irq(&chip->reg_lock);
253 snd_als4000_set_rate(chip, runtime->rate); 254 snd_als4000_set_rate(chip, runtime->rate);
254 snd_als4000_set_capture_dma(chip, runtime->dma_addr, size); 255 snd_als4000_set_capture_dma(chip, runtime->dma_addr, size);
255 spin_unlock_irqrestore(&chip->reg_lock, flags); 256 spin_unlock_irq(&chip->reg_lock);
256 spin_lock_irqsave(&chip->mixer_lock, flags ); 257 spin_lock_irq(&chip->mixer_lock);
257 snd_sbmixer_write(chip, 0xdc, count); 258 snd_sbmixer_write(chip, 0xdc, count);
258 snd_sbmixer_write(chip, 0xdd, count>>8); 259 snd_sbmixer_write(chip, 0xdd, count>>8);
259 spin_unlock_irqrestore(&chip->mixer_lock, flags ); 260 spin_unlock_irq(&chip->mixer_lock);
260 return 0; 261 return 0;
261} 262}
262 263
263static int snd_als4000_playback_prepare(snd_pcm_substream_t *substream) 264static int snd_als4000_playback_prepare(struct snd_pcm_substream *substream)
264{ 265{
265 sb_t *chip = snd_pcm_substream_chip(substream); 266 struct snd_sb *chip = snd_pcm_substream_chip(substream);
266 snd_pcm_runtime_t *runtime = substream->runtime; 267 struct snd_pcm_runtime *runtime = substream->runtime;
267 unsigned long flags;
268 unsigned long size; 268 unsigned long size;
269 unsigned count; 269 unsigned count;
270 270
@@ -283,7 +283,7 @@ static int snd_als4000_playback_prepare(snd_pcm_substream_t *substream)
283 * reordering, ...). Something seems to get enabled on playback 283 * reordering, ...). Something seems to get enabled on playback
284 * that I haven't found out how to disable again, which then causes 284 * that I haven't found out how to disable again, which then causes
285 * the switching pops to reach the speakers the next time here. */ 285 * the switching pops to reach the speakers the next time here. */
286 spin_lock_irqsave(&chip->reg_lock, flags); 286 spin_lock_irq(&chip->reg_lock);
287 snd_als4000_set_rate(chip, runtime->rate); 287 snd_als4000_set_rate(chip, runtime->rate);
288 snd_als4000_set_playback_dma(chip, runtime->dma_addr, size); 288 snd_als4000_set_playback_dma(chip, runtime->dma_addr, size);
289 289
@@ -294,14 +294,14 @@ static int snd_als4000_playback_prepare(snd_pcm_substream_t *substream)
294 snd_sbdsp_command(chip, count); 294 snd_sbdsp_command(chip, count);
295 snd_sbdsp_command(chip, count>>8); 295 snd_sbdsp_command(chip, count>>8);
296 snd_sbdsp_command(chip, playback_cmd(chip).dma_off); 296 snd_sbdsp_command(chip, playback_cmd(chip).dma_off);
297 spin_unlock_irqrestore(&chip->reg_lock, flags); 297 spin_unlock_irq(&chip->reg_lock);
298 298
299 return 0; 299 return 0;
300} 300}
301 301
302static int snd_als4000_capture_trigger(snd_pcm_substream_t * substream, int cmd) 302static int snd_als4000_capture_trigger(struct snd_pcm_substream *substream, int cmd)
303{ 303{
304 sb_t *chip = snd_pcm_substream_chip(substream); 304 struct snd_sb *chip = snd_pcm_substream_chip(substream);
305 int result = 0; 305 int result = 0;
306 306
307 spin_lock(&chip->mixer_lock); 307 spin_lock(&chip->mixer_lock);
@@ -318,9 +318,9 @@ static int snd_als4000_capture_trigger(snd_pcm_substream_t * substream, int cmd)
318 return result; 318 return result;
319} 319}
320 320
321static int snd_als4000_playback_trigger(snd_pcm_substream_t * substream, int cmd) 321static int snd_als4000_playback_trigger(struct snd_pcm_substream *substream, int cmd)
322{ 322{
323 sb_t *chip = snd_pcm_substream_chip(substream); 323 struct snd_sb *chip = snd_pcm_substream_chip(substream);
324 int result = 0; 324 int result = 0;
325 325
326 spin_lock(&chip->reg_lock); 326 spin_lock(&chip->reg_lock);
@@ -337,9 +337,9 @@ static int snd_als4000_playback_trigger(snd_pcm_substream_t * substream, int cmd
337 return result; 337 return result;
338} 338}
339 339
340static snd_pcm_uframes_t snd_als4000_capture_pointer(snd_pcm_substream_t * substream) 340static snd_pcm_uframes_t snd_als4000_capture_pointer(struct snd_pcm_substream *substream)
341{ 341{
342 sb_t *chip = snd_pcm_substream_chip(substream); 342 struct snd_sb *chip = snd_pcm_substream_chip(substream);
343 unsigned int result; 343 unsigned int result;
344 344
345 spin_lock(&chip->reg_lock); 345 spin_lock(&chip->reg_lock);
@@ -348,9 +348,9 @@ static snd_pcm_uframes_t snd_als4000_capture_pointer(snd_pcm_substream_t * subst
348 return bytes_to_frames( substream->runtime, result ); 348 return bytes_to_frames( substream->runtime, result );
349} 349}
350 350
351static snd_pcm_uframes_t snd_als4000_playback_pointer(snd_pcm_substream_t * substream) 351static snd_pcm_uframes_t snd_als4000_playback_pointer(struct snd_pcm_substream *substream)
352{ 352{
353 sb_t *chip = snd_pcm_substream_chip(substream); 353 struct snd_sb *chip = snd_pcm_substream_chip(substream);
354 unsigned result; 354 unsigned result;
355 355
356 spin_lock(&chip->reg_lock); 356 spin_lock(&chip->reg_lock);
@@ -373,7 +373,7 @@ static snd_pcm_uframes_t snd_als4000_playback_pointer(snd_pcm_substream_t * subs
373 * */ 373 * */
374static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs) 374static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
375{ 375{
376 sb_t *chip = dev_id; 376 struct snd_sb *chip = dev_id;
377 unsigned gcr_status; 377 unsigned gcr_status;
378 unsigned sb_status; 378 unsigned sb_status;
379 379
@@ -406,7 +406,7 @@ static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *
406 406
407/*****************************************************************/ 407/*****************************************************************/
408 408
409static snd_pcm_hardware_t snd_als4000_playback = 409static struct snd_pcm_hardware snd_als4000_playback =
410{ 410{
411 .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | 411 .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
412 SNDRV_PCM_INFO_MMAP_VALID), 412 SNDRV_PCM_INFO_MMAP_VALID),
@@ -425,7 +425,7 @@ static snd_pcm_hardware_t snd_als4000_playback =
425 .fifo_size = 0 425 .fifo_size = 0
426}; 426};
427 427
428static snd_pcm_hardware_t snd_als4000_capture = 428static struct snd_pcm_hardware snd_als4000_capture =
429{ 429{
430 .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | 430 .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
431 SNDRV_PCM_INFO_MMAP_VALID), 431 SNDRV_PCM_INFO_MMAP_VALID),
@@ -446,38 +446,38 @@ static snd_pcm_hardware_t snd_als4000_capture =
446 446
447/*****************************************************************/ 447/*****************************************************************/
448 448
449static int snd_als4000_playback_open(snd_pcm_substream_t * substream) 449static int snd_als4000_playback_open(struct snd_pcm_substream *substream)
450{ 450{
451 sb_t *chip = snd_pcm_substream_chip(substream); 451 struct snd_sb *chip = snd_pcm_substream_chip(substream);
452 snd_pcm_runtime_t *runtime = substream->runtime; 452 struct snd_pcm_runtime *runtime = substream->runtime;
453 453
454 chip->playback_substream = substream; 454 chip->playback_substream = substream;
455 runtime->hw = snd_als4000_playback; 455 runtime->hw = snd_als4000_playback;
456 return 0; 456 return 0;
457} 457}
458 458
459static int snd_als4000_playback_close(snd_pcm_substream_t * substream) 459static int snd_als4000_playback_close(struct snd_pcm_substream *substream)
460{ 460{
461 sb_t *chip = snd_pcm_substream_chip(substream); 461 struct snd_sb *chip = snd_pcm_substream_chip(substream);
462 462
463 chip->playback_substream = NULL; 463 chip->playback_substream = NULL;
464 snd_pcm_lib_free_pages(substream); 464 snd_pcm_lib_free_pages(substream);
465 return 0; 465 return 0;
466} 466}
467 467
468static int snd_als4000_capture_open(snd_pcm_substream_t * substream) 468static int snd_als4000_capture_open(struct snd_pcm_substream *substream)
469{ 469{
470 sb_t *chip = snd_pcm_substream_chip(substream); 470 struct snd_sb *chip = snd_pcm_substream_chip(substream);
471 snd_pcm_runtime_t *runtime = substream->runtime; 471 struct snd_pcm_runtime *runtime = substream->runtime;
472 472
473 chip->capture_substream = substream; 473 chip->capture_substream = substream;
474 runtime->hw = snd_als4000_capture; 474 runtime->hw = snd_als4000_capture;
475 return 0; 475 return 0;
476} 476}
477 477
478static int snd_als4000_capture_close(snd_pcm_substream_t * substream) 478static int snd_als4000_capture_close(struct snd_pcm_substream *substream)
479{ 479{
480 sb_t *chip = snd_pcm_substream_chip(substream); 480 struct snd_sb *chip = snd_pcm_substream_chip(substream);
481 481
482 chip->capture_substream = NULL; 482 chip->capture_substream = NULL;
483 snd_pcm_lib_free_pages(substream); 483 snd_pcm_lib_free_pages(substream);
@@ -486,7 +486,7 @@ static int snd_als4000_capture_close(snd_pcm_substream_t * substream)
486 486
487/******************************************************************/ 487/******************************************************************/
488 488
489static snd_pcm_ops_t snd_als4000_playback_ops = { 489static struct snd_pcm_ops snd_als4000_playback_ops = {
490 .open = snd_als4000_playback_open, 490 .open = snd_als4000_playback_open,
491 .close = snd_als4000_playback_close, 491 .close = snd_als4000_playback_close,
492 .ioctl = snd_pcm_lib_ioctl, 492 .ioctl = snd_pcm_lib_ioctl,
@@ -497,7 +497,7 @@ static snd_pcm_ops_t snd_als4000_playback_ops = {
497 .pointer = snd_als4000_playback_pointer 497 .pointer = snd_als4000_playback_pointer
498}; 498};
499 499
500static snd_pcm_ops_t snd_als4000_capture_ops = { 500static struct snd_pcm_ops snd_als4000_capture_ops = {
501 .open = snd_als4000_capture_open, 501 .open = snd_als4000_capture_open,
502 .close = snd_als4000_capture_close, 502 .close = snd_als4000_capture_close,
503 .ioctl = snd_pcm_lib_ioctl, 503 .ioctl = snd_pcm_lib_ioctl,
@@ -508,9 +508,9 @@ static snd_pcm_ops_t snd_als4000_capture_ops = {
508 .pointer = snd_als4000_capture_pointer 508 .pointer = snd_als4000_capture_pointer
509}; 509};
510 510
511static int __devinit snd_als4000_pcm(sb_t *chip, int device) 511static int __devinit snd_als4000_pcm(struct snd_sb *chip, int device)
512{ 512{
513 snd_pcm_t *pcm; 513 struct snd_pcm *pcm;
514 int err; 514 int err;
515 515
516 if ((err = snd_pcm_new(chip->card, "ALS4000 DSP", device, 1, 1, &pcm)) < 0) 516 if ((err = snd_pcm_new(chip->card, "ALS4000 DSP", device, 1, 1, &pcm)) < 0)
@@ -551,7 +551,7 @@ static void snd_als4000_set_addr(unsigned long gcr,
551 snd_als4000_gcr_write_addr(gcr, 0xa9, confB); 551 snd_als4000_gcr_write_addr(gcr, 0xa9, confB);
552} 552}
553 553
554static void __devinit snd_als4000_configure(sb_t *chip) 554static void __devinit snd_als4000_configure(struct snd_sb *chip)
555{ 555{
556 unsigned tmp; 556 unsigned tmp;
557 int i; 557 int i;
@@ -576,7 +576,7 @@ static void __devinit snd_als4000_configure(sb_t *chip)
576} 576}
577 577
578#ifdef SUPPORT_JOYSTICK 578#ifdef SUPPORT_JOYSTICK
579static int __devinit snd_als4000_create_gameport(snd_card_als4000_t *acard, int dev) 579static int __devinit snd_als4000_create_gameport(struct snd_card_als4000 *acard, int dev)
580{ 580{
581 struct gameport *gp; 581 struct gameport *gp;
582 struct resource *r; 582 struct resource *r;
@@ -622,7 +622,7 @@ static int __devinit snd_als4000_create_gameport(snd_card_als4000_t *acard, int
622 return 0; 622 return 0;
623} 623}
624 624
625static void snd_als4000_free_gameport(snd_card_als4000_t *acard) 625static void snd_als4000_free_gameport(struct snd_card_als4000 *acard)
626{ 626{
627 if (acard->gameport) { 627 if (acard->gameport) {
628 struct resource *r = gameport_get_port_data(acard->gameport); 628 struct resource *r = gameport_get_port_data(acard->gameport);
@@ -635,13 +635,13 @@ static void snd_als4000_free_gameport(snd_card_als4000_t *acard)
635 } 635 }
636} 636}
637#else 637#else
638static inline int snd_als4000_create_gameport(snd_card_als4000_t *acard, int dev) { return -ENOSYS; } 638static inline int snd_als4000_create_gameport(struct snd_card_als4000 *acard, int dev) { return -ENOSYS; }
639static inline void snd_als4000_free_gameport(snd_card_als4000_t *acard) { } 639static inline void snd_als4000_free_gameport(struct snd_card_als4000 *acard) { }
640#endif 640#endif
641 641
642static void snd_card_als4000_free( snd_card_t *card ) 642static void snd_card_als4000_free( struct snd_card *card )
643{ 643{
644 snd_card_als4000_t * acard = (snd_card_als4000_t *)card->private_data; 644 struct snd_card_als4000 * acard = (struct snd_card_als4000 *)card->private_data;
645 645
646 /* make sure that interrupts are disabled */ 646 /* make sure that interrupts are disabled */
647 snd_als4000_gcr_write_addr( acard->gcr, 0x8c, 0); 647 snd_als4000_gcr_write_addr( acard->gcr, 0x8c, 0);
@@ -655,11 +655,11 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
655 const struct pci_device_id *pci_id) 655 const struct pci_device_id *pci_id)
656{ 656{
657 static int dev; 657 static int dev;
658 snd_card_t *card; 658 struct snd_card *card;
659 snd_card_als4000_t *acard; 659 struct snd_card_als4000 *acard;
660 unsigned long gcr; 660 unsigned long gcr;
661 sb_t *chip; 661 struct snd_sb *chip;
662 opl3_t *opl3; 662 struct snd_opl3 *opl3;
663 unsigned short word; 663 unsigned short word;
664 int err; 664 int err;
665 665
@@ -693,14 +693,14 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
693 pci_set_master(pci); 693 pci_set_master(pci);
694 694
695 card = snd_card_new(index[dev], id[dev], THIS_MODULE, 695 card = snd_card_new(index[dev], id[dev], THIS_MODULE,
696 sizeof( snd_card_als4000_t ) ); 696 sizeof( struct snd_card_als4000 ) );
697 if (card == NULL) { 697 if (card == NULL) {
698 pci_release_regions(pci); 698 pci_release_regions(pci);
699 pci_disable_device(pci); 699 pci_disable_device(pci);
700 return -ENOMEM; 700 return -ENOMEM;
701 } 701 }
702 702
703 acard = (snd_card_als4000_t *)card->private_data; 703 acard = (struct snd_card_als4000 *)card->private_data;
704 acard->pci = pci; 704 acard->pci = pci;
705 acard->gcr = gcr; 705 acard->gcr = gcr;
706 card->private_free = snd_card_als4000_free; 706 card->private_free = snd_card_als4000_free;