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