ALSA: hda - Add missing NULL check in snd_hda_create_spdif_in_ctls()
[safe/jmp/linux-2.6] / sound / pci / hda / hda_codec.c
1 /*
2  * Universal Interface for Intel High Definition Audio Codec
3  *
4  * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
5  *
6  *
7  *  This driver is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This driver is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20  */
21
22 #include <linux/init.h>
23 #include <linux/delay.h>
24 #include <linux/slab.h>
25 #include <linux/pci.h>
26 #include <linux/mutex.h>
27 #include <sound/core.h>
28 #include "hda_codec.h"
29 #include <sound/asoundef.h>
30 #include <sound/tlv.h>
31 #include <sound/initval.h>
32 #include "hda_local.h"
33 #include <sound/hda_hwdep.h>
34
35 /*
36  * vendor / preset table
37  */
38
39 struct hda_vendor_id {
40         unsigned int id;
41         const char *name;
42 };
43
44 /* codec vendor labels */
45 static struct hda_vendor_id hda_vendor_ids[] = {
46         { 0x1002, "ATI" },
47         { 0x1057, "Motorola" },
48         { 0x1095, "Silicon Image" },
49         { 0x10de, "Nvidia" },
50         { 0x10ec, "Realtek" },
51         { 0x1106, "VIA" },
52         { 0x111d, "IDT" },
53         { 0x11c1, "LSI" },
54         { 0x11d4, "Analog Devices" },
55         { 0x13f6, "C-Media" },
56         { 0x14f1, "Conexant" },
57         { 0x17e8, "Chrontel" },
58         { 0x1854, "LG" },
59         { 0x1aec, "Wolfson Microelectronics" },
60         { 0x434d, "C-Media" },
61         { 0x8086, "Intel" },
62         { 0x8384, "SigmaTel" },
63         {} /* terminator */
64 };
65
66 static DEFINE_MUTEX(preset_mutex);
67 static LIST_HEAD(hda_preset_tables);
68
69 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
70 {
71         mutex_lock(&preset_mutex);
72         list_add_tail(&preset->list, &hda_preset_tables);
73         mutex_unlock(&preset_mutex);
74         return 0;
75 }
76 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
77
78 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
79 {
80         mutex_lock(&preset_mutex);
81         list_del(&preset->list);
82         mutex_unlock(&preset_mutex);
83         return 0;
84 }
85 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
86
87 #ifdef CONFIG_SND_HDA_POWER_SAVE
88 static void hda_power_work(struct work_struct *work);
89 static void hda_keep_power_on(struct hda_codec *codec);
90 #else
91 static inline void hda_keep_power_on(struct hda_codec *codec) {}
92 #endif
93
94 const char *snd_hda_get_jack_location(u32 cfg)
95 {
96         static char *bases[7] = {
97                 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
98         };
99         static unsigned char specials_idx[] = {
100                 0x07, 0x08,
101                 0x17, 0x18, 0x19,
102                 0x37, 0x38
103         };
104         static char *specials[] = {
105                 "Rear Panel", "Drive Bar",
106                 "Riser", "HDMI", "ATAPI",
107                 "Mobile-In", "Mobile-Out"
108         };
109         int i;
110         cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
111         if ((cfg & 0x0f) < 7)
112                 return bases[cfg & 0x0f];
113         for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
114                 if (cfg == specials_idx[i])
115                         return specials[i];
116         }
117         return "UNKNOWN";
118 }
119 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
120
121 const char *snd_hda_get_jack_connectivity(u32 cfg)
122 {
123         static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
124
125         return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
126 }
127 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
128
129 const char *snd_hda_get_jack_type(u32 cfg)
130 {
131         static char *jack_types[16] = {
132                 "Line Out", "Speaker", "HP Out", "CD",
133                 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
134                 "Line In", "Aux", "Mic", "Telephony",
135                 "SPDIF In", "Digitial In", "Reserved", "Other"
136         };
137
138         return jack_types[(cfg & AC_DEFCFG_DEVICE)
139                                 >> AC_DEFCFG_DEVICE_SHIFT];
140 }
141 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
142
143 /*
144  * Compose a 32bit command word to be sent to the HD-audio controller
145  */
146 static inline unsigned int
147 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
148                unsigned int verb, unsigned int parm)
149 {
150         u32 val;
151
152         val = (u32)(codec->addr & 0x0f) << 28;
153         val |= (u32)direct << 27;
154         val |= (u32)nid << 20;
155         val |= verb << 8;
156         val |= parm;
157         return val;
158 }
159
160 /**
161  * snd_hda_codec_read - send a command and get the response
162  * @codec: the HDA codec
163  * @nid: NID to send the command
164  * @direct: direct flag
165  * @verb: the verb to send
166  * @parm: the parameter for the verb
167  *
168  * Send a single command and read the corresponding response.
169  *
170  * Returns the obtained response value, or -1 for an error.
171  */
172 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
173                                 int direct,
174                                 unsigned int verb, unsigned int parm)
175 {
176         struct hda_bus *bus = codec->bus;
177         unsigned int res;
178
179         res = make_codec_cmd(codec, nid, direct, verb, parm);
180         snd_hda_power_up(codec);
181         mutex_lock(&bus->cmd_mutex);
182         if (!bus->ops.command(bus, res))
183                 res = bus->ops.get_response(bus);
184         else
185                 res = (unsigned int)-1;
186         mutex_unlock(&bus->cmd_mutex);
187         snd_hda_power_down(codec);
188         return res;
189 }
190 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
191
192 /**
193  * snd_hda_codec_write - send a single command without waiting for response
194  * @codec: the HDA codec
195  * @nid: NID to send the command
196  * @direct: direct flag
197  * @verb: the verb to send
198  * @parm: the parameter for the verb
199  *
200  * Send a single command without waiting for response.
201  *
202  * Returns 0 if successful, or a negative error code.
203  */
204 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
205                          unsigned int verb, unsigned int parm)
206 {
207         struct hda_bus *bus = codec->bus;
208         unsigned int res;
209         int err;
210
211         res = make_codec_cmd(codec, nid, direct, verb, parm);
212         snd_hda_power_up(codec);
213         mutex_lock(&bus->cmd_mutex);
214         err = bus->ops.command(bus, res);
215         mutex_unlock(&bus->cmd_mutex);
216         snd_hda_power_down(codec);
217         return err;
218 }
219 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
220
221 /**
222  * snd_hda_sequence_write - sequence writes
223  * @codec: the HDA codec
224  * @seq: VERB array to send
225  *
226  * Send the commands sequentially from the given array.
227  * The array must be terminated with NID=0.
228  */
229 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
230 {
231         for (; seq->nid; seq++)
232                 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
233 }
234 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
235
236 /**
237  * snd_hda_get_sub_nodes - get the range of sub nodes
238  * @codec: the HDA codec
239  * @nid: NID to parse
240  * @start_id: the pointer to store the start NID
241  *
242  * Parse the NID and store the start NID of its sub-nodes.
243  * Returns the number of sub-nodes.
244  */
245 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
246                           hda_nid_t *start_id)
247 {
248         unsigned int parm;
249
250         parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
251         if (parm == -1)
252                 return 0;
253         *start_id = (parm >> 16) & 0x7fff;
254         return (int)(parm & 0x7fff);
255 }
256 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
257
258 /**
259  * snd_hda_get_connections - get connection list
260  * @codec: the HDA codec
261  * @nid: NID to parse
262  * @conn_list: connection list array
263  * @max_conns: max. number of connections to store
264  *
265  * Parses the connection list of the given widget and stores the list
266  * of NIDs.
267  *
268  * Returns the number of connections, or a negative error code.
269  */
270 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
271                             hda_nid_t *conn_list, int max_conns)
272 {
273         unsigned int parm;
274         int i, conn_len, conns;
275         unsigned int shift, num_elems, mask;
276         hda_nid_t prev_nid;
277
278         if (snd_BUG_ON(!conn_list || max_conns <= 0))
279                 return -EINVAL;
280
281         parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
282         if (parm & AC_CLIST_LONG) {
283                 /* long form */
284                 shift = 16;
285                 num_elems = 2;
286         } else {
287                 /* short form */
288                 shift = 8;
289                 num_elems = 4;
290         }
291         conn_len = parm & AC_CLIST_LENGTH;
292         mask = (1 << (shift-1)) - 1;
293
294         if (!conn_len)
295                 return 0; /* no connection */
296
297         if (conn_len == 1) {
298                 /* single connection */
299                 parm = snd_hda_codec_read(codec, nid, 0,
300                                           AC_VERB_GET_CONNECT_LIST, 0);
301                 conn_list[0] = parm & mask;
302                 return 1;
303         }
304
305         /* multi connection */
306         conns = 0;
307         prev_nid = 0;
308         for (i = 0; i < conn_len; i++) {
309                 int range_val;
310                 hda_nid_t val, n;
311
312                 if (i % num_elems == 0)
313                         parm = snd_hda_codec_read(codec, nid, 0,
314                                                   AC_VERB_GET_CONNECT_LIST, i);
315                 range_val = !!(parm & (1 << (shift-1))); /* ranges */
316                 val = parm & mask;
317                 parm >>= shift;
318                 if (range_val) {
319                         /* ranges between the previous and this one */
320                         if (!prev_nid || prev_nid >= val) {
321                                 snd_printk(KERN_WARNING "hda_codec: "
322                                            "invalid dep_range_val %x:%x\n",
323                                            prev_nid, val);
324                                 continue;
325                         }
326                         for (n = prev_nid + 1; n <= val; n++) {
327                                 if (conns >= max_conns) {
328                                         snd_printk(KERN_ERR
329                                                    "Too many connections\n");
330                                         return -EINVAL;
331                                 }
332                                 conn_list[conns++] = n;
333                         }
334                 } else {
335                         if (conns >= max_conns) {
336                                 snd_printk(KERN_ERR "Too many connections\n");
337                                 return -EINVAL;
338                         }
339                         conn_list[conns++] = val;
340                 }
341                 prev_nid = val;
342         }
343         return conns;
344 }
345 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
346
347
348 /**
349  * snd_hda_queue_unsol_event - add an unsolicited event to queue
350  * @bus: the BUS
351  * @res: unsolicited event (lower 32bit of RIRB entry)
352  * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
353  *
354  * Adds the given event to the queue.  The events are processed in
355  * the workqueue asynchronously.  Call this function in the interrupt
356  * hanlder when RIRB receives an unsolicited event.
357  *
358  * Returns 0 if successful, or a negative error code.
359  */
360 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
361 {
362         struct hda_bus_unsolicited *unsol;
363         unsigned int wp;
364
365         unsol = bus->unsol;
366         if (!unsol)
367                 return 0;
368
369         wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
370         unsol->wp = wp;
371
372         wp <<= 1;
373         unsol->queue[wp] = res;
374         unsol->queue[wp + 1] = res_ex;
375
376         queue_work(bus->workq, &unsol->work);
377
378         return 0;
379 }
380 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
381
382 /*
383  * process queued unsolicited events
384  */
385 static void process_unsol_events(struct work_struct *work)
386 {
387         struct hda_bus_unsolicited *unsol =
388                 container_of(work, struct hda_bus_unsolicited, work);
389         struct hda_bus *bus = unsol->bus;
390         struct hda_codec *codec;
391         unsigned int rp, caddr, res;
392
393         while (unsol->rp != unsol->wp) {
394                 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
395                 unsol->rp = rp;
396                 rp <<= 1;
397                 res = unsol->queue[rp];
398                 caddr = unsol->queue[rp + 1];
399                 if (!(caddr & (1 << 4))) /* no unsolicited event? */
400                         continue;
401                 codec = bus->caddr_tbl[caddr & 0x0f];
402                 if (codec && codec->patch_ops.unsol_event)
403                         codec->patch_ops.unsol_event(codec, res);
404         }
405 }
406
407 /*
408  * initialize unsolicited queue
409  */
410 static int init_unsol_queue(struct hda_bus *bus)
411 {
412         struct hda_bus_unsolicited *unsol;
413
414         if (bus->unsol) /* already initialized */
415                 return 0;
416
417         unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
418         if (!unsol) {
419                 snd_printk(KERN_ERR "hda_codec: "
420                            "can't allocate unsolicited queue\n");
421                 return -ENOMEM;
422         }
423         INIT_WORK(&unsol->work, process_unsol_events);
424         unsol->bus = bus;
425         bus->unsol = unsol;
426         return 0;
427 }
428
429 /*
430  * destructor
431  */
432 static void snd_hda_codec_free(struct hda_codec *codec);
433
434 static int snd_hda_bus_free(struct hda_bus *bus)
435 {
436         struct hda_codec *codec, *n;
437
438         if (!bus)
439                 return 0;
440         if (bus->workq)
441                 flush_workqueue(bus->workq);
442         if (bus->unsol)
443                 kfree(bus->unsol);
444         list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
445                 snd_hda_codec_free(codec);
446         }
447         if (bus->ops.private_free)
448                 bus->ops.private_free(bus);
449         if (bus->workq)
450                 destroy_workqueue(bus->workq);
451         kfree(bus);
452         return 0;
453 }
454
455 static int snd_hda_bus_dev_free(struct snd_device *device)
456 {
457         struct hda_bus *bus = device->device_data;
458         bus->shutdown = 1;
459         return snd_hda_bus_free(bus);
460 }
461
462 #ifdef CONFIG_SND_HDA_HWDEP
463 static int snd_hda_bus_dev_register(struct snd_device *device)
464 {
465         struct hda_bus *bus = device->device_data;
466         struct hda_codec *codec;
467         list_for_each_entry(codec, &bus->codec_list, list) {
468                 snd_hda_hwdep_add_sysfs(codec);
469         }
470         return 0;
471 }
472 #else
473 #define snd_hda_bus_dev_register        NULL
474 #endif
475
476 /**
477  * snd_hda_bus_new - create a HDA bus
478  * @card: the card entry
479  * @temp: the template for hda_bus information
480  * @busp: the pointer to store the created bus instance
481  *
482  * Returns 0 if successful, or a negative error code.
483  */
484 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
485                               const struct hda_bus_template *temp,
486                               struct hda_bus **busp)
487 {
488         struct hda_bus *bus;
489         int err;
490         static struct snd_device_ops dev_ops = {
491                 .dev_register = snd_hda_bus_dev_register,
492                 .dev_free = snd_hda_bus_dev_free,
493         };
494
495         if (snd_BUG_ON(!temp))
496                 return -EINVAL;
497         if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
498                 return -EINVAL;
499
500         if (busp)
501                 *busp = NULL;
502
503         bus = kzalloc(sizeof(*bus), GFP_KERNEL);
504         if (bus == NULL) {
505                 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
506                 return -ENOMEM;
507         }
508
509         bus->card = card;
510         bus->private_data = temp->private_data;
511         bus->pci = temp->pci;
512         bus->modelname = temp->modelname;
513         bus->power_save = temp->power_save;
514         bus->ops = temp->ops;
515
516         mutex_init(&bus->cmd_mutex);
517         INIT_LIST_HEAD(&bus->codec_list);
518
519         snprintf(bus->workq_name, sizeof(bus->workq_name),
520                  "hd-audio%d", card->number);
521         bus->workq = create_singlethread_workqueue(bus->workq_name);
522         if (!bus->workq) {
523                 snd_printk(KERN_ERR "cannot create workqueue %s\n",
524                            bus->workq_name);
525                 kfree(bus);
526                 return -ENOMEM;
527         }
528
529         err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
530         if (err < 0) {
531                 snd_hda_bus_free(bus);
532                 return err;
533         }
534         if (busp)
535                 *busp = bus;
536         return 0;
537 }
538 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
539
540 #ifdef CONFIG_SND_HDA_GENERIC
541 #define is_generic_config(codec) \
542         (codec->modelname && !strcmp(codec->modelname, "generic"))
543 #else
544 #define is_generic_config(codec)        0
545 #endif
546
547 #ifdef MODULE
548 #define HDA_MODREQ_MAX_COUNT    2       /* two request_modules()'s */
549 #else
550 #define HDA_MODREQ_MAX_COUNT    0       /* all presets are statically linked */
551 #endif
552
553 /*
554  * find a matching codec preset
555  */
556 static const struct hda_codec_preset *
557 find_codec_preset(struct hda_codec *codec)
558 {
559         struct hda_codec_preset_list *tbl;
560         const struct hda_codec_preset *preset;
561         int mod_requested = 0;
562
563         if (is_generic_config(codec))
564                 return NULL; /* use the generic parser */
565
566  again:
567         mutex_lock(&preset_mutex);
568         list_for_each_entry(tbl, &hda_preset_tables, list) {
569                 if (!try_module_get(tbl->owner)) {
570                         snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
571                         continue;
572                 }
573                 for (preset = tbl->preset; preset->id; preset++) {
574                         u32 mask = preset->mask;
575                         if (preset->afg && preset->afg != codec->afg)
576                                 continue;
577                         if (preset->mfg && preset->mfg != codec->mfg)
578                                 continue;
579                         if (!mask)
580                                 mask = ~0;
581                         if (preset->id == (codec->vendor_id & mask) &&
582                             (!preset->rev ||
583                              preset->rev == codec->revision_id)) {
584                                 mutex_unlock(&preset_mutex);
585                                 codec->owner = tbl->owner;
586                                 return preset;
587                         }
588                 }
589                 module_put(tbl->owner);
590         }
591         mutex_unlock(&preset_mutex);
592
593         if (mod_requested < HDA_MODREQ_MAX_COUNT) {
594                 char name[32];
595                 if (!mod_requested)
596                         snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
597                                  codec->vendor_id);
598                 else
599                         snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
600                                  (codec->vendor_id >> 16) & 0xffff);
601                 request_module(name);
602                 mod_requested++;
603                 goto again;
604         }
605         return NULL;
606 }
607
608 /*
609  * get_codec_name - store the codec name
610  */
611 static int get_codec_name(struct hda_codec *codec)
612 {
613         const struct hda_vendor_id *c;
614         const char *vendor = NULL;
615         u16 vendor_id = codec->vendor_id >> 16;
616         char tmp[16], name[32];
617
618         for (c = hda_vendor_ids; c->id; c++) {
619                 if (c->id == vendor_id) {
620                         vendor = c->name;
621                         break;
622                 }
623         }
624         if (!vendor) {
625                 sprintf(tmp, "Generic %04x", vendor_id);
626                 vendor = tmp;
627         }
628         if (codec->preset && codec->preset->name)
629                 snprintf(name, sizeof(name), "%s %s", vendor,
630                          codec->preset->name);
631         else
632                 snprintf(name, sizeof(name), "%s ID %x", vendor,
633                          codec->vendor_id & 0xffff);
634         codec->name = kstrdup(name, GFP_KERNEL);
635         if (!codec->name)
636                 return -ENOMEM;
637         return 0;
638 }
639
640 /*
641  * look for an AFG and MFG nodes
642  */
643 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
644 {
645         int i, total_nodes;
646         hda_nid_t nid;
647
648         total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
649         for (i = 0; i < total_nodes; i++, nid++) {
650                 unsigned int func;
651                 func = snd_hda_param_read(codec, nid, AC_PAR_FUNCTION_TYPE);
652                 switch (func & 0xff) {
653                 case AC_GRP_AUDIO_FUNCTION:
654                         codec->afg = nid;
655                         break;
656                 case AC_GRP_MODEM_FUNCTION:
657                         codec->mfg = nid;
658                         break;
659                 default:
660                         break;
661                 }
662         }
663 }
664
665 /*
666  * read widget caps for each widget and store in cache
667  */
668 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
669 {
670         int i;
671         hda_nid_t nid;
672
673         codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
674                                                  &codec->start_nid);
675         codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
676         if (!codec->wcaps)
677                 return -ENOMEM;
678         nid = codec->start_nid;
679         for (i = 0; i < codec->num_nodes; i++, nid++)
680                 codec->wcaps[i] = snd_hda_param_read(codec, nid,
681                                                      AC_PAR_AUDIO_WIDGET_CAP);
682         return 0;
683 }
684
685
686 static void init_hda_cache(struct hda_cache_rec *cache,
687                            unsigned int record_size);
688 static void free_hda_cache(struct hda_cache_rec *cache);
689
690 /*
691  * codec destructor
692  */
693 static void snd_hda_codec_free(struct hda_codec *codec)
694 {
695         if (!codec)
696                 return;
697 #ifdef CONFIG_SND_HDA_POWER_SAVE
698         cancel_delayed_work(&codec->power_work);
699         flush_workqueue(codec->bus->workq);
700 #endif
701         list_del(&codec->list);
702         snd_array_free(&codec->mixers);
703         codec->bus->caddr_tbl[codec->addr] = NULL;
704         if (codec->patch_ops.free)
705                 codec->patch_ops.free(codec);
706         module_put(codec->owner);
707         free_hda_cache(&codec->amp_cache);
708         free_hda_cache(&codec->cmd_cache);
709         kfree(codec->name);
710         kfree(codec->modelname);
711         kfree(codec->wcaps);
712         kfree(codec);
713 }
714
715 /**
716  * snd_hda_codec_new - create a HDA codec
717  * @bus: the bus to assign
718  * @codec_addr: the codec address
719  * @codecp: the pointer to store the generated codec
720  *
721  * Returns 0 if successful, or a negative error code.
722  */
723 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
724                                     int do_init, struct hda_codec **codecp)
725 {
726         struct hda_codec *codec;
727         char component[31];
728         int err;
729
730         if (snd_BUG_ON(!bus))
731                 return -EINVAL;
732         if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
733                 return -EINVAL;
734
735         if (bus->caddr_tbl[codec_addr]) {
736                 snd_printk(KERN_ERR "hda_codec: "
737                            "address 0x%x is already occupied\n", codec_addr);
738                 return -EBUSY;
739         }
740
741         codec = kzalloc(sizeof(*codec), GFP_KERNEL);
742         if (codec == NULL) {
743                 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
744                 return -ENOMEM;
745         }
746
747         codec->bus = bus;
748         codec->addr = codec_addr;
749         mutex_init(&codec->spdif_mutex);
750         mutex_init(&codec->control_mutex);
751         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
752         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
753         snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
754         if (codec->bus->modelname) {
755                 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
756                 if (!codec->modelname) {
757                         snd_hda_codec_free(codec);
758                         return -ENODEV;
759                 }
760         }
761
762 #ifdef CONFIG_SND_HDA_POWER_SAVE
763         INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
764         /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
765          * the caller has to power down appropriatley after initialization
766          * phase.
767          */
768         hda_keep_power_on(codec);
769 #endif
770
771         list_add_tail(&codec->list, &bus->codec_list);
772         bus->caddr_tbl[codec_addr] = codec;
773
774         codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
775                                               AC_PAR_VENDOR_ID);
776         if (codec->vendor_id == -1)
777                 /* read again, hopefully the access method was corrected
778                  * in the last read...
779                  */
780                 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
781                                                       AC_PAR_VENDOR_ID);
782         codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
783                                                  AC_PAR_SUBSYSTEM_ID);
784         codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
785                                                 AC_PAR_REV_ID);
786
787         setup_fg_nodes(codec);
788         if (!codec->afg && !codec->mfg) {
789                 snd_printdd("hda_codec: no AFG or MFG node found\n");
790                 snd_hda_codec_free(codec);
791                 return -ENODEV;
792         }
793
794         if (read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg) < 0) {
795                 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
796                 snd_hda_codec_free(codec);
797                 return -ENOMEM;
798         }
799
800         if (!codec->subsystem_id) {
801                 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
802                 codec->subsystem_id =
803                         snd_hda_codec_read(codec, nid, 0,
804                                            AC_VERB_GET_SUBSYSTEM_ID, 0);
805         }
806         if (bus->modelname)
807                 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
808
809         if (do_init) {
810                 err = snd_hda_codec_configure(codec);
811                 if (err < 0) {
812                         snd_hda_codec_free(codec);
813                         return err;
814                 }
815         }
816         snd_hda_codec_proc_new(codec);
817
818         snd_hda_create_hwdep(codec);
819
820         sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
821                 codec->subsystem_id, codec->revision_id);
822         snd_component_add(codec->bus->card, component);
823
824         if (codecp)
825                 *codecp = codec;
826         return 0;
827 }
828 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
829
830 int snd_hda_codec_configure(struct hda_codec *codec)
831 {
832         int err;
833
834         codec->preset = find_codec_preset(codec);
835         if (!codec->name) {
836                 err = get_codec_name(codec);
837                 if (err < 0)
838                         return err;
839         }
840         /* audio codec should override the mixer name */
841         if (codec->afg || !*codec->bus->card->mixername)
842                 strlcpy(codec->bus->card->mixername, codec->name,
843                         sizeof(codec->bus->card->mixername));
844
845         if (is_generic_config(codec)) {
846                 err = snd_hda_parse_generic_codec(codec);
847                 goto patched;
848         }
849         if (codec->preset && codec->preset->patch) {
850                 err = codec->preset->patch(codec);
851                 goto patched;
852         }
853
854         /* call the default parser */
855         err = snd_hda_parse_generic_codec(codec);
856         if (err < 0)
857                 printk(KERN_ERR "hda-codec: No codec parser is available\n");
858
859  patched:
860         if (!err && codec->patch_ops.unsol_event)
861                 err = init_unsol_queue(codec->bus);
862         return err;
863 }
864
865 /**
866  * snd_hda_codec_setup_stream - set up the codec for streaming
867  * @codec: the CODEC to set up
868  * @nid: the NID to set up
869  * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
870  * @channel_id: channel id to pass, zero based.
871  * @format: stream format.
872  */
873 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
874                                 u32 stream_tag,
875                                 int channel_id, int format)
876 {
877         if (!nid)
878                 return;
879
880         snd_printdd("hda_codec_setup_stream: "
881                     "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
882                     nid, stream_tag, channel_id, format);
883         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
884                             (stream_tag << 4) | channel_id);
885         msleep(1);
886         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
887 }
888 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
889
890 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
891 {
892         if (!nid)
893                 return;
894
895         snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
896         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
897 #if 0 /* keep the format */
898         msleep(1);
899         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
900 #endif
901 }
902 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
903
904 /*
905  * amp access functions
906  */
907
908 /* FIXME: more better hash key? */
909 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
910 #define INFO_AMP_CAPS   (1<<0)
911 #define INFO_AMP_VOL(ch)        (1 << (1 + (ch)))
912
913 /* initialize the hash table */
914 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
915                                      unsigned int record_size)
916 {
917         memset(cache, 0, sizeof(*cache));
918         memset(cache->hash, 0xff, sizeof(cache->hash));
919         snd_array_init(&cache->buf, record_size, 64);
920 }
921
922 static void free_hda_cache(struct hda_cache_rec *cache)
923 {
924         snd_array_free(&cache->buf);
925 }
926
927 /* query the hash.  allocate an entry if not found. */
928 static struct hda_cache_head  *get_alloc_hash(struct hda_cache_rec *cache,
929                                               u32 key)
930 {
931         u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
932         u16 cur = cache->hash[idx];
933         struct hda_cache_head *info;
934
935         while (cur != 0xffff) {
936                 info = snd_array_elem(&cache->buf, cur);
937                 if (info->key == key)
938                         return info;
939                 cur = info->next;
940         }
941
942         /* add a new hash entry */
943         info = snd_array_new(&cache->buf);
944         if (!info)
945                 return NULL;
946         cur = snd_array_index(&cache->buf, info);
947         info->key = key;
948         info->val = 0;
949         info->next = cache->hash[idx];
950         cache->hash[idx] = cur;
951
952         return info;
953 }
954
955 /* query and allocate an amp hash entry */
956 static inline struct hda_amp_info *
957 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
958 {
959         return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
960 }
961
962 /*
963  * query AMP capabilities for the given widget and direction
964  */
965 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
966 {
967         struct hda_amp_info *info;
968
969         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
970         if (!info)
971                 return 0;
972         if (!(info->head.val & INFO_AMP_CAPS)) {
973                 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
974                         nid = codec->afg;
975                 info->amp_caps = snd_hda_param_read(codec, nid,
976                                                     direction == HDA_OUTPUT ?
977                                                     AC_PAR_AMP_OUT_CAP :
978                                                     AC_PAR_AMP_IN_CAP);
979                 if (info->amp_caps)
980                         info->head.val |= INFO_AMP_CAPS;
981         }
982         return info->amp_caps;
983 }
984 EXPORT_SYMBOL_HDA(query_amp_caps);
985
986 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
987                               unsigned int caps)
988 {
989         struct hda_amp_info *info;
990
991         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
992         if (!info)
993                 return -EINVAL;
994         info->amp_caps = caps;
995         info->head.val |= INFO_AMP_CAPS;
996         return 0;
997 }
998 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
999
1000 /*
1001  * read the current volume to info
1002  * if the cache exists, read the cache value.
1003  */
1004 static unsigned int get_vol_mute(struct hda_codec *codec,
1005                                  struct hda_amp_info *info, hda_nid_t nid,
1006                                  int ch, int direction, int index)
1007 {
1008         u32 val, parm;
1009
1010         if (info->head.val & INFO_AMP_VOL(ch))
1011                 return info->vol[ch];
1012
1013         parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1014         parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1015         parm |= index;
1016         val = snd_hda_codec_read(codec, nid, 0,
1017                                  AC_VERB_GET_AMP_GAIN_MUTE, parm);
1018         info->vol[ch] = val & 0xff;
1019         info->head.val |= INFO_AMP_VOL(ch);
1020         return info->vol[ch];
1021 }
1022
1023 /*
1024  * write the current volume in info to the h/w and update the cache
1025  */
1026 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1027                          hda_nid_t nid, int ch, int direction, int index,
1028                          int val)
1029 {
1030         u32 parm;
1031
1032         parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1033         parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1034         parm |= index << AC_AMP_SET_INDEX_SHIFT;
1035         parm |= val;
1036         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1037         info->vol[ch] = val;
1038 }
1039
1040 /*
1041  * read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit.
1042  */
1043 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1044                            int direction, int index)
1045 {
1046         struct hda_amp_info *info;
1047         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1048         if (!info)
1049                 return 0;
1050         return get_vol_mute(codec, info, nid, ch, direction, index);
1051 }
1052 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1053
1054 /*
1055  * update the AMP value, mask = bit mask to set, val = the value
1056  */
1057 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1058                              int direction, int idx, int mask, int val)
1059 {
1060         struct hda_amp_info *info;
1061
1062         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1063         if (!info)
1064                 return 0;
1065         val &= mask;
1066         val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1067         if (info->vol[ch] == val)
1068                 return 0;
1069         put_vol_mute(codec, info, nid, ch, direction, idx, val);
1070         return 1;
1071 }
1072 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1073
1074 /*
1075  * update the AMP stereo with the same mask and value
1076  */
1077 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1078                              int direction, int idx, int mask, int val)
1079 {
1080         int ch, ret = 0;
1081         for (ch = 0; ch < 2; ch++)
1082                 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1083                                                 idx, mask, val);
1084         return ret;
1085 }
1086 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1087
1088 #ifdef SND_HDA_NEEDS_RESUME
1089 /* resume the all amp commands from the cache */
1090 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1091 {
1092         struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1093         int i;
1094
1095         for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1096                 u32 key = buffer->head.key;
1097                 hda_nid_t nid;
1098                 unsigned int idx, dir, ch;
1099                 if (!key)
1100                         continue;
1101                 nid = key & 0xff;
1102                 idx = (key >> 16) & 0xff;
1103                 dir = (key >> 24) & 0xff;
1104                 for (ch = 0; ch < 2; ch++) {
1105                         if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1106                                 continue;
1107                         put_vol_mute(codec, buffer, nid, ch, dir, idx,
1108                                      buffer->vol[ch]);
1109                 }
1110         }
1111 }
1112 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1113 #endif /* SND_HDA_NEEDS_RESUME */
1114
1115 /* volume */
1116 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1117                                   struct snd_ctl_elem_info *uinfo)
1118 {
1119         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1120         u16 nid = get_amp_nid(kcontrol);
1121         u8 chs = get_amp_channels(kcontrol);
1122         int dir = get_amp_direction(kcontrol);
1123         unsigned int ofs = get_amp_offset(kcontrol);
1124         u32 caps;
1125
1126         caps = query_amp_caps(codec, nid, dir);
1127         /* num steps */
1128         caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1129         if (!caps) {
1130                 printk(KERN_WARNING "hda_codec: "
1131                        "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1132                        kcontrol->id.name);
1133                 return -EINVAL;
1134         }
1135         if (ofs < caps)
1136                 caps -= ofs;
1137         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1138         uinfo->count = chs == 3 ? 2 : 1;
1139         uinfo->value.integer.min = 0;
1140         uinfo->value.integer.max = caps;
1141         return 0;
1142 }
1143 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1144
1145
1146 static inline unsigned int
1147 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1148                int ch, int dir, int idx, unsigned int ofs)
1149 {
1150         unsigned int val;
1151         val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1152         val &= HDA_AMP_VOLMASK;
1153         if (val >= ofs)
1154                 val -= ofs;
1155         else
1156                 val = 0;
1157         return val;
1158 }
1159
1160 static inline int
1161 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1162                  int ch, int dir, int idx, unsigned int ofs,
1163                  unsigned int val)
1164 {
1165         if (val > 0)
1166                 val += ofs;
1167         return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1168                                         HDA_AMP_VOLMASK, val);
1169 }
1170
1171 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1172                                  struct snd_ctl_elem_value *ucontrol)
1173 {
1174         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1175         hda_nid_t nid = get_amp_nid(kcontrol);
1176         int chs = get_amp_channels(kcontrol);
1177         int dir = get_amp_direction(kcontrol);
1178         int idx = get_amp_index(kcontrol);
1179         unsigned int ofs = get_amp_offset(kcontrol);
1180         long *valp = ucontrol->value.integer.value;
1181
1182         if (chs & 1)
1183                 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1184         if (chs & 2)
1185                 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1186         return 0;
1187 }
1188 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1189
1190 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1191                                  struct snd_ctl_elem_value *ucontrol)
1192 {
1193         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1194         hda_nid_t nid = get_amp_nid(kcontrol);
1195         int chs = get_amp_channels(kcontrol);
1196         int dir = get_amp_direction(kcontrol);
1197         int idx = get_amp_index(kcontrol);
1198         unsigned int ofs = get_amp_offset(kcontrol);
1199         long *valp = ucontrol->value.integer.value;
1200         int change = 0;
1201
1202         snd_hda_power_up(codec);
1203         if (chs & 1) {
1204                 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1205                 valp++;
1206         }
1207         if (chs & 2)
1208                 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1209         snd_hda_power_down(codec);
1210         return change;
1211 }
1212 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1213
1214 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1215                           unsigned int size, unsigned int __user *_tlv)
1216 {
1217         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1218         hda_nid_t nid = get_amp_nid(kcontrol);
1219         int dir = get_amp_direction(kcontrol);
1220         unsigned int ofs = get_amp_offset(kcontrol);
1221         u32 caps, val1, val2;
1222
1223         if (size < 4 * sizeof(unsigned int))
1224                 return -ENOMEM;
1225         caps = query_amp_caps(codec, nid, dir);
1226         val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1227         val2 = (val2 + 1) * 25;
1228         val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1229         val1 += ofs;
1230         val1 = ((int)val1) * ((int)val2);
1231         if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1232                 return -EFAULT;
1233         if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1234                 return -EFAULT;
1235         if (put_user(val1, _tlv + 2))
1236                 return -EFAULT;
1237         if (put_user(val2, _tlv + 3))
1238                 return -EFAULT;
1239         return 0;
1240 }
1241 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1242
1243 /*
1244  * set (static) TLV for virtual master volume; recalculated as max 0dB
1245  */
1246 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1247                              unsigned int *tlv)
1248 {
1249         u32 caps;
1250         int nums, step;
1251
1252         caps = query_amp_caps(codec, nid, dir);
1253         nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1254         step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1255         step = (step + 1) * 25;
1256         tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1257         tlv[1] = 2 * sizeof(unsigned int);
1258         tlv[2] = -nums * step;
1259         tlv[3] = step;
1260 }
1261 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1262
1263 /* find a mixer control element with the given name */
1264 static struct snd_kcontrol *
1265 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1266                         const char *name, int idx)
1267 {
1268         struct snd_ctl_elem_id id;
1269         memset(&id, 0, sizeof(id));
1270         id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1271         id.index = idx;
1272         strcpy(id.name, name);
1273         return snd_ctl_find_id(codec->bus->card, &id);
1274 }
1275
1276 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1277                                             const char *name)
1278 {
1279         return _snd_hda_find_mixer_ctl(codec, name, 0);
1280 }
1281 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1282
1283 /* Add a control element and assign to the codec */
1284 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1285 {
1286         int err;
1287         struct snd_kcontrol **knewp;
1288
1289         err = snd_ctl_add(codec->bus->card, kctl);
1290         if (err < 0)
1291                 return err;
1292         knewp = snd_array_new(&codec->mixers);
1293         if (!knewp)
1294                 return -ENOMEM;
1295         *knewp = kctl;
1296         return 0;
1297 }
1298 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1299
1300 #ifdef CONFIG_SND_HDA_RECONFIG
1301 /* Clear all controls assigned to the given codec */
1302 void snd_hda_ctls_clear(struct hda_codec *codec)
1303 {
1304         int i;
1305         struct snd_kcontrol **kctls = codec->mixers.list;
1306         for (i = 0; i < codec->mixers.used; i++)
1307                 snd_ctl_remove(codec->bus->card, kctls[i]);
1308         snd_array_free(&codec->mixers);
1309 }
1310
1311 void snd_hda_codec_reset(struct hda_codec *codec)
1312 {
1313         int i;
1314
1315 #ifdef CONFIG_SND_HDA_POWER_SAVE
1316         cancel_delayed_work(&codec->power_work);
1317         flush_workqueue(codec->bus->workq);
1318 #endif
1319         snd_hda_ctls_clear(codec);
1320         /* relase PCMs */
1321         for (i = 0; i < codec->num_pcms; i++) {
1322                 if (codec->pcm_info[i].pcm) {
1323                         snd_device_free(codec->bus->card,
1324                                         codec->pcm_info[i].pcm);
1325                         clear_bit(codec->pcm_info[i].device,
1326                                   codec->bus->pcm_dev_bits);
1327                 }
1328         }
1329         if (codec->patch_ops.free)
1330                 codec->patch_ops.free(codec);
1331         codec->proc_widget_hook = NULL;
1332         codec->spec = NULL;
1333         free_hda_cache(&codec->amp_cache);
1334         free_hda_cache(&codec->cmd_cache);
1335         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1336         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1337         codec->num_pcms = 0;
1338         codec->pcm_info = NULL;
1339         codec->preset = NULL;
1340         module_put(codec->owner);
1341         codec->owner = NULL;
1342 }
1343 #endif /* CONFIG_SND_HDA_RECONFIG */
1344
1345 /* create a virtual master control and add slaves */
1346 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1347                         unsigned int *tlv, const char **slaves)
1348 {
1349         struct snd_kcontrol *kctl;
1350         const char **s;
1351         int err;
1352
1353         for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1354                 ;
1355         if (!*s) {
1356                 snd_printdd("No slave found for %s\n", name);
1357                 return 0;
1358         }
1359         kctl = snd_ctl_make_virtual_master(name, tlv);
1360         if (!kctl)
1361                 return -ENOMEM;
1362         err = snd_hda_ctl_add(codec, kctl);
1363         if (err < 0)
1364                 return err;
1365         
1366         for (s = slaves; *s; s++) {
1367                 struct snd_kcontrol *sctl;
1368
1369                 sctl = snd_hda_find_mixer_ctl(codec, *s);
1370                 if (!sctl) {
1371                         snd_printdd("Cannot find slave %s, skipped\n", *s);
1372                         continue;
1373                 }
1374                 err = snd_ctl_add_slave(kctl, sctl);
1375                 if (err < 0)
1376                         return err;
1377         }
1378         return 0;
1379 }
1380 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1381
1382 /* switch */
1383 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1384                                   struct snd_ctl_elem_info *uinfo)
1385 {
1386         int chs = get_amp_channels(kcontrol);
1387
1388         uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1389         uinfo->count = chs == 3 ? 2 : 1;
1390         uinfo->value.integer.min = 0;
1391         uinfo->value.integer.max = 1;
1392         return 0;
1393 }
1394 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1395
1396 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1397                                  struct snd_ctl_elem_value *ucontrol)
1398 {
1399         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1400         hda_nid_t nid = get_amp_nid(kcontrol);
1401         int chs = get_amp_channels(kcontrol);
1402         int dir = get_amp_direction(kcontrol);
1403         int idx = get_amp_index(kcontrol);
1404         long *valp = ucontrol->value.integer.value;
1405
1406         if (chs & 1)
1407                 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1408                            HDA_AMP_MUTE) ? 0 : 1;
1409         if (chs & 2)
1410                 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1411                          HDA_AMP_MUTE) ? 0 : 1;
1412         return 0;
1413 }
1414 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1415
1416 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1417                                  struct snd_ctl_elem_value *ucontrol)
1418 {
1419         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1420         hda_nid_t nid = get_amp_nid(kcontrol);
1421         int chs = get_amp_channels(kcontrol);
1422         int dir = get_amp_direction(kcontrol);
1423         int idx = get_amp_index(kcontrol);
1424         long *valp = ucontrol->value.integer.value;
1425         int change = 0;
1426
1427         snd_hda_power_up(codec);
1428         if (chs & 1) {
1429                 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1430                                                   HDA_AMP_MUTE,
1431                                                   *valp ? 0 : HDA_AMP_MUTE);
1432                 valp++;
1433         }
1434         if (chs & 2)
1435                 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1436                                                    HDA_AMP_MUTE,
1437                                                    *valp ? 0 : HDA_AMP_MUTE);
1438 #ifdef CONFIG_SND_HDA_POWER_SAVE
1439         if (codec->patch_ops.check_power_status)
1440                 codec->patch_ops.check_power_status(codec, nid);
1441 #endif
1442         snd_hda_power_down(codec);
1443         return change;
1444 }
1445 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1446
1447 /*
1448  * bound volume controls
1449  *
1450  * bind multiple volumes (# indices, from 0)
1451  */
1452
1453 #define AMP_VAL_IDX_SHIFT       19
1454 #define AMP_VAL_IDX_MASK        (0x0f<<19)
1455
1456 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1457                                   struct snd_ctl_elem_value *ucontrol)
1458 {
1459         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1460         unsigned long pval;
1461         int err;
1462
1463         mutex_lock(&codec->control_mutex);
1464         pval = kcontrol->private_value;
1465         kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1466         err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1467         kcontrol->private_value = pval;
1468         mutex_unlock(&codec->control_mutex);
1469         return err;
1470 }
1471 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1472
1473 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1474                                   struct snd_ctl_elem_value *ucontrol)
1475 {
1476         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1477         unsigned long pval;
1478         int i, indices, err = 0, change = 0;
1479
1480         mutex_lock(&codec->control_mutex);
1481         pval = kcontrol->private_value;
1482         indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1483         for (i = 0; i < indices; i++) {
1484                 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1485                         (i << AMP_VAL_IDX_SHIFT);
1486                 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1487                 if (err < 0)
1488                         break;
1489                 change |= err;
1490         }
1491         kcontrol->private_value = pval;
1492         mutex_unlock(&codec->control_mutex);
1493         return err < 0 ? err : change;
1494 }
1495 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1496
1497 /*
1498  * generic bound volume/swtich controls
1499  */
1500 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1501                                  struct snd_ctl_elem_info *uinfo)
1502 {
1503         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1504         struct hda_bind_ctls *c;
1505         int err;
1506
1507         mutex_lock(&codec->control_mutex);
1508         c = (struct hda_bind_ctls *)kcontrol->private_value;
1509         kcontrol->private_value = *c->values;
1510         err = c->ops->info(kcontrol, uinfo);
1511         kcontrol->private_value = (long)c;
1512         mutex_unlock(&codec->control_mutex);
1513         return err;
1514 }
1515 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1516
1517 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1518                                 struct snd_ctl_elem_value *ucontrol)
1519 {
1520         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1521         struct hda_bind_ctls *c;
1522         int err;
1523
1524         mutex_lock(&codec->control_mutex);
1525         c = (struct hda_bind_ctls *)kcontrol->private_value;
1526         kcontrol->private_value = *c->values;
1527         err = c->ops->get(kcontrol, ucontrol);
1528         kcontrol->private_value = (long)c;
1529         mutex_unlock(&codec->control_mutex);
1530         return err;
1531 }
1532 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1533
1534 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1535                                 struct snd_ctl_elem_value *ucontrol)
1536 {
1537         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1538         struct hda_bind_ctls *c;
1539         unsigned long *vals;
1540         int err = 0, change = 0;
1541
1542         mutex_lock(&codec->control_mutex);
1543         c = (struct hda_bind_ctls *)kcontrol->private_value;
1544         for (vals = c->values; *vals; vals++) {
1545                 kcontrol->private_value = *vals;
1546                 err = c->ops->put(kcontrol, ucontrol);
1547                 if (err < 0)
1548                         break;
1549                 change |= err;
1550         }
1551         kcontrol->private_value = (long)c;
1552         mutex_unlock(&codec->control_mutex);
1553         return err < 0 ? err : change;
1554 }
1555 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1556
1557 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1558                            unsigned int size, unsigned int __user *tlv)
1559 {
1560         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1561         struct hda_bind_ctls *c;
1562         int err;
1563
1564         mutex_lock(&codec->control_mutex);
1565         c = (struct hda_bind_ctls *)kcontrol->private_value;
1566         kcontrol->private_value = *c->values;
1567         err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1568         kcontrol->private_value = (long)c;
1569         mutex_unlock(&codec->control_mutex);
1570         return err;
1571 }
1572 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1573
1574 struct hda_ctl_ops snd_hda_bind_vol = {
1575         .info = snd_hda_mixer_amp_volume_info,
1576         .get = snd_hda_mixer_amp_volume_get,
1577         .put = snd_hda_mixer_amp_volume_put,
1578         .tlv = snd_hda_mixer_amp_tlv
1579 };
1580 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1581
1582 struct hda_ctl_ops snd_hda_bind_sw = {
1583         .info = snd_hda_mixer_amp_switch_info,
1584         .get = snd_hda_mixer_amp_switch_get,
1585         .put = snd_hda_mixer_amp_switch_put,
1586         .tlv = snd_hda_mixer_amp_tlv
1587 };
1588 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1589
1590 /*
1591  * SPDIF out controls
1592  */
1593
1594 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1595                                    struct snd_ctl_elem_info *uinfo)
1596 {
1597         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1598         uinfo->count = 1;
1599         return 0;
1600 }
1601
1602 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1603                                    struct snd_ctl_elem_value *ucontrol)
1604 {
1605         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1606                                            IEC958_AES0_NONAUDIO |
1607                                            IEC958_AES0_CON_EMPHASIS_5015 |
1608                                            IEC958_AES0_CON_NOT_COPYRIGHT;
1609         ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1610                                            IEC958_AES1_CON_ORIGINAL;
1611         return 0;
1612 }
1613
1614 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1615                                    struct snd_ctl_elem_value *ucontrol)
1616 {
1617         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1618                                            IEC958_AES0_NONAUDIO |
1619                                            IEC958_AES0_PRO_EMPHASIS_5015;
1620         return 0;
1621 }
1622
1623 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1624                                      struct snd_ctl_elem_value *ucontrol)
1625 {
1626         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1627
1628         ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1629         ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1630         ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1631         ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1632
1633         return 0;
1634 }
1635
1636 /* convert from SPDIF status bits to HDA SPDIF bits
1637  * bit 0 (DigEn) is always set zero (to be filled later)
1638  */
1639 static unsigned short convert_from_spdif_status(unsigned int sbits)
1640 {
1641         unsigned short val = 0;
1642
1643         if (sbits & IEC958_AES0_PROFESSIONAL)
1644                 val |= AC_DIG1_PROFESSIONAL;
1645         if (sbits & IEC958_AES0_NONAUDIO)
1646                 val |= AC_DIG1_NONAUDIO;
1647         if (sbits & IEC958_AES0_PROFESSIONAL) {
1648                 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1649                     IEC958_AES0_PRO_EMPHASIS_5015)
1650                         val |= AC_DIG1_EMPHASIS;
1651         } else {
1652                 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1653                     IEC958_AES0_CON_EMPHASIS_5015)
1654                         val |= AC_DIG1_EMPHASIS;
1655                 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1656                         val |= AC_DIG1_COPYRIGHT;
1657                 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1658                         val |= AC_DIG1_LEVEL;
1659                 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1660         }
1661         return val;
1662 }
1663
1664 /* convert to SPDIF status bits from HDA SPDIF bits
1665  */
1666 static unsigned int convert_to_spdif_status(unsigned short val)
1667 {
1668         unsigned int sbits = 0;
1669
1670         if (val & AC_DIG1_NONAUDIO)
1671                 sbits |= IEC958_AES0_NONAUDIO;
1672         if (val & AC_DIG1_PROFESSIONAL)
1673                 sbits |= IEC958_AES0_PROFESSIONAL;
1674         if (sbits & IEC958_AES0_PROFESSIONAL) {
1675                 if (sbits & AC_DIG1_EMPHASIS)
1676                         sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1677         } else {
1678                 if (val & AC_DIG1_EMPHASIS)
1679                         sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1680                 if (!(val & AC_DIG1_COPYRIGHT))
1681                         sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1682                 if (val & AC_DIG1_LEVEL)
1683                         sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1684                 sbits |= val & (0x7f << 8);
1685         }
1686         return sbits;
1687 }
1688
1689 /* set digital convert verbs both for the given NID and its slaves */
1690 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1691                         int verb, int val)
1692 {
1693         hda_nid_t *d;
1694
1695         snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1696         d = codec->slave_dig_outs;
1697         if (!d)
1698                 return;
1699         for (; *d; d++)
1700                 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1701 }
1702
1703 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1704                                        int dig1, int dig2)
1705 {
1706         if (dig1 != -1)
1707                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1708         if (dig2 != -1)
1709                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
1710 }
1711
1712 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1713                                      struct snd_ctl_elem_value *ucontrol)
1714 {
1715         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1716         hda_nid_t nid = kcontrol->private_value;
1717         unsigned short val;
1718         int change;
1719
1720         mutex_lock(&codec->spdif_mutex);
1721         codec->spdif_status = ucontrol->value.iec958.status[0] |
1722                 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1723                 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1724                 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1725         val = convert_from_spdif_status(codec->spdif_status);
1726         val |= codec->spdif_ctls & 1;
1727         change = codec->spdif_ctls != val;
1728         codec->spdif_ctls = val;
1729
1730         if (change)
1731                 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
1732
1733         mutex_unlock(&codec->spdif_mutex);
1734         return change;
1735 }
1736
1737 #define snd_hda_spdif_out_switch_info   snd_ctl_boolean_mono_info
1738
1739 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1740                                         struct snd_ctl_elem_value *ucontrol)
1741 {
1742         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1743
1744         ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1745         return 0;
1746 }
1747
1748 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1749                                         struct snd_ctl_elem_value *ucontrol)
1750 {
1751         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1752         hda_nid_t nid = kcontrol->private_value;
1753         unsigned short val;
1754         int change;
1755
1756         mutex_lock(&codec->spdif_mutex);
1757         val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1758         if (ucontrol->value.integer.value[0])
1759                 val |= AC_DIG1_ENABLE;
1760         change = codec->spdif_ctls != val;
1761         if (change) {
1762                 codec->spdif_ctls = val;
1763                 set_dig_out_convert(codec, nid, val & 0xff, -1);
1764                 /* unmute amp switch (if any) */
1765                 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1766                     (val & AC_DIG1_ENABLE))
1767                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
1768                                                  HDA_AMP_MUTE, 0);
1769         }
1770         mutex_unlock(&codec->spdif_mutex);
1771         return change;
1772 }
1773
1774 static struct snd_kcontrol_new dig_mixes[] = {
1775         {
1776                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1777                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1778                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1779                 .info = snd_hda_spdif_mask_info,
1780                 .get = snd_hda_spdif_cmask_get,
1781         },
1782         {
1783                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1784                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1785                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
1786                 .info = snd_hda_spdif_mask_info,
1787                 .get = snd_hda_spdif_pmask_get,
1788         },
1789         {
1790                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1791                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1792                 .info = snd_hda_spdif_mask_info,
1793                 .get = snd_hda_spdif_default_get,
1794                 .put = snd_hda_spdif_default_put,
1795         },
1796         {
1797                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1798                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
1799                 .info = snd_hda_spdif_out_switch_info,
1800                 .get = snd_hda_spdif_out_switch_get,
1801                 .put = snd_hda_spdif_out_switch_put,
1802         },
1803         { } /* end */
1804 };
1805
1806 #define SPDIF_MAX_IDX   4       /* 4 instances should be enough to probe */
1807
1808 /**
1809  * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
1810  * @codec: the HDA codec
1811  * @nid: audio out widget NID
1812  *
1813  * Creates controls related with the SPDIF output.
1814  * Called from each patch supporting the SPDIF out.
1815  *
1816  * Returns 0 if successful, or a negative error code.
1817  */
1818 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
1819 {
1820         int err;
1821         struct snd_kcontrol *kctl;
1822         struct snd_kcontrol_new *dig_mix;
1823         int idx;
1824
1825         for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
1826                 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
1827                                              idx))
1828                         break;
1829         }
1830         if (idx >= SPDIF_MAX_IDX) {
1831                 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
1832                 return -EBUSY;
1833         }
1834         for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
1835                 kctl = snd_ctl_new1(dig_mix, codec);
1836                 if (!kctl)
1837                         return -ENOMEM;
1838                 kctl->id.index = idx;
1839                 kctl->private_value = nid;
1840                 err = snd_hda_ctl_add(codec, kctl);
1841                 if (err < 0)
1842                         return err;
1843         }
1844         codec->spdif_ctls =
1845                 snd_hda_codec_read(codec, nid, 0,
1846                                    AC_VERB_GET_DIGI_CONVERT_1, 0);
1847         codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
1848         return 0;
1849 }
1850 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
1851
1852 /*
1853  * SPDIF sharing with analog output
1854  */
1855 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
1856                               struct snd_ctl_elem_value *ucontrol)
1857 {
1858         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
1859         ucontrol->value.integer.value[0] = mout->share_spdif;
1860         return 0;
1861 }
1862
1863 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
1864                               struct snd_ctl_elem_value *ucontrol)
1865 {
1866         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
1867         mout->share_spdif = !!ucontrol->value.integer.value[0];
1868         return 0;
1869 }
1870
1871 static struct snd_kcontrol_new spdif_share_sw = {
1872         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1873         .name = "IEC958 Default PCM Playback Switch",
1874         .info = snd_ctl_boolean_mono_info,
1875         .get = spdif_share_sw_get,
1876         .put = spdif_share_sw_put,
1877 };
1878
1879 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
1880                                   struct hda_multi_out *mout)
1881 {
1882         if (!mout->dig_out_nid)
1883                 return 0;
1884         /* ATTENTION: here mout is passed as private_data, instead of codec */
1885         return snd_hda_ctl_add(codec,
1886                            snd_ctl_new1(&spdif_share_sw, mout));
1887 }
1888 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
1889
1890 /*
1891  * SPDIF input
1892  */
1893
1894 #define snd_hda_spdif_in_switch_info    snd_hda_spdif_out_switch_info
1895
1896 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
1897                                        struct snd_ctl_elem_value *ucontrol)
1898 {
1899         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1900
1901         ucontrol->value.integer.value[0] = codec->spdif_in_enable;
1902         return 0;
1903 }
1904
1905 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
1906                                        struct snd_ctl_elem_value *ucontrol)
1907 {
1908         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1909         hda_nid_t nid = kcontrol->private_value;
1910         unsigned int val = !!ucontrol->value.integer.value[0];
1911         int change;
1912
1913         mutex_lock(&codec->spdif_mutex);
1914         change = codec->spdif_in_enable != val;
1915         if (change) {
1916                 codec->spdif_in_enable = val;
1917                 snd_hda_codec_write_cache(codec, nid, 0,
1918                                           AC_VERB_SET_DIGI_CONVERT_1, val);
1919         }
1920         mutex_unlock(&codec->spdif_mutex);
1921         return change;
1922 }
1923
1924 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
1925                                        struct snd_ctl_elem_value *ucontrol)
1926 {
1927         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1928         hda_nid_t nid = kcontrol->private_value;
1929         unsigned short val;
1930         unsigned int sbits;
1931
1932         val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
1933         sbits = convert_to_spdif_status(val);
1934         ucontrol->value.iec958.status[0] = sbits;
1935         ucontrol->value.iec958.status[1] = sbits >> 8;
1936         ucontrol->value.iec958.status[2] = sbits >> 16;
1937         ucontrol->value.iec958.status[3] = sbits >> 24;
1938         return 0;
1939 }
1940
1941 static struct snd_kcontrol_new dig_in_ctls[] = {
1942         {
1943                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1944                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
1945                 .info = snd_hda_spdif_in_switch_info,
1946                 .get = snd_hda_spdif_in_switch_get,
1947                 .put = snd_hda_spdif_in_switch_put,
1948         },
1949         {
1950                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1951                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1952                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
1953                 .info = snd_hda_spdif_mask_info,
1954                 .get = snd_hda_spdif_in_status_get,
1955         },
1956         { } /* end */
1957 };
1958
1959 /**
1960  * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
1961  * @codec: the HDA codec
1962  * @nid: audio in widget NID
1963  *
1964  * Creates controls related with the SPDIF input.
1965  * Called from each patch supporting the SPDIF in.
1966  *
1967  * Returns 0 if successful, or a negative error code.
1968  */
1969 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
1970 {
1971         int err;
1972         struct snd_kcontrol *kctl;
1973         struct snd_kcontrol_new *dig_mix;
1974         int idx;
1975
1976         for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
1977                 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
1978                                              idx))
1979                         break;
1980         }
1981         if (idx >= SPDIF_MAX_IDX) {
1982                 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
1983                 return -EBUSY;
1984         }
1985         for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
1986                 kctl = snd_ctl_new1(dig_mix, codec);
1987                 if (!kctl)
1988                         return -ENOMEM;
1989                 kctl->private_value = nid;
1990                 err = snd_hda_ctl_add(codec, kctl);
1991                 if (err < 0)
1992                         return err;
1993         }
1994         codec->spdif_in_enable =
1995                 snd_hda_codec_read(codec, nid, 0,
1996                                    AC_VERB_GET_DIGI_CONVERT_1, 0) &
1997                 AC_DIG1_ENABLE;
1998         return 0;
1999 }
2000 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2001
2002 #ifdef SND_HDA_NEEDS_RESUME
2003 /*
2004  * command cache
2005  */
2006
2007 /* build a 32bit cache key with the widget id and the command parameter */
2008 #define build_cmd_cache_key(nid, verb)  ((verb << 8) | nid)
2009 #define get_cmd_cache_nid(key)          ((key) & 0xff)
2010 #define get_cmd_cache_cmd(key)          (((key) >> 8) & 0xffff)
2011
2012 /**
2013  * snd_hda_codec_write_cache - send a single command with caching
2014  * @codec: the HDA codec
2015  * @nid: NID to send the command
2016  * @direct: direct flag
2017  * @verb: the verb to send
2018  * @parm: the parameter for the verb
2019  *
2020  * Send a single command without waiting for response.
2021  *
2022  * Returns 0 if successful, or a negative error code.
2023  */
2024 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2025                               int direct, unsigned int verb, unsigned int parm)
2026 {
2027         struct hda_bus *bus = codec->bus;
2028         unsigned int res;
2029         int err;
2030
2031         res = make_codec_cmd(codec, nid, direct, verb, parm);
2032         snd_hda_power_up(codec);
2033         mutex_lock(&bus->cmd_mutex);
2034         err = bus->ops.command(bus, res);
2035         if (!err) {
2036                 struct hda_cache_head *c;
2037                 u32 key = build_cmd_cache_key(nid, verb);
2038                 c = get_alloc_hash(&codec->cmd_cache, key);
2039                 if (c)
2040                         c->val = parm;
2041         }
2042         mutex_unlock(&bus->cmd_mutex);
2043         snd_hda_power_down(codec);
2044         return err;
2045 }
2046 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2047
2048 /* resume the all commands from the cache */
2049 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2050 {
2051         struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2052         int i;
2053
2054         for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2055                 u32 key = buffer->key;
2056                 if (!key)
2057                         continue;
2058                 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2059                                     get_cmd_cache_cmd(key), buffer->val);
2060         }
2061 }
2062 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2063
2064 /**
2065  * snd_hda_sequence_write_cache - sequence writes with caching
2066  * @codec: the HDA codec
2067  * @seq: VERB array to send
2068  *
2069  * Send the commands sequentially from the given array.
2070  * Thte commands are recorded on cache for power-save and resume.
2071  * The array must be terminated with NID=0.
2072  */
2073 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2074                                   const struct hda_verb *seq)
2075 {
2076         for (; seq->nid; seq++)
2077                 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2078                                           seq->param);
2079 }
2080 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2081 #endif /* SND_HDA_NEEDS_RESUME */
2082
2083 /*
2084  * set power state of the codec
2085  */
2086 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2087                                 unsigned int power_state)
2088 {
2089         hda_nid_t nid;
2090         int i;
2091
2092         snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2093                             power_state);
2094         msleep(10); /* partial workaround for "azx_get_response timeout" */
2095
2096         nid = codec->start_nid;
2097         for (i = 0; i < codec->num_nodes; i++, nid++) {
2098                 unsigned int wcaps = get_wcaps(codec, nid);
2099                 if (wcaps & AC_WCAP_POWER) {
2100                         unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
2101                                 AC_WCAP_TYPE_SHIFT;
2102                         if (wid_type == AC_WID_PIN) {
2103                                 unsigned int pincap;
2104                                 /*
2105                                  * don't power down the widget if it controls
2106                                  * eapd and EAPD_BTLENABLE is set.
2107                                  */
2108                                 pincap = snd_hda_param_read(codec, nid,
2109                                                             AC_PAR_PIN_CAP);
2110                                 if (pincap & AC_PINCAP_EAPD) {
2111                                         int eapd = snd_hda_codec_read(codec,
2112                                                 nid, 0,
2113                                                 AC_VERB_GET_EAPD_BTLENABLE, 0);
2114                                         eapd &= 0x02;
2115                                         if (power_state == AC_PWRST_D3 && eapd)
2116                                                 continue;
2117                                 }
2118                         }
2119                         snd_hda_codec_write(codec, nid, 0,
2120                                             AC_VERB_SET_POWER_STATE,
2121                                             power_state);
2122                 }
2123         }
2124
2125         if (power_state == AC_PWRST_D0) {
2126                 unsigned long end_time;
2127                 int state;
2128                 msleep(10);
2129                 /* wait until the codec reachs to D0 */
2130                 end_time = jiffies + msecs_to_jiffies(500);
2131                 do {
2132                         state = snd_hda_codec_read(codec, fg, 0,
2133                                                    AC_VERB_GET_POWER_STATE, 0);
2134                         if (state == power_state)
2135                                 break;
2136                         msleep(1);
2137                 } while (time_after_eq(end_time, jiffies));
2138         }
2139 }
2140
2141 #ifdef CONFIG_SND_HDA_HWDEP
2142 /* execute additional init verbs */
2143 static void hda_exec_init_verbs(struct hda_codec *codec)
2144 {
2145         if (codec->init_verbs.list)
2146                 snd_hda_sequence_write(codec, codec->init_verbs.list);
2147 }
2148 #else
2149 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2150 #endif
2151
2152 #ifdef SND_HDA_NEEDS_RESUME
2153 /*
2154  * call suspend and power-down; used both from PM and power-save
2155  */
2156 static void hda_call_codec_suspend(struct hda_codec *codec)
2157 {
2158         if (codec->patch_ops.suspend)
2159                 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2160         hda_set_power_state(codec,
2161                             codec->afg ? codec->afg : codec->mfg,
2162                             AC_PWRST_D3);
2163 #ifdef CONFIG_SND_HDA_POWER_SAVE
2164         cancel_delayed_work(&codec->power_work);
2165         codec->power_on = 0;
2166         codec->power_transition = 0;
2167 #endif
2168 }
2169
2170 /*
2171  * kick up codec; used both from PM and power-save
2172  */
2173 static void hda_call_codec_resume(struct hda_codec *codec)
2174 {
2175         hda_set_power_state(codec,
2176                             codec->afg ? codec->afg : codec->mfg,
2177                             AC_PWRST_D0);
2178         hda_exec_init_verbs(codec);
2179         if (codec->patch_ops.resume)
2180                 codec->patch_ops.resume(codec);
2181         else {
2182                 if (codec->patch_ops.init)
2183                         codec->patch_ops.init(codec);
2184                 snd_hda_codec_resume_amp(codec);
2185                 snd_hda_codec_resume_cache(codec);
2186         }
2187 }
2188 #endif /* SND_HDA_NEEDS_RESUME */
2189
2190
2191 /**
2192  * snd_hda_build_controls - build mixer controls
2193  * @bus: the BUS
2194  *
2195  * Creates mixer controls for each codec included in the bus.
2196  *
2197  * Returns 0 if successful, otherwise a negative error code.
2198  */
2199 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2200 {
2201         struct hda_codec *codec;
2202
2203         list_for_each_entry(codec, &bus->codec_list, list) {
2204                 int err = snd_hda_codec_build_controls(codec);
2205                 if (err < 0)
2206                         return err;
2207         }
2208         return 0;
2209 }
2210 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2211
2212 int snd_hda_codec_build_controls(struct hda_codec *codec)
2213 {
2214         int err = 0;
2215         /* fake as if already powered-on */
2216         hda_keep_power_on(codec);
2217         /* then fire up */
2218         hda_set_power_state(codec,
2219                             codec->afg ? codec->afg : codec->mfg,
2220                             AC_PWRST_D0);
2221         hda_exec_init_verbs(codec);
2222         /* continue to initialize... */
2223         if (codec->patch_ops.init)
2224                 err = codec->patch_ops.init(codec);
2225         if (!err && codec->patch_ops.build_controls)
2226                 err = codec->patch_ops.build_controls(codec);
2227         snd_hda_power_down(codec);
2228         if (err < 0)
2229                 return err;
2230         return 0;
2231 }
2232
2233 /*
2234  * stream formats
2235  */
2236 struct hda_rate_tbl {
2237         unsigned int hz;
2238         unsigned int alsa_bits;
2239         unsigned int hda_fmt;
2240 };
2241
2242 static struct hda_rate_tbl rate_bits[] = {
2243         /* rate in Hz, ALSA rate bitmask, HDA format value */
2244
2245         /* autodetected value used in snd_hda_query_supported_pcm */
2246         { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2247         { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2248         { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2249         { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2250         { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2251         { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2252         { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2253         { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2254         { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2255         { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2256         { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2257 #define AC_PAR_PCM_RATE_BITS    11
2258         /* up to bits 10, 384kHZ isn't supported properly */
2259
2260         /* not autodetected value */
2261         { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2262
2263         { 0 } /* terminator */
2264 };
2265
2266 /**
2267  * snd_hda_calc_stream_format - calculate format bitset
2268  * @rate: the sample rate
2269  * @channels: the number of channels
2270  * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2271  * @maxbps: the max. bps
2272  *
2273  * Calculate the format bitset from the given rate, channels and th PCM format.
2274  *
2275  * Return zero if invalid.
2276  */
2277 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2278                                         unsigned int channels,
2279                                         unsigned int format,
2280                                         unsigned int maxbps)
2281 {
2282         int i;
2283         unsigned int val = 0;
2284
2285         for (i = 0; rate_bits[i].hz; i++)
2286                 if (rate_bits[i].hz == rate) {
2287                         val = rate_bits[i].hda_fmt;
2288                         break;
2289                 }
2290         if (!rate_bits[i].hz) {
2291                 snd_printdd("invalid rate %d\n", rate);
2292                 return 0;
2293         }
2294
2295         if (channels == 0 || channels > 8) {
2296                 snd_printdd("invalid channels %d\n", channels);
2297                 return 0;
2298         }
2299         val |= channels - 1;
2300
2301         switch (snd_pcm_format_width(format)) {
2302         case 8:  val |= 0x00; break;
2303         case 16: val |= 0x10; break;
2304         case 20:
2305         case 24:
2306         case 32:
2307                 if (maxbps >= 32)
2308                         val |= 0x40;
2309                 else if (maxbps >= 24)
2310                         val |= 0x30;
2311                 else
2312                         val |= 0x20;
2313                 break;
2314         default:
2315                 snd_printdd("invalid format width %d\n",
2316                             snd_pcm_format_width(format));
2317                 return 0;
2318         }
2319
2320         return val;
2321 }
2322 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2323
2324 /**
2325  * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2326  * @codec: the HDA codec
2327  * @nid: NID to query
2328  * @ratesp: the pointer to store the detected rate bitflags
2329  * @formatsp: the pointer to store the detected formats
2330  * @bpsp: the pointer to store the detected format widths
2331  *
2332  * Queries the supported PCM rates and formats.  The NULL @ratesp, @formatsp
2333  * or @bsps argument is ignored.
2334  *
2335  * Returns 0 if successful, otherwise a negative error code.
2336  */
2337 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2338                                 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2339 {
2340         int i;
2341         unsigned int val, streams;
2342
2343         val = 0;
2344         if (nid != codec->afg &&
2345             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2346                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2347                 if (val == -1)
2348                         return -EIO;
2349         }
2350         if (!val)
2351                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2352
2353         if (ratesp) {
2354                 u32 rates = 0;
2355                 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2356                         if (val & (1 << i))
2357                                 rates |= rate_bits[i].alsa_bits;
2358                 }
2359                 *ratesp = rates;
2360         }
2361
2362         if (formatsp || bpsp) {
2363                 u64 formats = 0;
2364                 unsigned int bps;
2365                 unsigned int wcaps;
2366
2367                 wcaps = get_wcaps(codec, nid);
2368                 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2369                 if (streams == -1)
2370                         return -EIO;
2371                 if (!streams) {
2372                         streams = snd_hda_param_read(codec, codec->afg,
2373                                                      AC_PAR_STREAM);
2374                         if (streams == -1)
2375                                 return -EIO;
2376                 }
2377
2378                 bps = 0;
2379                 if (streams & AC_SUPFMT_PCM) {
2380                         if (val & AC_SUPPCM_BITS_8) {
2381                                 formats |= SNDRV_PCM_FMTBIT_U8;
2382                                 bps = 8;
2383                         }
2384                         if (val & AC_SUPPCM_BITS_16) {
2385                                 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2386                                 bps = 16;
2387                         }
2388                         if (wcaps & AC_WCAP_DIGITAL) {
2389                                 if (val & AC_SUPPCM_BITS_32)
2390                                         formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2391                                 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2392                                         formats |= SNDRV_PCM_FMTBIT_S32_LE;
2393                                 if (val & AC_SUPPCM_BITS_24)
2394                                         bps = 24;
2395                                 else if (val & AC_SUPPCM_BITS_20)
2396                                         bps = 20;
2397                         } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2398                                           AC_SUPPCM_BITS_32)) {
2399                                 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2400                                 if (val & AC_SUPPCM_BITS_32)
2401                                         bps = 32;
2402                                 else if (val & AC_SUPPCM_BITS_24)
2403                                         bps = 24;
2404                                 else if (val & AC_SUPPCM_BITS_20)
2405                                         bps = 20;
2406                         }
2407                 }
2408                 else if (streams == AC_SUPFMT_FLOAT32) {
2409                         /* should be exclusive */
2410                         formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2411                         bps = 32;
2412                 } else if (streams == AC_SUPFMT_AC3) {
2413                         /* should be exclusive */
2414                         /* temporary hack: we have still no proper support
2415                          * for the direct AC3 stream...
2416                          */
2417                         formats |= SNDRV_PCM_FMTBIT_U8;
2418                         bps = 8;
2419                 }
2420                 if (formatsp)
2421                         *formatsp = formats;
2422                 if (bpsp)
2423                         *bpsp = bps;
2424         }
2425
2426         return 0;
2427 }
2428
2429 /**
2430  * snd_hda_is_supported_format - check whether the given node supports
2431  * the format val
2432  *
2433  * Returns 1 if supported, 0 if not.
2434  */
2435 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2436                                 unsigned int format)
2437 {
2438         int i;
2439         unsigned int val = 0, rate, stream;
2440
2441         if (nid != codec->afg &&
2442             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2443                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2444                 if (val == -1)
2445                         return 0;
2446         }
2447         if (!val) {
2448                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2449                 if (val == -1)
2450                         return 0;
2451         }
2452
2453         rate = format & 0xff00;
2454         for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2455                 if (rate_bits[i].hda_fmt == rate) {
2456                         if (val & (1 << i))
2457                                 break;
2458                         return 0;
2459                 }
2460         if (i >= AC_PAR_PCM_RATE_BITS)
2461                 return 0;
2462
2463         stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2464         if (stream == -1)
2465                 return 0;
2466         if (!stream && nid != codec->afg)
2467                 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2468         if (!stream || stream == -1)
2469                 return 0;
2470
2471         if (stream & AC_SUPFMT_PCM) {
2472                 switch (format & 0xf0) {
2473                 case 0x00:
2474                         if (!(val & AC_SUPPCM_BITS_8))
2475                                 return 0;
2476                         break;
2477                 case 0x10:
2478                         if (!(val & AC_SUPPCM_BITS_16))
2479                                 return 0;
2480                         break;
2481                 case 0x20:
2482                         if (!(val & AC_SUPPCM_BITS_20))
2483                                 return 0;
2484                         break;
2485                 case 0x30:
2486                         if (!(val & AC_SUPPCM_BITS_24))
2487                                 return 0;
2488                         break;
2489                 case 0x40:
2490                         if (!(val & AC_SUPPCM_BITS_32))
2491                                 return 0;
2492                         break;
2493                 default:
2494                         return 0;
2495                 }
2496         } else {
2497                 /* FIXME: check for float32 and AC3? */
2498         }
2499
2500         return 1;
2501 }
2502 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2503
2504 /*
2505  * PCM stuff
2506  */
2507 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2508                                       struct hda_codec *codec,
2509                                       struct snd_pcm_substream *substream)
2510 {
2511         return 0;
2512 }
2513
2514 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2515                                    struct hda_codec *codec,
2516                                    unsigned int stream_tag,
2517                                    unsigned int format,
2518                                    struct snd_pcm_substream *substream)
2519 {
2520         snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2521         return 0;
2522 }
2523
2524 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2525                                    struct hda_codec *codec,
2526                                    struct snd_pcm_substream *substream)
2527 {
2528         snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2529         return 0;
2530 }
2531
2532 static int set_pcm_default_values(struct hda_codec *codec,
2533                                   struct hda_pcm_stream *info)
2534 {
2535         /* query support PCM information from the given NID */
2536         if (info->nid && (!info->rates || !info->formats)) {
2537                 snd_hda_query_supported_pcm(codec, info->nid,
2538                                 info->rates ? NULL : &info->rates,
2539                                 info->formats ? NULL : &info->formats,
2540                                 info->maxbps ? NULL : &info->maxbps);
2541         }
2542         if (info->ops.open == NULL)
2543                 info->ops.open = hda_pcm_default_open_close;
2544         if (info->ops.close == NULL)
2545                 info->ops.close = hda_pcm_default_open_close;
2546         if (info->ops.prepare == NULL) {
2547                 if (snd_BUG_ON(!info->nid))
2548                         return -EINVAL;
2549                 info->ops.prepare = hda_pcm_default_prepare;
2550         }
2551         if (info->ops.cleanup == NULL) {
2552                 if (snd_BUG_ON(!info->nid))
2553                         return -EINVAL;
2554                 info->ops.cleanup = hda_pcm_default_cleanup;
2555         }
2556         return 0;
2557 }
2558
2559 /*
2560  * get the empty PCM device number to assign
2561  */
2562 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2563 {
2564         static const char *dev_name[HDA_PCM_NTYPES] = {
2565                 "Audio", "SPDIF", "HDMI", "Modem"
2566         };
2567         /* starting device index for each PCM type */
2568         static int dev_idx[HDA_PCM_NTYPES] = {
2569                 [HDA_PCM_TYPE_AUDIO] = 0,
2570                 [HDA_PCM_TYPE_SPDIF] = 1,
2571                 [HDA_PCM_TYPE_HDMI] = 3,
2572                 [HDA_PCM_TYPE_MODEM] = 6
2573         };
2574         /* normal audio device indices; not linear to keep compatibility */
2575         static int audio_idx[4] = { 0, 2, 4, 5 };
2576         int i, dev;
2577
2578         switch (type) {
2579         case HDA_PCM_TYPE_AUDIO:
2580                 for (i = 0; i < ARRAY_SIZE(audio_idx); i++) {
2581                         dev = audio_idx[i];
2582                         if (!test_bit(dev, bus->pcm_dev_bits))
2583                                 break;
2584                 }
2585                 if (i >= ARRAY_SIZE(audio_idx)) {
2586                         snd_printk(KERN_WARNING "Too many audio devices\n");
2587                         return -EAGAIN;
2588                 }
2589                 break;
2590         case HDA_PCM_TYPE_SPDIF:
2591         case HDA_PCM_TYPE_HDMI:
2592         case HDA_PCM_TYPE_MODEM:
2593                 dev = dev_idx[type];
2594                 if (test_bit(dev, bus->pcm_dev_bits)) {
2595                         snd_printk(KERN_WARNING "%s already defined\n",
2596                                    dev_name[type]);
2597                         return -EAGAIN;
2598                 }
2599                 break;
2600         default:
2601                 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2602                 return -EINVAL;
2603         }
2604         set_bit(dev, bus->pcm_dev_bits);
2605         return dev;
2606 }
2607
2608 /*
2609  * attach a new PCM stream
2610  */
2611 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2612 {
2613         struct hda_bus *bus = codec->bus;
2614         struct hda_pcm_stream *info;
2615         int stream, err;
2616
2617         if (snd_BUG_ON(!pcm->name))
2618                 return -EINVAL;
2619         for (stream = 0; stream < 2; stream++) {
2620                 info = &pcm->stream[stream];
2621                 if (info->substreams) {
2622                         err = set_pcm_default_values(codec, info);
2623                         if (err < 0)
2624                                 return err;
2625                 }
2626         }
2627         return bus->ops.attach_pcm(bus, codec, pcm);
2628 }
2629
2630 /* assign all PCMs of the given codec */
2631 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2632 {
2633         unsigned int pcm;
2634         int err;
2635
2636         if (!codec->num_pcms) {
2637                 if (!codec->patch_ops.build_pcms)
2638                         return 0;
2639                 err = codec->patch_ops.build_pcms(codec);
2640                 if (err < 0)
2641                         return err;
2642         }
2643         for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2644                 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2645                 int dev;
2646
2647                 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2648                         continue; /* no substreams assigned */
2649
2650                 if (!cpcm->pcm) {
2651                         dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2652                         if (dev < 0)
2653                                 return 0;
2654                         cpcm->device = dev;
2655                         err = snd_hda_attach_pcm(codec, cpcm);
2656                         if (err < 0)
2657                                 return err;
2658                 }
2659         }
2660         return 0;
2661 }
2662
2663 /**
2664  * snd_hda_build_pcms - build PCM information
2665  * @bus: the BUS
2666  *
2667  * Create PCM information for each codec included in the bus.
2668  *
2669  * The build_pcms codec patch is requested to set up codec->num_pcms and
2670  * codec->pcm_info properly.  The array is referred by the top-level driver
2671  * to create its PCM instances.
2672  * The allocated codec->pcm_info should be released in codec->patch_ops.free
2673  * callback.
2674  *
2675  * At least, substreams, channels_min and channels_max must be filled for
2676  * each stream.  substreams = 0 indicates that the stream doesn't exist.
2677  * When rates and/or formats are zero, the supported values are queried
2678  * from the given nid.  The nid is used also by the default ops.prepare
2679  * and ops.cleanup callbacks.
2680  *
2681  * The driver needs to call ops.open in its open callback.  Similarly,
2682  * ops.close is supposed to be called in the close callback.
2683  * ops.prepare should be called in the prepare or hw_params callback
2684  * with the proper parameters for set up.
2685  * ops.cleanup should be called in hw_free for clean up of streams.
2686  *
2687  * This function returns 0 if successfull, or a negative error code.
2688  */
2689 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2690 {
2691         struct hda_codec *codec;
2692
2693         list_for_each_entry(codec, &bus->codec_list, list) {
2694                 int err = snd_hda_codec_build_pcms(codec);
2695                 if (err < 0)
2696                         return err;
2697         }
2698         return 0;
2699 }
2700 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
2701
2702 /**
2703  * snd_hda_check_board_config - compare the current codec with the config table
2704  * @codec: the HDA codec
2705  * @num_configs: number of config enums
2706  * @models: array of model name strings
2707  * @tbl: configuration table, terminated by null entries
2708  *
2709  * Compares the modelname or PCI subsystem id of the current codec with the
2710  * given configuration table.  If a matching entry is found, returns its
2711  * config value (supposed to be 0 or positive).
2712  *
2713  * If no entries are matching, the function returns a negative value.
2714  */
2715 int snd_hda_check_board_config(struct hda_codec *codec,
2716                                int num_configs, const char **models,
2717                                const struct snd_pci_quirk *tbl)
2718 {
2719         if (codec->modelname && models) {
2720                 int i;
2721                 for (i = 0; i < num_configs; i++) {
2722                         if (models[i] &&
2723                             !strcmp(codec->modelname, models[i])) {
2724                                 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2725                                            "selected\n", models[i]);
2726                                 return i;
2727                         }
2728                 }
2729         }
2730
2731         if (!codec->bus->pci || !tbl)
2732                 return -1;
2733
2734         tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
2735         if (!tbl)
2736                 return -1;
2737         if (tbl->value >= 0 && tbl->value < num_configs) {
2738 #ifdef CONFIG_SND_DEBUG_VERBOSE
2739                 char tmp[10];
2740                 const char *model = NULL;
2741                 if (models)
2742                         model = models[tbl->value];
2743                 if (!model) {
2744                         sprintf(tmp, "#%d", tbl->value);
2745                         model = tmp;
2746                 }
2747                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2748                             "for config %x:%x (%s)\n",
2749                             model, tbl->subvendor, tbl->subdevice,
2750                             (tbl->name ? tbl->name : "Unknown device"));
2751 #endif
2752                 return tbl->value;
2753         }
2754         return -1;
2755 }
2756 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
2757
2758 /**
2759  * snd_hda_check_board_codec_sid_config - compare the current codec
2760                                           subsystem ID with the
2761                                           config table
2762
2763            This is important for Gateway notebooks with SB450 HDA Audio
2764            where the vendor ID of the PCI device is:
2765                 ATI Technologies Inc SB450 HDA Audio [1002:437b]
2766            and the vendor/subvendor are found only at the codec.
2767
2768  * @codec: the HDA codec
2769  * @num_configs: number of config enums
2770  * @models: array of model name strings
2771  * @tbl: configuration table, terminated by null entries
2772  *
2773  * Compares the modelname or PCI subsystem id of the current codec with the
2774  * given configuration table.  If a matching entry is found, returns its
2775  * config value (supposed to be 0 or positive).
2776  *
2777  * If no entries are matching, the function returns a negative value.
2778  */
2779 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
2780                                int num_configs, const char **models,
2781                                const struct snd_pci_quirk *tbl)
2782 {
2783         const struct snd_pci_quirk *q;
2784
2785         /* Search for codec ID */
2786         for (q = tbl; q->subvendor; q++) {
2787                 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
2788
2789                 if (vendorid == codec->subsystem_id)
2790                         break;
2791         }
2792
2793         if (!q->subvendor)
2794                 return -1;
2795
2796         tbl = q;
2797
2798         if (tbl->value >= 0 && tbl->value < num_configs) {
2799 #ifdef CONFIG_SND_DEBUG_DETECT
2800                 char tmp[10];
2801                 const char *model = NULL;
2802                 if (models)
2803                         model = models[tbl->value];
2804                 if (!model) {
2805                         sprintf(tmp, "#%d", tbl->value);
2806                         model = tmp;
2807                 }
2808                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2809                             "for config %x:%x (%s)\n",
2810                             model, tbl->subvendor, tbl->subdevice,
2811                             (tbl->name ? tbl->name : "Unknown device"));
2812 #endif
2813                 return tbl->value;
2814         }
2815         return -1;
2816 }
2817 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
2818
2819 /**
2820  * snd_hda_add_new_ctls - create controls from the array
2821  * @codec: the HDA codec
2822  * @knew: the array of struct snd_kcontrol_new
2823  *
2824  * This helper function creates and add new controls in the given array.
2825  * The array must be terminated with an empty entry as terminator.
2826  *
2827  * Returns 0 if successful, or a negative error code.
2828  */
2829 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
2830 {
2831         int err;
2832
2833         for (; knew->name; knew++) {
2834                 struct snd_kcontrol *kctl;
2835                 kctl = snd_ctl_new1(knew, codec);
2836                 if (!kctl)
2837                         return -ENOMEM;
2838                 err = snd_hda_ctl_add(codec, kctl);
2839                 if (err < 0) {
2840                         if (!codec->addr)
2841                                 return err;
2842                         kctl = snd_ctl_new1(knew, codec);
2843                         if (!kctl)
2844                                 return -ENOMEM;
2845                         kctl->id.device = codec->addr;
2846                         err = snd_hda_ctl_add(codec, kctl);
2847                         if (err < 0)
2848                                 return err;
2849                 }
2850         }
2851         return 0;
2852 }
2853 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
2854
2855 #ifdef CONFIG_SND_HDA_POWER_SAVE
2856 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2857                                 unsigned int power_state);
2858
2859 static void hda_power_work(struct work_struct *work)
2860 {
2861         struct hda_codec *codec =
2862                 container_of(work, struct hda_codec, power_work.work);
2863         struct hda_bus *bus = codec->bus;
2864
2865         if (!codec->power_on || codec->power_count) {
2866                 codec->power_transition = 0;
2867                 return;
2868         }
2869
2870         hda_call_codec_suspend(codec);
2871         if (bus->ops.pm_notify)
2872                 bus->ops.pm_notify(bus);
2873 }
2874
2875 static void hda_keep_power_on(struct hda_codec *codec)
2876 {
2877         codec->power_count++;
2878         codec->power_on = 1;
2879 }
2880
2881 void snd_hda_power_up(struct hda_codec *codec)
2882 {
2883         struct hda_bus *bus = codec->bus;
2884
2885         codec->power_count++;
2886         if (codec->power_on || codec->power_transition)
2887                 return;
2888
2889         codec->power_on = 1;
2890         if (bus->ops.pm_notify)
2891                 bus->ops.pm_notify(bus);
2892         hda_call_codec_resume(codec);
2893         cancel_delayed_work(&codec->power_work);
2894         codec->power_transition = 0;
2895 }
2896 EXPORT_SYMBOL_HDA(snd_hda_power_up);
2897
2898 #define power_save(codec)       \
2899         ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
2900
2901 #define power_save(codec)       \
2902         ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
2903
2904 void snd_hda_power_down(struct hda_codec *codec)
2905 {
2906         --codec->power_count;
2907         if (!codec->power_on || codec->power_count || codec->power_transition)
2908                 return;
2909         if (power_save(codec)) {
2910                 codec->power_transition = 1; /* avoid reentrance */
2911                 queue_delayed_work(codec->bus->workq, &codec->power_work,
2912                                 msecs_to_jiffies(power_save(codec) * 1000));
2913         }
2914 }
2915 EXPORT_SYMBOL_HDA(snd_hda_power_down);
2916
2917 int snd_hda_check_amp_list_power(struct hda_codec *codec,
2918                                  struct hda_loopback_check *check,
2919                                  hda_nid_t nid)
2920 {
2921         struct hda_amp_list *p;
2922         int ch, v;
2923
2924         if (!check->amplist)
2925                 return 0;
2926         for (p = check->amplist; p->nid; p++) {
2927                 if (p->nid == nid)
2928                         break;
2929         }
2930         if (!p->nid)
2931                 return 0; /* nothing changed */
2932
2933         for (p = check->amplist; p->nid; p++) {
2934                 for (ch = 0; ch < 2; ch++) {
2935                         v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
2936                                                    p->idx);
2937                         if (!(v & HDA_AMP_MUTE) && v > 0) {
2938                                 if (!check->power_on) {
2939                                         check->power_on = 1;
2940                                         snd_hda_power_up(codec);
2941                                 }
2942                                 return 1;
2943                         }
2944                 }
2945         }
2946         if (check->power_on) {
2947                 check->power_on = 0;
2948                 snd_hda_power_down(codec);
2949         }
2950         return 0;
2951 }
2952 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
2953 #endif
2954
2955 /*
2956  * Channel mode helper
2957  */
2958 int snd_hda_ch_mode_info(struct hda_codec *codec,
2959                          struct snd_ctl_elem_info *uinfo,
2960                          const struct hda_channel_mode *chmode,
2961                          int num_chmodes)
2962 {
2963         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2964         uinfo->count = 1;
2965         uinfo->value.enumerated.items = num_chmodes;
2966         if (uinfo->value.enumerated.item >= num_chmodes)
2967                 uinfo->value.enumerated.item = num_chmodes - 1;
2968         sprintf(uinfo->value.enumerated.name, "%dch",
2969                 chmode[uinfo->value.enumerated.item].channels);
2970         return 0;
2971 }
2972 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
2973
2974 int snd_hda_ch_mode_get(struct hda_codec *codec,
2975                         struct snd_ctl_elem_value *ucontrol,
2976                         const struct hda_channel_mode *chmode,
2977                         int num_chmodes,
2978                         int max_channels)
2979 {
2980         int i;
2981
2982         for (i = 0; i < num_chmodes; i++) {
2983                 if (max_channels == chmode[i].channels) {
2984                         ucontrol->value.enumerated.item[0] = i;
2985                         break;
2986                 }
2987         }
2988         return 0;
2989 }
2990 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
2991
2992 int snd_hda_ch_mode_put(struct hda_codec *codec,
2993                         struct snd_ctl_elem_value *ucontrol,
2994                         const struct hda_channel_mode *chmode,
2995                         int num_chmodes,
2996                         int *max_channelsp)
2997 {
2998         unsigned int mode;
2999
3000         mode = ucontrol->value.enumerated.item[0];
3001         if (mode >= num_chmodes)
3002                 return -EINVAL;
3003         if (*max_channelsp == chmode[mode].channels)
3004                 return 0;
3005         /* change the current channel setting */
3006         *max_channelsp = chmode[mode].channels;
3007         if (chmode[mode].sequence)
3008                 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3009         return 1;
3010 }
3011 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3012
3013 /*
3014  * input MUX helper
3015  */
3016 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3017                            struct snd_ctl_elem_info *uinfo)
3018 {
3019         unsigned int index;
3020
3021         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3022         uinfo->count = 1;
3023         uinfo->value.enumerated.items = imux->num_items;
3024         if (!imux->num_items)
3025                 return 0;
3026         index = uinfo->value.enumerated.item;
3027         if (index >= imux->num_items)
3028                 index = imux->num_items - 1;
3029         strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3030         return 0;
3031 }
3032 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3033
3034 int snd_hda_input_mux_put(struct hda_codec *codec,
3035                           const struct hda_input_mux *imux,
3036                           struct snd_ctl_elem_value *ucontrol,
3037                           hda_nid_t nid,
3038                           unsigned int *cur_val)
3039 {
3040         unsigned int idx;
3041
3042         if (!imux->num_items)
3043                 return 0;
3044         idx = ucontrol->value.enumerated.item[0];
3045         if (idx >= imux->num_items)
3046                 idx = imux->num_items - 1;
3047         if (*cur_val == idx)
3048                 return 0;
3049         snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3050                                   imux->items[idx].index);
3051         *cur_val = idx;
3052         return 1;
3053 }
3054 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3055
3056
3057 /*
3058  * Multi-channel / digital-out PCM helper functions
3059  */
3060
3061 /* setup SPDIF output stream */
3062 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3063                                  unsigned int stream_tag, unsigned int format)
3064 {
3065         /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3066         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3067                 set_dig_out_convert(codec, nid, 
3068                                     codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3069                                     -1);
3070         snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3071         if (codec->slave_dig_outs) {
3072                 hda_nid_t *d;
3073                 for (d = codec->slave_dig_outs; *d; d++)
3074                         snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3075                                                    format);
3076         }
3077         /* turn on again (if needed) */
3078         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3079                 set_dig_out_convert(codec, nid,
3080                                     codec->spdif_ctls & 0xff, -1);
3081 }
3082
3083 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3084 {
3085         snd_hda_codec_cleanup_stream(codec, nid);
3086         if (codec->slave_dig_outs) {
3087                 hda_nid_t *d;
3088                 for (d = codec->slave_dig_outs; *d; d++)
3089                         snd_hda_codec_cleanup_stream(codec, *d);
3090         }
3091 }
3092
3093 /*
3094  * open the digital out in the exclusive mode
3095  */
3096 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3097                                struct hda_multi_out *mout)
3098 {
3099         mutex_lock(&codec->spdif_mutex);
3100         if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3101                 /* already opened as analog dup; reset it once */
3102                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3103         mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3104         mutex_unlock(&codec->spdif_mutex);
3105         return 0;
3106 }
3107 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3108
3109 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3110                                   struct hda_multi_out *mout,
3111                                   unsigned int stream_tag,
3112                                   unsigned int format,
3113                                   struct snd_pcm_substream *substream)
3114 {
3115         mutex_lock(&codec->spdif_mutex);
3116         setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3117         mutex_unlock(&codec->spdif_mutex);
3118         return 0;
3119 }
3120 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3121
3122 /*
3123  * release the digital out
3124  */
3125 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3126                                 struct hda_multi_out *mout)
3127 {
3128         mutex_lock(&codec->spdif_mutex);
3129         mout->dig_out_used = 0;
3130         mutex_unlock(&codec->spdif_mutex);
3131         return 0;
3132 }
3133 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3134
3135 /*
3136  * set up more restrictions for analog out
3137  */
3138 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3139                                   struct hda_multi_out *mout,
3140                                   struct snd_pcm_substream *substream,
3141                                   struct hda_pcm_stream *hinfo)
3142 {
3143         struct snd_pcm_runtime *runtime = substream->runtime;
3144         runtime->hw.channels_max = mout->max_channels;
3145         if (mout->dig_out_nid) {
3146                 if (!mout->analog_rates) {
3147                         mout->analog_rates = hinfo->rates;
3148                         mout->analog_formats = hinfo->formats;
3149                         mout->analog_maxbps = hinfo->maxbps;
3150                 } else {
3151                         runtime->hw.rates = mout->analog_rates;
3152                         runtime->hw.formats = mout->analog_formats;
3153                         hinfo->maxbps = mout->analog_maxbps;
3154                 }
3155                 if (!mout->spdif_rates) {
3156                         snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3157                                                     &mout->spdif_rates,
3158                                                     &mout->spdif_formats,
3159                                                     &mout->spdif_maxbps);
3160                 }
3161                 mutex_lock(&codec->spdif_mutex);
3162                 if (mout->share_spdif) {
3163                         runtime->hw.rates &= mout->spdif_rates;
3164                         runtime->hw.formats &= mout->spdif_formats;
3165                         if (mout->spdif_maxbps < hinfo->maxbps)
3166                                 hinfo->maxbps = mout->spdif_maxbps;
3167                 }
3168                 mutex_unlock(&codec->spdif_mutex);
3169         }
3170         return snd_pcm_hw_constraint_step(substream->runtime, 0,
3171                                           SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3172 }
3173 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3174
3175 /*
3176  * set up the i/o for analog out
3177  * when the digital out is available, copy the front out to digital out, too.
3178  */
3179 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
3180                                      struct hda_multi_out *mout,
3181                                      unsigned int stream_tag,
3182                                      unsigned int format,
3183                                      struct snd_pcm_substream *substream)
3184 {
3185         hda_nid_t *nids = mout->dac_nids;
3186         int chs = substream->runtime->channels;
3187         int i;
3188
3189         mutex_lock(&codec->spdif_mutex);
3190         if (mout->dig_out_nid && mout->share_spdif &&
3191             mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3192                 if (chs == 2 &&
3193                     snd_hda_is_supported_format(codec, mout->dig_out_nid,
3194                                                 format) &&
3195                     !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3196                         mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3197                         setup_dig_out_stream(codec, mout->dig_out_nid,
3198                                              stream_tag, format);
3199                 } else {
3200                         mout->dig_out_used = 0;
3201                         cleanup_dig_out_stream(codec, mout->dig_out_nid);
3202                 }
3203         }
3204         mutex_unlock(&codec->spdif_mutex);
3205
3206         /* front */
3207         snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3208                                    0, format);
3209         if (!mout->no_share_stream &&
3210             mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3211                 /* headphone out will just decode front left/right (stereo) */
3212                 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3213                                            0, format);
3214         /* extra outputs copied from front */
3215         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3216                 if (!mout->no_share_stream && mout->extra_out_nid[i])
3217                         snd_hda_codec_setup_stream(codec,
3218                                                    mout->extra_out_nid[i],
3219                                                    stream_tag, 0, format);
3220
3221         /* surrounds */
3222         for (i = 1; i < mout->num_dacs; i++) {
3223                 if (chs >= (i + 1) * 2) /* independent out */
3224                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3225                                                    i * 2, format);
3226                 else if (!mout->no_share_stream) /* copy front */
3227                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3228                                                    0, format);
3229         }
3230         return 0;
3231 }
3232 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3233
3234 /*
3235  * clean up the setting for analog out
3236  */
3237 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3238                                      struct hda_multi_out *mout)
3239 {
3240         hda_nid_t *nids = mout->dac_nids;
3241         int i;
3242
3243         for (i = 0; i < mout->num_dacs; i++)
3244                 snd_hda_codec_cleanup_stream(codec, nids[i]);
3245         if (mout->hp_nid)
3246                 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3247         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3248                 if (mout->extra_out_nid[i])
3249                         snd_hda_codec_cleanup_stream(codec,
3250                                                      mout->extra_out_nid[i]);
3251         mutex_lock(&codec->spdif_mutex);
3252         if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3253                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3254                 mout->dig_out_used = 0;
3255         }
3256         mutex_unlock(&codec->spdif_mutex);
3257         return 0;
3258 }
3259 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3260
3261 /*
3262  * Helper for automatic pin configuration
3263  */
3264
3265 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3266 {
3267         for (; *list; list++)
3268                 if (*list == nid)
3269                         return 1;
3270         return 0;
3271 }
3272
3273
3274 /*
3275  * Sort an associated group of pins according to their sequence numbers.
3276  */
3277 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3278                                   int num_pins)
3279 {
3280         int i, j;
3281         short seq;
3282         hda_nid_t nid;
3283         
3284         for (i = 0; i < num_pins; i++) {
3285                 for (j = i + 1; j < num_pins; j++) {
3286                         if (sequences[i] > sequences[j]) {
3287                                 seq = sequences[i];
3288                                 sequences[i] = sequences[j];
3289                                 sequences[j] = seq;
3290                                 nid = pins[i];
3291                                 pins[i] = pins[j];
3292                                 pins[j] = nid;
3293                         }
3294                 }
3295         }
3296 }
3297
3298
3299 /*
3300  * Parse all pin widgets and store the useful pin nids to cfg
3301  *
3302  * The number of line-outs or any primary output is stored in line_outs,
3303  * and the corresponding output pins are assigned to line_out_pins[],
3304  * in the order of front, rear, CLFE, side, ...
3305  *
3306  * If more extra outputs (speaker and headphone) are found, the pins are
3307  * assisnged to hp_pins[] and speaker_pins[], respectively.  If no line-out jack
3308  * is detected, one of speaker of HP pins is assigned as the primary
3309  * output, i.e. to line_out_pins[0].  So, line_outs is always positive
3310  * if any analog output exists.
3311  * 
3312  * The analog input pins are assigned to input_pins array.
3313  * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3314  * respectively.
3315  */
3316 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3317                                  struct auto_pin_cfg *cfg,
3318                                  hda_nid_t *ignore_nids)
3319 {
3320         hda_nid_t nid, end_nid;
3321         short seq, assoc_line_out, assoc_speaker;
3322         short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3323         short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3324         short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3325
3326         memset(cfg, 0, sizeof(*cfg));
3327
3328         memset(sequences_line_out, 0, sizeof(sequences_line_out));
3329         memset(sequences_speaker, 0, sizeof(sequences_speaker));
3330         memset(sequences_hp, 0, sizeof(sequences_hp));
3331         assoc_line_out = assoc_speaker = 0;
3332
3333         end_nid = codec->start_nid + codec->num_nodes;
3334         for (nid = codec->start_nid; nid < end_nid; nid++) {
3335                 unsigned int wid_caps = get_wcaps(codec, nid);
3336                 unsigned int wid_type =
3337                         (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
3338                 unsigned int def_conf;
3339                 short assoc, loc;
3340
3341                 /* read all default configuration for pin complex */
3342                 if (wid_type != AC_WID_PIN)
3343                         continue;
3344                 /* ignore the given nids (e.g. pc-beep returns error) */
3345                 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3346                         continue;
3347
3348                 def_conf = snd_hda_codec_read(codec, nid, 0,
3349                                               AC_VERB_GET_CONFIG_DEFAULT, 0);
3350                 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3351                         continue;
3352                 loc = get_defcfg_location(def_conf);
3353                 switch (get_defcfg_device(def_conf)) {
3354                 case AC_JACK_LINE_OUT:
3355                         seq = get_defcfg_sequence(def_conf);
3356                         assoc = get_defcfg_association(def_conf);
3357
3358                         if (!(wid_caps & AC_WCAP_STEREO))
3359                                 if (!cfg->mono_out_pin)
3360                                         cfg->mono_out_pin = nid;
3361                         if (!assoc)
3362                                 continue;
3363                         if (!assoc_line_out)
3364                                 assoc_line_out = assoc;
3365                         else if (assoc_line_out != assoc)
3366                                 continue;
3367                         if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3368                                 continue;
3369                         cfg->line_out_pins[cfg->line_outs] = nid;
3370                         sequences_line_out[cfg->line_outs] = seq;
3371                         cfg->line_outs++;
3372                         break;
3373                 case AC_JACK_SPEAKER:
3374                         seq = get_defcfg_sequence(def_conf);
3375                         assoc = get_defcfg_association(def_conf);
3376                         if (! assoc)
3377                                 continue;
3378                         if (! assoc_speaker)
3379                                 assoc_speaker = assoc;
3380                         else if (assoc_speaker != assoc)
3381                                 continue;
3382                         if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3383                                 continue;
3384                         cfg->speaker_pins[cfg->speaker_outs] = nid;
3385                         sequences_speaker[cfg->speaker_outs] = seq;
3386                         cfg->speaker_outs++;
3387                         break;
3388                 case AC_JACK_HP_OUT:
3389                         seq = get_defcfg_sequence(def_conf);
3390                         assoc = get_defcfg_association(def_conf);
3391                         if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3392                                 continue;
3393                         cfg->hp_pins[cfg->hp_outs] = nid;
3394                         sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3395                         cfg->hp_outs++;
3396                         break;
3397                 case AC_JACK_MIC_IN: {
3398                         int preferred, alt;
3399                         if (loc == AC_JACK_LOC_FRONT) {
3400                                 preferred = AUTO_PIN_FRONT_MIC;
3401                                 alt = AUTO_PIN_MIC;
3402                         } else {
3403                                 preferred = AUTO_PIN_MIC;
3404                                 alt = AUTO_PIN_FRONT_MIC;
3405                         }
3406                         if (!cfg->input_pins[preferred])
3407                                 cfg->input_pins[preferred] = nid;
3408                         else if (!cfg->input_pins[alt])
3409                                 cfg->input_pins[alt] = nid;
3410                         break;
3411                 }
3412                 case AC_JACK_LINE_IN:
3413                         if (loc == AC_JACK_LOC_FRONT)
3414                                 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3415                         else
3416                                 cfg->input_pins[AUTO_PIN_LINE] = nid;
3417                         break;
3418                 case AC_JACK_CD:
3419                         cfg->input_pins[AUTO_PIN_CD] = nid;
3420                         break;
3421                 case AC_JACK_AUX:
3422                         cfg->input_pins[AUTO_PIN_AUX] = nid;
3423                         break;
3424                 case AC_JACK_SPDIF_OUT:
3425                 case AC_JACK_DIG_OTHER_OUT:
3426                         cfg->dig_out_pin = nid;
3427                         if (loc == AC_JACK_LOC_HDMI)
3428                                 cfg->dig_out_type = HDA_PCM_TYPE_HDMI;
3429                         else
3430                                 cfg->dig_out_type = HDA_PCM_TYPE_SPDIF;
3431                         break;
3432                 case AC_JACK_SPDIF_IN:
3433                 case AC_JACK_DIG_OTHER_IN:
3434                         cfg->dig_in_pin = nid;
3435                         if (loc == AC_JACK_LOC_HDMI)
3436                                 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
3437                         else
3438                                 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
3439                         break;
3440                 }
3441         }
3442
3443         /* FIX-UP:
3444          * If no line-out is defined but multiple HPs are found,
3445          * some of them might be the real line-outs.
3446          */
3447         if (!cfg->line_outs && cfg->hp_outs > 1) {
3448                 int i = 0;
3449                 while (i < cfg->hp_outs) {
3450                         /* The real HPs should have the sequence 0x0f */
3451                         if ((sequences_hp[i] & 0x0f) == 0x0f) {
3452                                 i++;
3453                                 continue;
3454                         }
3455                         /* Move it to the line-out table */
3456                         cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3457                         sequences_line_out[cfg->line_outs] = sequences_hp[i];
3458                         cfg->line_outs++;
3459                         cfg->hp_outs--;
3460                         memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3461                                 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3462                         memmove(sequences_hp + i - 1, sequences_hp + i,
3463                                 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3464                 }
3465         }
3466
3467         /* sort by sequence */
3468         sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3469                               cfg->line_outs);
3470         sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3471                               cfg->speaker_outs);
3472         sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3473                               cfg->hp_outs);
3474         
3475         /* if we have only one mic, make it AUTO_PIN_MIC */
3476         if (!cfg->input_pins[AUTO_PIN_MIC] &&
3477             cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3478                 cfg->input_pins[AUTO_PIN_MIC] =
3479                         cfg->input_pins[AUTO_PIN_FRONT_MIC];
3480                 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3481         }
3482         /* ditto for line-in */
3483         if (!cfg->input_pins[AUTO_PIN_LINE] &&
3484             cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3485                 cfg->input_pins[AUTO_PIN_LINE] =
3486                         cfg->input_pins[AUTO_PIN_FRONT_LINE];
3487                 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3488         }
3489
3490         /*
3491          * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3492          * as a primary output
3493          */
3494         if (!cfg->line_outs) {
3495                 if (cfg->speaker_outs) {
3496                         cfg->line_outs = cfg->speaker_outs;
3497                         memcpy(cfg->line_out_pins, cfg->speaker_pins,
3498                                sizeof(cfg->speaker_pins));
3499                         cfg->speaker_outs = 0;
3500                         memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3501                         cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3502                 } else if (cfg->hp_outs) {
3503                         cfg->line_outs = cfg->hp_outs;
3504                         memcpy(cfg->line_out_pins, cfg->hp_pins,
3505                                sizeof(cfg->hp_pins));
3506                         cfg->hp_outs = 0;
3507                         memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3508                         cfg->line_out_type = AUTO_PIN_HP_OUT;
3509                 }
3510         }
3511
3512         /* Reorder the surround channels
3513          * ALSA sequence is front/surr/clfe/side
3514          * HDA sequence is:
3515          *    4-ch: front/surr  =>  OK as it is
3516          *    6-ch: front/clfe/surr
3517          *    8-ch: front/clfe/rear/side|fc
3518          */
3519         switch (cfg->line_outs) {
3520         case 3:
3521         case 4:
3522                 nid = cfg->line_out_pins[1];
3523                 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3524                 cfg->line_out_pins[2] = nid;
3525                 break;
3526         }
3527
3528         /*
3529          * debug prints of the parsed results
3530          */
3531         snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3532                    cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3533                    cfg->line_out_pins[2], cfg->line_out_pins[3],
3534                    cfg->line_out_pins[4]);
3535         snd_printd("   speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3536                    cfg->speaker_outs, cfg->speaker_pins[0],
3537                    cfg->speaker_pins[1], cfg->speaker_pins[2],
3538                    cfg->speaker_pins[3], cfg->speaker_pins[4]);
3539         snd_printd("   hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3540                    cfg->hp_outs, cfg->hp_pins[0],
3541                    cfg->hp_pins[1], cfg->hp_pins[2],
3542                    cfg->hp_pins[3], cfg->hp_pins[4]);
3543         snd_printd("   mono: mono_out=0x%x\n", cfg->mono_out_pin);
3544         if (cfg->dig_out_pin)
3545                 snd_printd("   dig-out=0x%x\n", cfg->dig_out_pin);
3546         snd_printd("   inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3547                    " cd=0x%x, aux=0x%x\n",
3548                    cfg->input_pins[AUTO_PIN_MIC],
3549                    cfg->input_pins[AUTO_PIN_FRONT_MIC],
3550                    cfg->input_pins[AUTO_PIN_LINE],
3551                    cfg->input_pins[AUTO_PIN_FRONT_LINE],
3552                    cfg->input_pins[AUTO_PIN_CD],
3553                    cfg->input_pins[AUTO_PIN_AUX]);
3554         if (cfg->dig_out_pin)
3555                 snd_printd("   dig-in=0x%x\n", cfg->dig_in_pin);
3556
3557         return 0;
3558 }
3559 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3560
3561 /* labels for input pins */
3562 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3563         "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3564 };
3565 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3566
3567
3568 #ifdef CONFIG_PM
3569 /*
3570  * power management
3571  */
3572
3573 /**
3574  * snd_hda_suspend - suspend the codecs
3575  * @bus: the HDA bus
3576  * @state: suspsend state
3577  *
3578  * Returns 0 if successful.
3579  */
3580 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
3581 {
3582         struct hda_codec *codec;
3583
3584         list_for_each_entry(codec, &bus->codec_list, list) {
3585 #ifdef CONFIG_SND_HDA_POWER_SAVE
3586                 if (!codec->power_on)
3587                         continue;
3588 #endif
3589                 hda_call_codec_suspend(codec);
3590         }
3591         return 0;
3592 }
3593 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3594
3595 /**
3596  * snd_hda_resume - resume the codecs
3597  * @bus: the HDA bus
3598  *
3599  * Returns 0 if successful.
3600  *
3601  * This fucntion is defined only when POWER_SAVE isn't set.
3602  * In the power-save mode, the codec is resumed dynamically.
3603  */
3604 int snd_hda_resume(struct hda_bus *bus)
3605 {
3606         struct hda_codec *codec;
3607
3608         list_for_each_entry(codec, &bus->codec_list, list) {
3609                 if (snd_hda_codec_needs_resume(codec))
3610                         hda_call_codec_resume(codec);
3611         }
3612         return 0;
3613 }
3614 EXPORT_SYMBOL_HDA(snd_hda_resume);
3615 #endif /* CONFIG_PM */
3616
3617 /*
3618  * generic arrays
3619  */
3620
3621 /* get a new element from the given array
3622  * if it exceeds the pre-allocated array size, re-allocate the array
3623  */
3624 void *snd_array_new(struct snd_array *array)
3625 {
3626         if (array->used >= array->alloced) {
3627                 int num = array->alloced + array->alloc_align;
3628                 void *nlist;
3629                 if (snd_BUG_ON(num >= 4096))
3630                         return NULL;
3631                 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
3632                 if (!nlist)
3633                         return NULL;
3634                 if (array->list) {
3635                         memcpy(nlist, array->list,
3636                                array->elem_size * array->alloced);
3637                         kfree(array->list);
3638                 }
3639                 array->list = nlist;
3640                 array->alloced = num;
3641         }
3642         return snd_array_elem(array, array->used++);
3643 }
3644 EXPORT_SYMBOL_HDA(snd_array_new);
3645
3646 /* free the given array elements */
3647 void snd_array_free(struct snd_array *array)
3648 {
3649         kfree(array->list);
3650         array->used = 0;
3651         array->alloced = 0;
3652         array->list = NULL;
3653 }
3654 EXPORT_SYMBOL_HDA(snd_array_free);
3655
3656 /*
3657  * used by hda_proc.c and hda_eld.c
3658  */
3659 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
3660 {
3661         static unsigned int rates[] = {
3662                 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
3663                 96000, 176400, 192000, 384000
3664         };
3665         int i, j;
3666
3667         for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
3668                 if (pcm & (1 << i))
3669                         j += snprintf(buf + j, buflen - j,  " %d", rates[i]);
3670
3671         buf[j] = '\0'; /* necessary when j == 0 */
3672 }
3673 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
3674
3675 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
3676 {
3677         static unsigned int bits[] = { 8, 16, 20, 24, 32 };
3678         int i, j;
3679
3680         for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
3681                 if (pcm & (AC_SUPPCM_BITS_8 << i))
3682                         j += snprintf(buf + j, buflen - j,  " %d", bits[i]);
3683
3684         buf[j] = '\0'; /* necessary when j == 0 */
3685 }
3686 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
3687
3688 MODULE_DESCRIPTION("HDA codec core");
3689 MODULE_LICENSE("GPL");