Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.3-rc4 100 lines 2.4 kB view raw
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 "alsa.h" 10 11static int index = -1; 12module_param(index, int, 0444); 13MODULE_PARM_DESC(index, "index for AOA sound card."); 14 15static struct aoa_card *aoa_card; 16 17int 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 err = snd_card_create(index, name, mod, sizeof(struct aoa_card), 27 &alsa_card); 28 if (err < 0) 29 return err; 30 aoa_card = alsa_card->private_data; 31 aoa_card->alsa_card = alsa_card; 32 alsa_card->dev = dev; 33 strlcpy(alsa_card->driver, "AppleOnbdAudio", sizeof(alsa_card->driver)); 34 strlcpy(alsa_card->shortname, name, sizeof(alsa_card->shortname)); 35 strlcpy(alsa_card->longname, name, sizeof(alsa_card->longname)); 36 strlcpy(alsa_card->mixername, name, sizeof(alsa_card->mixername)); 37 err = snd_card_register(aoa_card->alsa_card); 38 if (err < 0) { 39 printk(KERN_ERR "snd-aoa: couldn't register alsa card\n"); 40 snd_card_free(aoa_card->alsa_card); 41 aoa_card = NULL; 42 return err; 43 } 44 return 0; 45} 46 47struct snd_card *aoa_get_card(void) 48{ 49 if (aoa_card) 50 return aoa_card->alsa_card; 51 return NULL; 52} 53EXPORT_SYMBOL_GPL(aoa_get_card); 54 55void aoa_alsa_cleanup(void) 56{ 57 if (aoa_card) { 58 snd_card_free(aoa_card->alsa_card); 59 aoa_card = NULL; 60 } 61} 62 63int aoa_snd_device_new(snd_device_type_t type, 64 void * device_data, struct snd_device_ops * ops) 65{ 66 struct snd_card *card = aoa_get_card(); 67 int err; 68 69 if (!card) return -ENOMEM; 70 71 err = snd_device_new(card, type, device_data, ops); 72 if (err) { 73 printk(KERN_ERR "snd-aoa: failed to create snd device (%d)\n", err); 74 return err; 75 } 76 err = snd_device_register(card, device_data); 77 if (err) { 78 printk(KERN_ERR "snd-aoa: failed to register " 79 "snd device (%d)\n", err); 80 printk(KERN_ERR "snd-aoa: have you forgotten the " 81 "dev_register callback?\n"); 82 snd_device_free(card, device_data); 83 } 84 return err; 85} 86EXPORT_SYMBOL_GPL(aoa_snd_device_new); 87 88int aoa_snd_ctl_add(struct snd_kcontrol* control) 89{ 90 int err; 91 92 if (!aoa_card) return -ENODEV; 93 94 err = snd_ctl_add(aoa_card->alsa_card, control); 95 if (err) 96 printk(KERN_ERR "snd-aoa: failed to add alsa control (%d)\n", 97 err); 98 return err; 99} 100EXPORT_SYMBOL_GPL(aoa_snd_ctl_add);