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