Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Apple Onboard Audio Alsa helpers
  3  *
  4  * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
  5  *
  6  * GPL v2, can be found in COPYING.
  7  */
  8 #include <linux/module.h>
  9 #include "snd-aoa-alsa.h"
 10 
 11 static int index = -1;
 12 module_param(index, int, 0444);
 13 MODULE_PARM_DESC(index, "index for AOA sound card.");
 14 
 15 static struct aoa_card *aoa_card;
 16 
 17 int aoa_alsa_init(char *name, struct module *mod, struct device *dev)
 18 {
 19         struct snd_card *alsa_card;
 20         int err;
 21 
 22         if (aoa_card)
 23                 /* cannot be EEXIST due to usage in aoa_fabric_register */
 24                 return -EBUSY;
 25 
 26         alsa_card = snd_card_new(index, name, mod, sizeof(struct aoa_card));
 27         if (!alsa_card)
 28                 return -ENOMEM;
 29         aoa_card = alsa_card->private_data;
 30         aoa_card->alsa_card = alsa_card;
 31         alsa_card->dev = dev;
 32         strlcpy(alsa_card->driver, "AppleOnbdAudio", sizeof(alsa_card->driver));
 33         strlcpy(alsa_card->shortname, name, sizeof(alsa_card->shortname));
 34         strlcpy(alsa_card->longname, name, sizeof(alsa_card->longname));
 35         strlcpy(alsa_card->mixername, name, sizeof(alsa_card->mixername));
 36         err = snd_card_register(aoa_card->alsa_card);
 37         if (err < 0) {
 38                 printk(KERN_ERR "snd-aoa: couldn't register alsa card\n");
 39                 snd_card_free(aoa_card->alsa_card);
 40                 aoa_card = NULL;
 41                 return err;
 42         }
 43         return 0;
 44 }
 45 
 46 struct snd_card *aoa_get_card(void)
 47 {
 48         if (aoa_card)
 49                 return aoa_card->alsa_card;
 50         return NULL;
 51 }
 52 EXPORT_SYMBOL_GPL(aoa_get_card);
 53 
 54 void aoa_alsa_cleanup(void)
 55 {
 56         if (aoa_card) {
 57                 snd_card_free(aoa_card->alsa_card);
 58                 aoa_card = NULL;
 59         }
 60 }
 61 
 62 int aoa_snd_device_new(snd_device_type_t type,
 63                        void * device_data, struct snd_device_ops * ops)
 64 {
 65         struct snd_card *card = aoa_get_card();
 66         int err;
 67         
 68         if (!card) return -ENOMEM;
 69 
 70         err = snd_device_new(card, type, device_data, ops);
 71         if (err) {
 72                 printk(KERN_ERR "snd-aoa: failed to create snd device (%d)\n", err);
 73                 return err;
 74         }
 75         err = snd_device_register(card, device_data);
 76         if (err) {
 77                 printk(KERN_ERR "snd-aoa: failed to register "
 78                                 "snd device (%d)\n", err);
 79                 printk(KERN_ERR "snd-aoa: have you forgotten the "
 80                                 "dev_register callback?\n");
 81                 snd_device_free(card, device_data);
 82         }
 83         return err;
 84 }
 85 EXPORT_SYMBOL_GPL(aoa_snd_device_new);
 86 
 87 int aoa_snd_ctl_add(struct snd_kcontrol* control)
 88 {
 89         int err;
 90 
 91         if (!aoa_card) return -ENODEV;
 92 
 93         err = snd_ctl_add(aoa_card->alsa_card, control);
 94         if (err)
 95                 printk(KERN_ERR "snd-aoa: failed to add alsa control (%d)\n",
 96                        err);
 97         return err;
 98 }
 99 EXPORT_SYMBOL_GPL(aoa_snd_ctl_add);
100 
  This page was automatically generated by the LXR engine.