Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
[pandora-kernel.git] / 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 <sound/jack.h>
33 #include "hda_local.h"
34 #include "hda_beep.h"
35 #include <sound/hda_hwdep.h>
36
37 /*
38  * vendor / preset table
39  */
40
41 struct hda_vendor_id {
42         unsigned int id;
43         const char *name;
44 };
45
46 /* codec vendor labels */
47 static struct hda_vendor_id hda_vendor_ids[] = {
48         { 0x1002, "ATI" },
49         { 0x1013, "Cirrus Logic" },
50         { 0x1057, "Motorola" },
51         { 0x1095, "Silicon Image" },
52         { 0x10de, "Nvidia" },
53         { 0x10ec, "Realtek" },
54         { 0x1102, "Creative" },
55         { 0x1106, "VIA" },
56         { 0x111d, "IDT" },
57         { 0x11c1, "LSI" },
58         { 0x11d4, "Analog Devices" },
59         { 0x13f6, "C-Media" },
60         { 0x14f1, "Conexant" },
61         { 0x17e8, "Chrontel" },
62         { 0x1854, "LG" },
63         { 0x1aec, "Wolfson Microelectronics" },
64         { 0x434d, "C-Media" },
65         { 0x8086, "Intel" },
66         { 0x8384, "SigmaTel" },
67         {} /* terminator */
68 };
69
70 static DEFINE_MUTEX(preset_mutex);
71 static LIST_HEAD(hda_preset_tables);
72
73 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
74 {
75         mutex_lock(&preset_mutex);
76         list_add_tail(&preset->list, &hda_preset_tables);
77         mutex_unlock(&preset_mutex);
78         return 0;
79 }
80 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
81
82 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
83 {
84         mutex_lock(&preset_mutex);
85         list_del(&preset->list);
86         mutex_unlock(&preset_mutex);
87         return 0;
88 }
89 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
90
91 #ifdef CONFIG_SND_HDA_POWER_SAVE
92 static void hda_power_work(struct work_struct *work);
93 static void hda_keep_power_on(struct hda_codec *codec);
94 #else
95 static inline void hda_keep_power_on(struct hda_codec *codec) {}
96 #endif
97
98 /**
99  * snd_hda_get_jack_location - Give a location string of the jack
100  * @cfg: pin default config value
101  *
102  * Parse the pin default config value and returns the string of the
103  * jack location, e.g. "Rear", "Front", etc.
104  */
105 const char *snd_hda_get_jack_location(u32 cfg)
106 {
107         static char *bases[7] = {
108                 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
109         };
110         static unsigned char specials_idx[] = {
111                 0x07, 0x08,
112                 0x17, 0x18, 0x19,
113                 0x37, 0x38
114         };
115         static char *specials[] = {
116                 "Rear Panel", "Drive Bar",
117                 "Riser", "HDMI", "ATAPI",
118                 "Mobile-In", "Mobile-Out"
119         };
120         int i;
121         cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
122         if ((cfg & 0x0f) < 7)
123                 return bases[cfg & 0x0f];
124         for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
125                 if (cfg == specials_idx[i])
126                         return specials[i];
127         }
128         return "UNKNOWN";
129 }
130 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
131
132 /**
133  * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
134  * @cfg: pin default config value
135  *
136  * Parse the pin default config value and returns the string of the
137  * jack connectivity, i.e. external or internal connection.
138  */
139 const char *snd_hda_get_jack_connectivity(u32 cfg)
140 {
141         static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
142
143         return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
144 }
145 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
146
147 /**
148  * snd_hda_get_jack_type - Give a type string of the jack
149  * @cfg: pin default config value
150  *
151  * Parse the pin default config value and returns the string of the
152  * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
153  */
154 const char *snd_hda_get_jack_type(u32 cfg)
155 {
156         static char *jack_types[16] = {
157                 "Line Out", "Speaker", "HP Out", "CD",
158                 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
159                 "Line In", "Aux", "Mic", "Telephony",
160                 "SPDIF In", "Digitial In", "Reserved", "Other"
161         };
162
163         return jack_types[(cfg & AC_DEFCFG_DEVICE)
164                                 >> AC_DEFCFG_DEVICE_SHIFT];
165 }
166 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
167
168 /*
169  * Compose a 32bit command word to be sent to the HD-audio controller
170  */
171 static inline unsigned int
172 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
173                unsigned int verb, unsigned int parm)
174 {
175         u32 val;
176
177         if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
178             (verb & ~0xfff) || (parm & ~0xffff)) {
179                 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
180                        codec->addr, direct, nid, verb, parm);
181                 return ~0;
182         }
183
184         val = (u32)codec->addr << 28;
185         val |= (u32)direct << 27;
186         val |= (u32)nid << 20;
187         val |= verb << 8;
188         val |= parm;
189         return val;
190 }
191
192 /*
193  * Send and receive a verb
194  */
195 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
196                            unsigned int *res)
197 {
198         struct hda_bus *bus = codec->bus;
199         int err;
200
201         if (cmd == ~0)
202                 return -1;
203
204         if (res)
205                 *res = -1;
206  again:
207         snd_hda_power_up(codec);
208         mutex_lock(&bus->cmd_mutex);
209         err = bus->ops.command(bus, cmd);
210         if (!err && res)
211                 *res = bus->ops.get_response(bus, codec->addr);
212         mutex_unlock(&bus->cmd_mutex);
213         snd_hda_power_down(codec);
214         if (res && *res == -1 && bus->rirb_error) {
215                 if (bus->response_reset) {
216                         snd_printd("hda_codec: resetting BUS due to "
217                                    "fatal communication error\n");
218                         bus->ops.bus_reset(bus);
219                 }
220                 goto again;
221         }
222         /* clear reset-flag when the communication gets recovered */
223         if (!err)
224                 bus->response_reset = 0;
225         return err;
226 }
227
228 /**
229  * snd_hda_codec_read - send a command and get the response
230  * @codec: the HDA codec
231  * @nid: NID to send the command
232  * @direct: direct flag
233  * @verb: the verb to send
234  * @parm: the parameter for the verb
235  *
236  * Send a single command and read the corresponding response.
237  *
238  * Returns the obtained response value, or -1 for an error.
239  */
240 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
241                                 int direct,
242                                 unsigned int verb, unsigned int parm)
243 {
244         unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
245         unsigned int res;
246         codec_exec_verb(codec, cmd, &res);
247         return res;
248 }
249 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
250
251 /**
252  * snd_hda_codec_write - send a single command without waiting for response
253  * @codec: the HDA codec
254  * @nid: NID to send the command
255  * @direct: direct flag
256  * @verb: the verb to send
257  * @parm: the parameter for the verb
258  *
259  * Send a single command without waiting for response.
260  *
261  * Returns 0 if successful, or a negative error code.
262  */
263 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
264                          unsigned int verb, unsigned int parm)
265 {
266         unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
267         unsigned int res;
268         return codec_exec_verb(codec, cmd,
269                                codec->bus->sync_write ? &res : NULL);
270 }
271 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
272
273 /**
274  * snd_hda_sequence_write - sequence writes
275  * @codec: the HDA codec
276  * @seq: VERB array to send
277  *
278  * Send the commands sequentially from the given array.
279  * The array must be terminated with NID=0.
280  */
281 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
282 {
283         for (; seq->nid; seq++)
284                 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
285 }
286 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
287
288 /**
289  * snd_hda_get_sub_nodes - get the range of sub nodes
290  * @codec: the HDA codec
291  * @nid: NID to parse
292  * @start_id: the pointer to store the start NID
293  *
294  * Parse the NID and store the start NID of its sub-nodes.
295  * Returns the number of sub-nodes.
296  */
297 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
298                           hda_nid_t *start_id)
299 {
300         unsigned int parm;
301
302         parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
303         if (parm == -1)
304                 return 0;
305         *start_id = (parm >> 16) & 0x7fff;
306         return (int)(parm & 0x7fff);
307 }
308 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
309
310 /**
311  * snd_hda_get_connections - get connection list
312  * @codec: the HDA codec
313  * @nid: NID to parse
314  * @conn_list: connection list array
315  * @max_conns: max. number of connections to store
316  *
317  * Parses the connection list of the given widget and stores the list
318  * of NIDs.
319  *
320  * Returns the number of connections, or a negative error code.
321  */
322 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
323                             hda_nid_t *conn_list, int max_conns)
324 {
325         unsigned int parm;
326         int i, conn_len, conns;
327         unsigned int shift, num_elems, mask;
328         unsigned int wcaps;
329         hda_nid_t prev_nid;
330
331         if (snd_BUG_ON(!conn_list || max_conns <= 0))
332                 return -EINVAL;
333
334         wcaps = get_wcaps(codec, nid);
335         if (!(wcaps & AC_WCAP_CONN_LIST) &&
336             get_wcaps_type(wcaps) != AC_WID_VOL_KNB) {
337                 snd_printk(KERN_WARNING "hda_codec: "
338                            "connection list not available for 0x%x\n", nid);
339                 return -EINVAL;
340         }
341
342         parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
343         if (parm & AC_CLIST_LONG) {
344                 /* long form */
345                 shift = 16;
346                 num_elems = 2;
347         } else {
348                 /* short form */
349                 shift = 8;
350                 num_elems = 4;
351         }
352         conn_len = parm & AC_CLIST_LENGTH;
353         mask = (1 << (shift-1)) - 1;
354
355         if (!conn_len)
356                 return 0; /* no connection */
357
358         if (conn_len == 1) {
359                 /* single connection */
360                 parm = snd_hda_codec_read(codec, nid, 0,
361                                           AC_VERB_GET_CONNECT_LIST, 0);
362                 if (parm == -1 && codec->bus->rirb_error)
363                         return -EIO;
364                 conn_list[0] = parm & mask;
365                 return 1;
366         }
367
368         /* multi connection */
369         conns = 0;
370         prev_nid = 0;
371         for (i = 0; i < conn_len; i++) {
372                 int range_val;
373                 hda_nid_t val, n;
374
375                 if (i % num_elems == 0) {
376                         parm = snd_hda_codec_read(codec, nid, 0,
377                                                   AC_VERB_GET_CONNECT_LIST, i);
378                         if (parm == -1 && codec->bus->rirb_error)
379                                 return -EIO;
380                 }
381                 range_val = !!(parm & (1 << (shift-1))); /* ranges */
382                 val = parm & mask;
383                 if (val == 0) {
384                         snd_printk(KERN_WARNING "hda_codec: "
385                                    "invalid CONNECT_LIST verb %x[%i]:%x\n",
386                                     nid, i, parm);
387                         return 0;
388                 }
389                 parm >>= shift;
390                 if (range_val) {
391                         /* ranges between the previous and this one */
392                         if (!prev_nid || prev_nid >= val) {
393                                 snd_printk(KERN_WARNING "hda_codec: "
394                                            "invalid dep_range_val %x:%x\n",
395                                            prev_nid, val);
396                                 continue;
397                         }
398                         for (n = prev_nid + 1; n <= val; n++) {
399                                 if (conns >= max_conns) {
400                                         snd_printk(KERN_ERR "hda_codec: "
401                                                    "Too many connections %d for NID 0x%x\n",
402                                                    conns, nid);
403                                         return -EINVAL;
404                                 }
405                                 conn_list[conns++] = n;
406                         }
407                 } else {
408                         if (conns >= max_conns) {
409                                 snd_printk(KERN_ERR "hda_codec: "
410                                            "Too many connections %d for NID 0x%x\n",
411                                            conns, nid);
412                                 return -EINVAL;
413                         }
414                         conn_list[conns++] = val;
415                 }
416                 prev_nid = val;
417         }
418         return conns;
419 }
420 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
421
422
423 /**
424  * snd_hda_queue_unsol_event - add an unsolicited event to queue
425  * @bus: the BUS
426  * @res: unsolicited event (lower 32bit of RIRB entry)
427  * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
428  *
429  * Adds the given event to the queue.  The events are processed in
430  * the workqueue asynchronously.  Call this function in the interrupt
431  * hanlder when RIRB receives an unsolicited event.
432  *
433  * Returns 0 if successful, or a negative error code.
434  */
435 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
436 {
437         struct hda_bus_unsolicited *unsol;
438         unsigned int wp;
439
440         unsol = bus->unsol;
441         if (!unsol)
442                 return 0;
443
444         wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
445         unsol->wp = wp;
446
447         wp <<= 1;
448         unsol->queue[wp] = res;
449         unsol->queue[wp + 1] = res_ex;
450
451         queue_work(bus->workq, &unsol->work);
452
453         return 0;
454 }
455 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
456
457 /*
458  * process queued unsolicited events
459  */
460 static void process_unsol_events(struct work_struct *work)
461 {
462         struct hda_bus_unsolicited *unsol =
463                 container_of(work, struct hda_bus_unsolicited, work);
464         struct hda_bus *bus = unsol->bus;
465         struct hda_codec *codec;
466         unsigned int rp, caddr, res;
467
468         while (unsol->rp != unsol->wp) {
469                 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
470                 unsol->rp = rp;
471                 rp <<= 1;
472                 res = unsol->queue[rp];
473                 caddr = unsol->queue[rp + 1];
474                 if (!(caddr & (1 << 4))) /* no unsolicited event? */
475                         continue;
476                 codec = bus->caddr_tbl[caddr & 0x0f];
477                 if (codec && codec->patch_ops.unsol_event)
478                         codec->patch_ops.unsol_event(codec, res);
479         }
480 }
481
482 /*
483  * initialize unsolicited queue
484  */
485 static int init_unsol_queue(struct hda_bus *bus)
486 {
487         struct hda_bus_unsolicited *unsol;
488
489         if (bus->unsol) /* already initialized */
490                 return 0;
491
492         unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
493         if (!unsol) {
494                 snd_printk(KERN_ERR "hda_codec: "
495                            "can't allocate unsolicited queue\n");
496                 return -ENOMEM;
497         }
498         INIT_WORK(&unsol->work, process_unsol_events);
499         unsol->bus = bus;
500         bus->unsol = unsol;
501         return 0;
502 }
503
504 /*
505  * destructor
506  */
507 static void snd_hda_codec_free(struct hda_codec *codec);
508
509 static int snd_hda_bus_free(struct hda_bus *bus)
510 {
511         struct hda_codec *codec, *n;
512
513         if (!bus)
514                 return 0;
515         if (bus->workq)
516                 flush_workqueue(bus->workq);
517         if (bus->unsol)
518                 kfree(bus->unsol);
519         list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
520                 snd_hda_codec_free(codec);
521         }
522         if (bus->ops.private_free)
523                 bus->ops.private_free(bus);
524         if (bus->workq)
525                 destroy_workqueue(bus->workq);
526         kfree(bus);
527         return 0;
528 }
529
530 static int snd_hda_bus_dev_free(struct snd_device *device)
531 {
532         struct hda_bus *bus = device->device_data;
533         bus->shutdown = 1;
534         return snd_hda_bus_free(bus);
535 }
536
537 #ifdef CONFIG_SND_HDA_HWDEP
538 static int snd_hda_bus_dev_register(struct snd_device *device)
539 {
540         struct hda_bus *bus = device->device_data;
541         struct hda_codec *codec;
542         list_for_each_entry(codec, &bus->codec_list, list) {
543                 snd_hda_hwdep_add_sysfs(codec);
544                 snd_hda_hwdep_add_power_sysfs(codec);
545         }
546         return 0;
547 }
548 #else
549 #define snd_hda_bus_dev_register        NULL
550 #endif
551
552 /**
553  * snd_hda_bus_new - create a HDA bus
554  * @card: the card entry
555  * @temp: the template for hda_bus information
556  * @busp: the pointer to store the created bus instance
557  *
558  * Returns 0 if successful, or a negative error code.
559  */
560 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
561                               const struct hda_bus_template *temp,
562                               struct hda_bus **busp)
563 {
564         struct hda_bus *bus;
565         int err;
566         static struct snd_device_ops dev_ops = {
567                 .dev_register = snd_hda_bus_dev_register,
568                 .dev_free = snd_hda_bus_dev_free,
569         };
570
571         if (snd_BUG_ON(!temp))
572                 return -EINVAL;
573         if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
574                 return -EINVAL;
575
576         if (busp)
577                 *busp = NULL;
578
579         bus = kzalloc(sizeof(*bus), GFP_KERNEL);
580         if (bus == NULL) {
581                 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
582                 return -ENOMEM;
583         }
584
585         bus->card = card;
586         bus->private_data = temp->private_data;
587         bus->pci = temp->pci;
588         bus->modelname = temp->modelname;
589         bus->power_save = temp->power_save;
590         bus->ops = temp->ops;
591
592         mutex_init(&bus->cmd_mutex);
593         mutex_init(&bus->prepare_mutex);
594         INIT_LIST_HEAD(&bus->codec_list);
595
596         snprintf(bus->workq_name, sizeof(bus->workq_name),
597                  "hd-audio%d", card->number);
598         bus->workq = create_singlethread_workqueue(bus->workq_name);
599         if (!bus->workq) {
600                 snd_printk(KERN_ERR "cannot create workqueue %s\n",
601                            bus->workq_name);
602                 kfree(bus);
603                 return -ENOMEM;
604         }
605
606         err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
607         if (err < 0) {
608                 snd_hda_bus_free(bus);
609                 return err;
610         }
611         if (busp)
612                 *busp = bus;
613         return 0;
614 }
615 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
616
617 #ifdef CONFIG_SND_HDA_GENERIC
618 #define is_generic_config(codec) \
619         (codec->modelname && !strcmp(codec->modelname, "generic"))
620 #else
621 #define is_generic_config(codec)        0
622 #endif
623
624 #ifdef MODULE
625 #define HDA_MODREQ_MAX_COUNT    2       /* two request_modules()'s */
626 #else
627 #define HDA_MODREQ_MAX_COUNT    0       /* all presets are statically linked */
628 #endif
629
630 /*
631  * find a matching codec preset
632  */
633 static const struct hda_codec_preset *
634 find_codec_preset(struct hda_codec *codec)
635 {
636         struct hda_codec_preset_list *tbl;
637         const struct hda_codec_preset *preset;
638         int mod_requested = 0;
639
640         if (is_generic_config(codec))
641                 return NULL; /* use the generic parser */
642
643  again:
644         mutex_lock(&preset_mutex);
645         list_for_each_entry(tbl, &hda_preset_tables, list) {
646                 if (!try_module_get(tbl->owner)) {
647                         snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
648                         continue;
649                 }
650                 for (preset = tbl->preset; preset->id; preset++) {
651                         u32 mask = preset->mask;
652                         if (preset->afg && preset->afg != codec->afg)
653                                 continue;
654                         if (preset->mfg && preset->mfg != codec->mfg)
655                                 continue;
656                         if (!mask)
657                                 mask = ~0;
658                         if (preset->id == (codec->vendor_id & mask) &&
659                             (!preset->rev ||
660                              preset->rev == codec->revision_id)) {
661                                 mutex_unlock(&preset_mutex);
662                                 codec->owner = tbl->owner;
663                                 return preset;
664                         }
665                 }
666                 module_put(tbl->owner);
667         }
668         mutex_unlock(&preset_mutex);
669
670         if (mod_requested < HDA_MODREQ_MAX_COUNT) {
671                 char name[32];
672                 if (!mod_requested)
673                         snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
674                                  codec->vendor_id);
675                 else
676                         snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
677                                  (codec->vendor_id >> 16) & 0xffff);
678                 request_module(name);
679                 mod_requested++;
680                 goto again;
681         }
682         return NULL;
683 }
684
685 /*
686  * get_codec_name - store the codec name
687  */
688 static int get_codec_name(struct hda_codec *codec)
689 {
690         const struct hda_vendor_id *c;
691         const char *vendor = NULL;
692         u16 vendor_id = codec->vendor_id >> 16;
693         char tmp[16];
694
695         if (codec->vendor_name)
696                 goto get_chip_name;
697
698         for (c = hda_vendor_ids; c->id; c++) {
699                 if (c->id == vendor_id) {
700                         vendor = c->name;
701                         break;
702                 }
703         }
704         if (!vendor) {
705                 sprintf(tmp, "Generic %04x", vendor_id);
706                 vendor = tmp;
707         }
708         codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
709         if (!codec->vendor_name)
710                 return -ENOMEM;
711
712  get_chip_name:
713         if (codec->chip_name)
714                 return 0;
715
716         if (codec->preset && codec->preset->name)
717                 codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
718         else {
719                 sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
720                 codec->chip_name = kstrdup(tmp, GFP_KERNEL);
721         }
722         if (!codec->chip_name)
723                 return -ENOMEM;
724         return 0;
725 }
726
727 /*
728  * look for an AFG and MFG nodes
729  */
730 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
731 {
732         int i, total_nodes, function_id;
733         hda_nid_t nid;
734
735         total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
736         for (i = 0; i < total_nodes; i++, nid++) {
737                 function_id = snd_hda_param_read(codec, nid,
738                                                 AC_PAR_FUNCTION_TYPE);
739                 switch (function_id & 0xff) {
740                 case AC_GRP_AUDIO_FUNCTION:
741                         codec->afg = nid;
742                         codec->afg_function_id = function_id & 0xff;
743                         codec->afg_unsol = (function_id >> 8) & 1;
744                         break;
745                 case AC_GRP_MODEM_FUNCTION:
746                         codec->mfg = nid;
747                         codec->mfg_function_id = function_id & 0xff;
748                         codec->mfg_unsol = (function_id >> 8) & 1;
749                         break;
750                 default:
751                         break;
752                 }
753         }
754 }
755
756 /*
757  * read widget caps for each widget and store in cache
758  */
759 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
760 {
761         int i;
762         hda_nid_t nid;
763
764         codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
765                                                  &codec->start_nid);
766         codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
767         if (!codec->wcaps)
768                 return -ENOMEM;
769         nid = codec->start_nid;
770         for (i = 0; i < codec->num_nodes; i++, nid++)
771                 codec->wcaps[i] = snd_hda_param_read(codec, nid,
772                                                      AC_PAR_AUDIO_WIDGET_CAP);
773         return 0;
774 }
775
776 /* read all pin default configurations and save codec->init_pins */
777 static int read_pin_defaults(struct hda_codec *codec)
778 {
779         int i;
780         hda_nid_t nid = codec->start_nid;
781
782         for (i = 0; i < codec->num_nodes; i++, nid++) {
783                 struct hda_pincfg *pin;
784                 unsigned int wcaps = get_wcaps(codec, nid);
785                 unsigned int wid_type = get_wcaps_type(wcaps);
786                 if (wid_type != AC_WID_PIN)
787                         continue;
788                 pin = snd_array_new(&codec->init_pins);
789                 if (!pin)
790                         return -ENOMEM;
791                 pin->nid = nid;
792                 pin->cfg = snd_hda_codec_read(codec, nid, 0,
793                                               AC_VERB_GET_CONFIG_DEFAULT, 0);
794                 pin->ctrl = snd_hda_codec_read(codec, nid, 0,
795                                                AC_VERB_GET_PIN_WIDGET_CONTROL,
796                                                0);
797         }
798         return 0;
799 }
800
801 /* look up the given pin config list and return the item matching with NID */
802 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
803                                          struct snd_array *array,
804                                          hda_nid_t nid)
805 {
806         int i;
807         for (i = 0; i < array->used; i++) {
808                 struct hda_pincfg *pin = snd_array_elem(array, i);
809                 if (pin->nid == nid)
810                         return pin;
811         }
812         return NULL;
813 }
814
815 /* write a config value for the given NID */
816 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
817                        unsigned int cfg)
818 {
819         int i;
820         for (i = 0; i < 4; i++) {
821                 snd_hda_codec_write(codec, nid, 0,
822                                     AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
823                                     cfg & 0xff);
824                 cfg >>= 8;
825         }
826 }
827
828 /* set the current pin config value for the given NID.
829  * the value is cached, and read via snd_hda_codec_get_pincfg()
830  */
831 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
832                        hda_nid_t nid, unsigned int cfg)
833 {
834         struct hda_pincfg *pin;
835         unsigned int oldcfg;
836
837         if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
838                 return -EINVAL;
839
840         oldcfg = snd_hda_codec_get_pincfg(codec, nid);
841         pin = look_up_pincfg(codec, list, nid);
842         if (!pin) {
843                 pin = snd_array_new(list);
844                 if (!pin)
845                         return -ENOMEM;
846                 pin->nid = nid;
847         }
848         pin->cfg = cfg;
849
850         /* change only when needed; e.g. if the pincfg is already present
851          * in user_pins[], don't write it
852          */
853         cfg = snd_hda_codec_get_pincfg(codec, nid);
854         if (oldcfg != cfg)
855                 set_pincfg(codec, nid, cfg);
856         return 0;
857 }
858
859 /**
860  * snd_hda_codec_set_pincfg - Override a pin default configuration
861  * @codec: the HDA codec
862  * @nid: NID to set the pin config
863  * @cfg: the pin default config value
864  *
865  * Override a pin default configuration value in the cache.
866  * This value can be read by snd_hda_codec_get_pincfg() in a higher
867  * priority than the real hardware value.
868  */
869 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
870                              hda_nid_t nid, unsigned int cfg)
871 {
872         return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
873 }
874 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
875
876 /**
877  * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
878  * @codec: the HDA codec
879  * @nid: NID to get the pin config
880  *
881  * Get the current pin config value of the given pin NID.
882  * If the pincfg value is cached or overridden via sysfs or driver,
883  * returns the cached value.
884  */
885 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
886 {
887         struct hda_pincfg *pin;
888
889 #ifdef CONFIG_SND_HDA_HWDEP
890         pin = look_up_pincfg(codec, &codec->user_pins, nid);
891         if (pin)
892                 return pin->cfg;
893 #endif
894         pin = look_up_pincfg(codec, &codec->driver_pins, nid);
895         if (pin)
896                 return pin->cfg;
897         pin = look_up_pincfg(codec, &codec->init_pins, nid);
898         if (pin)
899                 return pin->cfg;
900         return 0;
901 }
902 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
903
904 /* restore all current pin configs */
905 static void restore_pincfgs(struct hda_codec *codec)
906 {
907         int i;
908         for (i = 0; i < codec->init_pins.used; i++) {
909                 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
910                 set_pincfg(codec, pin->nid,
911                            snd_hda_codec_get_pincfg(codec, pin->nid));
912         }
913 }
914
915 /**
916  * snd_hda_shutup_pins - Shut up all pins
917  * @codec: the HDA codec
918  *
919  * Clear all pin controls to shup up before suspend for avoiding click noise.
920  * The controls aren't cached so that they can be resumed properly.
921  */
922 void snd_hda_shutup_pins(struct hda_codec *codec)
923 {
924         int i;
925         /* don't shut up pins when unloading the driver; otherwise it breaks
926          * the default pin setup at the next load of the driver
927          */
928         if (codec->bus->shutdown)
929                 return;
930         for (i = 0; i < codec->init_pins.used; i++) {
931                 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
932                 /* use read here for syncing after issuing each verb */
933                 snd_hda_codec_read(codec, pin->nid, 0,
934                                    AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
935         }
936         codec->pins_shutup = 1;
937 }
938 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins);
939
940 /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
941 static void restore_shutup_pins(struct hda_codec *codec)
942 {
943         int i;
944         if (!codec->pins_shutup)
945                 return;
946         if (codec->bus->shutdown)
947                 return;
948         for (i = 0; i < codec->init_pins.used; i++) {
949                 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
950                 snd_hda_codec_write(codec, pin->nid, 0,
951                                     AC_VERB_SET_PIN_WIDGET_CONTROL,
952                                     pin->ctrl);
953         }
954         codec->pins_shutup = 0;
955 }
956
957 static void init_hda_cache(struct hda_cache_rec *cache,
958                            unsigned int record_size);
959 static void free_hda_cache(struct hda_cache_rec *cache);
960
961 /* restore the initial pin cfgs and release all pincfg lists */
962 static void restore_init_pincfgs(struct hda_codec *codec)
963 {
964         /* first free driver_pins and user_pins, then call restore_pincfg
965          * so that only the values in init_pins are restored
966          */
967         snd_array_free(&codec->driver_pins);
968 #ifdef CONFIG_SND_HDA_HWDEP
969         snd_array_free(&codec->user_pins);
970 #endif
971         restore_pincfgs(codec);
972         snd_array_free(&codec->init_pins);
973 }
974
975 /*
976  * audio-converter setup caches
977  */
978 struct hda_cvt_setup {
979         hda_nid_t nid;
980         u8 stream_tag;
981         u8 channel_id;
982         u16 format_id;
983         unsigned char active;   /* cvt is currently used */
984         unsigned char dirty;    /* setups should be cleared */
985 };
986
987 /* get or create a cache entry for the given audio converter NID */
988 static struct hda_cvt_setup *
989 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
990 {
991         struct hda_cvt_setup *p;
992         int i;
993
994         for (i = 0; i < codec->cvt_setups.used; i++) {
995                 p = snd_array_elem(&codec->cvt_setups, i);
996                 if (p->nid == nid)
997                         return p;
998         }
999         p = snd_array_new(&codec->cvt_setups);
1000         if (p)
1001                 p->nid = nid;
1002         return p;
1003 }
1004
1005 /*
1006  * codec destructor
1007  */
1008 static void snd_hda_codec_free(struct hda_codec *codec)
1009 {
1010         if (!codec)
1011                 return;
1012         restore_init_pincfgs(codec);
1013 #ifdef CONFIG_SND_HDA_POWER_SAVE
1014         cancel_delayed_work(&codec->power_work);
1015         flush_workqueue(codec->bus->workq);
1016 #endif
1017         list_del(&codec->list);
1018         snd_array_free(&codec->mixers);
1019         snd_array_free(&codec->nids);
1020         codec->bus->caddr_tbl[codec->addr] = NULL;
1021         if (codec->patch_ops.free)
1022                 codec->patch_ops.free(codec);
1023         module_put(codec->owner);
1024         free_hda_cache(&codec->amp_cache);
1025         free_hda_cache(&codec->cmd_cache);
1026         kfree(codec->vendor_name);
1027         kfree(codec->chip_name);
1028         kfree(codec->modelname);
1029         kfree(codec->wcaps);
1030         kfree(codec);
1031 }
1032
1033 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1034                                 unsigned int power_state);
1035
1036 /**
1037  * snd_hda_codec_new - create a HDA codec
1038  * @bus: the bus to assign
1039  * @codec_addr: the codec address
1040  * @codecp: the pointer to store the generated codec
1041  *
1042  * Returns 0 if successful, or a negative error code.
1043  */
1044 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
1045                                 unsigned int codec_addr,
1046                                 struct hda_codec **codecp)
1047 {
1048         struct hda_codec *codec;
1049         char component[31];
1050         int err;
1051
1052         if (snd_BUG_ON(!bus))
1053                 return -EINVAL;
1054         if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1055                 return -EINVAL;
1056
1057         if (bus->caddr_tbl[codec_addr]) {
1058                 snd_printk(KERN_ERR "hda_codec: "
1059                            "address 0x%x is already occupied\n", codec_addr);
1060                 return -EBUSY;
1061         }
1062
1063         codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1064         if (codec == NULL) {
1065                 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1066                 return -ENOMEM;
1067         }
1068
1069         codec->bus = bus;
1070         codec->addr = codec_addr;
1071         mutex_init(&codec->spdif_mutex);
1072         mutex_init(&codec->control_mutex);
1073         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1074         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1075         snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1076         snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1077         snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1078         snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1079         snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1080         if (codec->bus->modelname) {
1081                 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1082                 if (!codec->modelname) {
1083                         snd_hda_codec_free(codec);
1084                         return -ENODEV;
1085                 }
1086         }
1087
1088 #ifdef CONFIG_SND_HDA_POWER_SAVE
1089         INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1090         /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1091          * the caller has to power down appropriatley after initialization
1092          * phase.
1093          */
1094         hda_keep_power_on(codec);
1095 #endif
1096
1097         list_add_tail(&codec->list, &bus->codec_list);
1098         bus->caddr_tbl[codec_addr] = codec;
1099
1100         codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1101                                               AC_PAR_VENDOR_ID);
1102         if (codec->vendor_id == -1)
1103                 /* read again, hopefully the access method was corrected
1104                  * in the last read...
1105                  */
1106                 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1107                                                       AC_PAR_VENDOR_ID);
1108         codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1109                                                  AC_PAR_SUBSYSTEM_ID);
1110         codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1111                                                 AC_PAR_REV_ID);
1112
1113         setup_fg_nodes(codec);
1114         if (!codec->afg && !codec->mfg) {
1115                 snd_printdd("hda_codec: no AFG or MFG node found\n");
1116                 err = -ENODEV;
1117                 goto error;
1118         }
1119
1120         err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
1121         if (err < 0) {
1122                 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1123                 goto error;
1124         }
1125         err = read_pin_defaults(codec);
1126         if (err < 0)
1127                 goto error;
1128
1129         if (!codec->subsystem_id) {
1130                 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
1131                 codec->subsystem_id =
1132                         snd_hda_codec_read(codec, nid, 0,
1133                                            AC_VERB_GET_SUBSYSTEM_ID, 0);
1134         }
1135
1136         /* power-up all before initialization */
1137         hda_set_power_state(codec,
1138                             codec->afg ? codec->afg : codec->mfg,
1139                             AC_PWRST_D0);
1140
1141         snd_hda_codec_proc_new(codec);
1142
1143         snd_hda_create_hwdep(codec);
1144
1145         sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1146                 codec->subsystem_id, codec->revision_id);
1147         snd_component_add(codec->bus->card, component);
1148
1149         if (codecp)
1150                 *codecp = codec;
1151         return 0;
1152
1153  error:
1154         snd_hda_codec_free(codec);
1155         return err;
1156 }
1157 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1158
1159 /**
1160  * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1161  * @codec: the HDA codec
1162  *
1163  * Start parsing of the given codec tree and (re-)initialize the whole
1164  * patch instance.
1165  *
1166  * Returns 0 if successful or a negative error code.
1167  */
1168 int snd_hda_codec_configure(struct hda_codec *codec)
1169 {
1170         int err;
1171
1172         codec->preset = find_codec_preset(codec);
1173         if (!codec->vendor_name || !codec->chip_name) {
1174                 err = get_codec_name(codec);
1175                 if (err < 0)
1176                         return err;
1177         }
1178
1179         if (is_generic_config(codec)) {
1180                 err = snd_hda_parse_generic_codec(codec);
1181                 goto patched;
1182         }
1183         if (codec->preset && codec->preset->patch) {
1184                 err = codec->preset->patch(codec);
1185                 goto patched;
1186         }
1187
1188         /* call the default parser */
1189         err = snd_hda_parse_generic_codec(codec);
1190         if (err < 0)
1191                 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1192
1193  patched:
1194         if (!err && codec->patch_ops.unsol_event)
1195                 err = init_unsol_queue(codec->bus);
1196         /* audio codec should override the mixer name */
1197         if (!err && (codec->afg || !*codec->bus->card->mixername))
1198                 snprintf(codec->bus->card->mixername,
1199                          sizeof(codec->bus->card->mixername),
1200                          "%s %s", codec->vendor_name, codec->chip_name);
1201         return err;
1202 }
1203 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1204
1205 /**
1206  * snd_hda_codec_setup_stream - set up the codec for streaming
1207  * @codec: the CODEC to set up
1208  * @nid: the NID to set up
1209  * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1210  * @channel_id: channel id to pass, zero based.
1211  * @format: stream format.
1212  */
1213 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1214                                 u32 stream_tag,
1215                                 int channel_id, int format)
1216 {
1217         struct hda_codec *c;
1218         struct hda_cvt_setup *p;
1219         unsigned int oldval, newval;
1220         int type;
1221         int i;
1222
1223         if (!nid)
1224                 return;
1225
1226         snd_printdd("hda_codec_setup_stream: "
1227                     "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1228                     nid, stream_tag, channel_id, format);
1229         p = get_hda_cvt_setup(codec, nid);
1230         if (!p)
1231                 return;
1232         /* update the stream-id if changed */
1233         if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1234                 oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1235                 newval = (stream_tag << 4) | channel_id;
1236                 if (oldval != newval)
1237                         snd_hda_codec_write(codec, nid, 0,
1238                                             AC_VERB_SET_CHANNEL_STREAMID,
1239                                             newval);
1240                 p->stream_tag = stream_tag;
1241                 p->channel_id = channel_id;
1242         }
1243         /* update the format-id if changed */
1244         if (p->format_id != format) {
1245                 oldval = snd_hda_codec_read(codec, nid, 0,
1246                                             AC_VERB_GET_STREAM_FORMAT, 0);
1247                 if (oldval != format) {
1248                         msleep(1);
1249                         snd_hda_codec_write(codec, nid, 0,
1250                                             AC_VERB_SET_STREAM_FORMAT,
1251                                             format);
1252                 }
1253                 p->format_id = format;
1254         }
1255         p->active = 1;
1256         p->dirty = 0;
1257
1258         /* make other inactive cvts with the same stream-tag dirty */
1259         type = get_wcaps_type(get_wcaps(codec, nid));
1260         list_for_each_entry(c, &codec->bus->codec_list, list) {
1261                 for (i = 0; i < c->cvt_setups.used; i++) {
1262                         p = snd_array_elem(&c->cvt_setups, i);
1263                         if (!p->active && p->stream_tag == stream_tag &&
1264                             get_wcaps_type(get_wcaps(codec, p->nid)) == type)
1265                                 p->dirty = 1;
1266                 }
1267         }
1268 }
1269 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1270
1271 static void really_cleanup_stream(struct hda_codec *codec,
1272                                   struct hda_cvt_setup *q);
1273
1274 /**
1275  * __snd_hda_codec_cleanup_stream - clean up the codec for closing
1276  * @codec: the CODEC to clean up
1277  * @nid: the NID to clean up
1278  * @do_now: really clean up the stream instead of clearing the active flag
1279  */
1280 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
1281                                     int do_now)
1282 {
1283         struct hda_cvt_setup *p;
1284
1285         if (!nid)
1286                 return;
1287
1288         if (codec->no_sticky_stream)
1289                 do_now = 1;
1290
1291         snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1292         p = get_hda_cvt_setup(codec, nid);
1293         if (p) {
1294                 /* here we just clear the active flag when do_now isn't set;
1295                  * actual clean-ups will be done later in
1296                  * purify_inactive_streams() called from snd_hda_codec_prpapre()
1297                  */
1298                 if (do_now)
1299                         really_cleanup_stream(codec, p);
1300                 else
1301                         p->active = 0;
1302         }
1303 }
1304 EXPORT_SYMBOL_HDA(__snd_hda_codec_cleanup_stream);
1305
1306 static void really_cleanup_stream(struct hda_codec *codec,
1307                                   struct hda_cvt_setup *q)
1308 {
1309         hda_nid_t nid = q->nid;
1310         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1311         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1312         memset(q, 0, sizeof(*q));
1313         q->nid = nid;
1314 }
1315
1316 /* clean up the all conflicting obsolete streams */
1317 static void purify_inactive_streams(struct hda_codec *codec)
1318 {
1319         struct hda_codec *c;
1320         int i;
1321
1322         list_for_each_entry(c, &codec->bus->codec_list, list) {
1323                 for (i = 0; i < c->cvt_setups.used; i++) {
1324                         struct hda_cvt_setup *p;
1325                         p = snd_array_elem(&c->cvt_setups, i);
1326                         if (p->dirty)
1327                                 really_cleanup_stream(c, p);
1328                 }
1329         }
1330 }
1331
1332 /* clean up all streams; called from suspend */
1333 static void hda_cleanup_all_streams(struct hda_codec *codec)
1334 {
1335         int i;
1336
1337         for (i = 0; i < codec->cvt_setups.used; i++) {
1338                 struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1339                 if (p->stream_tag)
1340                         really_cleanup_stream(codec, p);
1341         }
1342 }
1343
1344 /*
1345  * amp access functions
1346  */
1347
1348 /* FIXME: more better hash key? */
1349 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1350 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1351 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1352 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1353 #define INFO_AMP_CAPS   (1<<0)
1354 #define INFO_AMP_VOL(ch)        (1 << (1 + (ch)))
1355
1356 /* initialize the hash table */
1357 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1358                                      unsigned int record_size)
1359 {
1360         memset(cache, 0, sizeof(*cache));
1361         memset(cache->hash, 0xff, sizeof(cache->hash));
1362         snd_array_init(&cache->buf, record_size, 64);
1363 }
1364
1365 static void free_hda_cache(struct hda_cache_rec *cache)
1366 {
1367         snd_array_free(&cache->buf);
1368 }
1369
1370 /* query the hash.  allocate an entry if not found. */
1371 static struct hda_cache_head  *get_hash(struct hda_cache_rec *cache, u32 key)
1372 {
1373         u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1374         u16 cur = cache->hash[idx];
1375         struct hda_cache_head *info;
1376
1377         while (cur != 0xffff) {
1378                 info = snd_array_elem(&cache->buf, cur);
1379                 if (info->key == key)
1380                         return info;
1381                 cur = info->next;
1382         }
1383         return NULL;
1384 }
1385
1386 /* query the hash.  allocate an entry if not found. */
1387 static struct hda_cache_head  *get_alloc_hash(struct hda_cache_rec *cache,
1388                                               u32 key)
1389 {
1390         struct hda_cache_head *info = get_hash(cache, key);
1391         if (!info) {
1392                 u16 idx, cur;
1393                 /* add a new hash entry */
1394                 info = snd_array_new(&cache->buf);
1395                 if (!info)
1396                         return NULL;
1397                 cur = snd_array_index(&cache->buf, info);
1398                 info->key = key;
1399                 info->val = 0;
1400                 idx = key % (u16)ARRAY_SIZE(cache->hash);
1401                 info->next = cache->hash[idx];
1402                 cache->hash[idx] = cur;
1403         }
1404         return info;
1405 }
1406
1407 /* query and allocate an amp hash entry */
1408 static inline struct hda_amp_info *
1409 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1410 {
1411         return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1412 }
1413
1414 /**
1415  * query_amp_caps - query AMP capabilities
1416  * @codec: the HD-auio codec
1417  * @nid: the NID to query
1418  * @direction: either #HDA_INPUT or #HDA_OUTPUT
1419  *
1420  * Query AMP capabilities for the given widget and direction.
1421  * Returns the obtained capability bits.
1422  *
1423  * When cap bits have been already read, this doesn't read again but
1424  * returns the cached value.
1425  */
1426 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1427 {
1428         struct hda_amp_info *info;
1429
1430         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1431         if (!info)
1432                 return 0;
1433         if (!(info->head.val & INFO_AMP_CAPS)) {
1434                 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1435                         nid = codec->afg;
1436                 info->amp_caps = snd_hda_param_read(codec, nid,
1437                                                     direction == HDA_OUTPUT ?
1438                                                     AC_PAR_AMP_OUT_CAP :
1439                                                     AC_PAR_AMP_IN_CAP);
1440                 if (info->amp_caps)
1441                         info->head.val |= INFO_AMP_CAPS;
1442         }
1443         return info->amp_caps;
1444 }
1445 EXPORT_SYMBOL_HDA(query_amp_caps);
1446
1447 /**
1448  * snd_hda_override_amp_caps - Override the AMP capabilities
1449  * @codec: the CODEC to clean up
1450  * @nid: the NID to clean up
1451  * @direction: either #HDA_INPUT or #HDA_OUTPUT
1452  * @caps: the capability bits to set
1453  *
1454  * Override the cached AMP caps bits value by the given one.
1455  * This function is useful if the driver needs to adjust the AMP ranges,
1456  * e.g. limit to 0dB, etc.
1457  *
1458  * Returns zero if successful or a negative error code.
1459  */
1460 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1461                               unsigned int caps)
1462 {
1463         struct hda_amp_info *info;
1464
1465         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1466         if (!info)
1467                 return -EINVAL;
1468         info->amp_caps = caps;
1469         info->head.val |= INFO_AMP_CAPS;
1470         return 0;
1471 }
1472 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1473
1474 static unsigned int
1475 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1476                 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1477 {
1478         struct hda_amp_info *info;
1479
1480         info = get_alloc_amp_hash(codec, key);
1481         if (!info)
1482                 return 0;
1483         if (!info->head.val) {
1484                 info->head.val |= INFO_AMP_CAPS;
1485                 info->amp_caps = func(codec, nid);
1486         }
1487         return info->amp_caps;
1488 }
1489
1490 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1491 {
1492         return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1493 }
1494
1495 /**
1496  * snd_hda_query_pin_caps - Query PIN capabilities
1497  * @codec: the HD-auio codec
1498  * @nid: the NID to query
1499  *
1500  * Query PIN capabilities for the given widget.
1501  * Returns the obtained capability bits.
1502  *
1503  * When cap bits have been already read, this doesn't read again but
1504  * returns the cached value.
1505  */
1506 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1507 {
1508         return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1509                                read_pin_cap);
1510 }
1511 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1512
1513 /**
1514  * snd_hda_pin_sense - execute pin sense measurement
1515  * @codec: the CODEC to sense
1516  * @nid: the pin NID to sense
1517  *
1518  * Execute necessary pin sense measurement and return its Presence Detect,
1519  * Impedance, ELD Valid etc. status bits.
1520  */
1521 u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid)
1522 {
1523         u32 pincap;
1524
1525         if (!codec->no_trigger_sense) {
1526                 pincap = snd_hda_query_pin_caps(codec, nid);
1527                 if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
1528                         snd_hda_codec_read(codec, nid, 0,
1529                                         AC_VERB_SET_PIN_SENSE, 0);
1530         }
1531         return snd_hda_codec_read(codec, nid, 0,
1532                                   AC_VERB_GET_PIN_SENSE, 0);
1533 }
1534 EXPORT_SYMBOL_HDA(snd_hda_pin_sense);
1535
1536 /**
1537  * snd_hda_jack_detect - query pin Presence Detect status
1538  * @codec: the CODEC to sense
1539  * @nid: the pin NID to sense
1540  *
1541  * Query and return the pin's Presence Detect status.
1542  */
1543 int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
1544 {
1545         u32 sense = snd_hda_pin_sense(codec, nid);
1546         return !!(sense & AC_PINSENSE_PRESENCE);
1547 }
1548 EXPORT_SYMBOL_HDA(snd_hda_jack_detect);
1549
1550 /*
1551  * read the current volume to info
1552  * if the cache exists, read the cache value.
1553  */
1554 static unsigned int get_vol_mute(struct hda_codec *codec,
1555                                  struct hda_amp_info *info, hda_nid_t nid,
1556                                  int ch, int direction, int index)
1557 {
1558         u32 val, parm;
1559
1560         if (info->head.val & INFO_AMP_VOL(ch))
1561                 return info->vol[ch];
1562
1563         parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1564         parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1565         parm |= index;
1566         val = snd_hda_codec_read(codec, nid, 0,
1567                                  AC_VERB_GET_AMP_GAIN_MUTE, parm);
1568         info->vol[ch] = val & 0xff;
1569         info->head.val |= INFO_AMP_VOL(ch);
1570         return info->vol[ch];
1571 }
1572
1573 /*
1574  * write the current volume in info to the h/w and update the cache
1575  */
1576 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1577                          hda_nid_t nid, int ch, int direction, int index,
1578                          int val)
1579 {
1580         u32 parm;
1581
1582         parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1583         parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1584         parm |= index << AC_AMP_SET_INDEX_SHIFT;
1585         parm |= val;
1586         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1587         info->vol[ch] = val;
1588 }
1589
1590 /**
1591  * snd_hda_codec_amp_read - Read AMP value
1592  * @codec: HD-audio codec
1593  * @nid: NID to read the AMP value
1594  * @ch: channel (left=0 or right=1)
1595  * @direction: #HDA_INPUT or #HDA_OUTPUT
1596  * @index: the index value (only for input direction)
1597  *
1598  * Read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit.
1599  */
1600 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1601                            int direction, int index)
1602 {
1603         struct hda_amp_info *info;
1604         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1605         if (!info)
1606                 return 0;
1607         return get_vol_mute(codec, info, nid, ch, direction, index);
1608 }
1609 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1610
1611 /**
1612  * snd_hda_codec_amp_update - update the AMP value
1613  * @codec: HD-audio codec
1614  * @nid: NID to read the AMP value
1615  * @ch: channel (left=0 or right=1)
1616  * @direction: #HDA_INPUT or #HDA_OUTPUT
1617  * @idx: the index value (only for input direction)
1618  * @mask: bit mask to set
1619  * @val: the bits value to set
1620  *
1621  * Update the AMP value with a bit mask.
1622  * Returns 0 if the value is unchanged, 1 if changed.
1623  */
1624 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1625                              int direction, int idx, int mask, int val)
1626 {
1627         struct hda_amp_info *info;
1628
1629         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1630         if (!info)
1631                 return 0;
1632         if (snd_BUG_ON(mask & ~0xff))
1633                 mask &= 0xff;
1634         val &= mask;
1635         val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1636         if (info->vol[ch] == val)
1637                 return 0;
1638         put_vol_mute(codec, info, nid, ch, direction, idx, val);
1639         return 1;
1640 }
1641 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1642
1643 /**
1644  * snd_hda_codec_amp_stereo - update the AMP stereo values
1645  * @codec: HD-audio codec
1646  * @nid: NID to read the AMP value
1647  * @direction: #HDA_INPUT or #HDA_OUTPUT
1648  * @idx: the index value (only for input direction)
1649  * @mask: bit mask to set
1650  * @val: the bits value to set
1651  *
1652  * Update the AMP values like snd_hda_codec_amp_update(), but for a
1653  * stereo widget with the same mask and value.
1654  */
1655 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1656                              int direction, int idx, int mask, int val)
1657 {
1658         int ch, ret = 0;
1659
1660         if (snd_BUG_ON(mask & ~0xff))
1661                 mask &= 0xff;
1662         for (ch = 0; ch < 2; ch++)
1663                 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1664                                                 idx, mask, val);
1665         return ret;
1666 }
1667 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1668
1669 #ifdef SND_HDA_NEEDS_RESUME
1670 /**
1671  * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
1672  * @codec: HD-audio codec
1673  *
1674  * Resume the all amp commands from the cache.
1675  */
1676 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1677 {
1678         struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1679         int i;
1680
1681         for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1682                 u32 key = buffer->head.key;
1683                 hda_nid_t nid;
1684                 unsigned int idx, dir, ch;
1685                 if (!key)
1686                         continue;
1687                 nid = key & 0xff;
1688                 idx = (key >> 16) & 0xff;
1689                 dir = (key >> 24) & 0xff;
1690                 for (ch = 0; ch < 2; ch++) {
1691                         if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1692                                 continue;
1693                         put_vol_mute(codec, buffer, nid, ch, dir, idx,
1694                                      buffer->vol[ch]);
1695                 }
1696         }
1697 }
1698 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1699 #endif /* SND_HDA_NEEDS_RESUME */
1700
1701 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
1702                              unsigned int ofs)
1703 {
1704         u32 caps = query_amp_caps(codec, nid, dir);
1705         /* get num steps */
1706         caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1707         if (ofs < caps)
1708                 caps -= ofs;
1709         return caps;
1710 }
1711
1712 /**
1713  * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
1714  *
1715  * The control element is supposed to have the private_value field
1716  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1717  */
1718 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1719                                   struct snd_ctl_elem_info *uinfo)
1720 {
1721         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1722         u16 nid = get_amp_nid(kcontrol);
1723         u8 chs = get_amp_channels(kcontrol);
1724         int dir = get_amp_direction(kcontrol);
1725         unsigned int ofs = get_amp_offset(kcontrol);
1726
1727         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1728         uinfo->count = chs == 3 ? 2 : 1;
1729         uinfo->value.integer.min = 0;
1730         uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
1731         if (!uinfo->value.integer.max) {
1732                 printk(KERN_WARNING "hda_codec: "
1733                        "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1734                        kcontrol->id.name);
1735                 return -EINVAL;
1736         }
1737         return 0;
1738 }
1739 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1740
1741
1742 static inline unsigned int
1743 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1744                int ch, int dir, int idx, unsigned int ofs)
1745 {
1746         unsigned int val;
1747         val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1748         val &= HDA_AMP_VOLMASK;
1749         if (val >= ofs)
1750                 val -= ofs;
1751         else
1752                 val = 0;
1753         return val;
1754 }
1755
1756 static inline int
1757 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1758                  int ch, int dir, int idx, unsigned int ofs,
1759                  unsigned int val)
1760 {
1761         unsigned int maxval;
1762
1763         if (val > 0)
1764                 val += ofs;
1765         /* ofs = 0: raw max value */
1766         maxval = get_amp_max_value(codec, nid, dir, 0);
1767         if (val > maxval)
1768                 val = maxval;
1769         return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1770                                         HDA_AMP_VOLMASK, val);
1771 }
1772
1773 /**
1774  * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
1775  *
1776  * The control element is supposed to have the private_value field
1777  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1778  */
1779 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1780                                  struct snd_ctl_elem_value *ucontrol)
1781 {
1782         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1783         hda_nid_t nid = get_amp_nid(kcontrol);
1784         int chs = get_amp_channels(kcontrol);
1785         int dir = get_amp_direction(kcontrol);
1786         int idx = get_amp_index(kcontrol);
1787         unsigned int ofs = get_amp_offset(kcontrol);
1788         long *valp = ucontrol->value.integer.value;
1789
1790         if (chs & 1)
1791                 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1792         if (chs & 2)
1793                 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1794         return 0;
1795 }
1796 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1797
1798 /**
1799  * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
1800  *
1801  * The control element is supposed to have the private_value field
1802  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1803  */
1804 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1805                                  struct snd_ctl_elem_value *ucontrol)
1806 {
1807         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1808         hda_nid_t nid = get_amp_nid(kcontrol);
1809         int chs = get_amp_channels(kcontrol);
1810         int dir = get_amp_direction(kcontrol);
1811         int idx = get_amp_index(kcontrol);
1812         unsigned int ofs = get_amp_offset(kcontrol);
1813         long *valp = ucontrol->value.integer.value;
1814         int change = 0;
1815
1816         snd_hda_power_up(codec);
1817         if (chs & 1) {
1818                 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1819                 valp++;
1820         }
1821         if (chs & 2)
1822                 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1823         snd_hda_power_down(codec);
1824         return change;
1825 }
1826 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1827
1828 /**
1829  * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
1830  *
1831  * The control element is supposed to have the private_value field
1832  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1833  */
1834 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1835                           unsigned int size, unsigned int __user *_tlv)
1836 {
1837         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1838         hda_nid_t nid = get_amp_nid(kcontrol);
1839         int dir = get_amp_direction(kcontrol);
1840         unsigned int ofs = get_amp_offset(kcontrol);
1841         bool min_mute = get_amp_min_mute(kcontrol);
1842         u32 caps, val1, val2;
1843
1844         if (size < 4 * sizeof(unsigned int))
1845                 return -ENOMEM;
1846         caps = query_amp_caps(codec, nid, dir);
1847         val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1848         val2 = (val2 + 1) * 25;
1849         val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1850         val1 += ofs;
1851         val1 = ((int)val1) * ((int)val2);
1852         if (min_mute)
1853                 val2 |= TLV_DB_SCALE_MUTE;
1854         if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1855                 return -EFAULT;
1856         if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1857                 return -EFAULT;
1858         if (put_user(val1, _tlv + 2))
1859                 return -EFAULT;
1860         if (put_user(val2, _tlv + 3))
1861                 return -EFAULT;
1862         return 0;
1863 }
1864 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1865
1866 /**
1867  * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
1868  * @codec: HD-audio codec
1869  * @nid: NID of a reference widget
1870  * @dir: #HDA_INPUT or #HDA_OUTPUT
1871  * @tlv: TLV data to be stored, at least 4 elements
1872  *
1873  * Set (static) TLV data for a virtual master volume using the AMP caps
1874  * obtained from the reference NID.
1875  * The volume range is recalculated as if the max volume is 0dB.
1876  */
1877 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1878                              unsigned int *tlv)
1879 {
1880         u32 caps;
1881         int nums, step;
1882
1883         caps = query_amp_caps(codec, nid, dir);
1884         nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1885         step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1886         step = (step + 1) * 25;
1887         tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1888         tlv[1] = 2 * sizeof(unsigned int);
1889         tlv[2] = -nums * step;
1890         tlv[3] = step;
1891 }
1892 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1893
1894 /* find a mixer control element with the given name */
1895 static struct snd_kcontrol *
1896 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1897                         const char *name, int idx)
1898 {
1899         struct snd_ctl_elem_id id;
1900         memset(&id, 0, sizeof(id));
1901         id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1902         id.index = idx;
1903         if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
1904                 return NULL;
1905         strcpy(id.name, name);
1906         return snd_ctl_find_id(codec->bus->card, &id);
1907 }
1908
1909 /**
1910  * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
1911  * @codec: HD-audio codec
1912  * @name: ctl id name string
1913  *
1914  * Get the control element with the given id string and IFACE_MIXER.
1915  */
1916 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1917                                             const char *name)
1918 {
1919         return _snd_hda_find_mixer_ctl(codec, name, 0);
1920 }
1921 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1922
1923 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name)
1924 {
1925         int idx;
1926         for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
1927                 if (!_snd_hda_find_mixer_ctl(codec, name, idx))
1928                         return idx;
1929         }
1930         return -EBUSY;
1931 }
1932
1933 /**
1934  * snd_hda_ctl_add - Add a control element and assign to the codec
1935  * @codec: HD-audio codec
1936  * @nid: corresponding NID (optional)
1937  * @kctl: the control element to assign
1938  *
1939  * Add the given control element to an array inside the codec instance.
1940  * All control elements belonging to a codec are supposed to be added
1941  * by this function so that a proper clean-up works at the free or
1942  * reconfiguration time.
1943  *
1944  * If non-zero @nid is passed, the NID is assigned to the control element.
1945  * The assignment is shown in the codec proc file.
1946  *
1947  * snd_hda_ctl_add() checks the control subdev id field whether
1948  * #HDA_SUBDEV_NID_FLAG bit is set.  If set (and @nid is zero), the lower
1949  * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
1950  * specifies if kctl->private_value is a HDA amplifier value.
1951  */
1952 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
1953                     struct snd_kcontrol *kctl)
1954 {
1955         int err;
1956         unsigned short flags = 0;
1957         struct hda_nid_item *item;
1958
1959         if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
1960                 flags |= HDA_NID_ITEM_AMP;
1961                 if (nid == 0)
1962                         nid = get_amp_nid_(kctl->private_value);
1963         }
1964         if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
1965                 nid = kctl->id.subdevice & 0xffff;
1966         if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
1967                 kctl->id.subdevice = 0;
1968         err = snd_ctl_add(codec->bus->card, kctl);
1969         if (err < 0)
1970                 return err;
1971         item = snd_array_new(&codec->mixers);
1972         if (!item)
1973                 return -ENOMEM;
1974         item->kctl = kctl;
1975         item->nid = nid;
1976         item->flags = flags;
1977         return 0;
1978 }
1979 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1980
1981 /**
1982  * snd_hda_add_nid - Assign a NID to a control element
1983  * @codec: HD-audio codec
1984  * @nid: corresponding NID (optional)
1985  * @kctl: the control element to assign
1986  * @index: index to kctl
1987  *
1988  * Add the given control element to an array inside the codec instance.
1989  * This function is used when #snd_hda_ctl_add cannot be used for 1:1
1990  * NID:KCTL mapping - for example "Capture Source" selector.
1991  */
1992 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
1993                     unsigned int index, hda_nid_t nid)
1994 {
1995         struct hda_nid_item *item;
1996
1997         if (nid > 0) {
1998                 item = snd_array_new(&codec->nids);
1999                 if (!item)
2000                         return -ENOMEM;
2001                 item->kctl = kctl;
2002                 item->index = index;
2003                 item->nid = nid;
2004                 return 0;
2005         }
2006         printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
2007                kctl->id.name, kctl->id.index, index);
2008         return -EINVAL;
2009 }
2010 EXPORT_SYMBOL_HDA(snd_hda_add_nid);
2011
2012 /**
2013  * snd_hda_ctls_clear - Clear all controls assigned to the given codec
2014  * @codec: HD-audio codec
2015  */
2016 void snd_hda_ctls_clear(struct hda_codec *codec)
2017 {
2018         int i;
2019         struct hda_nid_item *items = codec->mixers.list;
2020         for (i = 0; i < codec->mixers.used; i++)
2021                 snd_ctl_remove(codec->bus->card, items[i].kctl);
2022         snd_array_free(&codec->mixers);
2023         snd_array_free(&codec->nids);
2024 }
2025
2026 /* pseudo device locking
2027  * toggle card->shutdown to allow/disallow the device access (as a hack)
2028  */
2029 static int hda_lock_devices(struct snd_card *card)
2030 {
2031         spin_lock(&card->files_lock);
2032         if (card->shutdown) {
2033                 spin_unlock(&card->files_lock);
2034                 return -EINVAL;
2035         }
2036         card->shutdown = 1;
2037         spin_unlock(&card->files_lock);
2038         return 0;
2039 }
2040
2041 static void hda_unlock_devices(struct snd_card *card)
2042 {
2043         spin_lock(&card->files_lock);
2044         card->shutdown = 0;
2045         spin_unlock(&card->files_lock);
2046 }
2047
2048 /**
2049  * snd_hda_codec_reset - Clear all objects assigned to the codec
2050  * @codec: HD-audio codec
2051  *
2052  * This frees the all PCM and control elements assigned to the codec, and
2053  * clears the caches and restores the pin default configurations.
2054  *
2055  * When a device is being used, it returns -EBSY.  If successfully freed,
2056  * returns zero.
2057  */
2058 int snd_hda_codec_reset(struct hda_codec *codec)
2059 {
2060         struct snd_card *card = codec->bus->card;
2061         int i, pcm;
2062
2063         if (hda_lock_devices(card) < 0)
2064                 return -EBUSY;
2065         /* check whether the codec isn't used by any mixer or PCM streams */
2066         if (!list_empty(&card->ctl_files)) {
2067                 hda_unlock_devices(card);
2068                 return -EBUSY;
2069         }
2070         for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2071                 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2072                 if (!cpcm->pcm)
2073                         continue;
2074                 if (cpcm->pcm->streams[0].substream_opened ||
2075                     cpcm->pcm->streams[1].substream_opened) {
2076                         hda_unlock_devices(card);
2077                         return -EBUSY;
2078                 }
2079         }
2080
2081         /* OK, let it free */
2082
2083 #ifdef CONFIG_SND_HDA_POWER_SAVE
2084         cancel_delayed_work(&codec->power_work);
2085         flush_workqueue(codec->bus->workq);
2086 #endif
2087         snd_hda_ctls_clear(codec);
2088         /* relase PCMs */
2089         for (i = 0; i < codec->num_pcms; i++) {
2090                 if (codec->pcm_info[i].pcm) {
2091                         snd_device_free(card, codec->pcm_info[i].pcm);
2092                         clear_bit(codec->pcm_info[i].device,
2093                                   codec->bus->pcm_dev_bits);
2094                 }
2095         }
2096         if (codec->patch_ops.free)
2097                 codec->patch_ops.free(codec);
2098         codec->proc_widget_hook = NULL;
2099         codec->spec = NULL;
2100         free_hda_cache(&codec->amp_cache);
2101         free_hda_cache(&codec->cmd_cache);
2102         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2103         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2104         /* free only driver_pins so that init_pins + user_pins are restored */
2105         snd_array_free(&codec->driver_pins);
2106         restore_pincfgs(codec);
2107         codec->num_pcms = 0;
2108         codec->pcm_info = NULL;
2109         codec->preset = NULL;
2110         memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2111         codec->slave_dig_outs = NULL;
2112         codec->spdif_status_reset = 0;
2113         module_put(codec->owner);
2114         codec->owner = NULL;
2115
2116         /* allow device access again */
2117         hda_unlock_devices(card);
2118         return 0;
2119 }
2120
2121 /**
2122  * snd_hda_add_vmaster - create a virtual master control and add slaves
2123  * @codec: HD-audio codec
2124  * @name: vmaster control name
2125  * @tlv: TLV data (optional)
2126  * @slaves: slave control names (optional)
2127  *
2128  * Create a virtual master control with the given name.  The TLV data
2129  * must be either NULL or a valid data.
2130  *
2131  * @slaves is a NULL-terminated array of strings, each of which is a
2132  * slave control name.  All controls with these names are assigned to
2133  * the new virtual master control.
2134  *
2135  * This function returns zero if successful or a negative error code.
2136  */
2137 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2138                         unsigned int *tlv, const char * const *slaves)
2139 {
2140         struct snd_kcontrol *kctl;
2141         const char * const *s;
2142         int err;
2143
2144         for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
2145                 ;
2146         if (!*s) {
2147                 snd_printdd("No slave found for %s\n", name);
2148                 return 0;
2149         }
2150         kctl = snd_ctl_make_virtual_master(name, tlv);
2151         if (!kctl)
2152                 return -ENOMEM;
2153         err = snd_hda_ctl_add(codec, 0, kctl);
2154         if (err < 0)
2155                 return err;
2156
2157         for (s = slaves; *s; s++) {
2158                 struct snd_kcontrol *sctl;
2159                 int i = 0;
2160                 for (;;) {
2161                         sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
2162                         if (!sctl) {
2163                                 if (!i)
2164                                         snd_printdd("Cannot find slave %s, "
2165                                                     "skipped\n", *s);
2166                                 break;
2167                         }
2168                         err = snd_ctl_add_slave(kctl, sctl);
2169                         if (err < 0)
2170                                 return err;
2171                         i++;
2172                 }
2173         }
2174         return 0;
2175 }
2176 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
2177
2178 /**
2179  * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
2180  *
2181  * The control element is supposed to have the private_value field
2182  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2183  */
2184 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
2185                                   struct snd_ctl_elem_info *uinfo)
2186 {
2187         int chs = get_amp_channels(kcontrol);
2188
2189         uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2190         uinfo->count = chs == 3 ? 2 : 1;
2191         uinfo->value.integer.min = 0;
2192         uinfo->value.integer.max = 1;
2193         return 0;
2194 }
2195 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
2196
2197 /**
2198  * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2199  *
2200  * The control element is supposed to have the private_value field
2201  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2202  */
2203 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
2204                                  struct snd_ctl_elem_value *ucontrol)
2205 {
2206         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2207         hda_nid_t nid = get_amp_nid(kcontrol);
2208         int chs = get_amp_channels(kcontrol);
2209         int dir = get_amp_direction(kcontrol);
2210         int idx = get_amp_index(kcontrol);
2211         long *valp = ucontrol->value.integer.value;
2212
2213         if (chs & 1)
2214                 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2215                            HDA_AMP_MUTE) ? 0 : 1;
2216         if (chs & 2)
2217                 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2218                          HDA_AMP_MUTE) ? 0 : 1;
2219         return 0;
2220 }
2221 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
2222
2223 /**
2224  * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2225  *
2226  * The control element is supposed to have the private_value field
2227  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2228  */
2229 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
2230                                  struct snd_ctl_elem_value *ucontrol)
2231 {
2232         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2233         hda_nid_t nid = get_amp_nid(kcontrol);
2234         int chs = get_amp_channels(kcontrol);
2235         int dir = get_amp_direction(kcontrol);
2236         int idx = get_amp_index(kcontrol);
2237         long *valp = ucontrol->value.integer.value;
2238         int change = 0;
2239
2240         snd_hda_power_up(codec);
2241         if (chs & 1) {
2242                 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2243                                                   HDA_AMP_MUTE,
2244                                                   *valp ? 0 : HDA_AMP_MUTE);
2245                 valp++;
2246         }
2247         if (chs & 2)
2248                 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2249                                                    HDA_AMP_MUTE,
2250                                                    *valp ? 0 : HDA_AMP_MUTE);
2251         hda_call_check_power_status(codec, nid);
2252         snd_hda_power_down(codec);
2253         return change;
2254 }
2255 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
2256
2257 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2258 /**
2259  * snd_hda_mixer_amp_switch_put_beep - Put callback for a beep AMP switch
2260  *
2261  * This function calls snd_hda_enable_beep_device(), which behaves differently
2262  * depending on beep_mode option.
2263  */
2264 int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol,
2265                                       struct snd_ctl_elem_value *ucontrol)
2266 {
2267         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2268         long *valp = ucontrol->value.integer.value;
2269
2270         snd_hda_enable_beep_device(codec, *valp);
2271         return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2272 }
2273 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put_beep);
2274 #endif /* CONFIG_SND_HDA_INPUT_BEEP */
2275
2276 /*
2277  * bound volume controls
2278  *
2279  * bind multiple volumes (# indices, from 0)
2280  */
2281
2282 #define AMP_VAL_IDX_SHIFT       19
2283 #define AMP_VAL_IDX_MASK        (0x0f<<19)
2284
2285 /**
2286  * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2287  *
2288  * The control element is supposed to have the private_value field
2289  * set up via HDA_BIND_MUTE*() macros.
2290  */
2291 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
2292                                   struct snd_ctl_elem_value *ucontrol)
2293 {
2294         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2295         unsigned long pval;
2296         int err;
2297
2298         mutex_lock(&codec->control_mutex);
2299         pval = kcontrol->private_value;
2300         kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2301         err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2302         kcontrol->private_value = pval;
2303         mutex_unlock(&codec->control_mutex);
2304         return err;
2305 }
2306 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
2307
2308 /**
2309  * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2310  *
2311  * The control element is supposed to have the private_value field
2312  * set up via HDA_BIND_MUTE*() macros.
2313  */
2314 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
2315                                   struct snd_ctl_elem_value *ucontrol)
2316 {
2317         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2318         unsigned long pval;
2319         int i, indices, err = 0, change = 0;
2320
2321         mutex_lock(&codec->control_mutex);
2322         pval = kcontrol->private_value;
2323         indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2324         for (i = 0; i < indices; i++) {
2325                 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2326                         (i << AMP_VAL_IDX_SHIFT);
2327                 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2328                 if (err < 0)
2329                         break;
2330                 change |= err;
2331         }
2332         kcontrol->private_value = pval;
2333         mutex_unlock(&codec->control_mutex);
2334         return err < 0 ? err : change;
2335 }
2336 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
2337
2338 /**
2339  * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2340  *
2341  * The control element is supposed to have the private_value field
2342  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2343  */
2344 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
2345                                  struct snd_ctl_elem_info *uinfo)
2346 {
2347         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2348         struct hda_bind_ctls *c;
2349         int err;
2350
2351         mutex_lock(&codec->control_mutex);
2352         c = (struct hda_bind_ctls *)kcontrol->private_value;
2353         kcontrol->private_value = *c->values;
2354         err = c->ops->info(kcontrol, uinfo);
2355         kcontrol->private_value = (long)c;
2356         mutex_unlock(&codec->control_mutex);
2357         return err;
2358 }
2359 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
2360
2361 /**
2362  * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2363  *
2364  * The control element is supposed to have the private_value field
2365  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2366  */
2367 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
2368                                 struct snd_ctl_elem_value *ucontrol)
2369 {
2370         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2371         struct hda_bind_ctls *c;
2372         int err;
2373
2374         mutex_lock(&codec->control_mutex);
2375         c = (struct hda_bind_ctls *)kcontrol->private_value;
2376         kcontrol->private_value = *c->values;
2377         err = c->ops->get(kcontrol, ucontrol);
2378         kcontrol->private_value = (long)c;
2379         mutex_unlock(&codec->control_mutex);
2380         return err;
2381 }
2382 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
2383
2384 /**
2385  * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2386  *
2387  * The control element is supposed to have the private_value field
2388  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2389  */
2390 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
2391                                 struct snd_ctl_elem_value *ucontrol)
2392 {
2393         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2394         struct hda_bind_ctls *c;
2395         unsigned long *vals;
2396         int err = 0, change = 0;
2397
2398         mutex_lock(&codec->control_mutex);
2399         c = (struct hda_bind_ctls *)kcontrol->private_value;
2400         for (vals = c->values; *vals; vals++) {
2401                 kcontrol->private_value = *vals;
2402                 err = c->ops->put(kcontrol, ucontrol);
2403                 if (err < 0)
2404                         break;
2405                 change |= err;
2406         }
2407         kcontrol->private_value = (long)c;
2408         mutex_unlock(&codec->control_mutex);
2409         return err < 0 ? err : change;
2410 }
2411 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
2412
2413 /**
2414  * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
2415  *
2416  * The control element is supposed to have the private_value field
2417  * set up via HDA_BIND_VOL() macro.
2418  */
2419 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2420                            unsigned int size, unsigned int __user *tlv)
2421 {
2422         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2423         struct hda_bind_ctls *c;
2424         int err;
2425
2426         mutex_lock(&codec->control_mutex);
2427         c = (struct hda_bind_ctls *)kcontrol->private_value;
2428         kcontrol->private_value = *c->values;
2429         err = c->ops->tlv(kcontrol, op_flag, size, tlv);
2430         kcontrol->private_value = (long)c;
2431         mutex_unlock(&codec->control_mutex);
2432         return err;
2433 }
2434 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
2435
2436 struct hda_ctl_ops snd_hda_bind_vol = {
2437         .info = snd_hda_mixer_amp_volume_info,
2438         .get = snd_hda_mixer_amp_volume_get,
2439         .put = snd_hda_mixer_amp_volume_put,
2440         .tlv = snd_hda_mixer_amp_tlv
2441 };
2442 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
2443
2444 struct hda_ctl_ops snd_hda_bind_sw = {
2445         .info = snd_hda_mixer_amp_switch_info,
2446         .get = snd_hda_mixer_amp_switch_get,
2447         .put = snd_hda_mixer_amp_switch_put,
2448         .tlv = snd_hda_mixer_amp_tlv
2449 };
2450 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
2451
2452 /*
2453  * SPDIF out controls
2454  */
2455
2456 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
2457                                    struct snd_ctl_elem_info *uinfo)
2458 {
2459         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2460         uinfo->count = 1;
2461         return 0;
2462 }
2463
2464 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
2465                                    struct snd_ctl_elem_value *ucontrol)
2466 {
2467         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2468                                            IEC958_AES0_NONAUDIO |
2469                                            IEC958_AES0_CON_EMPHASIS_5015 |
2470                                            IEC958_AES0_CON_NOT_COPYRIGHT;
2471         ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
2472                                            IEC958_AES1_CON_ORIGINAL;
2473         return 0;
2474 }
2475
2476 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
2477                                    struct snd_ctl_elem_value *ucontrol)
2478 {
2479         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2480                                            IEC958_AES0_NONAUDIO |
2481                                            IEC958_AES0_PRO_EMPHASIS_5015;
2482         return 0;
2483 }
2484
2485 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
2486                                      struct snd_ctl_elem_value *ucontrol)
2487 {
2488         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2489
2490         ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
2491         ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
2492         ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
2493         ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
2494
2495         return 0;
2496 }
2497
2498 /* convert from SPDIF status bits to HDA SPDIF bits
2499  * bit 0 (DigEn) is always set zero (to be filled later)
2500  */
2501 static unsigned short convert_from_spdif_status(unsigned int sbits)
2502 {
2503         unsigned short val = 0;
2504
2505         if (sbits & IEC958_AES0_PROFESSIONAL)
2506                 val |= AC_DIG1_PROFESSIONAL;
2507         if (sbits & IEC958_AES0_NONAUDIO)
2508                 val |= AC_DIG1_NONAUDIO;
2509         if (sbits & IEC958_AES0_PROFESSIONAL) {
2510                 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
2511                     IEC958_AES0_PRO_EMPHASIS_5015)
2512                         val |= AC_DIG1_EMPHASIS;
2513         } else {
2514                 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
2515                     IEC958_AES0_CON_EMPHASIS_5015)
2516                         val |= AC_DIG1_EMPHASIS;
2517                 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
2518                         val |= AC_DIG1_COPYRIGHT;
2519                 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
2520                         val |= AC_DIG1_LEVEL;
2521                 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
2522         }
2523         return val;
2524 }
2525
2526 /* convert to SPDIF status bits from HDA SPDIF bits
2527  */
2528 static unsigned int convert_to_spdif_status(unsigned short val)
2529 {
2530         unsigned int sbits = 0;
2531
2532         if (val & AC_DIG1_NONAUDIO)
2533                 sbits |= IEC958_AES0_NONAUDIO;
2534         if (val & AC_DIG1_PROFESSIONAL)
2535                 sbits |= IEC958_AES0_PROFESSIONAL;
2536         if (sbits & IEC958_AES0_PROFESSIONAL) {
2537                 if (sbits & AC_DIG1_EMPHASIS)
2538                         sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
2539         } else {
2540                 if (val & AC_DIG1_EMPHASIS)
2541                         sbits |= IEC958_AES0_CON_EMPHASIS_5015;
2542                 if (!(val & AC_DIG1_COPYRIGHT))
2543                         sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
2544                 if (val & AC_DIG1_LEVEL)
2545                         sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
2546                 sbits |= val & (0x7f << 8);
2547         }
2548         return sbits;
2549 }
2550
2551 /* set digital convert verbs both for the given NID and its slaves */
2552 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
2553                         int verb, int val)
2554 {
2555         hda_nid_t *d;
2556
2557         snd_hda_codec_write_cache(codec, nid, 0, verb, val);
2558         d = codec->slave_dig_outs;
2559         if (!d)
2560                 return;
2561         for (; *d; d++)
2562                 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
2563 }
2564
2565 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
2566                                        int dig1, int dig2)
2567 {
2568         if (dig1 != -1)
2569                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
2570         if (dig2 != -1)
2571                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
2572 }
2573
2574 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
2575                                      struct snd_ctl_elem_value *ucontrol)
2576 {
2577         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2578         hda_nid_t nid = kcontrol->private_value;
2579         unsigned short val;
2580         int change;
2581
2582         mutex_lock(&codec->spdif_mutex);
2583         codec->spdif_status = ucontrol->value.iec958.status[0] |
2584                 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
2585                 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
2586                 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
2587         val = convert_from_spdif_status(codec->spdif_status);
2588         val |= codec->spdif_ctls & 1;
2589         change = codec->spdif_ctls != val;
2590         codec->spdif_ctls = val;
2591
2592         if (change)
2593                 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
2594
2595         mutex_unlock(&codec->spdif_mutex);
2596         return change;
2597 }
2598
2599 #define snd_hda_spdif_out_switch_info   snd_ctl_boolean_mono_info
2600
2601 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
2602                                         struct snd_ctl_elem_value *ucontrol)
2603 {
2604         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2605
2606         ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
2607         return 0;
2608 }
2609
2610 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
2611                                         struct snd_ctl_elem_value *ucontrol)
2612 {
2613         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2614         hda_nid_t nid = kcontrol->private_value;
2615         unsigned short val;
2616         int change;
2617
2618         mutex_lock(&codec->spdif_mutex);
2619         val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
2620         if (ucontrol->value.integer.value[0])
2621                 val |= AC_DIG1_ENABLE;
2622         change = codec->spdif_ctls != val;
2623         if (change) {
2624                 codec->spdif_ctls = val;
2625                 set_dig_out_convert(codec, nid, val & 0xff, -1);
2626                 /* unmute amp switch (if any) */
2627                 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
2628                     (val & AC_DIG1_ENABLE))
2629                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2630                                                  HDA_AMP_MUTE, 0);
2631         }
2632         mutex_unlock(&codec->spdif_mutex);
2633         return change;
2634 }
2635
2636 static struct snd_kcontrol_new dig_mixes[] = {
2637         {
2638                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2639                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2640                 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
2641                 .info = snd_hda_spdif_mask_info,
2642                 .get = snd_hda_spdif_cmask_get,
2643         },
2644         {
2645                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2646                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2647                 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
2648                 .info = snd_hda_spdif_mask_info,
2649                 .get = snd_hda_spdif_pmask_get,
2650         },
2651         {
2652                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2653                 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
2654                 .info = snd_hda_spdif_mask_info,
2655                 .get = snd_hda_spdif_default_get,
2656                 .put = snd_hda_spdif_default_put,
2657         },
2658         {
2659                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2660                 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
2661                 .info = snd_hda_spdif_out_switch_info,
2662                 .get = snd_hda_spdif_out_switch_get,
2663                 .put = snd_hda_spdif_out_switch_put,
2664         },
2665         { } /* end */
2666 };
2667
2668 /**
2669  * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2670  * @codec: the HDA codec
2671  * @nid: audio out widget NID
2672  *
2673  * Creates controls related with the SPDIF output.
2674  * Called from each patch supporting the SPDIF out.
2675  *
2676  * Returns 0 if successful, or a negative error code.
2677  */
2678 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2679 {
2680         int err;
2681         struct snd_kcontrol *kctl;
2682         struct snd_kcontrol_new *dig_mix;
2683         int idx;
2684
2685         idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch");
2686         if (idx < 0) {
2687                 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2688                 return -EBUSY;
2689         }
2690         for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2691                 kctl = snd_ctl_new1(dig_mix, codec);
2692                 if (!kctl)
2693                         return -ENOMEM;
2694                 kctl->id.index = idx;
2695                 kctl->private_value = nid;
2696                 err = snd_hda_ctl_add(codec, nid, kctl);
2697                 if (err < 0)
2698                         return err;
2699         }
2700         codec->spdif_ctls =
2701                 snd_hda_codec_read(codec, nid, 0,
2702                                    AC_VERB_GET_DIGI_CONVERT_1, 0);
2703         codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2704         return 0;
2705 }
2706 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2707
2708 /*
2709  * SPDIF sharing with analog output
2710  */
2711 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2712                               struct snd_ctl_elem_value *ucontrol)
2713 {
2714         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2715         ucontrol->value.integer.value[0] = mout->share_spdif;
2716         return 0;
2717 }
2718
2719 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2720                               struct snd_ctl_elem_value *ucontrol)
2721 {
2722         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2723         mout->share_spdif = !!ucontrol->value.integer.value[0];
2724         return 0;
2725 }
2726
2727 static struct snd_kcontrol_new spdif_share_sw = {
2728         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2729         .name = "IEC958 Default PCM Playback Switch",
2730         .info = snd_ctl_boolean_mono_info,
2731         .get = spdif_share_sw_get,
2732         .put = spdif_share_sw_put,
2733 };
2734
2735 /**
2736  * snd_hda_create_spdif_share_sw - create Default PCM switch
2737  * @codec: the HDA codec
2738  * @mout: multi-out instance
2739  */
2740 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2741                                   struct hda_multi_out *mout)
2742 {
2743         if (!mout->dig_out_nid)
2744                 return 0;
2745         /* ATTENTION: here mout is passed as private_data, instead of codec */
2746         return snd_hda_ctl_add(codec, mout->dig_out_nid,
2747                               snd_ctl_new1(&spdif_share_sw, mout));
2748 }
2749 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2750
2751 /*
2752  * SPDIF input
2753  */
2754
2755 #define snd_hda_spdif_in_switch_info    snd_hda_spdif_out_switch_info
2756
2757 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2758                                        struct snd_ctl_elem_value *ucontrol)
2759 {
2760         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2761
2762         ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2763         return 0;
2764 }
2765
2766 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2767                                        struct snd_ctl_elem_value *ucontrol)
2768 {
2769         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2770         hda_nid_t nid = kcontrol->private_value;
2771         unsigned int val = !!ucontrol->value.integer.value[0];
2772         int change;
2773
2774         mutex_lock(&codec->spdif_mutex);
2775         change = codec->spdif_in_enable != val;
2776         if (change) {
2777                 codec->spdif_in_enable = val;
2778                 snd_hda_codec_write_cache(codec, nid, 0,
2779                                           AC_VERB_SET_DIGI_CONVERT_1, val);
2780         }
2781         mutex_unlock(&codec->spdif_mutex);
2782         return change;
2783 }
2784
2785 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2786                                        struct snd_ctl_elem_value *ucontrol)
2787 {
2788         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2789         hda_nid_t nid = kcontrol->private_value;
2790         unsigned short val;
2791         unsigned int sbits;
2792
2793         val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2794         sbits = convert_to_spdif_status(val);
2795         ucontrol->value.iec958.status[0] = sbits;
2796         ucontrol->value.iec958.status[1] = sbits >> 8;
2797         ucontrol->value.iec958.status[2] = sbits >> 16;
2798         ucontrol->value.iec958.status[3] = sbits >> 24;
2799         return 0;
2800 }
2801
2802 static struct snd_kcontrol_new dig_in_ctls[] = {
2803         {
2804                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2805                 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
2806                 .info = snd_hda_spdif_in_switch_info,
2807                 .get = snd_hda_spdif_in_switch_get,
2808                 .put = snd_hda_spdif_in_switch_put,
2809         },
2810         {
2811                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2812                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2813                 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
2814                 .info = snd_hda_spdif_mask_info,
2815                 .get = snd_hda_spdif_in_status_get,
2816         },
2817         { } /* end */
2818 };
2819
2820 /**
2821  * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2822  * @codec: the HDA codec
2823  * @nid: audio in widget NID
2824  *
2825  * Creates controls related with the SPDIF input.
2826  * Called from each patch supporting the SPDIF in.
2827  *
2828  * Returns 0 if successful, or a negative error code.
2829  */
2830 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2831 {
2832         int err;
2833         struct snd_kcontrol *kctl;
2834         struct snd_kcontrol_new *dig_mix;
2835         int idx;
2836
2837         idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch");
2838         if (idx < 0) {
2839                 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2840                 return -EBUSY;
2841         }
2842         for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2843                 kctl = snd_ctl_new1(dig_mix, codec);
2844                 if (!kctl)
2845                         return -ENOMEM;
2846                 kctl->private_value = nid;
2847                 err = snd_hda_ctl_add(codec, nid, kctl);
2848                 if (err < 0)
2849                         return err;
2850         }
2851         codec->spdif_in_enable =
2852                 snd_hda_codec_read(codec, nid, 0,
2853                                    AC_VERB_GET_DIGI_CONVERT_1, 0) &
2854                 AC_DIG1_ENABLE;
2855         return 0;
2856 }
2857 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2858
2859 #ifdef SND_HDA_NEEDS_RESUME
2860 /*
2861  * command cache
2862  */
2863
2864 /* build a 32bit cache key with the widget id and the command parameter */
2865 #define build_cmd_cache_key(nid, verb)  ((verb << 8) | nid)
2866 #define get_cmd_cache_nid(key)          ((key) & 0xff)
2867 #define get_cmd_cache_cmd(key)          (((key) >> 8) & 0xffff)
2868
2869 /**
2870  * snd_hda_codec_write_cache - send a single command with caching
2871  * @codec: the HDA codec
2872  * @nid: NID to send the command
2873  * @direct: direct flag
2874  * @verb: the verb to send
2875  * @parm: the parameter for the verb
2876  *
2877  * Send a single command without waiting for response.
2878  *
2879  * Returns 0 if successful, or a negative error code.
2880  */
2881 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2882                               int direct, unsigned int verb, unsigned int parm)
2883 {
2884         int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
2885         struct hda_cache_head *c;
2886         u32 key;
2887
2888         if (err < 0)
2889                 return err;
2890         /* parm may contain the verb stuff for get/set amp */
2891         verb = verb | (parm >> 8);
2892         parm &= 0xff;
2893         key = build_cmd_cache_key(nid, verb);
2894         mutex_lock(&codec->bus->cmd_mutex);
2895         c = get_alloc_hash(&codec->cmd_cache, key);
2896         if (c)
2897                 c->val = parm;
2898         mutex_unlock(&codec->bus->cmd_mutex);
2899         return 0;
2900 }
2901 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2902
2903 /**
2904  * snd_hda_codec_update_cache - check cache and write the cmd only when needed
2905  * @codec: the HDA codec
2906  * @nid: NID to send the command
2907  * @direct: direct flag
2908  * @verb: the verb to send
2909  * @parm: the parameter for the verb
2910  *
2911  * This function works like snd_hda_codec_write_cache(), but it doesn't send
2912  * command if the parameter is already identical with the cached value.
2913  * If not, it sends the command and refreshes the cache.
2914  *
2915  * Returns 0 if successful, or a negative error code.
2916  */
2917 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
2918                                int direct, unsigned int verb, unsigned int parm)
2919 {
2920         struct hda_cache_head *c;
2921         u32 key;
2922
2923         /* parm may contain the verb stuff for get/set amp */
2924         verb = verb | (parm >> 8);
2925         parm &= 0xff;
2926         key = build_cmd_cache_key(nid, verb);
2927         mutex_lock(&codec->bus->cmd_mutex);
2928         c = get_hash(&codec->cmd_cache, key);
2929         if (c && c->val == parm) {
2930                 mutex_unlock(&codec->bus->cmd_mutex);
2931                 return 0;
2932         }
2933         mutex_unlock(&codec->bus->cmd_mutex);
2934         return snd_hda_codec_write_cache(codec, nid, direct, verb, parm);
2935 }
2936 EXPORT_SYMBOL_HDA(snd_hda_codec_update_cache);
2937
2938 /**
2939  * snd_hda_codec_resume_cache - Resume the all commands from the cache
2940  * @codec: HD-audio codec
2941  *
2942  * Execute all verbs recorded in the command caches to resume.
2943  */
2944 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2945 {
2946         struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2947         int i;
2948
2949         for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2950                 u32 key = buffer->key;
2951                 if (!key)
2952                         continue;
2953                 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2954                                     get_cmd_cache_cmd(key), buffer->val);
2955         }
2956 }
2957 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2958
2959 /**
2960  * snd_hda_sequence_write_cache - sequence writes with caching
2961  * @codec: the HDA codec
2962  * @seq: VERB array to send
2963  *
2964  * Send the commands sequentially from the given array.
2965  * Thte commands are recorded on cache for power-save and resume.
2966  * The array must be terminated with NID=0.
2967  */
2968 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2969                                   const struct hda_verb *seq)
2970 {
2971         for (; seq->nid; seq++)
2972                 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2973                                           seq->param);
2974 }
2975 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2976 #endif /* SND_HDA_NEEDS_RESUME */
2977
2978 /*
2979  * set power state of the codec
2980  */
2981 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2982                                 unsigned int power_state)
2983 {
2984         hda_nid_t nid;
2985         int i;
2986
2987         /* this delay seems necessary to avoid click noise at power-down */
2988         if (power_state == AC_PWRST_D3)
2989                 msleep(100);
2990         snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2991                             power_state);
2992         /* partial workaround for "azx_get_response timeout" */
2993         if (power_state == AC_PWRST_D0 &&
2994             (codec->vendor_id & 0xffff0000) == 0x14f10000)
2995                 msleep(10);
2996
2997         nid = codec->start_nid;
2998         for (i = 0; i < codec->num_nodes; i++, nid++) {
2999                 unsigned int wcaps = get_wcaps(codec, nid);
3000                 if (wcaps & AC_WCAP_POWER) {
3001                         unsigned int wid_type = get_wcaps_type(wcaps);
3002                         if (power_state == AC_PWRST_D3 &&
3003                             wid_type == AC_WID_PIN) {
3004                                 unsigned int pincap;
3005                                 /*
3006                                  * don't power down the widget if it controls
3007                                  * eapd and EAPD_BTLENABLE is set.
3008                                  */
3009                                 pincap = snd_hda_query_pin_caps(codec, nid);
3010                                 if (pincap & AC_PINCAP_EAPD) {
3011                                         int eapd = snd_hda_codec_read(codec,
3012                                                 nid, 0,
3013                                                 AC_VERB_GET_EAPD_BTLENABLE, 0);
3014                                         eapd &= 0x02;
3015                                         if (eapd)
3016                                                 continue;
3017                                 }
3018                         }
3019                         snd_hda_codec_write(codec, nid, 0,
3020                                             AC_VERB_SET_POWER_STATE,
3021                                             power_state);
3022                 }
3023         }
3024
3025         if (power_state == AC_PWRST_D0) {
3026                 unsigned long end_time;
3027                 int state;
3028                 /* wait until the codec reachs to D0 */
3029                 end_time = jiffies + msecs_to_jiffies(500);
3030                 do {
3031                         state = snd_hda_codec_read(codec, fg, 0,
3032                                                    AC_VERB_GET_POWER_STATE, 0);
3033                         if (state == power_state)
3034                                 break;
3035                         msleep(1);
3036                 } while (time_after_eq(end_time, jiffies));
3037         }
3038 }
3039
3040 #ifdef CONFIG_SND_HDA_HWDEP
3041 /* execute additional init verbs */
3042 static void hda_exec_init_verbs(struct hda_codec *codec)
3043 {
3044         if (codec->init_verbs.list)
3045                 snd_hda_sequence_write(codec, codec->init_verbs.list);
3046 }
3047 #else
3048 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
3049 #endif
3050
3051 #ifdef SND_HDA_NEEDS_RESUME
3052 /*
3053  * call suspend and power-down; used both from PM and power-save
3054  */
3055 static void hda_call_codec_suspend(struct hda_codec *codec)
3056 {
3057         if (codec->patch_ops.suspend)
3058                 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
3059         hda_cleanup_all_streams(codec);
3060         hda_set_power_state(codec,
3061                             codec->afg ? codec->afg : codec->mfg,
3062                             AC_PWRST_D3);
3063 #ifdef CONFIG_SND_HDA_POWER_SAVE
3064         snd_hda_update_power_acct(codec);
3065         cancel_delayed_work(&codec->power_work);
3066         codec->power_on = 0;
3067         codec->power_transition = 0;
3068         codec->power_jiffies = jiffies;
3069 #endif
3070 }
3071
3072 /*
3073  * kick up codec; used both from PM and power-save
3074  */
3075 static void hda_call_codec_resume(struct hda_codec *codec)
3076 {
3077         hda_set_power_state(codec,
3078                             codec->afg ? codec->afg : codec->mfg,
3079                             AC_PWRST_D0);
3080         restore_pincfgs(codec); /* restore all current pin configs */
3081         restore_shutup_pins(codec);
3082         hda_exec_init_verbs(codec);
3083         if (codec->patch_ops.resume)
3084                 codec->patch_ops.resume(codec);
3085         else {
3086                 if (codec->patch_ops.init)
3087                         codec->patch_ops.init(codec);
3088                 snd_hda_codec_resume_amp(codec);
3089                 snd_hda_codec_resume_cache(codec);
3090         }
3091 }
3092 #endif /* SND_HDA_NEEDS_RESUME */
3093
3094
3095 /**
3096  * snd_hda_build_controls - build mixer controls
3097  * @bus: the BUS
3098  *
3099  * Creates mixer controls for each codec included in the bus.
3100  *
3101  * Returns 0 if successful, otherwise a negative error code.
3102  */
3103 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
3104 {
3105         struct hda_codec *codec;
3106
3107         list_for_each_entry(codec, &bus->codec_list, list) {
3108                 int err = snd_hda_codec_build_controls(codec);
3109                 if (err < 0) {
3110                         printk(KERN_ERR "hda_codec: cannot build controls "
3111                                "for #%d (error %d)\n", codec->addr, err);
3112                         err = snd_hda_codec_reset(codec);
3113                         if (err < 0) {
3114                                 printk(KERN_ERR
3115                                        "hda_codec: cannot revert codec\n");
3116                                 return err;
3117                         }
3118                 }
3119         }
3120         return 0;
3121 }
3122 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
3123
3124 int snd_hda_codec_build_controls(struct hda_codec *codec)
3125 {
3126         int err = 0;
3127         hda_exec_init_verbs(codec);
3128         /* continue to initialize... */
3129         if (codec->patch_ops.init)
3130                 err = codec->patch_ops.init(codec);
3131         if (!err && codec->patch_ops.build_controls)
3132                 err = codec->patch_ops.build_controls(codec);
3133         if (err < 0)
3134                 return err;
3135         return 0;
3136 }
3137
3138 /*
3139  * stream formats
3140  */
3141 struct hda_rate_tbl {
3142         unsigned int hz;
3143         unsigned int alsa_bits;
3144         unsigned int hda_fmt;
3145 };
3146
3147 /* rate = base * mult / div */
3148 #define HDA_RATE(base, mult, div) \
3149         (AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
3150          (((div) - 1) << AC_FMT_DIV_SHIFT))
3151
3152 static struct hda_rate_tbl rate_bits[] = {
3153         /* rate in Hz, ALSA rate bitmask, HDA format value */
3154
3155         /* autodetected value used in snd_hda_query_supported_pcm */
3156         { 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
3157         { 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
3158         { 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
3159         { 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
3160         { 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
3161         { 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
3162         { 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
3163         { 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
3164         { 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
3165         { 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
3166         { 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
3167 #define AC_PAR_PCM_RATE_BITS    11
3168         /* up to bits 10, 384kHZ isn't supported properly */
3169
3170         /* not autodetected value */
3171         { 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
3172
3173         { 0 } /* terminator */
3174 };
3175
3176 /**
3177  * snd_hda_calc_stream_format - calculate format bitset
3178  * @rate: the sample rate
3179  * @channels: the number of channels
3180  * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
3181  * @maxbps: the max. bps
3182  *
3183  * Calculate the format bitset from the given rate, channels and th PCM format.
3184  *
3185  * Return zero if invalid.
3186  */
3187 unsigned int snd_hda_calc_stream_format(unsigned int rate,
3188                                         unsigned int channels,
3189                                         unsigned int format,
3190                                         unsigned int maxbps,
3191                                         unsigned short spdif_ctls)
3192 {
3193         int i;
3194         unsigned int val = 0;
3195
3196         for (i = 0; rate_bits[i].hz; i++)
3197                 if (rate_bits[i].hz == rate) {
3198                         val = rate_bits[i].hda_fmt;
3199                         break;
3200                 }
3201         if (!rate_bits[i].hz) {
3202                 snd_printdd("invalid rate %d\n", rate);
3203                 return 0;
3204         }
3205
3206         if (channels == 0 || channels > 8) {
3207                 snd_printdd("invalid channels %d\n", channels);
3208                 return 0;
3209         }
3210         val |= channels - 1;
3211
3212         switch (snd_pcm_format_width(format)) {
3213         case 8:
3214                 val |= AC_FMT_BITS_8;
3215                 break;
3216         case 16:
3217                 val |= AC_FMT_BITS_16;
3218                 break;
3219         case 20:
3220         case 24:
3221         case 32:
3222                 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
3223                         val |= AC_FMT_BITS_32;
3224                 else if (maxbps >= 24)
3225                         val |= AC_FMT_BITS_24;
3226                 else
3227                         val |= AC_FMT_BITS_20;
3228                 break;
3229         default:
3230                 snd_printdd("invalid format width %d\n",
3231                             snd_pcm_format_width(format));
3232                 return 0;
3233         }
3234
3235         if (spdif_ctls & AC_DIG1_NONAUDIO)
3236                 val |= AC_FMT_TYPE_NON_PCM;
3237
3238         return val;
3239 }
3240 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
3241
3242 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3243 {
3244         unsigned int val = 0;
3245         if (nid != codec->afg &&
3246             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
3247                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
3248         if (!val || val == -1)
3249                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
3250         if (!val || val == -1)
3251                 return 0;
3252         return val;
3253 }
3254
3255 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3256 {
3257         return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
3258                                get_pcm_param);
3259 }
3260
3261 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
3262 {
3263         unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
3264         if (!streams || streams == -1)
3265                 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
3266         if (!streams || streams == -1)
3267                 return 0;
3268         return streams;
3269 }
3270
3271 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
3272 {
3273         return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
3274                                get_stream_param);
3275 }
3276
3277 /**
3278  * snd_hda_query_supported_pcm - query the supported PCM rates and formats
3279  * @codec: the HDA codec
3280  * @nid: NID to query
3281  * @ratesp: the pointer to store the detected rate bitflags
3282  * @formatsp: the pointer to store the detected formats
3283  * @bpsp: the pointer to store the detected format widths
3284  *
3285  * Queries the supported PCM rates and formats.  The NULL @ratesp, @formatsp
3286  * or @bsps argument is ignored.
3287  *
3288  * Returns 0 if successful, otherwise a negative error code.
3289  */
3290 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
3291                                 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
3292 {
3293         unsigned int i, val, wcaps;
3294
3295         wcaps = get_wcaps(codec, nid);
3296         val = query_pcm_param(codec, nid);
3297
3298         if (ratesp) {
3299                 u32 rates = 0;
3300                 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
3301                         if (val & (1 << i))
3302                                 rates |= rate_bits[i].alsa_bits;
3303                 }
3304                 if (rates == 0) {
3305                         snd_printk(KERN_ERR "hda_codec: rates == 0 "
3306                                    "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3307                                         nid, val,
3308                                         (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
3309                         return -EIO;
3310                 }
3311                 *ratesp = rates;
3312         }
3313
3314         if (formatsp || bpsp) {
3315                 u64 formats = 0;
3316                 unsigned int streams, bps;
3317
3318                 streams = query_stream_param(codec, nid);
3319                 if (!streams)
3320                         return -EIO;
3321
3322                 bps = 0;
3323                 if (streams & AC_SUPFMT_PCM) {
3324                         if (val & AC_SUPPCM_BITS_8) {
3325                                 formats |= SNDRV_PCM_FMTBIT_U8;
3326                                 bps = 8;
3327                         }
3328                         if (val & AC_SUPPCM_BITS_16) {
3329                                 formats |= SNDRV_PCM_FMTBIT_S16_LE;
3330                                 bps = 16;
3331                         }
3332                         if (wcaps & AC_WCAP_DIGITAL) {
3333                                 if (val & AC_SUPPCM_BITS_32)
3334                                         formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
3335                                 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
3336                                         formats |= SNDRV_PCM_FMTBIT_S32_LE;
3337                                 if (val & AC_SUPPCM_BITS_24)
3338                                         bps = 24;
3339                                 else if (val & AC_SUPPCM_BITS_20)
3340                                         bps = 20;
3341                         } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
3342                                           AC_SUPPCM_BITS_32)) {
3343                                 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3344                                 if (val & AC_SUPPCM_BITS_32)
3345                                         bps = 32;
3346                                 else if (val & AC_SUPPCM_BITS_24)
3347                                         bps = 24;
3348                                 else if (val & AC_SUPPCM_BITS_20)
3349                                         bps = 20;
3350                         }
3351                 }
3352                 if (streams & AC_SUPFMT_FLOAT32) {
3353                         formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
3354                         if (!bps)
3355                                 bps = 32;
3356                 }
3357                 if (streams == AC_SUPFMT_AC3) {
3358                         /* should be exclusive */
3359                         /* temporary hack: we have still no proper support
3360                          * for the direct AC3 stream...
3361                          */
3362                         formats |= SNDRV_PCM_FMTBIT_U8;
3363                         bps = 8;
3364                 }
3365                 if (formats == 0) {
3366                         snd_printk(KERN_ERR "hda_codec: formats == 0 "
3367                                    "(nid=0x%x, val=0x%x, ovrd=%i, "
3368                                    "streams=0x%x)\n",
3369                                         nid, val,
3370                                         (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
3371                                         streams);
3372                         return -EIO;
3373                 }
3374                 if (formatsp)
3375                         *formatsp = formats;
3376                 if (bpsp)
3377                         *bpsp = bps;
3378         }
3379
3380         return 0;
3381 }
3382
3383 /**
3384  * snd_hda_is_supported_format - Check the validity of the format
3385  * @codec: HD-audio codec
3386  * @nid: NID to check
3387  * @format: the HD-audio format value to check
3388  *
3389  * Check whether the given node supports the format value.
3390  *
3391  * Returns 1 if supported, 0 if not.
3392  */
3393 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
3394                                 unsigned int format)
3395 {
3396         int i;
3397         unsigned int val = 0, rate, stream;
3398
3399         val = query_pcm_param(codec, nid);
3400         if (!val)
3401                 return 0;
3402
3403         rate = format & 0xff00;
3404         for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
3405                 if (rate_bits[i].hda_fmt == rate) {
3406                         if (val & (1 << i))
3407                                 break;
3408                         return 0;
3409                 }
3410         if (i >= AC_PAR_PCM_RATE_BITS)
3411                 return 0;
3412
3413         stream = query_stream_param(codec, nid);
3414         if (!stream)
3415                 return 0;
3416
3417         if (stream & AC_SUPFMT_PCM) {
3418                 switch (format & 0xf0) {
3419                 case 0x00:
3420                         if (!(val & AC_SUPPCM_BITS_8))
3421                                 return 0;
3422                         break;
3423                 case 0x10:
3424                         if (!(val & AC_SUPPCM_BITS_16))
3425                                 return 0;
3426                         break;
3427                 case 0x20:
3428                         if (!(val & AC_SUPPCM_BITS_20))
3429                                 return 0;
3430                         break;
3431                 case 0x30:
3432                         if (!(val & AC_SUPPCM_BITS_24))
3433                                 return 0;
3434                         break;
3435                 case 0x40:
3436                         if (!(val & AC_SUPPCM_BITS_32))
3437                                 return 0;
3438                         break;
3439                 default:
3440                         return 0;
3441                 }
3442         } else {
3443                 /* FIXME: check for float32 and AC3? */
3444         }
3445
3446         return 1;
3447 }
3448 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
3449
3450 /*
3451  * PCM stuff
3452  */
3453 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
3454                                       struct hda_codec *codec,
3455                                       struct snd_pcm_substream *substream)
3456 {
3457         return 0;
3458 }
3459
3460 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
3461                                    struct hda_codec *codec,
3462                                    unsigned int stream_tag,
3463                                    unsigned int format,
3464                                    struct snd_pcm_substream *substream)
3465 {
3466         snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
3467         return 0;
3468 }
3469
3470 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
3471                                    struct hda_codec *codec,
3472                                    struct snd_pcm_substream *substream)
3473 {
3474         snd_hda_codec_cleanup_stream(codec, hinfo->nid);
3475         return 0;
3476 }
3477
3478 static int set_pcm_default_values(struct hda_codec *codec,
3479                                   struct hda_pcm_stream *info)
3480 {
3481         int err;
3482
3483         /* query support PCM information from the given NID */
3484         if (info->nid && (!info->rates || !info->formats)) {
3485                 err = snd_hda_query_supported_pcm(codec, info->nid,
3486                                 info->rates ? NULL : &info->rates,
3487                                 info->formats ? NULL : &info->formats,
3488                                 info->maxbps ? NULL : &info->maxbps);
3489                 if (err < 0)
3490                         return err;
3491         }
3492         if (info->ops.open == NULL)
3493                 info->ops.open = hda_pcm_default_open_close;
3494         if (info->ops.close == NULL)
3495                 info->ops.close = hda_pcm_default_open_close;
3496         if (info->ops.prepare == NULL) {
3497                 if (snd_BUG_ON(!info->nid))
3498                         return -EINVAL;
3499                 info->ops.prepare = hda_pcm_default_prepare;
3500         }
3501         if (info->ops.cleanup == NULL) {
3502                 if (snd_BUG_ON(!info->nid))
3503                         return -EINVAL;
3504                 info->ops.cleanup = hda_pcm_default_cleanup;
3505         }
3506         return 0;
3507 }
3508
3509 /*
3510  * codec prepare/cleanup entries
3511  */
3512 int snd_hda_codec_prepare(struct hda_codec *codec,
3513                           struct hda_pcm_stream *hinfo,
3514                           unsigned int stream,
3515                           unsigned int format,
3516                           struct snd_pcm_substream *substream)
3517 {
3518         int ret;
3519         mutex_lock(&codec->bus->prepare_mutex);
3520         ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
3521         if (ret >= 0)
3522                 purify_inactive_streams(codec);
3523         mutex_unlock(&codec->bus->prepare_mutex);
3524         return ret;
3525 }
3526 EXPORT_SYMBOL_HDA(snd_hda_codec_prepare);
3527
3528 void snd_hda_codec_cleanup(struct hda_codec *codec,
3529                            struct hda_pcm_stream *hinfo,
3530                            struct snd_pcm_substream *substream)
3531 {
3532         mutex_lock(&codec->bus->prepare_mutex);
3533         hinfo->ops.cleanup(hinfo, codec, substream);
3534         mutex_unlock(&codec->bus->prepare_mutex);
3535 }
3536 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup);
3537
3538 /* global */
3539 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
3540         "Audio", "SPDIF", "HDMI", "Modem"
3541 };
3542
3543 /*
3544  * get the empty PCM device number to assign
3545  *
3546  * note the max device number is limited by HDA_MAX_PCMS, currently 10
3547  */
3548 static int get_empty_pcm_device(struct hda_bus *bus, int type)
3549 {
3550         /* audio device indices; not linear to keep compatibility */
3551         static int audio_idx[HDA_PCM_NTYPES][5] = {
3552                 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
3553                 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
3554                 [HDA_PCM_TYPE_HDMI]  = { 3, 7, 8, 9, -1 },
3555                 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
3556         };
3557         int i;
3558
3559         if (type >= HDA_PCM_NTYPES) {
3560                 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
3561                 return -EINVAL;
3562         }
3563
3564         for (i = 0; audio_idx[type][i] >= 0 ; i++)
3565                 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
3566                         return audio_idx[type][i];
3567
3568         snd_printk(KERN_WARNING "Too many %s devices\n",
3569                 snd_hda_pcm_type_name[type]);
3570         return -EAGAIN;
3571 }
3572
3573 /*
3574  * attach a new PCM stream
3575  */
3576 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
3577 {
3578         struct hda_bus *bus = codec->bus;
3579         struct hda_pcm_stream *info;
3580         int stream, err;
3581
3582         if (snd_BUG_ON(!pcm->name))
3583                 return -EINVAL;
3584         for (stream = 0; stream < 2; stream++) {
3585                 info = &pcm->stream[stream];
3586                 if (info->substreams) {
3587                         err = set_pcm_default_values(codec, info);
3588                         if (err < 0)
3589                                 return err;
3590                 }
3591         }
3592         return bus->ops.attach_pcm(bus, codec, pcm);
3593 }
3594
3595 /* assign all PCMs of the given codec */
3596 int snd_hda_codec_build_pcms(struct hda_codec *codec)
3597 {
3598         unsigned int pcm;
3599         int err;
3600
3601         if (!codec->num_pcms) {
3602                 if (!codec->patch_ops.build_pcms)
3603                         return 0;
3604                 err = codec->patch_ops.build_pcms(codec);
3605                 if (err < 0) {
3606                         printk(KERN_ERR "hda_codec: cannot build PCMs"
3607                                "for #%d (error %d)\n", codec->addr, err);
3608                         err = snd_hda_codec_reset(codec);
3609                         if (err < 0) {
3610                                 printk(KERN_ERR
3611                                        "hda_codec: cannot revert codec\n");
3612                                 return err;
3613                         }
3614                 }
3615         }
3616         for (pcm = 0; pcm < codec->num_pcms; pcm++) {
3617                 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
3618                 int dev;
3619
3620                 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
3621                         continue; /* no substreams assigned */
3622
3623                 if (!cpcm->pcm) {
3624                         dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
3625                         if (dev < 0)
3626                                 continue; /* no fatal error */
3627                         cpcm->device = dev;
3628                         err = snd_hda_attach_pcm(codec, cpcm);
3629                         if (err < 0) {
3630                                 printk(KERN_ERR "hda_codec: cannot attach "
3631                                        "PCM stream %d for codec #%d\n",
3632                                        dev, codec->addr);
3633                                 continue; /* no fatal error */
3634                         }
3635                 }
3636         }
3637         return 0;
3638 }
3639
3640 /**
3641  * snd_hda_build_pcms - build PCM information
3642  * @bus: the BUS
3643  *
3644  * Create PCM information for each codec included in the bus.
3645  *
3646  * The build_pcms codec patch is requested to set up codec->num_pcms and
3647  * codec->pcm_info properly.  The array is referred by the top-level driver
3648  * to create its PCM instances.
3649  * The allocated codec->pcm_info should be released in codec->patch_ops.free
3650  * callback.
3651  *
3652  * At least, substreams, channels_min and channels_max must be filled for
3653  * each stream.  substreams = 0 indicates that the stream doesn't exist.
3654  * When rates and/or formats are zero, the supported values are queried
3655  * from the given nid.  The nid is used also by the default ops.prepare
3656  * and ops.cleanup callbacks.
3657  *
3658  * The driver needs to call ops.open in its open callback.  Similarly,
3659  * ops.close is supposed to be called in the close callback.
3660  * ops.prepare should be called in the prepare or hw_params callback
3661  * with the proper parameters for set up.
3662  * ops.cleanup should be called in hw_free for clean up of streams.
3663  *
3664  * This function returns 0 if successfull, or a negative error code.
3665  */
3666 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
3667 {
3668         struct hda_codec *codec;
3669
3670         list_for_each_entry(codec, &bus->codec_list, list) {
3671                 int err = snd_hda_codec_build_pcms(codec);
3672                 if (err < 0)
3673                         return err;
3674         }
3675         return 0;
3676 }
3677 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3678
3679 /**
3680  * snd_hda_check_board_config - compare the current codec with the config table
3681  * @codec: the HDA codec
3682  * @num_configs: number of config enums
3683  * @models: array of model name strings
3684  * @tbl: configuration table, terminated by null entries
3685  *
3686  * Compares the modelname or PCI subsystem id of the current codec with the
3687  * given configuration table.  If a matching entry is found, returns its
3688  * config value (supposed to be 0 or positive).
3689  *
3690  * If no entries are matching, the function returns a negative value.
3691  */
3692 int snd_hda_check_board_config(struct hda_codec *codec,
3693                                int num_configs, const char * const *models,
3694                                const struct snd_pci_quirk *tbl)
3695 {
3696         if (codec->modelname && models) {
3697                 int i;
3698                 for (i = 0; i < num_configs; i++) {
3699                         if (models[i] &&
3700                             !strcmp(codec->modelname, models[i])) {
3701                                 snd_printd(KERN_INFO "hda_codec: model '%s' is "
3702                                            "selected\n", models[i]);
3703                                 return i;
3704                         }
3705                 }
3706         }
3707
3708         if (!codec->bus->pci || !tbl)
3709                 return -1;
3710
3711         tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3712         if (!tbl)
3713                 return -1;
3714         if (tbl->value >= 0 && tbl->value < num_configs) {
3715 #ifdef CONFIG_SND_DEBUG_VERBOSE
3716                 char tmp[10];
3717                 const char *model = NULL;
3718                 if (models)
3719                         model = models[tbl->value];
3720                 if (!model) {
3721                         sprintf(tmp, "#%d", tbl->value);
3722                         model = tmp;
3723                 }
3724                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3725                             "for config %x:%x (%s)\n",
3726                             model, tbl->subvendor, tbl->subdevice,
3727                             (tbl->name ? tbl->name : "Unknown device"));
3728 #endif
3729                 return tbl->value;
3730         }
3731         return -1;
3732 }
3733 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3734
3735 /**
3736  * snd_hda_check_board_codec_sid_config - compare the current codec
3737                                         subsystem ID with the
3738                                         config table
3739
3740            This is important for Gateway notebooks with SB450 HDA Audio
3741            where the vendor ID of the PCI device is:
3742                 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3743            and the vendor/subvendor are found only at the codec.
3744
3745  * @codec: the HDA codec
3746  * @num_configs: number of config enums
3747  * @models: array of model name strings
3748  * @tbl: configuration table, terminated by null entries
3749  *
3750  * Compares the modelname or PCI subsystem id of the current codec with the
3751  * given configuration table.  If a matching entry is found, returns its
3752  * config value (supposed to be 0 or positive).
3753  *
3754  * If no entries are matching, the function returns a negative value.
3755  */
3756 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3757                                int num_configs, const char * const *models,
3758                                const struct snd_pci_quirk *tbl)
3759 {
3760         const struct snd_pci_quirk *q;
3761
3762         /* Search for codec ID */
3763         for (q = tbl; q->subvendor; q++) {
3764                 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3765
3766                 if (vendorid == codec->subsystem_id)
3767                         break;
3768         }
3769
3770         if (!q->subvendor)
3771                 return -1;
3772
3773         tbl = q;
3774
3775         if (tbl->value >= 0 && tbl->value < num_configs) {
3776 #ifdef CONFIG_SND_DEBUG_VERBOSE
3777                 char tmp[10];
3778                 const char *model = NULL;
3779                 if (models)
3780                         model = models[tbl->value];
3781                 if (!model) {
3782                         sprintf(tmp, "#%d", tbl->value);
3783                         model = tmp;
3784                 }
3785                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3786                             "for config %x:%x (%s)\n",
3787                             model, tbl->subvendor, tbl->subdevice,
3788                             (tbl->name ? tbl->name : "Unknown device"));
3789 #endif
3790                 return tbl->value;
3791         }
3792         return -1;
3793 }
3794 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3795
3796 /**
3797  * snd_hda_add_new_ctls - create controls from the array
3798  * @codec: the HDA codec
3799  * @knew: the array of struct snd_kcontrol_new
3800  *
3801  * This helper function creates and add new controls in the given array.
3802  * The array must be terminated with an empty entry as terminator.
3803  *
3804  * Returns 0 if successful, or a negative error code.
3805  */
3806 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3807 {
3808         int err;
3809
3810         for (; knew->name; knew++) {
3811                 struct snd_kcontrol *kctl;
3812                 int addr = 0, idx = 0;
3813                 if (knew->iface == -1)  /* skip this codec private value */
3814                         continue;
3815                 for (;;) {
3816                         kctl = snd_ctl_new1(knew, codec);
3817                         if (!kctl)
3818                                 return -ENOMEM;
3819                         if (addr > 0)
3820                                 kctl->id.device = addr;
3821                         if (idx > 0)
3822                                 kctl->id.index = idx;
3823                         err = snd_hda_ctl_add(codec, 0, kctl);
3824                         if (!err)
3825                                 break;
3826                         /* try first with another device index corresponding to
3827                          * the codec addr; if it still fails (or it's the
3828                          * primary codec), then try another control index
3829                          */
3830                         if (!addr && codec->addr)
3831                                 addr = codec->addr;
3832                         else if (!idx && !knew->index) {
3833                                 idx = find_empty_mixer_ctl_idx(codec,
3834                                                                knew->name);
3835                                 if (idx <= 0)
3836                                         return err;
3837                         } else
3838                                 return err;
3839                 }
3840         }
3841         return 0;
3842 }
3843 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3844
3845 #ifdef CONFIG_SND_HDA_POWER_SAVE
3846 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3847                                 unsigned int power_state);
3848
3849 static void hda_power_work(struct work_struct *work)
3850 {
3851         struct hda_codec *codec =
3852                 container_of(work, struct hda_codec, power_work.work);
3853         struct hda_bus *bus = codec->bus;
3854
3855         if (!codec->power_on || codec->power_count) {
3856                 codec->power_transition = 0;
3857                 return;
3858         }
3859
3860         hda_call_codec_suspend(codec);
3861         if (bus->ops.pm_notify)
3862                 bus->ops.pm_notify(bus);
3863 }
3864
3865 static void hda_keep_power_on(struct hda_codec *codec)
3866 {
3867         codec->power_count++;
3868         codec->power_on = 1;
3869         codec->power_jiffies = jiffies;
3870 }
3871
3872 /* update the power on/off account with the current jiffies */
3873 void snd_hda_update_power_acct(struct hda_codec *codec)
3874 {
3875         unsigned long delta = jiffies - codec->power_jiffies;
3876         if (codec->power_on)
3877                 codec->power_on_acct += delta;
3878         else
3879                 codec->power_off_acct += delta;
3880         codec->power_jiffies += delta;
3881 }
3882
3883 /**
3884  * snd_hda_power_up - Power-up the codec
3885  * @codec: HD-audio codec
3886  *
3887  * Increment the power-up counter and power up the hardware really when
3888  * not turned on yet.
3889  */
3890 void snd_hda_power_up(struct hda_codec *codec)
3891 {
3892         struct hda_bus *bus = codec->bus;
3893
3894         codec->power_count++;
3895         if (codec->power_on || codec->power_transition)
3896                 return;
3897
3898         snd_hda_update_power_acct(codec);
3899         codec->power_on = 1;
3900         codec->power_jiffies = jiffies;
3901         if (bus->ops.pm_notify)
3902                 bus->ops.pm_notify(bus);
3903         hda_call_codec_resume(codec);
3904         cancel_delayed_work(&codec->power_work);
3905         codec->power_transition = 0;
3906 }
3907 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3908
3909 #define power_save(codec)       \
3910         ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3911
3912 /**
3913  * snd_hda_power_down - Power-down the codec
3914  * @codec: HD-audio codec
3915  *
3916  * Decrement the power-up counter and schedules the power-off work if
3917  * the counter rearches to zero.
3918  */
3919 void snd_hda_power_down(struct hda_codec *codec)
3920 {
3921         --codec->power_count;
3922         if (!codec->power_on || codec->power_count || codec->power_transition)
3923                 return;
3924         if (power_save(codec)) {
3925                 codec->power_transition = 1; /* avoid reentrance */
3926                 queue_delayed_work(codec->bus->workq, &codec->power_work,
3927                                 msecs_to_jiffies(power_save(codec) * 1000));
3928         }
3929 }
3930 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3931
3932 /**
3933  * snd_hda_check_amp_list_power - Check the amp list and update the power
3934  * @codec: HD-audio codec
3935  * @check: the object containing an AMP list and the status
3936  * @nid: NID to check / update
3937  *
3938  * Check whether the given NID is in the amp list.  If it's in the list,
3939  * check the current AMP status, and update the the power-status according
3940  * to the mute status.
3941  *
3942  * This function is supposed to be set or called from the check_power_status
3943  * patch ops.
3944  */
3945 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3946                                  struct hda_loopback_check *check,
3947                                  hda_nid_t nid)
3948 {
3949         struct hda_amp_list *p;
3950         int ch, v;
3951
3952         if (!check->amplist)
3953                 return 0;
3954         for (p = check->amplist; p->nid; p++) {
3955                 if (p->nid == nid)
3956                         break;
3957         }
3958         if (!p->nid)
3959                 return 0; /* nothing changed */
3960
3961         for (p = check->amplist; p->nid; p++) {
3962                 for (ch = 0; ch < 2; ch++) {
3963                         v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3964                                                    p->idx);
3965                         if (!(v & HDA_AMP_MUTE) && v > 0) {
3966                                 if (!check->power_on) {
3967                                         check->power_on = 1;
3968                                         snd_hda_power_up(codec);
3969                                 }
3970                                 return 1;
3971                         }
3972                 }
3973         }
3974         if (check->power_on) {
3975                 check->power_on = 0;
3976                 snd_hda_power_down(codec);
3977         }
3978         return 0;
3979 }
3980 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3981 #endif
3982
3983 /*
3984  * Channel mode helper
3985  */
3986
3987 /**
3988  * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
3989  */
3990 int snd_hda_ch_mode_info(struct hda_codec *codec,
3991                          struct snd_ctl_elem_info *uinfo,
3992                          const struct hda_channel_mode *chmode,
3993                          int num_chmodes)
3994 {
3995         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3996         uinfo->count = 1;
3997         uinfo->value.enumerated.items = num_chmodes;
3998         if (uinfo->value.enumerated.item >= num_chmodes)
3999                 uinfo->value.enumerated.item = num_chmodes - 1;
4000         sprintf(uinfo->value.enumerated.name, "%dch",
4001                 chmode[uinfo->value.enumerated.item].channels);
4002         return 0;
4003 }
4004 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
4005
4006 /**
4007  * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
4008  */
4009 int snd_hda_ch_mode_get(struct hda_codec *codec,
4010                         struct snd_ctl_elem_value *ucontrol,
4011                         const struct hda_channel_mode *chmode,
4012                         int num_chmodes,
4013                         int max_channels)
4014 {
4015         int i;
4016
4017         for (i = 0; i < num_chmodes; i++) {
4018                 if (max_channels == chmode[i].channels) {
4019                         ucontrol->value.enumerated.item[0] = i;
4020                         break;
4021                 }
4022         }
4023         return 0;
4024 }
4025 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
4026
4027 /**
4028  * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
4029  */
4030 int snd_hda_ch_mode_put(struct hda_codec *codec,
4031                         struct snd_ctl_elem_value *ucontrol,
4032                         const struct hda_channel_mode *chmode,
4033                         int num_chmodes,
4034                         int *max_channelsp)
4035 {
4036         unsigned int mode;
4037
4038         mode = ucontrol->value.enumerated.item[0];
4039         if (mode >= num_chmodes)
4040                 return -EINVAL;
4041         if (*max_channelsp == chmode[mode].channels)
4042                 return 0;
4043         /* change the current channel setting */
4044         *max_channelsp = chmode[mode].channels;
4045         if (chmode[mode].sequence)
4046                 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
4047         return 1;
4048 }
4049 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
4050
4051 /*
4052  * input MUX helper
4053  */
4054
4055 /**
4056  * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
4057  */
4058 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
4059                            struct snd_ctl_elem_info *uinfo)
4060 {
4061         unsigned int index;
4062
4063         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4064         uinfo->count = 1;
4065         uinfo->value.enumerated.items = imux->num_items;
4066         if (!imux->num_items)
4067                 return 0;
4068         index = uinfo->value.enumerated.item;
4069         if (index >= imux->num_items)
4070                 index = imux->num_items - 1;
4071         strcpy(uinfo->value.enumerated.name, imux->items[index].label);
4072         return 0;
4073 }
4074 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
4075
4076 /**
4077  * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
4078  */
4079 int snd_hda_input_mux_put(struct hda_codec *codec,
4080                           const struct hda_input_mux *imux,
4081                           struct snd_ctl_elem_value *ucontrol,
4082                           hda_nid_t nid,
4083                           unsigned int *cur_val)
4084 {
4085         unsigned int idx;
4086
4087         if (!imux->num_items)
4088                 return 0;
4089         idx = ucontrol->value.enumerated.item[0];
4090         if (idx >= imux->num_items)
4091                 idx = imux->num_items - 1;
4092         if (*cur_val == idx)
4093                 return 0;
4094         snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
4095                                   imux->items[idx].index);
4096         *cur_val = idx;
4097         return 1;
4098 }
4099 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
4100
4101
4102 /*
4103  * Multi-channel / digital-out PCM helper functions
4104  */
4105
4106 /* setup SPDIF output stream */
4107 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
4108                                  unsigned int stream_tag, unsigned int format)
4109 {
4110         /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
4111         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
4112                 set_dig_out_convert(codec, nid,
4113                                     codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
4114                                     -1);
4115         snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
4116         if (codec->slave_dig_outs) {
4117                 hda_nid_t *d;
4118                 for (d = codec->slave_dig_outs; *d; d++)
4119                         snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
4120                                                    format);
4121         }
4122         /* turn on again (if needed) */
4123         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
4124                 set_dig_out_convert(codec, nid,
4125                                     codec->spdif_ctls & 0xff, -1);
4126 }
4127
4128 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
4129 {
4130         snd_hda_codec_cleanup_stream(codec, nid);
4131         if (codec->slave_dig_outs) {
4132                 hda_nid_t *d;
4133                 for (d = codec->slave_dig_outs; *d; d++)
4134                         snd_hda_codec_cleanup_stream(codec, *d);
4135         }
4136 }
4137
4138 /**
4139  * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
4140  * @bus: HD-audio bus
4141  */
4142 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
4143 {
4144         struct hda_codec *codec;
4145
4146         if (!bus)
4147                 return;
4148         list_for_each_entry(codec, &bus->codec_list, list) {
4149 #ifdef CONFIG_SND_HDA_POWER_SAVE
4150                 if (!codec->power_on)
4151                         continue;
4152 #endif
4153                 if (codec->patch_ops.reboot_notify)
4154                         codec->patch_ops.reboot_notify(codec);
4155         }
4156 }
4157 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
4158
4159 /**
4160  * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
4161  */
4162 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
4163                                struct hda_multi_out *mout)
4164 {
4165         mutex_lock(&codec->spdif_mutex);
4166         if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
4167                 /* already opened as analog dup; reset it once */
4168                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4169         mout->dig_out_used = HDA_DIG_EXCLUSIVE;
4170         mutex_unlock(&codec->spdif_mutex);
4171         return 0;
4172 }
4173 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
4174
4175 /**
4176  * snd_hda_multi_out_dig_prepare - prepare the digital out stream
4177  */
4178 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
4179                                   struct hda_multi_out *mout,
4180                                   unsigned int stream_tag,
4181                                   unsigned int format,
4182                                   struct snd_pcm_substream *substream)
4183 {
4184         mutex_lock(&codec->spdif_mutex);
4185         setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
4186         mutex_unlock(&codec->spdif_mutex);
4187         return 0;
4188 }
4189 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
4190
4191 /**
4192  * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
4193  */
4194 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
4195                                   struct hda_multi_out *mout)
4196 {
4197         mutex_lock(&codec->spdif_mutex);
4198         cleanup_dig_out_stream(codec, mout->dig_out_nid);
4199         mutex_unlock(&codec->spdif_mutex);
4200         return 0;
4201 }
4202 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
4203
4204 /**
4205  * snd_hda_multi_out_dig_close - release the digital out stream
4206  */
4207 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
4208                                 struct hda_multi_out *mout)
4209 {
4210         mutex_lock(&codec->spdif_mutex);
4211         mout->dig_out_used = 0;
4212         mutex_unlock(&codec->spdif_mutex);
4213         return 0;
4214 }
4215 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
4216
4217 /**
4218  * snd_hda_multi_out_analog_open - open analog outputs
4219  *
4220  * Open analog outputs and set up the hw-constraints.
4221  * If the digital outputs can be opened as slave, open the digital
4222  * outputs, too.
4223  */
4224 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
4225                                   struct hda_multi_out *mout,
4226                                   struct snd_pcm_substream *substream,
4227                                   struct hda_pcm_stream *hinfo)
4228 {
4229         struct snd_pcm_runtime *runtime = substream->runtime;
4230         runtime->hw.channels_max = mout->max_channels;
4231         if (mout->dig_out_nid) {
4232                 if (!mout->analog_rates) {
4233                         mout->analog_rates = hinfo->rates;
4234                         mout->analog_formats = hinfo->formats;
4235                         mout->analog_maxbps = hinfo->maxbps;
4236                 } else {
4237                         runtime->hw.rates = mout->analog_rates;
4238                         runtime->hw.formats = mout->analog_formats;
4239                         hinfo->maxbps = mout->analog_maxbps;
4240                 }
4241                 if (!mout->spdif_rates) {
4242                         snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
4243                                                     &mout->spdif_rates,
4244                                                     &mout->spdif_formats,
4245                                                     &mout->spdif_maxbps);
4246                 }
4247                 mutex_lock(&codec->spdif_mutex);
4248                 if (mout->share_spdif) {
4249                         if ((runtime->hw.rates & mout->spdif_rates) &&
4250                             (runtime->hw.formats & mout->spdif_formats)) {
4251                                 runtime->hw.rates &= mout->spdif_rates;
4252                                 runtime->hw.formats &= mout->spdif_formats;
4253                                 if (mout->spdif_maxbps < hinfo->maxbps)
4254                                         hinfo->maxbps = mout->spdif_maxbps;
4255                         } else {
4256                                 mout->share_spdif = 0;
4257                                 /* FIXME: need notify? */
4258                         }
4259                 }
4260                 mutex_unlock(&codec->spdif_mutex);
4261         }
4262         return snd_pcm_hw_constraint_step(substream->runtime, 0,
4263                                           SNDRV_PCM_HW_PARAM_CHANNELS, 2);
4264 }
4265 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
4266
4267 /**
4268  * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
4269  *
4270  * Set up the i/o for analog out.
4271  * When the digital out is available, copy the front out to digital out, too.
4272  */
4273 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
4274                                      struct hda_multi_out *mout,
4275                                      unsigned int stream_tag,
4276                                      unsigned int format,
4277                                      struct snd_pcm_substream *substream)
4278 {
4279         hda_nid_t *nids = mout->dac_nids;
4280         int chs = substream->runtime->channels;
4281         int i;
4282
4283         mutex_lock(&codec->spdif_mutex);
4284         if (mout->dig_out_nid && mout->share_spdif &&
4285             mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
4286                 if (chs == 2 &&
4287                     snd_hda_is_supported_format(codec, mout->dig_out_nid,
4288                                                 format) &&
4289                     !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
4290                         mout->dig_out_used = HDA_DIG_ANALOG_DUP;
4291                         setup_dig_out_stream(codec, mout->dig_out_nid,
4292                                              stream_tag, format);
4293                 } else {
4294                         mout->dig_out_used = 0;
4295                         cleanup_dig_out_stream(codec, mout->dig_out_nid);
4296                 }
4297         }
4298         mutex_unlock(&codec->spdif_mutex);
4299
4300         /* front */
4301         snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
4302                                    0, format);
4303         if (!mout->no_share_stream &&
4304             mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
4305                 /* headphone out will just decode front left/right (stereo) */
4306                 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
4307                                            0, format);
4308         /* extra outputs copied from front */
4309         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4310                 if (!mout->no_share_stream && mout->extra_out_nid[i])
4311                         snd_hda_codec_setup_stream(codec,
4312                                                    mout->extra_out_nid[i],
4313                                                    stream_tag, 0, format);
4314
4315         /* surrounds */
4316         for (i = 1; i < mout->num_dacs; i++) {
4317                 if (chs >= (i + 1) * 2) /* independent out */
4318                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4319                                                    i * 2, format);
4320                 else if (!mout->no_share_stream) /* copy front */
4321                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4322                                                    0, format);
4323         }
4324         return 0;
4325 }
4326 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
4327
4328 /**
4329  * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
4330  */
4331 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
4332                                      struct hda_multi_out *mout)
4333 {
4334         hda_nid_t *nids = mout->dac_nids;
4335         int i;
4336
4337         for (i = 0; i < mout->num_dacs; i++)
4338                 snd_hda_codec_cleanup_stream(codec, nids[i]);
4339         if (mout->hp_nid)
4340                 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
4341         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4342                 if (mout->extra_out_nid[i])
4343                         snd_hda_codec_cleanup_stream(codec,
4344                                                      mout->extra_out_nid[i]);
4345         mutex_lock(&codec->spdif_mutex);
4346         if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
4347                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4348                 mout->dig_out_used = 0;
4349         }
4350         mutex_unlock(&codec->spdif_mutex);
4351         return 0;
4352 }
4353 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
4354
4355 /*
4356  * Helper for automatic pin configuration
4357  */
4358
4359 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
4360 {
4361         for (; *list; list++)
4362                 if (*list == nid)
4363                         return 1;
4364         return 0;
4365 }
4366
4367
4368 /*
4369  * Sort an associated group of pins according to their sequence numbers.
4370  */
4371 static void sort_pins_by_sequence(hda_nid_t *pins, short *sequences,
4372                                   int num_pins)
4373 {
4374         int i, j;
4375         short seq;
4376         hda_nid_t nid;
4377
4378         for (i = 0; i < num_pins; i++) {
4379                 for (j = i + 1; j < num_pins; j++) {
4380                         if (sequences[i] > sequences[j]) {
4381                                 seq = sequences[i];
4382                                 sequences[i] = sequences[j];
4383                                 sequences[j] = seq;
4384                                 nid = pins[i];
4385                                 pins[i] = pins[j];
4386                                 pins[j] = nid;
4387                         }
4388                 }
4389         }
4390 }
4391
4392
4393 /* add the found input-pin to the cfg->inputs[] table */
4394 static void add_auto_cfg_input_pin(struct auto_pin_cfg *cfg, hda_nid_t nid,
4395                                    int type)
4396 {
4397         if (cfg->num_inputs < AUTO_CFG_MAX_INS) {
4398                 cfg->inputs[cfg->num_inputs].pin = nid;
4399                 cfg->inputs[cfg->num_inputs].type = type;
4400                 cfg->num_inputs++;
4401         }
4402 }
4403
4404 /* sort inputs in the order of AUTO_PIN_* type */
4405 static void sort_autocfg_input_pins(struct auto_pin_cfg *cfg)
4406 {
4407         int i, j;
4408
4409         for (i = 0; i < cfg->num_inputs; i++) {
4410                 for (j = i + 1; j < cfg->num_inputs; j++) {
4411                         if (cfg->inputs[i].type > cfg->inputs[j].type) {
4412                                 struct auto_pin_cfg_item tmp;
4413                                 tmp = cfg->inputs[i];
4414                                 cfg->inputs[i] = cfg->inputs[j];
4415                                 cfg->inputs[j] = tmp;
4416                         }
4417                 }
4418         }
4419 }
4420
4421 /*
4422  * Parse all pin widgets and store the useful pin nids to cfg
4423  *
4424  * The number of line-outs or any primary output is stored in line_outs,
4425  * and the corresponding output pins are assigned to line_out_pins[],
4426  * in the order of front, rear, CLFE, side, ...
4427  *
4428  * If more extra outputs (speaker and headphone) are found, the pins are
4429  * assisnged to hp_pins[] and speaker_pins[], respectively.  If no line-out jack
4430  * is detected, one of speaker of HP pins is assigned as the primary
4431  * output, i.e. to line_out_pins[0].  So, line_outs is always positive
4432  * if any analog output exists.
4433  *
4434  * The analog input pins are assigned to inputs array.
4435  * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
4436  * respectively.
4437  */
4438 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
4439                                  struct auto_pin_cfg *cfg,
4440                                  hda_nid_t *ignore_nids)
4441 {
4442         hda_nid_t nid, end_nid;
4443         short seq, assoc_line_out, assoc_speaker;
4444         short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
4445         short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
4446         short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
4447         int i;
4448
4449         memset(cfg, 0, sizeof(*cfg));
4450
4451         memset(sequences_line_out, 0, sizeof(sequences_line_out));
4452         memset(sequences_speaker, 0, sizeof(sequences_speaker));
4453         memset(sequences_hp, 0, sizeof(sequences_hp));
4454         assoc_line_out = assoc_speaker = 0;
4455
4456         end_nid = codec->start_nid + codec->num_nodes;
4457         for (nid = codec->start_nid; nid < end_nid; nid++) {
4458                 unsigned int wid_caps = get_wcaps(codec, nid);
4459                 unsigned int wid_type = get_wcaps_type(wid_caps);
4460                 unsigned int def_conf;
4461                 short assoc, loc;
4462
4463                 /* read all default configuration for pin complex */
4464                 if (wid_type != AC_WID_PIN)
4465                         continue;
4466                 /* ignore the given nids (e.g. pc-beep returns error) */
4467                 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
4468                         continue;
4469
4470                 def_conf = snd_hda_codec_get_pincfg(codec, nid);
4471                 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
4472                         continue;
4473                 loc = get_defcfg_location(def_conf);
4474                 switch (get_defcfg_device(def_conf)) {
4475                 case AC_JACK_LINE_OUT:
4476                         seq = get_defcfg_sequence(def_conf);
4477                         assoc = get_defcfg_association(def_conf);
4478
4479                         if (!(wid_caps & AC_WCAP_STEREO))
4480                                 if (!cfg->mono_out_pin)
4481                                         cfg->mono_out_pin = nid;
4482                         if (!assoc)
4483                                 continue;
4484                         if (!assoc_line_out)
4485                                 assoc_line_out = assoc;
4486                         else if (assoc_line_out != assoc)
4487                                 continue;
4488                         if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
4489                                 continue;
4490                         cfg->line_out_pins[cfg->line_outs] = nid;
4491                         sequences_line_out[cfg->line_outs] = seq;
4492                         cfg->line_outs++;
4493                         break;
4494                 case AC_JACK_SPEAKER:
4495                         seq = get_defcfg_sequence(def_conf);
4496                         assoc = get_defcfg_association(def_conf);
4497                         if (!assoc)
4498                                 continue;
4499                         if (!assoc_speaker)
4500                                 assoc_speaker = assoc;
4501                         else if (assoc_speaker != assoc)
4502                                 continue;
4503                         if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
4504                                 continue;
4505                         cfg->speaker_pins[cfg->speaker_outs] = nid;
4506                         sequences_speaker[cfg->speaker_outs] = seq;
4507                         cfg->speaker_outs++;
4508                         break;
4509                 case AC_JACK_HP_OUT:
4510                         seq = get_defcfg_sequence(def_conf);
4511                         assoc = get_defcfg_association(def_conf);
4512                         if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
4513                                 continue;
4514                         cfg->hp_pins[cfg->hp_outs] = nid;
4515                         sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
4516                         cfg->hp_outs++;
4517                         break;
4518                 case AC_JACK_MIC_IN:
4519                         add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_MIC);
4520                         break;
4521                 case AC_JACK_LINE_IN:
4522                         add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_LINE_IN);
4523                         break;
4524                 case AC_JACK_CD:
4525                         add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_CD);
4526                         break;
4527                 case AC_JACK_AUX:
4528                         add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_AUX);
4529                         break;
4530                 case AC_JACK_SPDIF_OUT:
4531                 case AC_JACK_DIG_OTHER_OUT:
4532                         if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
4533                                 continue;
4534                         cfg->dig_out_pins[cfg->dig_outs] = nid;
4535                         cfg->dig_out_type[cfg->dig_outs] =
4536                                 (loc == AC_JACK_LOC_HDMI) ?
4537                                 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
4538                         cfg->dig_outs++;
4539                         break;
4540                 case AC_JACK_SPDIF_IN:
4541                 case AC_JACK_DIG_OTHER_IN:
4542                         cfg->dig_in_pin = nid;
4543                         if (loc == AC_JACK_LOC_HDMI)
4544                                 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
4545                         else
4546                                 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
4547                         break;
4548                 }
4549         }
4550
4551         /* FIX-UP:
4552          * If no line-out is defined but multiple HPs are found,
4553          * some of them might be the real line-outs.
4554          */
4555         if (!cfg->line_outs && cfg->hp_outs > 1) {
4556                 int i = 0;
4557                 while (i < cfg->hp_outs) {
4558                         /* The real HPs should have the sequence 0x0f */
4559                         if ((sequences_hp[i] & 0x0f) == 0x0f) {
4560                                 i++;
4561                                 continue;
4562                         }
4563                         /* Move it to the line-out table */
4564                         cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
4565                         sequences_line_out[cfg->line_outs] = sequences_hp[i];
4566                         cfg->line_outs++;
4567                         cfg->hp_outs--;
4568                         memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
4569                                 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
4570                         memmove(sequences_hp + i, sequences_hp + i + 1,
4571                                 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
4572                 }
4573                 memset(cfg->hp_pins + cfg->hp_outs, 0,
4574                        sizeof(hda_nid_t) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs));
4575                 if (!cfg->hp_outs)
4576                         cfg->line_out_type = AUTO_PIN_HP_OUT;
4577
4578         }
4579
4580         /* sort by sequence */
4581         sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
4582                               cfg->line_outs);
4583         sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
4584                               cfg->speaker_outs);
4585         sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
4586                               cfg->hp_outs);
4587
4588         /*
4589          * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
4590          * as a primary output
4591          */
4592         if (!cfg->line_outs) {
4593                 if (cfg->speaker_outs) {
4594                         cfg->line_outs = cfg->speaker_outs;
4595                         memcpy(cfg->line_out_pins, cfg->speaker_pins,
4596                                sizeof(cfg->speaker_pins));
4597                         cfg->speaker_outs = 0;
4598                         memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
4599                         cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
4600                 } else if (cfg->hp_outs) {
4601                         cfg->line_outs = cfg->hp_outs;
4602                         memcpy(cfg->line_out_pins, cfg->hp_pins,
4603                                sizeof(cfg->hp_pins));
4604                         cfg->hp_outs = 0;
4605                         memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4606                         cfg->line_out_type = AUTO_PIN_HP_OUT;
4607                 }
4608         }
4609
4610         /* Reorder the surround channels
4611          * ALSA sequence is front/surr/clfe/side
4612          * HDA sequence is:
4613          *    4-ch: front/surr  =>  OK as it is
4614          *    6-ch: front/clfe/surr
4615          *    8-ch: front/clfe/rear/side|fc
4616          */
4617         switch (cfg->line_outs) {
4618         case 3:
4619         case 4:
4620                 nid = cfg->line_out_pins[1];
4621                 cfg->line_out_pins[1] = cfg->line_out_pins[2];
4622                 cfg->line_out_pins[2] = nid;
4623                 break;
4624         }
4625
4626         sort_autocfg_input_pins(cfg);
4627
4628         /*
4629          * debug prints of the parsed results
4630          */
4631         snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4632                    cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
4633                    cfg->line_out_pins[2], cfg->line_out_pins[3],
4634                    cfg->line_out_pins[4]);
4635         snd_printd("   speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4636                    cfg->speaker_outs, cfg->speaker_pins[0],
4637                    cfg->speaker_pins[1], cfg->speaker_pins[2],
4638                    cfg->speaker_pins[3], cfg->speaker_pins[4]);
4639         snd_printd("   hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4640                    cfg->hp_outs, cfg->hp_pins[0],
4641                    cfg->hp_pins[1], cfg->hp_pins[2],
4642                    cfg->hp_pins[3], cfg->hp_pins[4]);
4643         snd_printd("   mono: mono_out=0x%x\n", cfg->mono_out_pin);
4644         if (cfg->dig_outs)
4645                 snd_printd("   dig-out=0x%x/0x%x\n",
4646                            cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
4647         snd_printd("   inputs:");
4648         for (i = 0; i < cfg->num_inputs; i++) {
4649                 snd_printdd(" %s=0x%x",
4650                             hda_get_autocfg_input_label(codec, cfg, i),
4651                             cfg->inputs[i].pin);
4652         }
4653         snd_printd("\n");
4654         if (cfg->dig_in_pin)
4655                 snd_printd("   dig-in=0x%x\n", cfg->dig_in_pin);
4656
4657         return 0;
4658 }
4659 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
4660
4661 int snd_hda_get_input_pin_attr(unsigned int def_conf)
4662 {
4663         unsigned int loc = get_defcfg_location(def_conf);
4664         unsigned int conn = get_defcfg_connect(def_conf);
4665         if (conn == AC_JACK_PORT_NONE)
4666                 return INPUT_PIN_ATTR_UNUSED;
4667         /* Windows may claim the internal mic to be BOTH, too */
4668         if (conn == AC_JACK_PORT_FIXED || conn == AC_JACK_PORT_BOTH)
4669                 return INPUT_PIN_ATTR_INT;
4670         if ((loc & 0x30) == AC_JACK_LOC_INTERNAL)
4671                 return INPUT_PIN_ATTR_INT;
4672         if ((loc & 0x30) == AC_JACK_LOC_SEPARATE)
4673                 return INPUT_PIN_ATTR_DOCK;
4674         if (loc == AC_JACK_LOC_REAR)
4675                 return INPUT_PIN_ATTR_REAR;
4676         if (loc == AC_JACK_LOC_FRONT)
4677                 return INPUT_PIN_ATTR_FRONT;
4678         return INPUT_PIN_ATTR_NORMAL;
4679 }
4680 EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_attr);
4681
4682 /**
4683  * hda_get_input_pin_label - Give a label for the given input pin
4684  *
4685  * When check_location is true, the function checks the pin location
4686  * for mic and line-in pins, and set an appropriate prefix like "Front",
4687  * "Rear", "Internal".
4688  */
4689
4690 const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
4691                                         int check_location)
4692 {
4693         unsigned int def_conf;
4694         static const char * const mic_names[] = {
4695                 "Internal Mic", "Dock Mic", "Mic", "Front Mic", "Rear Mic",
4696         };
4697         int attr;
4698
4699         def_conf = snd_hda_codec_get_pincfg(codec, pin);
4700
4701         switch (get_defcfg_device(def_conf)) {
4702         case AC_JACK_MIC_IN:
4703                 if (!check_location)
4704                         return "Mic";
4705                 attr = snd_hda_get_input_pin_attr(def_conf);
4706                 if (!attr)
4707                         return "None";
4708                 return mic_names[attr - 1];
4709         case AC_JACK_LINE_IN:
4710                 if (!check_location)
4711                         return "Line";
4712                 attr = snd_hda_get_input_pin_attr(def_conf);
4713                 if (!attr)
4714                         return "None";
4715                 if (attr == INPUT_PIN_ATTR_DOCK)
4716                         return "Dock Line";
4717                 return "Line";
4718         case AC_JACK_AUX:
4719                 return "Aux";
4720         case AC_JACK_CD:
4721                 return "CD";
4722         case AC_JACK_SPDIF_IN:
4723                 return "SPDIF In";
4724         case AC_JACK_DIG_OTHER_IN:
4725                 return "Digital In";
4726         default:
4727                 return "Misc";
4728         }
4729 }
4730 EXPORT_SYMBOL_HDA(hda_get_input_pin_label);
4731
4732 /* Check whether the location prefix needs to be added to the label.
4733  * If all mic-jacks are in the same location (e.g. rear panel), we don't
4734  * have to put "Front" prefix to each label.  In such a case, returns false.
4735  */
4736 static int check_mic_location_need(struct hda_codec *codec,
4737                                    const struct auto_pin_cfg *cfg,
4738                                    int input)
4739 {
4740         unsigned int defc;
4741         int i, attr, attr2;
4742
4743         defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin);
4744         attr = snd_hda_get_input_pin_attr(defc);
4745         /* for internal or docking mics, we need locations */
4746         if (attr <= INPUT_PIN_ATTR_NORMAL)
4747                 return 1;
4748
4749         attr = 0;
4750         for (i = 0; i < cfg->num_inputs; i++) {
4751                 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin);
4752                 attr2 = snd_hda_get_input_pin_attr(defc);
4753                 if (attr2 >= INPUT_PIN_ATTR_NORMAL) {
4754                         if (attr && attr != attr2)
4755                                 return 1; /* different locations found */
4756                         attr = attr2;
4757                 }
4758         }
4759         return 0;
4760 }
4761
4762 /**
4763  * hda_get_autocfg_input_label - Get a label for the given input
4764  *
4765  * Get a label for the given input pin defined by the autocfg item.
4766  * Unlike hda_get_input_pin_label(), this function checks all inputs
4767  * defined in autocfg and avoids the redundant mic/line prefix as much as
4768  * possible.
4769  */
4770 const char *hda_get_autocfg_input_label(struct hda_codec *codec,
4771                                         const struct auto_pin_cfg *cfg,
4772                                         int input)
4773 {
4774         int type = cfg->inputs[input].type;
4775         int has_multiple_pins = 0;
4776
4777         if ((input > 0 && cfg->inputs[input - 1].type == type) ||
4778             (input < cfg->num_inputs - 1 && cfg->inputs[input + 1].type == type))
4779                 has_multiple_pins = 1;
4780         if (has_multiple_pins && type == AUTO_PIN_MIC)
4781                 has_multiple_pins &= check_mic_location_need(codec, cfg, input);
4782         return hda_get_input_pin_label(codec, cfg->inputs[input].pin,
4783                                        has_multiple_pins);
4784 }
4785 EXPORT_SYMBOL_HDA(hda_get_autocfg_input_label);
4786
4787 /**
4788  * snd_hda_add_imux_item - Add an item to input_mux
4789  *
4790  * When the same label is used already in the existing items, the number
4791  * suffix is appended to the label.  This label index number is stored
4792  * to type_idx when non-NULL pointer is given.
4793  */
4794 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
4795                           int index, int *type_idx)
4796 {
4797         int i, label_idx = 0;
4798         if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
4799                 snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
4800                 return -EINVAL;
4801         }
4802         for (i = 0; i < imux->num_items; i++) {
4803                 if (!strncmp(label, imux->items[i].label, strlen(label)))
4804                         label_idx++;
4805         }
4806         if (type_idx)
4807                 *type_idx = label_idx;
4808         if (label_idx > 0)
4809                 snprintf(imux->items[imux->num_items].label,
4810                          sizeof(imux->items[imux->num_items].label),
4811                          "%s %d", label, label_idx);
4812         else
4813                 strlcpy(imux->items[imux->num_items].label, label,
4814                         sizeof(imux->items[imux->num_items].label));
4815         imux->items[imux->num_items].index = index;
4816         imux->num_items++;
4817         return 0;
4818 }
4819 EXPORT_SYMBOL_HDA(snd_hda_add_imux_item);
4820
4821
4822 #ifdef CONFIG_PM
4823 /*
4824  * power management
4825  */
4826
4827 /**
4828  * snd_hda_suspend - suspend the codecs
4829  * @bus: the HDA bus
4830  *
4831  * Returns 0 if successful.
4832  */
4833 int snd_hda_suspend(struct hda_bus *bus)
4834 {
4835         struct hda_codec *codec;
4836
4837         list_for_each_entry(codec, &bus->codec_list, list) {
4838 #ifdef CONFIG_SND_HDA_POWER_SAVE
4839                 if (!codec->power_on)
4840                         continue;
4841 #endif
4842                 hda_call_codec_suspend(codec);
4843         }
4844         return 0;
4845 }
4846 EXPORT_SYMBOL_HDA(snd_hda_suspend);
4847
4848 /**
4849  * snd_hda_resume - resume the codecs
4850  * @bus: the HDA bus
4851  *
4852  * Returns 0 if successful.
4853  *
4854  * This fucntion is defined only when POWER_SAVE isn't set.
4855  * In the power-save mode, the codec is resumed dynamically.
4856  */
4857 int snd_hda_resume(struct hda_bus *bus)
4858 {
4859         struct hda_codec *codec;
4860
4861         list_for_each_entry(codec, &bus->codec_list, list) {
4862                 if (snd_hda_codec_needs_resume(codec))
4863                         hda_call_codec_resume(codec);
4864         }
4865         return 0;
4866 }
4867 EXPORT_SYMBOL_HDA(snd_hda_resume);
4868 #endif /* CONFIG_PM */
4869
4870 /*
4871  * generic arrays
4872  */
4873
4874 /**
4875  * snd_array_new - get a new element from the given array
4876  * @array: the array object
4877  *
4878  * Get a new element from the given array.  If it exceeds the
4879  * pre-allocated array size, re-allocate the array.
4880  *
4881  * Returns NULL if allocation failed.
4882  */
4883 void *snd_array_new(struct snd_array *array)
4884 {
4885         if (array->used >= array->alloced) {
4886                 int num = array->alloced + array->alloc_align;
4887                 void *nlist;
4888                 if (snd_BUG_ON(num >= 4096))
4889                         return NULL;
4890                 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
4891                 if (!nlist)
4892                         return NULL;
4893                 if (array->list) {
4894                         memcpy(nlist, array->list,
4895                                array->elem_size * array->alloced);
4896                         kfree(array->list);
4897                 }
4898                 array->list = nlist;
4899                 array->alloced = num;
4900         }
4901         return snd_array_elem(array, array->used++);
4902 }
4903 EXPORT_SYMBOL_HDA(snd_array_new);
4904
4905 /**
4906  * snd_array_free - free the given array elements
4907  * @array: the array object
4908  */
4909 void snd_array_free(struct snd_array *array)
4910 {
4911         kfree(array->list);
4912         array->used = 0;
4913         array->alloced = 0;
4914         array->list = NULL;
4915 }
4916 EXPORT_SYMBOL_HDA(snd_array_free);
4917
4918 /**
4919  * snd_print_pcm_rates - Print the supported PCM rates to the string buffer
4920  * @pcm: PCM caps bits
4921  * @buf: the string buffer to write
4922  * @buflen: the max buffer length
4923  *
4924  * used by hda_proc.c and hda_eld.c
4925  */
4926 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
4927 {
4928         static unsigned int rates[] = {
4929                 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
4930                 96000, 176400, 192000, 384000
4931         };
4932         int i, j;
4933
4934         for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
4935                 if (pcm & (1 << i))
4936                         j += snprintf(buf + j, buflen - j,  " %d", rates[i]);
4937
4938         buf[j] = '\0'; /* necessary when j == 0 */
4939 }
4940 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
4941
4942 /**
4943  * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
4944  * @pcm: PCM caps bits
4945  * @buf: the string buffer to write
4946  * @buflen: the max buffer length
4947  *
4948  * used by hda_proc.c and hda_eld.c
4949  */
4950 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
4951 {
4952         static unsigned int bits[] = { 8, 16, 20, 24, 32 };
4953         int i, j;
4954
4955         for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
4956                 if (pcm & (AC_SUPPCM_BITS_8 << i))
4957                         j += snprintf(buf + j, buflen - j,  " %d", bits[i]);
4958
4959         buf[j] = '\0'; /* necessary when j == 0 */
4960 }
4961 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
4962
4963 #ifdef CONFIG_SND_HDA_INPUT_JACK
4964 /*
4965  * Input-jack notification support
4966  */
4967 struct hda_jack_item {
4968         hda_nid_t nid;
4969         int type;
4970         struct snd_jack *jack;
4971 };
4972
4973 static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
4974                                          int type)
4975 {
4976         switch (type) {
4977         case SND_JACK_HEADPHONE:
4978                 return "Headphone";
4979         case SND_JACK_MICROPHONE:
4980                 return "Mic";
4981         case SND_JACK_LINEOUT:
4982                 return "Line-out";
4983         case SND_JACK_HEADSET:
4984                 return "Headset";
4985         default:
4986                 return "Misc";
4987         }
4988 }
4989
4990 static void hda_free_jack_priv(struct snd_jack *jack)
4991 {
4992         struct hda_jack_item *jacks = jack->private_data;
4993         jacks->nid = 0;
4994         jacks->jack = NULL;
4995 }
4996
4997 int snd_hda_input_jack_add(struct hda_codec *codec, hda_nid_t nid, int type,
4998                            const char *name)
4999 {
5000         struct hda_jack_item *jack;
5001         int err;
5002
5003         snd_array_init(&codec->jacks, sizeof(*jack), 32);
5004         jack = snd_array_new(&codec->jacks);
5005         if (!jack)
5006                 return -ENOMEM;
5007
5008         jack->nid = nid;
5009         jack->type = type;
5010         if (!name)
5011                 name = get_jack_default_name(codec, nid, type);
5012         err = snd_jack_new(codec->bus->card, name, type, &jack->jack);
5013         if (err < 0) {
5014                 jack->nid = 0;
5015                 return err;
5016         }
5017         jack->jack->private_data = jack;
5018         jack->jack->private_free = hda_free_jack_priv;
5019         return 0;
5020 }
5021 EXPORT_SYMBOL_HDA(snd_hda_input_jack_add);
5022
5023 void snd_hda_input_jack_report(struct hda_codec *codec, hda_nid_t nid)
5024 {
5025         struct hda_jack_item *jacks = codec->jacks.list;
5026         int i;
5027
5028         if (!jacks)
5029                 return;
5030
5031         for (i = 0; i < codec->jacks.used; i++, jacks++) {
5032                 unsigned int pin_ctl;
5033                 unsigned int present;
5034                 int type;
5035
5036                 if (jacks->nid != nid)
5037                         continue;
5038                 present = snd_hda_jack_detect(codec, nid);
5039                 type = jacks->type;
5040                 if (type == (SND_JACK_HEADPHONE | SND_JACK_LINEOUT)) {
5041                         pin_ctl = snd_hda_codec_read(codec, nid, 0,
5042                                              AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5043                         type = (pin_ctl & AC_PINCTL_HP_EN) ?
5044                                 SND_JACK_HEADPHONE : SND_JACK_LINEOUT;
5045                 }
5046                 snd_jack_report(jacks->jack, present ? type : 0);
5047         }
5048 }
5049 EXPORT_SYMBOL_HDA(snd_hda_input_jack_report);
5050
5051 /* free jack instances manually when clearing/reconfiguring */
5052 void snd_hda_input_jack_free(struct hda_codec *codec)
5053 {
5054         if (!codec->bus->shutdown && codec->jacks.list) {
5055                 struct hda_jack_item *jacks = codec->jacks.list;
5056                 int i;
5057                 for (i = 0; i < codec->jacks.used; i++, jacks++) {
5058                         if (jacks->jack)
5059                                 snd_device_free(codec->bus->card, jacks->jack);
5060                 }
5061         }
5062         snd_array_free(&codec->jacks);
5063 }
5064 EXPORT_SYMBOL_HDA(snd_hda_input_jack_free);
5065 #endif /* CONFIG_SND_HDA_INPUT_JACK */
5066
5067 MODULE_DESCRIPTION("HDA codec core");
5068 MODULE_LICENSE("GPL");