This source file includes following definitions.
- release_and_free_resource
- sanity_file_name
- __snd_printk
- snd_pci_quirk_lookup_id
- snd_pci_quirk_lookup
   1 
   2 
   3 
   4 
   5 
   6 
   7 #include <linux/init.h>
   8 #include <linux/export.h>
   9 #include <linux/moduleparam.h>
  10 #include <linux/time.h>
  11 #include <linux/slab.h>
  12 #include <linux/ioport.h>
  13 #include <sound/core.h>
  14 
  15 #ifdef CONFIG_SND_DEBUG
  16 
  17 #ifdef CONFIG_SND_DEBUG_VERBOSE
  18 #define DEFAULT_DEBUG_LEVEL     2
  19 #else
  20 #define DEFAULT_DEBUG_LEVEL     1
  21 #endif
  22 
  23 static int debug = DEFAULT_DEBUG_LEVEL;
  24 module_param(debug, int, 0644);
  25 MODULE_PARM_DESC(debug, "Debug level (0 = disable)");
  26 
  27 #endif 
  28 
  29 void release_and_free_resource(struct resource *res)
  30 {
  31         if (res) {
  32                 release_resource(res);
  33                 kfree(res);
  34         }
  35 }
  36 EXPORT_SYMBOL(release_and_free_resource);
  37 
  38 #ifdef CONFIG_SND_VERBOSE_PRINTK
  39 
  40 static const char *sanity_file_name(const char *path)
  41 {
  42         if (*path == '/')
  43                 return strrchr(path, '/') + 1;
  44         else
  45                 return path;
  46 }
  47 #endif
  48 
  49 #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK)
  50 void __snd_printk(unsigned int level, const char *path, int line,
  51                   const char *format, ...)
  52 {
  53         va_list args;
  54 #ifdef CONFIG_SND_VERBOSE_PRINTK
  55         int kern_level;
  56         struct va_format vaf;
  57         char verbose_fmt[] = KERN_DEFAULT "ALSA %s:%d %pV";
  58         bool level_found = false;
  59 #endif
  60 
  61 #ifdef CONFIG_SND_DEBUG
  62         if (debug < level)
  63                 return;
  64 #endif
  65 
  66         va_start(args, format);
  67 #ifdef CONFIG_SND_VERBOSE_PRINTK
  68         vaf.fmt = format;
  69         vaf.va = &args;
  70 
  71         while ((kern_level = printk_get_level(vaf.fmt)) != 0) {
  72                 const char *end_of_header = printk_skip_level(vaf.fmt);
  73 
  74                 
  75                 if (kern_level >= '0' && kern_level <= '7') {
  76                         memcpy(verbose_fmt, vaf.fmt, end_of_header - vaf.fmt);
  77                         level_found = true;
  78                 }
  79 
  80                 vaf.fmt = end_of_header;
  81         }
  82 
  83         if (!level_found && level)
  84                 memcpy(verbose_fmt, KERN_DEBUG, sizeof(KERN_DEBUG) - 1);
  85 
  86         printk(verbose_fmt, sanity_file_name(path), line, &vaf);
  87 #else
  88         vprintk(format, args);
  89 #endif
  90         va_end(args);
  91 }
  92 EXPORT_SYMBOL_GPL(__snd_printk);
  93 #endif
  94 
  95 #ifdef CONFIG_PCI
  96 #include <linux/pci.h>
  97 
  98 
  99 
 100 
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 
 109 const struct snd_pci_quirk *
 110 snd_pci_quirk_lookup_id(u16 vendor, u16 device,
 111                         const struct snd_pci_quirk *list)
 112 {
 113         const struct snd_pci_quirk *q;
 114 
 115         for (q = list; q->subvendor; q++) {
 116                 if (q->subvendor != vendor)
 117                         continue;
 118                 if (!q->subdevice ||
 119                     (device & q->subdevice_mask) == q->subdevice)
 120                         return q;
 121         }
 122         return NULL;
 123 }
 124 EXPORT_SYMBOL(snd_pci_quirk_lookup_id);
 125 
 126 
 127 
 128 
 129 
 130 
 131 
 132 
 133 
 134 
 135 
 136 
 137 const struct snd_pci_quirk *
 138 snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
 139 {
 140         if (!pci)
 141                 return NULL;
 142         return snd_pci_quirk_lookup_id(pci->subsystem_vendor,
 143                                        pci->subsystem_device,
 144                                        list);
 145 }
 146 EXPORT_SYMBOL(snd_pci_quirk_lookup);
 147 #endif