~ctf/alsa-driver/tiwai-trunk2.bazooka_dock

« back to all changes in this revision

Viewing changes to core/misc.c

  • Committer: Canonistack server
  • Date: 2015-01-22 13:04:34 UTC
  • Revision ID: david.henningsson@canonical.com-20150122130434-q48cfdp8ovzgqhe7
Test run of 623 machines: 3 failing with 3 errors and 0 warnings.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Misc and compatibility things
 
3
 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
 
4
 *
 
5
 *
 
6
 *   This program is free software; you can redistribute it and/or modify
 
7
 *   it under the terms of the GNU General Public License as published by
 
8
 *   the Free Software Foundation; either version 2 of the License, or
 
9
 *   (at your option) any later version.
 
10
 *
 
11
 *   This program is distributed in the hope that it will be useful,
 
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 *   GNU General Public License for more details.
 
15
 *
 
16
 *   You should have received a copy of the GNU General Public License
 
17
 *   along with this program; if not, write to the Free Software
 
18
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 
19
 *
 
20
 */
 
21
 
 
22
#include <linux/init.h>
 
23
#include <linux/export.h>
 
24
#include <linux/moduleparam.h>
 
25
#include <linux/time.h>
 
26
#include <linux/slab.h>
 
27
#include <linux/ioport.h>
 
28
#include <sound/core.h>
 
29
 
 
30
#ifdef CONFIG_SND_DEBUG
 
31
 
 
32
#ifdef CONFIG_SND_DEBUG_VERBOSE
 
33
#define DEFAULT_DEBUG_LEVEL     2
 
34
#else
 
35
#define DEFAULT_DEBUG_LEVEL     1
 
36
#endif
 
37
 
 
38
static int debug = DEFAULT_DEBUG_LEVEL;
 
39
module_param(debug, int, 0644);
 
40
MODULE_PARM_DESC(debug, "Debug level (0 = disable)");
 
41
 
 
42
#endif /* CONFIG_SND_DEBUG */
 
43
 
 
44
void release_and_free_resource(struct resource *res)
 
45
{
 
46
        if (res) {
 
47
                release_resource(res);
 
48
                kfree(res);
 
49
        }
 
50
}
 
51
 
 
52
EXPORT_SYMBOL(release_and_free_resource);
 
53
 
 
54
#ifdef CONFIG_SND_VERBOSE_PRINTK
 
55
/* strip the leading path if the given path is absolute */
 
56
static const char *sanity_file_name(const char *path)
 
57
{
 
58
        if (*path == '/')
 
59
                return strrchr(path, '/') + 1;
 
60
        else
 
61
                return path;
 
62
}
 
63
#endif
 
64
 
 
65
#if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK)
 
66
void __snd_printk(unsigned int level, const char *path, int line,
 
67
                  const char *format, ...)
 
68
{
 
69
        va_list args;
 
70
#ifdef CONFIG_SND_VERBOSE_PRINTK
 
71
        int kern_level;
 
72
        struct va_format vaf;
 
73
        char verbose_fmt[] = KERN_DEFAULT "ALSA %s:%d %pV";
 
74
#endif
 
75
 
 
76
#ifdef CONFIG_SND_DEBUG
 
77
        if (debug < level)
 
78
                return;
 
79
#endif
 
80
 
 
81
        va_start(args, format);
 
82
#ifdef CONFIG_SND_VERBOSE_PRINTK
 
83
        vaf.fmt = format;
 
84
        vaf.va = &args;
 
85
 
 
86
        kern_level = printk_get_level(format);
 
87
        if (kern_level) {
 
88
                const char *end_of_header = printk_skip_level(format);
 
89
                memcpy(verbose_fmt, format, end_of_header - format);
 
90
                vaf.fmt = end_of_header;
 
91
        } else if (level)
 
92
                memcpy(verbose_fmt, KERN_DEBUG, sizeof(KERN_DEBUG) - 1);
 
93
        printk(verbose_fmt, sanity_file_name(path), line, &vaf);
 
94
 
 
95
#else
 
96
        vprintk(format, args);
 
97
#endif
 
98
        va_end(args);
 
99
}
 
100
EXPORT_SYMBOL_GPL(__snd_printk);
 
101
#endif
 
102
 
 
103
#ifdef CONFIG_PCI
 
104
#include <linux/pci.h>
 
105
/**
 
106
 * snd_pci_quirk_lookup_id - look up a PCI SSID quirk list
 
107
 * @vendor: PCI SSV id
 
108
 * @device: PCI SSD id
 
109
 * @list: quirk list, terminated by a null entry
 
110
 *
 
111
 * Look through the given quirk list and finds a matching entry
 
112
 * with the same PCI SSID.  When subdevice is 0, all subdevice
 
113
 * values may match.
 
114
 *
 
115
 * Returns the matched entry pointer, or NULL if nothing matched.
 
116
 */
 
117
const struct snd_pci_quirk *
 
118
snd_pci_quirk_lookup_id(u16 vendor, u16 device,
 
119
                        const struct snd_pci_quirk *list)
 
120
{
 
121
        const struct snd_pci_quirk *q;
 
122
 
 
123
        for (q = list; q->subvendor; q++) {
 
124
                if (q->subvendor != vendor)
 
125
                        continue;
 
126
                if (!q->subdevice ||
 
127
                    (device & q->subdevice_mask) == q->subdevice)
 
128
                        return q;
 
129
        }
 
130
        return NULL;
 
131
}
 
132
EXPORT_SYMBOL(snd_pci_quirk_lookup_id);
 
133
 
 
134
/**
 
135
 * snd_pci_quirk_lookup - look up a PCI SSID quirk list
 
136
 * @pci: pci_dev handle
 
137
 * @list: quirk list, terminated by a null entry
 
138
 *
 
139
 * Look through the given quirk list and finds a matching entry
 
140
 * with the same PCI SSID.  When subdevice is 0, all subdevice
 
141
 * values may match.
 
142
 *
 
143
 * Returns the matched entry pointer, or NULL if nothing matched.
 
144
 */
 
145
const struct snd_pci_quirk *
 
146
snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
 
147
{
 
148
        if (!pci)
 
149
                return NULL;
 
150
        return snd_pci_quirk_lookup_id(pci->subsystem_vendor,
 
151
                                       pci->subsystem_device,
 
152
                                       list);
 
153
}
 
154
EXPORT_SYMBOL(snd_pci_quirk_lookup);
 
155
#endif