ALSA: hda - Add function id to proc output
[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                 codec->function_id = snd_hda_param_read(codec, nid,
651                                                 AC_PAR_FUNCTION_TYPE) & 0xff;
652                 switch (codec->function_id) {
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         unsigned int oldcfg;
743
744         oldcfg = snd_hda_codec_get_pincfg(codec, nid);
745         pin = look_up_pincfg(codec, list, nid);
746         if (!pin) {
747                 pin = snd_array_new(list);
748                 if (!pin)
749                         return -ENOMEM;
750                 pin->nid = nid;
751         }
752         pin->cfg = cfg;
753
754         /* change only when needed; e.g. if the pincfg is already present
755          * in user_pins[], don't write it
756          */
757         cfg = snd_hda_codec_get_pincfg(codec, nid);
758         if (oldcfg != cfg)
759                 set_pincfg(codec, nid, cfg);
760         return 0;
761 }
762
763 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
764                              hda_nid_t nid, unsigned int cfg)
765 {
766         return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
767 }
768 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
769
770 /* get the current pin config value of the given pin NID */
771 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
772 {
773         struct hda_pincfg *pin;
774
775 #ifdef CONFIG_SND_HDA_HWDEP
776         pin = look_up_pincfg(codec, &codec->user_pins, nid);
777         if (pin)
778                 return pin->cfg;
779 #endif
780         pin = look_up_pincfg(codec, &codec->driver_pins, nid);
781         if (pin)
782                 return pin->cfg;
783         pin = look_up_pincfg(codec, &codec->init_pins, nid);
784         if (pin)
785                 return pin->cfg;
786         return 0;
787 }
788 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
789
790 /* restore all current pin configs */
791 static void restore_pincfgs(struct hda_codec *codec)
792 {
793         int i;
794         for (i = 0; i < codec->init_pins.used; i++) {
795                 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
796                 set_pincfg(codec, pin->nid,
797                            snd_hda_codec_get_pincfg(codec, pin->nid));
798         }
799 }
800
801 static void init_hda_cache(struct hda_cache_rec *cache,
802                            unsigned int record_size);
803 static void free_hda_cache(struct hda_cache_rec *cache);
804
805 /* restore the initial pin cfgs and release all pincfg lists */
806 static void restore_init_pincfgs(struct hda_codec *codec)
807 {
808         /* first free driver_pins and user_pins, then call restore_pincfg
809          * so that only the values in init_pins are restored
810          */
811         snd_array_free(&codec->driver_pins);
812 #ifdef CONFIG_SND_HDA_HWDEP
813         snd_array_free(&codec->user_pins);
814 #endif
815         restore_pincfgs(codec);
816         snd_array_free(&codec->init_pins);
817 }
818
819 /*
820  * codec destructor
821  */
822 static void snd_hda_codec_free(struct hda_codec *codec)
823 {
824         if (!codec)
825                 return;
826         restore_init_pincfgs(codec);
827 #ifdef CONFIG_SND_HDA_POWER_SAVE
828         cancel_delayed_work(&codec->power_work);
829         flush_workqueue(codec->bus->workq);
830 #endif
831         list_del(&codec->list);
832         snd_array_free(&codec->mixers);
833         codec->bus->caddr_tbl[codec->addr] = NULL;
834         if (codec->patch_ops.free)
835                 codec->patch_ops.free(codec);
836         module_put(codec->owner);
837         free_hda_cache(&codec->amp_cache);
838         free_hda_cache(&codec->cmd_cache);
839         kfree(codec->name);
840         kfree(codec->modelname);
841         kfree(codec->wcaps);
842         kfree(codec);
843 }
844
845 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
846                                 unsigned int power_state);
847
848 /**
849  * snd_hda_codec_new - create a HDA codec
850  * @bus: the bus to assign
851  * @codec_addr: the codec address
852  * @codecp: the pointer to store the generated codec
853  *
854  * Returns 0 if successful, or a negative error code.
855  */
856 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
857                                     int do_init, struct hda_codec **codecp)
858 {
859         struct hda_codec *codec;
860         char component[31];
861         int err;
862
863         if (snd_BUG_ON(!bus))
864                 return -EINVAL;
865         if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
866                 return -EINVAL;
867
868         if (bus->caddr_tbl[codec_addr]) {
869                 snd_printk(KERN_ERR "hda_codec: "
870                            "address 0x%x is already occupied\n", codec_addr);
871                 return -EBUSY;
872         }
873
874         codec = kzalloc(sizeof(*codec), GFP_KERNEL);
875         if (codec == NULL) {
876                 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
877                 return -ENOMEM;
878         }
879
880         codec->bus = bus;
881         codec->addr = codec_addr;
882         mutex_init(&codec->spdif_mutex);
883         mutex_init(&codec->control_mutex);
884         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
885         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
886         snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
887         snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
888         snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
889         if (codec->bus->modelname) {
890                 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
891                 if (!codec->modelname) {
892                         snd_hda_codec_free(codec);
893                         return -ENODEV;
894                 }
895         }
896
897 #ifdef CONFIG_SND_HDA_POWER_SAVE
898         INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
899         /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
900          * the caller has to power down appropriatley after initialization
901          * phase.
902          */
903         hda_keep_power_on(codec);
904 #endif
905
906         list_add_tail(&codec->list, &bus->codec_list);
907         bus->caddr_tbl[codec_addr] = codec;
908
909         codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
910                                               AC_PAR_VENDOR_ID);
911         if (codec->vendor_id == -1)
912                 /* read again, hopefully the access method was corrected
913                  * in the last read...
914                  */
915                 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
916                                                       AC_PAR_VENDOR_ID);
917         codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
918                                                  AC_PAR_SUBSYSTEM_ID);
919         codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
920                                                 AC_PAR_REV_ID);
921
922         setup_fg_nodes(codec);
923         if (!codec->afg && !codec->mfg) {
924                 snd_printdd("hda_codec: no AFG or MFG node found\n");
925                 err = -ENODEV;
926                 goto error;
927         }
928
929         err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
930         if (err < 0) {
931                 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
932                 goto error;
933         }
934         err = read_pin_defaults(codec);
935         if (err < 0)
936                 goto error;
937
938         if (!codec->subsystem_id) {
939                 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
940                 codec->subsystem_id =
941                         snd_hda_codec_read(codec, nid, 0,
942                                            AC_VERB_GET_SUBSYSTEM_ID, 0);
943         }
944         if (bus->modelname)
945                 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
946
947         /* power-up all before initialization */
948         hda_set_power_state(codec,
949                             codec->afg ? codec->afg : codec->mfg,
950                             AC_PWRST_D0);
951
952         if (do_init) {
953                 err = snd_hda_codec_configure(codec);
954                 if (err < 0)
955                         goto error;
956         }
957         snd_hda_codec_proc_new(codec);
958
959         snd_hda_create_hwdep(codec);
960
961         sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
962                 codec->subsystem_id, codec->revision_id);
963         snd_component_add(codec->bus->card, component);
964
965         if (codecp)
966                 *codecp = codec;
967         return 0;
968
969  error:
970         snd_hda_codec_free(codec);
971         return err;
972 }
973 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
974
975 int snd_hda_codec_configure(struct hda_codec *codec)
976 {
977         int err;
978
979         codec->preset = find_codec_preset(codec);
980         if (!codec->name) {
981                 err = get_codec_name(codec);
982                 if (err < 0)
983                         return err;
984         }
985         /* audio codec should override the mixer name */
986         if (codec->afg || !*codec->bus->card->mixername)
987                 strlcpy(codec->bus->card->mixername, codec->name,
988                         sizeof(codec->bus->card->mixername));
989
990         if (is_generic_config(codec)) {
991                 err = snd_hda_parse_generic_codec(codec);
992                 goto patched;
993         }
994         if (codec->preset && codec->preset->patch) {
995                 err = codec->preset->patch(codec);
996                 goto patched;
997         }
998
999         /* call the default parser */
1000         err = snd_hda_parse_generic_codec(codec);
1001         if (err < 0)
1002                 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1003
1004  patched:
1005         if (!err && codec->patch_ops.unsol_event)
1006                 err = init_unsol_queue(codec->bus);
1007         return err;
1008 }
1009
1010 /**
1011  * snd_hda_codec_setup_stream - set up the codec for streaming
1012  * @codec: the CODEC to set up
1013  * @nid: the NID to set up
1014  * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1015  * @channel_id: channel id to pass, zero based.
1016  * @format: stream format.
1017  */
1018 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1019                                 u32 stream_tag,
1020                                 int channel_id, int format)
1021 {
1022         if (!nid)
1023                 return;
1024
1025         snd_printdd("hda_codec_setup_stream: "
1026                     "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1027                     nid, stream_tag, channel_id, format);
1028         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
1029                             (stream_tag << 4) | channel_id);
1030         msleep(1);
1031         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
1032 }
1033 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1034
1035 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
1036 {
1037         if (!nid)
1038                 return;
1039
1040         snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1041         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1042 #if 0 /* keep the format */
1043         msleep(1);
1044         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1045 #endif
1046 }
1047 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
1048
1049 /*
1050  * amp access functions
1051  */
1052
1053 /* FIXME: more better hash key? */
1054 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1055 #define INFO_AMP_CAPS   (1<<0)
1056 #define INFO_AMP_VOL(ch)        (1 << (1 + (ch)))
1057
1058 /* initialize the hash table */
1059 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1060                                      unsigned int record_size)
1061 {
1062         memset(cache, 0, sizeof(*cache));
1063         memset(cache->hash, 0xff, sizeof(cache->hash));
1064         snd_array_init(&cache->buf, record_size, 64);
1065 }
1066
1067 static void free_hda_cache(struct hda_cache_rec *cache)
1068 {
1069         snd_array_free(&cache->buf);
1070 }
1071
1072 /* query the hash.  allocate an entry if not found. */
1073 static struct hda_cache_head  *get_alloc_hash(struct hda_cache_rec *cache,
1074                                               u32 key)
1075 {
1076         u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1077         u16 cur = cache->hash[idx];
1078         struct hda_cache_head *info;
1079
1080         while (cur != 0xffff) {
1081                 info = snd_array_elem(&cache->buf, cur);
1082                 if (info->key == key)
1083                         return info;
1084                 cur = info->next;
1085         }
1086
1087         /* add a new hash entry */
1088         info = snd_array_new(&cache->buf);
1089         if (!info)
1090                 return NULL;
1091         cur = snd_array_index(&cache->buf, info);
1092         info->key = key;
1093         info->val = 0;
1094         info->next = cache->hash[idx];
1095         cache->hash[idx] = cur;
1096
1097         return info;
1098 }
1099
1100 /* query and allocate an amp hash entry */
1101 static inline struct hda_amp_info *
1102 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1103 {
1104         return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1105 }
1106
1107 /*
1108  * query AMP capabilities for the given widget and direction
1109  */
1110 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1111 {
1112         struct hda_amp_info *info;
1113
1114         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1115         if (!info)
1116                 return 0;
1117         if (!(info->head.val & INFO_AMP_CAPS)) {
1118                 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1119                         nid = codec->afg;
1120                 info->amp_caps = snd_hda_param_read(codec, nid,
1121                                                     direction == HDA_OUTPUT ?
1122                                                     AC_PAR_AMP_OUT_CAP :
1123                                                     AC_PAR_AMP_IN_CAP);
1124                 if (info->amp_caps)
1125                         info->head.val |= INFO_AMP_CAPS;
1126         }
1127         return info->amp_caps;
1128 }
1129 EXPORT_SYMBOL_HDA(query_amp_caps);
1130
1131 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1132                               unsigned int caps)
1133 {
1134         struct hda_amp_info *info;
1135
1136         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1137         if (!info)
1138                 return -EINVAL;
1139         info->amp_caps = caps;
1140         info->head.val |= INFO_AMP_CAPS;
1141         return 0;
1142 }
1143 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1144
1145 /*
1146  * read the current volume to info
1147  * if the cache exists, read the cache value.
1148  */
1149 static unsigned int get_vol_mute(struct hda_codec *codec,
1150                                  struct hda_amp_info *info, hda_nid_t nid,
1151                                  int ch, int direction, int index)
1152 {
1153         u32 val, parm;
1154
1155         if (info->head.val & INFO_AMP_VOL(ch))
1156                 return info->vol[ch];
1157
1158         parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1159         parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1160         parm |= index;
1161         val = snd_hda_codec_read(codec, nid, 0,
1162                                  AC_VERB_GET_AMP_GAIN_MUTE, parm);
1163         info->vol[ch] = val & 0xff;
1164         info->head.val |= INFO_AMP_VOL(ch);
1165         return info->vol[ch];
1166 }
1167
1168 /*
1169  * write the current volume in info to the h/w and update the cache
1170  */
1171 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1172                          hda_nid_t nid, int ch, int direction, int index,
1173                          int val)
1174 {
1175         u32 parm;
1176
1177         parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1178         parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1179         parm |= index << AC_AMP_SET_INDEX_SHIFT;
1180         parm |= val;
1181         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1182         info->vol[ch] = val;
1183 }
1184
1185 /*
1186  * read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit.
1187  */
1188 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1189                            int direction, int index)
1190 {
1191         struct hda_amp_info *info;
1192         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1193         if (!info)
1194                 return 0;
1195         return get_vol_mute(codec, info, nid, ch, direction, index);
1196 }
1197 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1198
1199 /*
1200  * update the AMP value, mask = bit mask to set, val = the value
1201  */
1202 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1203                              int direction, int idx, int mask, int val)
1204 {
1205         struct hda_amp_info *info;
1206
1207         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1208         if (!info)
1209                 return 0;
1210         val &= mask;
1211         val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1212         if (info->vol[ch] == val)
1213                 return 0;
1214         put_vol_mute(codec, info, nid, ch, direction, idx, val);
1215         return 1;
1216 }
1217 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1218
1219 /*
1220  * update the AMP stereo with the same mask and value
1221  */
1222 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1223                              int direction, int idx, int mask, int val)
1224 {
1225         int ch, ret = 0;
1226         for (ch = 0; ch < 2; ch++)
1227                 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1228                                                 idx, mask, val);
1229         return ret;
1230 }
1231 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1232
1233 #ifdef SND_HDA_NEEDS_RESUME
1234 /* resume the all amp commands from the cache */
1235 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1236 {
1237         struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1238         int i;
1239
1240         for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1241                 u32 key = buffer->head.key;
1242                 hda_nid_t nid;
1243                 unsigned int idx, dir, ch;
1244                 if (!key)
1245                         continue;
1246                 nid = key & 0xff;
1247                 idx = (key >> 16) & 0xff;
1248                 dir = (key >> 24) & 0xff;
1249                 for (ch = 0; ch < 2; ch++) {
1250                         if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1251                                 continue;
1252                         put_vol_mute(codec, buffer, nid, ch, dir, idx,
1253                                      buffer->vol[ch]);
1254                 }
1255         }
1256 }
1257 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1258 #endif /* SND_HDA_NEEDS_RESUME */
1259
1260 /* volume */
1261 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1262                                   struct snd_ctl_elem_info *uinfo)
1263 {
1264         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1265         u16 nid = get_amp_nid(kcontrol);
1266         u8 chs = get_amp_channels(kcontrol);
1267         int dir = get_amp_direction(kcontrol);
1268         unsigned int ofs = get_amp_offset(kcontrol);
1269         u32 caps;
1270
1271         caps = query_amp_caps(codec, nid, dir);
1272         /* num steps */
1273         caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1274         if (!caps) {
1275                 printk(KERN_WARNING "hda_codec: "
1276                        "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1277                        kcontrol->id.name);
1278                 return -EINVAL;
1279         }
1280         if (ofs < caps)
1281                 caps -= ofs;
1282         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1283         uinfo->count = chs == 3 ? 2 : 1;
1284         uinfo->value.integer.min = 0;
1285         uinfo->value.integer.max = caps;
1286         return 0;
1287 }
1288 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1289
1290
1291 static inline unsigned int
1292 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1293                int ch, int dir, int idx, unsigned int ofs)
1294 {
1295         unsigned int val;
1296         val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1297         val &= HDA_AMP_VOLMASK;
1298         if (val >= ofs)
1299                 val -= ofs;
1300         else
1301                 val = 0;
1302         return val;
1303 }
1304
1305 static inline int
1306 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1307                  int ch, int dir, int idx, unsigned int ofs,
1308                  unsigned int val)
1309 {
1310         if (val > 0)
1311                 val += ofs;
1312         return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1313                                         HDA_AMP_VOLMASK, val);
1314 }
1315
1316 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1317                                  struct snd_ctl_elem_value *ucontrol)
1318 {
1319         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1320         hda_nid_t nid = get_amp_nid(kcontrol);
1321         int chs = get_amp_channels(kcontrol);
1322         int dir = get_amp_direction(kcontrol);
1323         int idx = get_amp_index(kcontrol);
1324         unsigned int ofs = get_amp_offset(kcontrol);
1325         long *valp = ucontrol->value.integer.value;
1326
1327         if (chs & 1)
1328                 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1329         if (chs & 2)
1330                 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1331         return 0;
1332 }
1333 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1334
1335 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1336                                  struct snd_ctl_elem_value *ucontrol)
1337 {
1338         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1339         hda_nid_t nid = get_amp_nid(kcontrol);
1340         int chs = get_amp_channels(kcontrol);
1341         int dir = get_amp_direction(kcontrol);
1342         int idx = get_amp_index(kcontrol);
1343         unsigned int ofs = get_amp_offset(kcontrol);
1344         long *valp = ucontrol->value.integer.value;
1345         int change = 0;
1346
1347         snd_hda_power_up(codec);
1348         if (chs & 1) {
1349                 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1350                 valp++;
1351         }
1352         if (chs & 2)
1353                 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1354         snd_hda_power_down(codec);
1355         return change;
1356 }
1357 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1358
1359 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1360                           unsigned int size, unsigned int __user *_tlv)
1361 {
1362         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1363         hda_nid_t nid = get_amp_nid(kcontrol);
1364         int dir = get_amp_direction(kcontrol);
1365         unsigned int ofs = get_amp_offset(kcontrol);
1366         u32 caps, val1, val2;
1367
1368         if (size < 4 * sizeof(unsigned int))
1369                 return -ENOMEM;
1370         caps = query_amp_caps(codec, nid, dir);
1371         val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1372         val2 = (val2 + 1) * 25;
1373         val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1374         val1 += ofs;
1375         val1 = ((int)val1) * ((int)val2);
1376         if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1377                 return -EFAULT;
1378         if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1379                 return -EFAULT;
1380         if (put_user(val1, _tlv + 2))
1381                 return -EFAULT;
1382         if (put_user(val2, _tlv + 3))
1383                 return -EFAULT;
1384         return 0;
1385 }
1386 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1387
1388 /*
1389  * set (static) TLV for virtual master volume; recalculated as max 0dB
1390  */
1391 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1392                              unsigned int *tlv)
1393 {
1394         u32 caps;
1395         int nums, step;
1396
1397         caps = query_amp_caps(codec, nid, dir);
1398         nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1399         step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1400         step = (step + 1) * 25;
1401         tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1402         tlv[1] = 2 * sizeof(unsigned int);
1403         tlv[2] = -nums * step;
1404         tlv[3] = step;
1405 }
1406 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1407
1408 /* find a mixer control element with the given name */
1409 static struct snd_kcontrol *
1410 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1411                         const char *name, int idx)
1412 {
1413         struct snd_ctl_elem_id id;
1414         memset(&id, 0, sizeof(id));
1415         id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1416         id.index = idx;
1417         strcpy(id.name, name);
1418         return snd_ctl_find_id(codec->bus->card, &id);
1419 }
1420
1421 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1422                                             const char *name)
1423 {
1424         return _snd_hda_find_mixer_ctl(codec, name, 0);
1425 }
1426 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1427
1428 /* Add a control element and assign to the codec */
1429 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1430 {
1431         int err;
1432         struct snd_kcontrol **knewp;
1433
1434         err = snd_ctl_add(codec->bus->card, kctl);
1435         if (err < 0)
1436                 return err;
1437         knewp = snd_array_new(&codec->mixers);
1438         if (!knewp)
1439                 return -ENOMEM;
1440         *knewp = kctl;
1441         return 0;
1442 }
1443 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1444
1445 /* Clear all controls assigned to the given codec */
1446 void snd_hda_ctls_clear(struct hda_codec *codec)
1447 {
1448         int i;
1449         struct snd_kcontrol **kctls = codec->mixers.list;
1450         for (i = 0; i < codec->mixers.used; i++)
1451                 snd_ctl_remove(codec->bus->card, kctls[i]);
1452         snd_array_free(&codec->mixers);
1453 }
1454
1455 /* pseudo device locking
1456  * toggle card->shutdown to allow/disallow the device access (as a hack)
1457  */
1458 static int hda_lock_devices(struct snd_card *card)
1459 {
1460         spin_lock(&card->files_lock);
1461         if (card->shutdown) {
1462                 spin_unlock(&card->files_lock);
1463                 return -EINVAL;
1464         }
1465         card->shutdown = 1;
1466         spin_unlock(&card->files_lock);
1467         return 0;
1468 }
1469
1470 static void hda_unlock_devices(struct snd_card *card)
1471 {
1472         spin_lock(&card->files_lock);
1473         card->shutdown = 0;
1474         spin_unlock(&card->files_lock);
1475 }
1476
1477 int snd_hda_codec_reset(struct hda_codec *codec)
1478 {
1479         struct snd_card *card = codec->bus->card;
1480         int i, pcm;
1481
1482         if (hda_lock_devices(card) < 0)
1483                 return -EBUSY;
1484         /* check whether the codec isn't used by any mixer or PCM streams */
1485         if (!list_empty(&card->ctl_files)) {
1486                 hda_unlock_devices(card);
1487                 return -EBUSY;
1488         }
1489         for (pcm = 0; pcm < codec->num_pcms; pcm++) {
1490                 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
1491                 if (!cpcm->pcm)
1492                         continue;
1493                 if (cpcm->pcm->streams[0].substream_opened ||
1494                     cpcm->pcm->streams[1].substream_opened) {
1495                         hda_unlock_devices(card);
1496                         return -EBUSY;
1497                 }
1498         }
1499
1500         /* OK, let it free */
1501
1502 #ifdef CONFIG_SND_HDA_POWER_SAVE
1503         cancel_delayed_work(&codec->power_work);
1504         flush_workqueue(codec->bus->workq);
1505 #endif
1506         snd_hda_ctls_clear(codec);
1507         /* relase PCMs */
1508         for (i = 0; i < codec->num_pcms; i++) {
1509                 if (codec->pcm_info[i].pcm) {
1510                         snd_device_free(card, codec->pcm_info[i].pcm);
1511                         clear_bit(codec->pcm_info[i].device,
1512                                   codec->bus->pcm_dev_bits);
1513                 }
1514         }
1515         if (codec->patch_ops.free)
1516                 codec->patch_ops.free(codec);
1517         codec->proc_widget_hook = NULL;
1518         codec->spec = NULL;
1519         free_hda_cache(&codec->amp_cache);
1520         free_hda_cache(&codec->cmd_cache);
1521         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1522         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1523         /* free only driver_pins so that init_pins + user_pins are restored */
1524         snd_array_free(&codec->driver_pins);
1525         restore_pincfgs(codec);
1526         codec->num_pcms = 0;
1527         codec->pcm_info = NULL;
1528         codec->preset = NULL;
1529         memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
1530         codec->slave_dig_outs = NULL;
1531         codec->spdif_status_reset = 0;
1532         module_put(codec->owner);
1533         codec->owner = NULL;
1534
1535         /* allow device access again */
1536         hda_unlock_devices(card);
1537         return 0;
1538 }
1539
1540 /* create a virtual master control and add slaves */
1541 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1542                         unsigned int *tlv, const char **slaves)
1543 {
1544         struct snd_kcontrol *kctl;
1545         const char **s;
1546         int err;
1547
1548         for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1549                 ;
1550         if (!*s) {
1551                 snd_printdd("No slave found for %s\n", name);
1552                 return 0;
1553         }
1554         kctl = snd_ctl_make_virtual_master(name, tlv);
1555         if (!kctl)
1556                 return -ENOMEM;
1557         err = snd_hda_ctl_add(codec, kctl);
1558         if (err < 0)
1559                 return err;
1560         
1561         for (s = slaves; *s; s++) {
1562                 struct snd_kcontrol *sctl;
1563                 int i = 0;
1564                 for (;;) {
1565                         sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
1566                         if (!sctl) {
1567                                 if (!i)
1568                                         snd_printdd("Cannot find slave %s, "
1569                                                     "skipped\n", *s);
1570                                 break;
1571                         }
1572                         err = snd_ctl_add_slave(kctl, sctl);
1573                         if (err < 0)
1574                                 return err;
1575                         i++;
1576                 }
1577         }
1578         return 0;
1579 }
1580 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1581
1582 /* switch */
1583 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1584                                   struct snd_ctl_elem_info *uinfo)
1585 {
1586         int chs = get_amp_channels(kcontrol);
1587
1588         uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1589         uinfo->count = chs == 3 ? 2 : 1;
1590         uinfo->value.integer.min = 0;
1591         uinfo->value.integer.max = 1;
1592         return 0;
1593 }
1594 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1595
1596 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1597                                  struct snd_ctl_elem_value *ucontrol)
1598 {
1599         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1600         hda_nid_t nid = get_amp_nid(kcontrol);
1601         int chs = get_amp_channels(kcontrol);
1602         int dir = get_amp_direction(kcontrol);
1603         int idx = get_amp_index(kcontrol);
1604         long *valp = ucontrol->value.integer.value;
1605
1606         if (chs & 1)
1607                 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1608                            HDA_AMP_MUTE) ? 0 : 1;
1609         if (chs & 2)
1610                 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1611                          HDA_AMP_MUTE) ? 0 : 1;
1612         return 0;
1613 }
1614 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1615
1616 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1617                                  struct snd_ctl_elem_value *ucontrol)
1618 {
1619         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1620         hda_nid_t nid = get_amp_nid(kcontrol);
1621         int chs = get_amp_channels(kcontrol);
1622         int dir = get_amp_direction(kcontrol);
1623         int idx = get_amp_index(kcontrol);
1624         long *valp = ucontrol->value.integer.value;
1625         int change = 0;
1626
1627         snd_hda_power_up(codec);
1628         if (chs & 1) {
1629                 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1630                                                   HDA_AMP_MUTE,
1631                                                   *valp ? 0 : HDA_AMP_MUTE);
1632                 valp++;
1633         }
1634         if (chs & 2)
1635                 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1636                                                    HDA_AMP_MUTE,
1637                                                    *valp ? 0 : HDA_AMP_MUTE);
1638 #ifdef CONFIG_SND_HDA_POWER_SAVE
1639         if (codec->patch_ops.check_power_status)
1640                 codec->patch_ops.check_power_status(codec, nid);
1641 #endif
1642         snd_hda_power_down(codec);
1643         return change;
1644 }
1645 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1646
1647 /*
1648  * bound volume controls
1649  *
1650  * bind multiple volumes (# indices, from 0)
1651  */
1652
1653 #define AMP_VAL_IDX_SHIFT       19
1654 #define AMP_VAL_IDX_MASK        (0x0f<<19)
1655
1656 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1657                                   struct snd_ctl_elem_value *ucontrol)
1658 {
1659         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1660         unsigned long pval;
1661         int err;
1662
1663         mutex_lock(&codec->control_mutex);
1664         pval = kcontrol->private_value;
1665         kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1666         err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1667         kcontrol->private_value = pval;
1668         mutex_unlock(&codec->control_mutex);
1669         return err;
1670 }
1671 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1672
1673 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1674                                   struct snd_ctl_elem_value *ucontrol)
1675 {
1676         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1677         unsigned long pval;
1678         int i, indices, err = 0, change = 0;
1679
1680         mutex_lock(&codec->control_mutex);
1681         pval = kcontrol->private_value;
1682         indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1683         for (i = 0; i < indices; i++) {
1684                 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1685                         (i << AMP_VAL_IDX_SHIFT);
1686                 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1687                 if (err < 0)
1688                         break;
1689                 change |= err;
1690         }
1691         kcontrol->private_value = pval;
1692         mutex_unlock(&codec->control_mutex);
1693         return err < 0 ? err : change;
1694 }
1695 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1696
1697 /*
1698  * generic bound volume/swtich controls
1699  */
1700 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1701                                  struct snd_ctl_elem_info *uinfo)
1702 {
1703         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1704         struct hda_bind_ctls *c;
1705         int err;
1706
1707         mutex_lock(&codec->control_mutex);
1708         c = (struct hda_bind_ctls *)kcontrol->private_value;
1709         kcontrol->private_value = *c->values;
1710         err = c->ops->info(kcontrol, uinfo);
1711         kcontrol->private_value = (long)c;
1712         mutex_unlock(&codec->control_mutex);
1713         return err;
1714 }
1715 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1716
1717 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1718                                 struct snd_ctl_elem_value *ucontrol)
1719 {
1720         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1721         struct hda_bind_ctls *c;
1722         int err;
1723
1724         mutex_lock(&codec->control_mutex);
1725         c = (struct hda_bind_ctls *)kcontrol->private_value;
1726         kcontrol->private_value = *c->values;
1727         err = c->ops->get(kcontrol, ucontrol);
1728         kcontrol->private_value = (long)c;
1729         mutex_unlock(&codec->control_mutex);
1730         return err;
1731 }
1732 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1733
1734 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1735                                 struct snd_ctl_elem_value *ucontrol)
1736 {
1737         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1738         struct hda_bind_ctls *c;
1739         unsigned long *vals;
1740         int err = 0, change = 0;
1741
1742         mutex_lock(&codec->control_mutex);
1743         c = (struct hda_bind_ctls *)kcontrol->private_value;
1744         for (vals = c->values; *vals; vals++) {
1745                 kcontrol->private_value = *vals;
1746                 err = c->ops->put(kcontrol, ucontrol);
1747                 if (err < 0)
1748                         break;
1749                 change |= err;
1750         }
1751         kcontrol->private_value = (long)c;
1752         mutex_unlock(&codec->control_mutex);
1753         return err < 0 ? err : change;
1754 }
1755 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1756
1757 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1758                            unsigned int size, unsigned int __user *tlv)
1759 {
1760         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1761         struct hda_bind_ctls *c;
1762         int err;
1763
1764         mutex_lock(&codec->control_mutex);
1765         c = (struct hda_bind_ctls *)kcontrol->private_value;
1766         kcontrol->private_value = *c->values;
1767         err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1768         kcontrol->private_value = (long)c;
1769         mutex_unlock(&codec->control_mutex);
1770         return err;
1771 }
1772 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1773
1774 struct hda_ctl_ops snd_hda_bind_vol = {
1775         .info = snd_hda_mixer_amp_volume_info,
1776         .get = snd_hda_mixer_amp_volume_get,
1777         .put = snd_hda_mixer_amp_volume_put,
1778         .tlv = snd_hda_mixer_amp_tlv
1779 };
1780 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1781
1782 struct hda_ctl_ops snd_hda_bind_sw = {
1783         .info = snd_hda_mixer_amp_switch_info,
1784         .get = snd_hda_mixer_amp_switch_get,
1785         .put = snd_hda_mixer_amp_switch_put,
1786         .tlv = snd_hda_mixer_amp_tlv
1787 };
1788 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1789
1790 /*
1791  * SPDIF out controls
1792  */
1793
1794 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1795                                    struct snd_ctl_elem_info *uinfo)
1796 {
1797         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1798         uinfo->count = 1;
1799         return 0;
1800 }
1801
1802 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1803                                    struct snd_ctl_elem_value *ucontrol)
1804 {
1805         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1806                                            IEC958_AES0_NONAUDIO |
1807                                            IEC958_AES0_CON_EMPHASIS_5015 |
1808                                            IEC958_AES0_CON_NOT_COPYRIGHT;
1809         ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1810                                            IEC958_AES1_CON_ORIGINAL;
1811         return 0;
1812 }
1813
1814 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1815                                    struct snd_ctl_elem_value *ucontrol)
1816 {
1817         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1818                                            IEC958_AES0_NONAUDIO |
1819                                            IEC958_AES0_PRO_EMPHASIS_5015;
1820         return 0;
1821 }
1822
1823 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1824                                      struct snd_ctl_elem_value *ucontrol)
1825 {
1826         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1827
1828         ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1829         ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1830         ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1831         ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1832
1833         return 0;
1834 }
1835
1836 /* convert from SPDIF status bits to HDA SPDIF bits
1837  * bit 0 (DigEn) is always set zero (to be filled later)
1838  */
1839 static unsigned short convert_from_spdif_status(unsigned int sbits)
1840 {
1841         unsigned short val = 0;
1842
1843         if (sbits & IEC958_AES0_PROFESSIONAL)
1844                 val |= AC_DIG1_PROFESSIONAL;
1845         if (sbits & IEC958_AES0_NONAUDIO)
1846                 val |= AC_DIG1_NONAUDIO;
1847         if (sbits & IEC958_AES0_PROFESSIONAL) {
1848                 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1849                     IEC958_AES0_PRO_EMPHASIS_5015)
1850                         val |= AC_DIG1_EMPHASIS;
1851         } else {
1852                 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1853                     IEC958_AES0_CON_EMPHASIS_5015)
1854                         val |= AC_DIG1_EMPHASIS;
1855                 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1856                         val |= AC_DIG1_COPYRIGHT;
1857                 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1858                         val |= AC_DIG1_LEVEL;
1859                 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1860         }
1861         return val;
1862 }
1863
1864 /* convert to SPDIF status bits from HDA SPDIF bits
1865  */
1866 static unsigned int convert_to_spdif_status(unsigned short val)
1867 {
1868         unsigned int sbits = 0;
1869
1870         if (val & AC_DIG1_NONAUDIO)
1871                 sbits |= IEC958_AES0_NONAUDIO;
1872         if (val & AC_DIG1_PROFESSIONAL)
1873                 sbits |= IEC958_AES0_PROFESSIONAL;
1874         if (sbits & IEC958_AES0_PROFESSIONAL) {
1875                 if (sbits & AC_DIG1_EMPHASIS)
1876                         sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1877         } else {
1878                 if (val & AC_DIG1_EMPHASIS)
1879                         sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1880                 if (!(val & AC_DIG1_COPYRIGHT))
1881                         sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1882                 if (val & AC_DIG1_LEVEL)
1883                         sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1884                 sbits |= val & (0x7f << 8);
1885         }
1886         return sbits;
1887 }
1888
1889 /* set digital convert verbs both for the given NID and its slaves */
1890 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1891                         int verb, int val)
1892 {
1893         hda_nid_t *d;
1894
1895         snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1896         d = codec->slave_dig_outs;
1897         if (!d)
1898                 return;
1899         for (; *d; d++)
1900                 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1901 }
1902
1903 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1904                                        int dig1, int dig2)
1905 {
1906         if (dig1 != -1)
1907                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1908         if (dig2 != -1)
1909                 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
1910 }
1911
1912 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1913                                      struct snd_ctl_elem_value *ucontrol)
1914 {
1915         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1916         hda_nid_t nid = kcontrol->private_value;
1917         unsigned short val;
1918         int change;
1919
1920         mutex_lock(&codec->spdif_mutex);
1921         codec->spdif_status = ucontrol->value.iec958.status[0] |
1922                 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1923                 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1924                 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1925         val = convert_from_spdif_status(codec->spdif_status);
1926         val |= codec->spdif_ctls & 1;
1927         change = codec->spdif_ctls != val;
1928         codec->spdif_ctls = val;
1929
1930         if (change)
1931                 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
1932
1933         mutex_unlock(&codec->spdif_mutex);
1934         return change;
1935 }
1936
1937 #define snd_hda_spdif_out_switch_info   snd_ctl_boolean_mono_info
1938
1939 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1940                                         struct snd_ctl_elem_value *ucontrol)
1941 {
1942         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1943
1944         ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1945         return 0;
1946 }
1947
1948 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1949                                         struct snd_ctl_elem_value *ucontrol)
1950 {
1951         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1952         hda_nid_t nid = kcontrol->private_value;
1953         unsigned short val;
1954         int change;
1955
1956         mutex_lock(&codec->spdif_mutex);
1957         val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1958         if (ucontrol->value.integer.value[0])
1959                 val |= AC_DIG1_ENABLE;
1960         change = codec->spdif_ctls != val;
1961         if (change) {
1962                 codec->spdif_ctls = val;
1963                 set_dig_out_convert(codec, nid, val & 0xff, -1);
1964                 /* unmute amp switch (if any) */
1965                 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1966                     (val & AC_DIG1_ENABLE))
1967                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
1968                                                  HDA_AMP_MUTE, 0);
1969         }
1970         mutex_unlock(&codec->spdif_mutex);
1971         return change;
1972 }
1973
1974 static struct snd_kcontrol_new dig_mixes[] = {
1975         {
1976                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1977                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1978                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1979                 .info = snd_hda_spdif_mask_info,
1980                 .get = snd_hda_spdif_cmask_get,
1981         },
1982         {
1983                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1984                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1985                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
1986                 .info = snd_hda_spdif_mask_info,
1987                 .get = snd_hda_spdif_pmask_get,
1988         },
1989         {
1990                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1991                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1992                 .info = snd_hda_spdif_mask_info,
1993                 .get = snd_hda_spdif_default_get,
1994                 .put = snd_hda_spdif_default_put,
1995         },
1996         {
1997                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1998                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
1999                 .info = snd_hda_spdif_out_switch_info,
2000                 .get = snd_hda_spdif_out_switch_get,
2001                 .put = snd_hda_spdif_out_switch_put,
2002         },
2003         { } /* end */
2004 };
2005
2006 #define SPDIF_MAX_IDX   4       /* 4 instances should be enough to probe */
2007
2008 /**
2009  * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2010  * @codec: the HDA codec
2011  * @nid: audio out widget NID
2012  *
2013  * Creates controls related with the SPDIF output.
2014  * Called from each patch supporting the SPDIF out.
2015  *
2016  * Returns 0 if successful, or a negative error code.
2017  */
2018 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2019 {
2020         int err;
2021         struct snd_kcontrol *kctl;
2022         struct snd_kcontrol_new *dig_mix;
2023         int idx;
2024
2025         for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2026                 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
2027                                              idx))
2028                         break;
2029         }
2030         if (idx >= SPDIF_MAX_IDX) {
2031                 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2032                 return -EBUSY;
2033         }
2034         for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2035                 kctl = snd_ctl_new1(dig_mix, codec);
2036                 if (!kctl)
2037                         return -ENOMEM;
2038                 kctl->id.index = idx;
2039                 kctl->private_value = nid;
2040                 err = snd_hda_ctl_add(codec, kctl);
2041                 if (err < 0)
2042                         return err;
2043         }
2044         codec->spdif_ctls =
2045                 snd_hda_codec_read(codec, nid, 0,
2046                                    AC_VERB_GET_DIGI_CONVERT_1, 0);
2047         codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2048         return 0;
2049 }
2050 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2051
2052 /*
2053  * SPDIF sharing with analog output
2054  */
2055 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2056                               struct snd_ctl_elem_value *ucontrol)
2057 {
2058         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2059         ucontrol->value.integer.value[0] = mout->share_spdif;
2060         return 0;
2061 }
2062
2063 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2064                               struct snd_ctl_elem_value *ucontrol)
2065 {
2066         struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2067         mout->share_spdif = !!ucontrol->value.integer.value[0];
2068         return 0;
2069 }
2070
2071 static struct snd_kcontrol_new spdif_share_sw = {
2072         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2073         .name = "IEC958 Default PCM Playback Switch",
2074         .info = snd_ctl_boolean_mono_info,
2075         .get = spdif_share_sw_get,
2076         .put = spdif_share_sw_put,
2077 };
2078
2079 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2080                                   struct hda_multi_out *mout)
2081 {
2082         if (!mout->dig_out_nid)
2083                 return 0;
2084         /* ATTENTION: here mout is passed as private_data, instead of codec */
2085         return snd_hda_ctl_add(codec,
2086                            snd_ctl_new1(&spdif_share_sw, mout));
2087 }
2088 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2089
2090 /*
2091  * SPDIF input
2092  */
2093
2094 #define snd_hda_spdif_in_switch_info    snd_hda_spdif_out_switch_info
2095
2096 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2097                                        struct snd_ctl_elem_value *ucontrol)
2098 {
2099         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2100
2101         ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2102         return 0;
2103 }
2104
2105 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2106                                        struct snd_ctl_elem_value *ucontrol)
2107 {
2108         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2109         hda_nid_t nid = kcontrol->private_value;
2110         unsigned int val = !!ucontrol->value.integer.value[0];
2111         int change;
2112
2113         mutex_lock(&codec->spdif_mutex);
2114         change = codec->spdif_in_enable != val;
2115         if (change) {
2116                 codec->spdif_in_enable = val;
2117                 snd_hda_codec_write_cache(codec, nid, 0,
2118                                           AC_VERB_SET_DIGI_CONVERT_1, val);
2119         }
2120         mutex_unlock(&codec->spdif_mutex);
2121         return change;
2122 }
2123
2124 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2125                                        struct snd_ctl_elem_value *ucontrol)
2126 {
2127         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2128         hda_nid_t nid = kcontrol->private_value;
2129         unsigned short val;
2130         unsigned int sbits;
2131
2132         val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2133         sbits = convert_to_spdif_status(val);
2134         ucontrol->value.iec958.status[0] = sbits;
2135         ucontrol->value.iec958.status[1] = sbits >> 8;
2136         ucontrol->value.iec958.status[2] = sbits >> 16;
2137         ucontrol->value.iec958.status[3] = sbits >> 24;
2138         return 0;
2139 }
2140
2141 static struct snd_kcontrol_new dig_in_ctls[] = {
2142         {
2143                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2144                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
2145                 .info = snd_hda_spdif_in_switch_info,
2146                 .get = snd_hda_spdif_in_switch_get,
2147                 .put = snd_hda_spdif_in_switch_put,
2148         },
2149         {
2150                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2151                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2152                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
2153                 .info = snd_hda_spdif_mask_info,
2154                 .get = snd_hda_spdif_in_status_get,
2155         },
2156         { } /* end */
2157 };
2158
2159 /**
2160  * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2161  * @codec: the HDA codec
2162  * @nid: audio in widget NID
2163  *
2164  * Creates controls related with the SPDIF input.
2165  * Called from each patch supporting the SPDIF in.
2166  *
2167  * Returns 0 if successful, or a negative error code.
2168  */
2169 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2170 {
2171         int err;
2172         struct snd_kcontrol *kctl;
2173         struct snd_kcontrol_new *dig_mix;
2174         int idx;
2175
2176         for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2177                 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
2178                                              idx))
2179                         break;
2180         }
2181         if (idx >= SPDIF_MAX_IDX) {
2182                 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2183                 return -EBUSY;
2184         }
2185         for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2186                 kctl = snd_ctl_new1(dig_mix, codec);
2187                 if (!kctl)
2188                         return -ENOMEM;
2189                 kctl->private_value = nid;
2190                 err = snd_hda_ctl_add(codec, kctl);
2191                 if (err < 0)
2192                         return err;
2193         }
2194         codec->spdif_in_enable =
2195                 snd_hda_codec_read(codec, nid, 0,
2196                                    AC_VERB_GET_DIGI_CONVERT_1, 0) &
2197                 AC_DIG1_ENABLE;
2198         return 0;
2199 }
2200 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2201
2202 #ifdef SND_HDA_NEEDS_RESUME
2203 /*
2204  * command cache
2205  */
2206
2207 /* build a 32bit cache key with the widget id and the command parameter */
2208 #define build_cmd_cache_key(nid, verb)  ((verb << 8) | nid)
2209 #define get_cmd_cache_nid(key)          ((key) & 0xff)
2210 #define get_cmd_cache_cmd(key)          (((key) >> 8) & 0xffff)
2211
2212 /**
2213  * snd_hda_codec_write_cache - send a single command with caching
2214  * @codec: the HDA codec
2215  * @nid: NID to send the command
2216  * @direct: direct flag
2217  * @verb: the verb to send
2218  * @parm: the parameter for the verb
2219  *
2220  * Send a single command without waiting for response.
2221  *
2222  * Returns 0 if successful, or a negative error code.
2223  */
2224 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2225                               int direct, unsigned int verb, unsigned int parm)
2226 {
2227         struct hda_bus *bus = codec->bus;
2228         unsigned int res;
2229         int err;
2230
2231         res = make_codec_cmd(codec, nid, direct, verb, parm);
2232         snd_hda_power_up(codec);
2233         mutex_lock(&bus->cmd_mutex);
2234         err = bus->ops.command(bus, res);
2235         if (!err) {
2236                 struct hda_cache_head *c;
2237                 u32 key = build_cmd_cache_key(nid, verb);
2238                 c = get_alloc_hash(&codec->cmd_cache, key);
2239                 if (c)
2240                         c->val = parm;
2241         }
2242         mutex_unlock(&bus->cmd_mutex);
2243         snd_hda_power_down(codec);
2244         return err;
2245 }
2246 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2247
2248 /* resume the all commands from the cache */
2249 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2250 {
2251         struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2252         int i;
2253
2254         for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2255                 u32 key = buffer->key;
2256                 if (!key)
2257                         continue;
2258                 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2259                                     get_cmd_cache_cmd(key), buffer->val);
2260         }
2261 }
2262 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2263
2264 /**
2265  * snd_hda_sequence_write_cache - sequence writes with caching
2266  * @codec: the HDA codec
2267  * @seq: VERB array to send
2268  *
2269  * Send the commands sequentially from the given array.
2270  * Thte commands are recorded on cache for power-save and resume.
2271  * The array must be terminated with NID=0.
2272  */
2273 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2274                                   const struct hda_verb *seq)
2275 {
2276         for (; seq->nid; seq++)
2277                 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2278                                           seq->param);
2279 }
2280 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2281 #endif /* SND_HDA_NEEDS_RESUME */
2282
2283 /*
2284  * set power state of the codec
2285  */
2286 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2287                                 unsigned int power_state)
2288 {
2289         hda_nid_t nid;
2290         int i;
2291
2292         snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2293                             power_state);
2294         msleep(10); /* partial workaround for "azx_get_response timeout" */
2295
2296         nid = codec->start_nid;
2297         for (i = 0; i < codec->num_nodes; i++, nid++) {
2298                 unsigned int wcaps = get_wcaps(codec, nid);
2299                 if (wcaps & AC_WCAP_POWER) {
2300                         unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
2301                                 AC_WCAP_TYPE_SHIFT;
2302                         if (wid_type == AC_WID_PIN) {
2303                                 unsigned int pincap;
2304                                 /*
2305                                  * don't power down the widget if it controls
2306                                  * eapd and EAPD_BTLENABLE is set.
2307                                  */
2308                                 pincap = snd_hda_param_read(codec, nid,
2309                                                             AC_PAR_PIN_CAP);
2310                                 if (pincap & AC_PINCAP_EAPD) {
2311                                         int eapd = snd_hda_codec_read(codec,
2312                                                 nid, 0,
2313                                                 AC_VERB_GET_EAPD_BTLENABLE, 0);
2314                                         eapd &= 0x02;
2315                                         if (power_state == AC_PWRST_D3 && eapd)
2316                                                 continue;
2317                                 }
2318                         }
2319                         snd_hda_codec_write(codec, nid, 0,
2320                                             AC_VERB_SET_POWER_STATE,
2321                                             power_state);
2322                 }
2323         }
2324
2325         if (power_state == AC_PWRST_D0) {
2326                 unsigned long end_time;
2327                 int state;
2328                 msleep(10);
2329                 /* wait until the codec reachs to D0 */
2330                 end_time = jiffies + msecs_to_jiffies(500);
2331                 do {
2332                         state = snd_hda_codec_read(codec, fg, 0,
2333                                                    AC_VERB_GET_POWER_STATE, 0);
2334                         if (state == power_state)
2335                                 break;
2336                         msleep(1);
2337                 } while (time_after_eq(end_time, jiffies));
2338         }
2339 }
2340
2341 #ifdef CONFIG_SND_HDA_HWDEP
2342 /* execute additional init verbs */
2343 static void hda_exec_init_verbs(struct hda_codec *codec)
2344 {
2345         if (codec->init_verbs.list)
2346                 snd_hda_sequence_write(codec, codec->init_verbs.list);
2347 }
2348 #else
2349 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2350 #endif
2351
2352 #ifdef SND_HDA_NEEDS_RESUME
2353 /*
2354  * call suspend and power-down; used both from PM and power-save
2355  */
2356 static void hda_call_codec_suspend(struct hda_codec *codec)
2357 {
2358         if (codec->patch_ops.suspend)
2359                 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2360         hda_set_power_state(codec,
2361                             codec->afg ? codec->afg : codec->mfg,
2362                             AC_PWRST_D3);
2363 #ifdef CONFIG_SND_HDA_POWER_SAVE
2364         cancel_delayed_work(&codec->power_work);
2365         codec->power_on = 0;
2366         codec->power_transition = 0;
2367 #endif
2368 }
2369
2370 /*
2371  * kick up codec; used both from PM and power-save
2372  */
2373 static void hda_call_codec_resume(struct hda_codec *codec)
2374 {
2375         hda_set_power_state(codec,
2376                             codec->afg ? codec->afg : codec->mfg,
2377                             AC_PWRST_D0);
2378         restore_pincfgs(codec); /* restore all current pin configs */
2379         hda_exec_init_verbs(codec);
2380         if (codec->patch_ops.resume)
2381                 codec->patch_ops.resume(codec);
2382         else {
2383                 if (codec->patch_ops.init)
2384                         codec->patch_ops.init(codec);
2385                 snd_hda_codec_resume_amp(codec);
2386                 snd_hda_codec_resume_cache(codec);
2387         }
2388 }
2389 #endif /* SND_HDA_NEEDS_RESUME */
2390
2391
2392 /**
2393  * snd_hda_build_controls - build mixer controls
2394  * @bus: the BUS
2395  *
2396  * Creates mixer controls for each codec included in the bus.
2397  *
2398  * Returns 0 if successful, otherwise a negative error code.
2399  */
2400 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2401 {
2402         struct hda_codec *codec;
2403
2404         list_for_each_entry(codec, &bus->codec_list, list) {
2405                 int err = snd_hda_codec_build_controls(codec);
2406                 if (err < 0) {
2407                         printk(KERN_ERR "hda_codec: cannot build controls"
2408                                "for #%d (error %d)\n", codec->addr, err); 
2409                         err = snd_hda_codec_reset(codec);
2410                         if (err < 0) {
2411                                 printk(KERN_ERR
2412                                        "hda_codec: cannot revert codec\n");
2413                                 return err;
2414                         }
2415                 }
2416         }
2417         return 0;
2418 }
2419 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2420
2421 int snd_hda_codec_build_controls(struct hda_codec *codec)
2422 {
2423         int err = 0;
2424         hda_exec_init_verbs(codec);
2425         /* continue to initialize... */
2426         if (codec->patch_ops.init)
2427                 err = codec->patch_ops.init(codec);
2428         if (!err && codec->patch_ops.build_controls)
2429                 err = codec->patch_ops.build_controls(codec);
2430         if (err < 0)
2431                 return err;
2432         return 0;
2433 }
2434
2435 /*
2436  * stream formats
2437  */
2438 struct hda_rate_tbl {
2439         unsigned int hz;
2440         unsigned int alsa_bits;
2441         unsigned int hda_fmt;
2442 };
2443
2444 static struct hda_rate_tbl rate_bits[] = {
2445         /* rate in Hz, ALSA rate bitmask, HDA format value */
2446
2447         /* autodetected value used in snd_hda_query_supported_pcm */
2448         { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2449         { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2450         { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2451         { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2452         { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2453         { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2454         { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2455         { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2456         { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2457         { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2458         { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2459 #define AC_PAR_PCM_RATE_BITS    11
2460         /* up to bits 10, 384kHZ isn't supported properly */
2461
2462         /* not autodetected value */
2463         { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2464
2465         { 0 } /* terminator */
2466 };
2467
2468 /**
2469  * snd_hda_calc_stream_format - calculate format bitset
2470  * @rate: the sample rate
2471  * @channels: the number of channels
2472  * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2473  * @maxbps: the max. bps
2474  *
2475  * Calculate the format bitset from the given rate, channels and th PCM format.
2476  *
2477  * Return zero if invalid.
2478  */
2479 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2480                                         unsigned int channels,
2481                                         unsigned int format,
2482                                         unsigned int maxbps)
2483 {
2484         int i;
2485         unsigned int val = 0;
2486
2487         for (i = 0; rate_bits[i].hz; i++)
2488                 if (rate_bits[i].hz == rate) {
2489                         val = rate_bits[i].hda_fmt;
2490                         break;
2491                 }
2492         if (!rate_bits[i].hz) {
2493                 snd_printdd("invalid rate %d\n", rate);
2494                 return 0;
2495         }
2496
2497         if (channels == 0 || channels > 8) {
2498                 snd_printdd("invalid channels %d\n", channels);
2499                 return 0;
2500         }
2501         val |= channels - 1;
2502
2503         switch (snd_pcm_format_width(format)) {
2504         case 8:  val |= 0x00; break;
2505         case 16: val |= 0x10; break;
2506         case 20:
2507         case 24:
2508         case 32:
2509                 if (maxbps >= 32)
2510                         val |= 0x40;
2511                 else if (maxbps >= 24)
2512                         val |= 0x30;
2513                 else
2514                         val |= 0x20;
2515                 break;
2516         default:
2517                 snd_printdd("invalid format width %d\n",
2518                             snd_pcm_format_width(format));
2519                 return 0;
2520         }
2521
2522         return val;
2523 }
2524 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2525
2526 /**
2527  * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2528  * @codec: the HDA codec
2529  * @nid: NID to query
2530  * @ratesp: the pointer to store the detected rate bitflags
2531  * @formatsp: the pointer to store the detected formats
2532  * @bpsp: the pointer to store the detected format widths
2533  *
2534  * Queries the supported PCM rates and formats.  The NULL @ratesp, @formatsp
2535  * or @bsps argument is ignored.
2536  *
2537  * Returns 0 if successful, otherwise a negative error code.
2538  */
2539 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2540                                 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2541 {
2542         unsigned int i, val, wcaps;
2543
2544         val = 0;
2545         wcaps = get_wcaps(codec, nid);
2546         if (nid != codec->afg && (wcaps & AC_WCAP_FORMAT_OVRD)) {
2547                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2548                 if (val == -1)
2549                         return -EIO;
2550         }
2551         if (!val)
2552                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2553
2554         if (ratesp) {
2555                 u32 rates = 0;
2556                 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2557                         if (val & (1 << i))
2558                                 rates |= rate_bits[i].alsa_bits;
2559                 }
2560                 if (rates == 0) {
2561                         snd_printk(KERN_ERR "hda_codec: rates == 0 "
2562                                    "(nid=0x%x, val=0x%x, ovrd=%i)\n",
2563                                         nid, val,
2564                                         (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
2565                         return -EIO;
2566                 }
2567                 *ratesp = rates;
2568         }
2569
2570         if (formatsp || bpsp) {
2571                 u64 formats = 0;
2572                 unsigned int streams, bps;
2573
2574                 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2575                 if (streams == -1)
2576                         return -EIO;
2577                 if (!streams) {
2578                         streams = snd_hda_param_read(codec, codec->afg,
2579                                                      AC_PAR_STREAM);
2580                         if (streams == -1)
2581                                 return -EIO;
2582                 }
2583
2584                 bps = 0;
2585                 if (streams & AC_SUPFMT_PCM) {
2586                         if (val & AC_SUPPCM_BITS_8) {
2587                                 formats |= SNDRV_PCM_FMTBIT_U8;
2588                                 bps = 8;
2589                         }
2590                         if (val & AC_SUPPCM_BITS_16) {
2591                                 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2592                                 bps = 16;
2593                         }
2594                         if (wcaps & AC_WCAP_DIGITAL) {
2595                                 if (val & AC_SUPPCM_BITS_32)
2596                                         formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2597                                 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2598                                         formats |= SNDRV_PCM_FMTBIT_S32_LE;
2599                                 if (val & AC_SUPPCM_BITS_24)
2600                                         bps = 24;
2601                                 else if (val & AC_SUPPCM_BITS_20)
2602                                         bps = 20;
2603                         } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2604                                           AC_SUPPCM_BITS_32)) {
2605                                 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2606                                 if (val & AC_SUPPCM_BITS_32)
2607                                         bps = 32;
2608                                 else if (val & AC_SUPPCM_BITS_24)
2609                                         bps = 24;
2610                                 else if (val & AC_SUPPCM_BITS_20)
2611                                         bps = 20;
2612                         }
2613                 }
2614                 else if (streams == AC_SUPFMT_FLOAT32) {
2615                         /* should be exclusive */
2616                         formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2617                         bps = 32;
2618                 } else if (streams == AC_SUPFMT_AC3) {
2619                         /* should be exclusive */
2620                         /* temporary hack: we have still no proper support
2621                          * for the direct AC3 stream...
2622                          */
2623                         formats |= SNDRV_PCM_FMTBIT_U8;
2624                         bps = 8;
2625                 }
2626                 if (formats == 0) {
2627                         snd_printk(KERN_ERR "hda_codec: formats == 0 "
2628                                    "(nid=0x%x, val=0x%x, ovrd=%i, "
2629                                    "streams=0x%x)\n",
2630                                         nid, val,
2631                                         (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
2632                                         streams);
2633                         return -EIO;
2634                 }
2635                 if (formatsp)
2636                         *formatsp = formats;
2637                 if (bpsp)
2638                         *bpsp = bps;
2639         }
2640
2641         return 0;
2642 }
2643
2644 /**
2645  * snd_hda_is_supported_format - check whether the given node supports
2646  * the format val
2647  *
2648  * Returns 1 if supported, 0 if not.
2649  */
2650 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2651                                 unsigned int format)
2652 {
2653         int i;
2654         unsigned int val = 0, rate, stream;
2655
2656         if (nid != codec->afg &&
2657             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2658                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2659                 if (val == -1)
2660                         return 0;
2661         }
2662         if (!val) {
2663                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2664                 if (val == -1)
2665                         return 0;
2666         }
2667
2668         rate = format & 0xff00;
2669         for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2670                 if (rate_bits[i].hda_fmt == rate) {
2671                         if (val & (1 << i))
2672                                 break;
2673                         return 0;
2674                 }
2675         if (i >= AC_PAR_PCM_RATE_BITS)
2676                 return 0;
2677
2678         stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2679         if (stream == -1)
2680                 return 0;
2681         if (!stream && nid != codec->afg)
2682                 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2683         if (!stream || stream == -1)
2684                 return 0;
2685
2686         if (stream & AC_SUPFMT_PCM) {
2687                 switch (format & 0xf0) {
2688                 case 0x00:
2689                         if (!(val & AC_SUPPCM_BITS_8))
2690                                 return 0;
2691                         break;
2692                 case 0x10:
2693                         if (!(val & AC_SUPPCM_BITS_16))
2694                                 return 0;
2695                         break;
2696                 case 0x20:
2697                         if (!(val & AC_SUPPCM_BITS_20))
2698                                 return 0;
2699                         break;
2700                 case 0x30:
2701                         if (!(val & AC_SUPPCM_BITS_24))
2702                                 return 0;
2703                         break;
2704                 case 0x40:
2705                         if (!(val & AC_SUPPCM_BITS_32))
2706                                 return 0;
2707                         break;
2708                 default:
2709                         return 0;
2710                 }
2711         } else {
2712                 /* FIXME: check for float32 and AC3? */
2713         }
2714
2715         return 1;
2716 }
2717 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2718
2719 /*
2720  * PCM stuff
2721  */
2722 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2723                                       struct hda_codec *codec,
2724                                       struct snd_pcm_substream *substream)
2725 {
2726         return 0;
2727 }
2728
2729 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2730                                    struct hda_codec *codec,
2731                                    unsigned int stream_tag,
2732                                    unsigned int format,
2733                                    struct snd_pcm_substream *substream)
2734 {
2735         snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2736         return 0;
2737 }
2738
2739 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2740                                    struct hda_codec *codec,
2741                                    struct snd_pcm_substream *substream)
2742 {
2743         snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2744         return 0;
2745 }
2746
2747 static int set_pcm_default_values(struct hda_codec *codec,
2748                                   struct hda_pcm_stream *info)
2749 {
2750         int err;
2751
2752         /* query support PCM information from the given NID */
2753         if (info->nid && (!info->rates || !info->formats)) {
2754                 err = snd_hda_query_supported_pcm(codec, info->nid,
2755                                 info->rates ? NULL : &info->rates,
2756                                 info->formats ? NULL : &info->formats,
2757                                 info->maxbps ? NULL : &info->maxbps);
2758                 if (err < 0)
2759                         return err;
2760         }
2761         if (info->ops.open == NULL)
2762                 info->ops.open = hda_pcm_default_open_close;
2763         if (info->ops.close == NULL)
2764                 info->ops.close = hda_pcm_default_open_close;
2765         if (info->ops.prepare == NULL) {
2766                 if (snd_BUG_ON(!info->nid))
2767                         return -EINVAL;
2768                 info->ops.prepare = hda_pcm_default_prepare;
2769         }
2770         if (info->ops.cleanup == NULL) {
2771                 if (snd_BUG_ON(!info->nid))
2772                         return -EINVAL;
2773                 info->ops.cleanup = hda_pcm_default_cleanup;
2774         }
2775         return 0;
2776 }
2777
2778 /*
2779  * get the empty PCM device number to assign
2780  */
2781 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2782 {
2783         static const char *dev_name[HDA_PCM_NTYPES] = {
2784                 "Audio", "SPDIF", "HDMI", "Modem"
2785         };
2786         /* starting device index for each PCM type */
2787         static int dev_idx[HDA_PCM_NTYPES] = {
2788                 [HDA_PCM_TYPE_AUDIO] = 0,
2789                 [HDA_PCM_TYPE_SPDIF] = 1,
2790                 [HDA_PCM_TYPE_HDMI] = 3,
2791                 [HDA_PCM_TYPE_MODEM] = 6
2792         };
2793         /* normal audio device indices; not linear to keep compatibility */
2794         static int audio_idx[4] = { 0, 2, 4, 5 };
2795         int i, dev;
2796
2797         switch (type) {
2798         case HDA_PCM_TYPE_AUDIO:
2799                 for (i = 0; i < ARRAY_SIZE(audio_idx); i++) {
2800                         dev = audio_idx[i];
2801                         if (!test_bit(dev, bus->pcm_dev_bits))
2802                                 goto ok;
2803                 }
2804                 snd_printk(KERN_WARNING "Too many audio devices\n");
2805                 return -EAGAIN;
2806         case HDA_PCM_TYPE_SPDIF:
2807         case HDA_PCM_TYPE_HDMI:
2808         case HDA_PCM_TYPE_MODEM:
2809                 dev = dev_idx[type];
2810                 if (test_bit(dev, bus->pcm_dev_bits)) {
2811                         snd_printk(KERN_WARNING "%s already defined\n",
2812                                    dev_name[type]);
2813                         return -EAGAIN;
2814                 }
2815                 break;
2816         default:
2817                 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2818                 return -EINVAL;
2819         }
2820  ok:
2821         set_bit(dev, bus->pcm_dev_bits);
2822         return dev;
2823 }
2824
2825 /*
2826  * attach a new PCM stream
2827  */
2828 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2829 {
2830         struct hda_bus *bus = codec->bus;
2831         struct hda_pcm_stream *info;
2832         int stream, err;
2833
2834         if (snd_BUG_ON(!pcm->name))
2835                 return -EINVAL;
2836         for (stream = 0; stream < 2; stream++) {
2837                 info = &pcm->stream[stream];
2838                 if (info->substreams) {
2839                         err = set_pcm_default_values(codec, info);
2840                         if (err < 0)
2841                                 return err;
2842                 }
2843         }
2844         return bus->ops.attach_pcm(bus, codec, pcm);
2845 }
2846
2847 /* assign all PCMs of the given codec */
2848 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2849 {
2850         unsigned int pcm;
2851         int err;
2852
2853         if (!codec->num_pcms) {
2854                 if (!codec->patch_ops.build_pcms)
2855                         return 0;
2856                 err = codec->patch_ops.build_pcms(codec);
2857                 if (err < 0) {
2858                         printk(KERN_ERR "hda_codec: cannot build PCMs"
2859                                "for #%d (error %d)\n", codec->addr, err); 
2860                         err = snd_hda_codec_reset(codec);
2861                         if (err < 0) {
2862                                 printk(KERN_ERR
2863                                        "hda_codec: cannot revert codec\n");
2864                                 return err;
2865                         }
2866                 }
2867         }
2868         for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2869                 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2870                 int dev;
2871
2872                 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2873                         continue; /* no substreams assigned */
2874
2875                 if (!cpcm->pcm) {
2876                         dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2877                         if (dev < 0)
2878                                 continue; /* no fatal error */
2879                         cpcm->device = dev;
2880                         err = snd_hda_attach_pcm(codec, cpcm);
2881                         if (err < 0) {
2882                                 printk(KERN_ERR "hda_codec: cannot attach "
2883                                        "PCM stream %d for codec #%d\n",
2884                                        dev, codec->addr);
2885                                 continue; /* no fatal error */
2886                         }
2887                 }
2888         }
2889         return 0;
2890 }
2891
2892 /**
2893  * snd_hda_build_pcms - build PCM information
2894  * @bus: the BUS
2895  *
2896  * Create PCM information for each codec included in the bus.
2897  *
2898  * The build_pcms codec patch is requested to set up codec->num_pcms and
2899  * codec->pcm_info properly.  The array is referred by the top-level driver
2900  * to create its PCM instances.
2901  * The allocated codec->pcm_info should be released in codec->patch_ops.free
2902  * callback.
2903  *
2904  * At least, substreams, channels_min and channels_max must be filled for
2905  * each stream.  substreams = 0 indicates that the stream doesn't exist.
2906  * When rates and/or formats are zero, the supported values are queried
2907  * from the given nid.  The nid is used also by the default ops.prepare
2908  * and ops.cleanup callbacks.
2909  *
2910  * The driver needs to call ops.open in its open callback.  Similarly,
2911  * ops.close is supposed to be called in the close callback.
2912  * ops.prepare should be called in the prepare or hw_params callback
2913  * with the proper parameters for set up.
2914  * ops.cleanup should be called in hw_free for clean up of streams.
2915  *
2916  * This function returns 0 if successfull, or a negative error code.
2917  */
2918 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2919 {
2920         struct hda_codec *codec;
2921
2922         list_for_each_entry(codec, &bus->codec_list, list) {
2923                 int err = snd_hda_codec_build_pcms(codec);
2924                 if (err < 0)
2925                         return err;
2926         }
2927         return 0;
2928 }
2929 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
2930
2931 /**
2932  * snd_hda_check_board_config - compare the current codec with the config table
2933  * @codec: the HDA codec
2934  * @num_configs: number of config enums
2935  * @models: array of model name strings
2936  * @tbl: configuration table, terminated by null entries
2937  *
2938  * Compares the modelname or PCI subsystem id of the current codec with the
2939  * given configuration table.  If a matching entry is found, returns its
2940  * config value (supposed to be 0 or positive).
2941  *
2942  * If no entries are matching, the function returns a negative value.
2943  */
2944 int snd_hda_check_board_config(struct hda_codec *codec,
2945                                int num_configs, const char **models,
2946                                const struct snd_pci_quirk *tbl)
2947 {
2948         if (codec->modelname && models) {
2949                 int i;
2950                 for (i = 0; i < num_configs; i++) {
2951                         if (models[i] &&
2952                             !strcmp(codec->modelname, models[i])) {
2953                                 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2954                                            "selected\n", models[i]);
2955                                 return i;
2956                         }
2957                 }
2958         }
2959
2960         if (!codec->bus->pci || !tbl)
2961                 return -1;
2962
2963         tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
2964         if (!tbl)
2965                 return -1;
2966         if (tbl->value >= 0 && tbl->value < num_configs) {
2967 #ifdef CONFIG_SND_DEBUG_VERBOSE
2968                 char tmp[10];
2969                 const char *model = NULL;
2970                 if (models)
2971                         model = models[tbl->value];
2972                 if (!model) {
2973                         sprintf(tmp, "#%d", tbl->value);
2974                         model = tmp;
2975                 }
2976                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2977                             "for config %x:%x (%s)\n",
2978                             model, tbl->subvendor, tbl->subdevice,
2979                             (tbl->name ? tbl->name : "Unknown device"));
2980 #endif
2981                 return tbl->value;
2982         }
2983         return -1;
2984 }
2985 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
2986
2987 /**
2988  * snd_hda_check_board_codec_sid_config - compare the current codec
2989                                           subsystem ID with the
2990                                           config table
2991
2992            This is important for Gateway notebooks with SB450 HDA Audio
2993            where the vendor ID of the PCI device is:
2994                 ATI Technologies Inc SB450 HDA Audio [1002:437b]
2995            and the vendor/subvendor are found only at the codec.
2996
2997  * @codec: the HDA codec
2998  * @num_configs: number of config enums
2999  * @models: array of model name strings
3000  * @tbl: configuration table, terminated by null entries
3001  *
3002  * Compares the modelname or PCI subsystem id of the current codec with the
3003  * given configuration table.  If a matching entry is found, returns its
3004  * config value (supposed to be 0 or positive).
3005  *
3006  * If no entries are matching, the function returns a negative value.
3007  */
3008 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3009                                int num_configs, const char **models,
3010                                const struct snd_pci_quirk *tbl)
3011 {
3012         const struct snd_pci_quirk *q;
3013
3014         /* Search for codec ID */
3015         for (q = tbl; q->subvendor; q++) {
3016                 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3017
3018                 if (vendorid == codec->subsystem_id)
3019                         break;
3020         }
3021
3022         if (!q->subvendor)
3023                 return -1;
3024
3025         tbl = q;
3026
3027         if (tbl->value >= 0 && tbl->value < num_configs) {
3028 #ifdef CONFIG_SND_DEBUG_DETECT
3029                 char tmp[10];
3030                 const char *model = NULL;
3031                 if (models)
3032                         model = models[tbl->value];
3033                 if (!model) {
3034                         sprintf(tmp, "#%d", tbl->value);
3035                         model = tmp;
3036                 }
3037                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3038                             "for config %x:%x (%s)\n",
3039                             model, tbl->subvendor, tbl->subdevice,
3040                             (tbl->name ? tbl->name : "Unknown device"));
3041 #endif
3042                 return tbl->value;
3043         }
3044         return -1;
3045 }
3046 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3047
3048 /**
3049  * snd_hda_add_new_ctls - create controls from the array
3050  * @codec: the HDA codec
3051  * @knew: the array of struct snd_kcontrol_new
3052  *
3053  * This helper function creates and add new controls in the given array.
3054  * The array must be terminated with an empty entry as terminator.
3055  *
3056  * Returns 0 if successful, or a negative error code.
3057  */
3058 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3059 {
3060         int err;
3061
3062         for (; knew->name; knew++) {
3063                 struct snd_kcontrol *kctl;
3064                 kctl = snd_ctl_new1(knew, codec);
3065                 if (!kctl)
3066                         return -ENOMEM;
3067                 err = snd_hda_ctl_add(codec, kctl);
3068                 if (err < 0) {
3069                         if (!codec->addr)
3070                                 return err;
3071                         kctl = snd_ctl_new1(knew, codec);
3072                         if (!kctl)
3073                                 return -ENOMEM;
3074                         kctl->id.device = codec->addr;
3075                         err = snd_hda_ctl_add(codec, kctl);
3076                         if (err < 0)
3077                                 return err;
3078                 }
3079         }
3080         return 0;
3081 }
3082 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3083
3084 #ifdef CONFIG_SND_HDA_POWER_SAVE
3085 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3086                                 unsigned int power_state);
3087
3088 static void hda_power_work(struct work_struct *work)
3089 {
3090         struct hda_codec *codec =
3091                 container_of(work, struct hda_codec, power_work.work);
3092         struct hda_bus *bus = codec->bus;
3093
3094         if (!codec->power_on || codec->power_count) {
3095                 codec->power_transition = 0;
3096                 return;
3097         }
3098
3099         hda_call_codec_suspend(codec);
3100         if (bus->ops.pm_notify)
3101                 bus->ops.pm_notify(bus);
3102 }
3103
3104 static void hda_keep_power_on(struct hda_codec *codec)
3105 {
3106         codec->power_count++;
3107         codec->power_on = 1;
3108 }
3109
3110 void snd_hda_power_up(struct hda_codec *codec)
3111 {
3112         struct hda_bus *bus = codec->bus;
3113
3114         codec->power_count++;
3115         if (codec->power_on || codec->power_transition)
3116                 return;
3117
3118         codec->power_on = 1;
3119         if (bus->ops.pm_notify)
3120                 bus->ops.pm_notify(bus);
3121         hda_call_codec_resume(codec);
3122         cancel_delayed_work(&codec->power_work);
3123         codec->power_transition = 0;
3124 }
3125 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3126
3127 #define power_save(codec)       \
3128         ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3129
3130 #define power_save(codec)       \
3131         ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3132
3133 void snd_hda_power_down(struct hda_codec *codec)
3134 {
3135         --codec->power_count;
3136         if (!codec->power_on || codec->power_count || codec->power_transition)
3137                 return;
3138         if (power_save(codec)) {
3139                 codec->power_transition = 1; /* avoid reentrance */
3140                 queue_delayed_work(codec->bus->workq, &codec->power_work,
3141                                 msecs_to_jiffies(power_save(codec) * 1000));
3142         }
3143 }
3144 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3145
3146 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3147                                  struct hda_loopback_check *check,
3148                                  hda_nid_t nid)
3149 {
3150         struct hda_amp_list *p;
3151         int ch, v;
3152
3153         if (!check->amplist)
3154                 return 0;
3155         for (p = check->amplist; p->nid; p++) {
3156                 if (p->nid == nid)
3157                         break;
3158         }
3159         if (!p->nid)
3160                 return 0; /* nothing changed */
3161
3162         for (p = check->amplist; p->nid; p++) {
3163                 for (ch = 0; ch < 2; ch++) {
3164                         v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3165                                                    p->idx);
3166                         if (!(v & HDA_AMP_MUTE) && v > 0) {
3167                                 if (!check->power_on) {
3168                                         check->power_on = 1;
3169                                         snd_hda_power_up(codec);
3170                                 }
3171                                 return 1;
3172                         }
3173                 }
3174         }
3175         if (check->power_on) {
3176                 check->power_on = 0;
3177                 snd_hda_power_down(codec);
3178         }
3179         return 0;
3180 }
3181 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3182 #endif
3183
3184 /*
3185  * Channel mode helper
3186  */
3187 int snd_hda_ch_mode_info(struct hda_codec *codec,
3188                          struct snd_ctl_elem_info *uinfo,
3189                          const struct hda_channel_mode *chmode,
3190                          int num_chmodes)
3191 {
3192         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3193         uinfo->count = 1;
3194         uinfo->value.enumerated.items = num_chmodes;
3195         if (uinfo->value.enumerated.item >= num_chmodes)
3196                 uinfo->value.enumerated.item = num_chmodes - 1;
3197         sprintf(uinfo->value.enumerated.name, "%dch",
3198                 chmode[uinfo->value.enumerated.item].channels);
3199         return 0;
3200 }
3201 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
3202
3203 int snd_hda_ch_mode_get(struct hda_codec *codec,
3204                         struct snd_ctl_elem_value *ucontrol,
3205                         const struct hda_channel_mode *chmode,
3206                         int num_chmodes,
3207                         int max_channels)
3208 {
3209         int i;
3210
3211         for (i = 0; i < num_chmodes; i++) {
3212                 if (max_channels == chmode[i].channels) {
3213                         ucontrol->value.enumerated.item[0] = i;
3214                         break;
3215                 }
3216         }
3217         return 0;
3218 }
3219 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
3220
3221 int snd_hda_ch_mode_put(struct hda_codec *codec,
3222                         struct snd_ctl_elem_value *ucontrol,
3223                         const struct hda_channel_mode *chmode,
3224                         int num_chmodes,
3225                         int *max_channelsp)
3226 {
3227         unsigned int mode;
3228
3229         mode = ucontrol->value.enumerated.item[0];
3230         if (mode >= num_chmodes)
3231                 return -EINVAL;
3232         if (*max_channelsp == chmode[mode].channels)
3233                 return 0;
3234         /* change the current channel setting */
3235         *max_channelsp = chmode[mode].channels;
3236         if (chmode[mode].sequence)
3237                 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3238         return 1;
3239 }
3240 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3241
3242 /*
3243  * input MUX helper
3244  */
3245 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3246                            struct snd_ctl_elem_info *uinfo)
3247 {
3248         unsigned int index;
3249
3250         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3251         uinfo->count = 1;
3252         uinfo->value.enumerated.items = imux->num_items;
3253         if (!imux->num_items)
3254                 return 0;
3255         index = uinfo->value.enumerated.item;
3256         if (index >= imux->num_items)
3257                 index = imux->num_items - 1;
3258         strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3259         return 0;
3260 }
3261 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3262
3263 int snd_hda_input_mux_put(struct hda_codec *codec,
3264                           const struct hda_input_mux *imux,
3265                           struct snd_ctl_elem_value *ucontrol,
3266                           hda_nid_t nid,
3267                           unsigned int *cur_val)
3268 {
3269         unsigned int idx;
3270
3271         if (!imux->num_items)
3272                 return 0;
3273         idx = ucontrol->value.enumerated.item[0];
3274         if (idx >= imux->num_items)
3275                 idx = imux->num_items - 1;
3276         if (*cur_val == idx)
3277                 return 0;
3278         snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3279                                   imux->items[idx].index);
3280         *cur_val = idx;
3281         return 1;
3282 }
3283 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3284
3285
3286 /*
3287  * Multi-channel / digital-out PCM helper functions
3288  */
3289
3290 /* setup SPDIF output stream */
3291 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3292                                  unsigned int stream_tag, unsigned int format)
3293 {
3294         /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3295         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3296                 set_dig_out_convert(codec, nid, 
3297                                     codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3298                                     -1);
3299         snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3300         if (codec->slave_dig_outs) {
3301                 hda_nid_t *d;
3302                 for (d = codec->slave_dig_outs; *d; d++)
3303                         snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3304                                                    format);
3305         }
3306         /* turn on again (if needed) */
3307         if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3308                 set_dig_out_convert(codec, nid,
3309                                     codec->spdif_ctls & 0xff, -1);
3310 }
3311
3312 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3313 {
3314         snd_hda_codec_cleanup_stream(codec, nid);
3315         if (codec->slave_dig_outs) {
3316                 hda_nid_t *d;
3317                 for (d = codec->slave_dig_outs; *d; d++)
3318                         snd_hda_codec_cleanup_stream(codec, *d);
3319         }
3320 }
3321
3322 /*
3323  * open the digital out in the exclusive mode
3324  */
3325 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3326                                struct hda_multi_out *mout)
3327 {
3328         mutex_lock(&codec->spdif_mutex);
3329         if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3330                 /* already opened as analog dup; reset it once */
3331                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3332         mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3333         mutex_unlock(&codec->spdif_mutex);
3334         return 0;
3335 }
3336 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3337
3338 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3339                                   struct hda_multi_out *mout,
3340                                   unsigned int stream_tag,
3341                                   unsigned int format,
3342                                   struct snd_pcm_substream *substream)
3343 {
3344         mutex_lock(&codec->spdif_mutex);
3345         setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3346         mutex_unlock(&codec->spdif_mutex);
3347         return 0;
3348 }
3349 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3350
3351 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
3352                                   struct hda_multi_out *mout)
3353 {
3354         mutex_lock(&codec->spdif_mutex);
3355         cleanup_dig_out_stream(codec, mout->dig_out_nid);
3356         mutex_unlock(&codec->spdif_mutex);
3357         return 0;
3358 }
3359 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
3360
3361 /*
3362  * release the digital out
3363  */
3364 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3365                                 struct hda_multi_out *mout)
3366 {
3367         mutex_lock(&codec->spdif_mutex);
3368         mout->dig_out_used = 0;
3369         mutex_unlock(&codec->spdif_mutex);
3370         return 0;
3371 }
3372 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3373
3374 /*
3375  * set up more restrictions for analog out
3376  */
3377 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3378                                   struct hda_multi_out *mout,
3379                                   struct snd_pcm_substream *substream,
3380                                   struct hda_pcm_stream *hinfo)
3381 {
3382         struct snd_pcm_runtime *runtime = substream->runtime;
3383         runtime->hw.channels_max = mout->max_channels;
3384         if (mout->dig_out_nid) {
3385                 if (!mout->analog_rates) {
3386                         mout->analog_rates = hinfo->rates;
3387                         mout->analog_formats = hinfo->formats;
3388                         mout->analog_maxbps = hinfo->maxbps;
3389                 } else {
3390                         runtime->hw.rates = mout->analog_rates;
3391                         runtime->hw.formats = mout->analog_formats;
3392                         hinfo->maxbps = mout->analog_maxbps;
3393                 }
3394                 if (!mout->spdif_rates) {
3395                         snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3396                                                     &mout->spdif_rates,
3397                                                     &mout->spdif_formats,
3398                                                     &mout->spdif_maxbps);
3399                 }
3400                 mutex_lock(&codec->spdif_mutex);
3401                 if (mout->share_spdif) {
3402                         runtime->hw.rates &= mout->spdif_rates;
3403                         runtime->hw.formats &= mout->spdif_formats;
3404                         if (mout->spdif_maxbps < hinfo->maxbps)
3405                                 hinfo->maxbps = mout->spdif_maxbps;
3406                 }
3407                 mutex_unlock(&codec->spdif_mutex);
3408         }
3409         return snd_pcm_hw_constraint_step(substream->runtime, 0,
3410                                           SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3411 }
3412 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3413
3414 /*
3415  * set up the i/o for analog out
3416  * when the digital out is available, copy the front out to digital out, too.
3417  */
3418 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
3419                                      struct hda_multi_out *mout,
3420                                      unsigned int stream_tag,
3421                                      unsigned int format,
3422                                      struct snd_pcm_substream *substream)
3423 {
3424         hda_nid_t *nids = mout->dac_nids;
3425         int chs = substream->runtime->channels;
3426         int i;
3427
3428         mutex_lock(&codec->spdif_mutex);
3429         if (mout->dig_out_nid && mout->share_spdif &&
3430             mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3431                 if (chs == 2 &&
3432                     snd_hda_is_supported_format(codec, mout->dig_out_nid,
3433                                                 format) &&
3434                     !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3435                         mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3436                         setup_dig_out_stream(codec, mout->dig_out_nid,
3437                                              stream_tag, format);
3438                 } else {
3439                         mout->dig_out_used = 0;
3440                         cleanup_dig_out_stream(codec, mout->dig_out_nid);
3441                 }
3442         }
3443         mutex_unlock(&codec->spdif_mutex);
3444
3445         /* front */
3446         snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3447                                    0, format);
3448         if (!mout->no_share_stream &&
3449             mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3450                 /* headphone out will just decode front left/right (stereo) */
3451                 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3452                                            0, format);
3453         /* extra outputs copied from front */
3454         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3455                 if (!mout->no_share_stream && mout->extra_out_nid[i])
3456                         snd_hda_codec_setup_stream(codec,
3457                                                    mout->extra_out_nid[i],
3458                                                    stream_tag, 0, format);
3459
3460         /* surrounds */
3461         for (i = 1; i < mout->num_dacs; i++) {
3462                 if (chs >= (i + 1) * 2) /* independent out */
3463                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3464                                                    i * 2, format);
3465                 else if (!mout->no_share_stream) /* copy front */
3466                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3467                                                    0, format);
3468         }
3469         return 0;
3470 }
3471 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3472
3473 /*
3474  * clean up the setting for analog out
3475  */
3476 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3477                                      struct hda_multi_out *mout)
3478 {
3479         hda_nid_t *nids = mout->dac_nids;
3480         int i;
3481
3482         for (i = 0; i < mout->num_dacs; i++)
3483                 snd_hda_codec_cleanup_stream(codec, nids[i]);
3484         if (mout->hp_nid)
3485                 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3486         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3487                 if (mout->extra_out_nid[i])
3488                         snd_hda_codec_cleanup_stream(codec,
3489                                                      mout->extra_out_nid[i]);
3490         mutex_lock(&codec->spdif_mutex);
3491         if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3492                 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3493                 mout->dig_out_used = 0;
3494         }
3495         mutex_unlock(&codec->spdif_mutex);
3496         return 0;
3497 }
3498 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3499
3500 /*
3501  * Helper for automatic pin configuration
3502  */
3503
3504 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3505 {
3506         for (; *list; list++)
3507                 if (*list == nid)
3508                         return 1;
3509         return 0;
3510 }
3511
3512
3513 /*
3514  * Sort an associated group of pins according to their sequence numbers.
3515  */
3516 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3517                                   int num_pins)
3518 {
3519         int i, j;
3520         short seq;
3521         hda_nid_t nid;
3522         
3523         for (i = 0; i < num_pins; i++) {
3524                 for (j = i + 1; j < num_pins; j++) {
3525                         if (sequences[i] > sequences[j]) {
3526                                 seq = sequences[i];
3527                                 sequences[i] = sequences[j];
3528                                 sequences[j] = seq;
3529                                 nid = pins[i];
3530                                 pins[i] = pins[j];
3531                                 pins[j] = nid;
3532                         }
3533                 }
3534         }
3535 }
3536
3537
3538 /*
3539  * Parse all pin widgets and store the useful pin nids to cfg
3540  *
3541  * The number of line-outs or any primary output is stored in line_outs,
3542  * and the corresponding output pins are assigned to line_out_pins[],
3543  * in the order of front, rear, CLFE, side, ...
3544  *
3545  * If more extra outputs (speaker and headphone) are found, the pins are
3546  * assisnged to hp_pins[] and speaker_pins[], respectively.  If no line-out jack
3547  * is detected, one of speaker of HP pins is assigned as the primary
3548  * output, i.e. to line_out_pins[0].  So, line_outs is always positive
3549  * if any analog output exists.
3550  * 
3551  * The analog input pins are assigned to input_pins array.
3552  * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3553  * respectively.
3554  */
3555 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3556                                  struct auto_pin_cfg *cfg,
3557                                  hda_nid_t *ignore_nids)
3558 {
3559         hda_nid_t nid, end_nid;
3560         short seq, assoc_line_out, assoc_speaker;
3561         short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3562         short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3563         short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3564
3565         memset(cfg, 0, sizeof(*cfg));
3566
3567         memset(sequences_line_out, 0, sizeof(sequences_line_out));
3568         memset(sequences_speaker, 0, sizeof(sequences_speaker));
3569         memset(sequences_hp, 0, sizeof(sequences_hp));
3570         assoc_line_out = assoc_speaker = 0;
3571
3572         end_nid = codec->start_nid + codec->num_nodes;
3573         for (nid = codec->start_nid; nid < end_nid; nid++) {
3574                 unsigned int wid_caps = get_wcaps(codec, nid);
3575                 unsigned int wid_type =
3576                         (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
3577                 unsigned int def_conf;
3578                 short assoc, loc;
3579
3580                 /* read all default configuration for pin complex */
3581                 if (wid_type != AC_WID_PIN)
3582                         continue;
3583                 /* ignore the given nids (e.g. pc-beep returns error) */
3584                 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3585                         continue;
3586
3587                 def_conf = snd_hda_codec_get_pincfg(codec, nid);
3588                 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3589                         continue;
3590                 loc = get_defcfg_location(def_conf);
3591                 switch (get_defcfg_device(def_conf)) {
3592                 case AC_JACK_LINE_OUT:
3593                         seq = get_defcfg_sequence(def_conf);
3594                         assoc = get_defcfg_association(def_conf);
3595
3596                         if (!(wid_caps & AC_WCAP_STEREO))
3597                                 if (!cfg->mono_out_pin)
3598                                         cfg->mono_out_pin = nid;
3599                         if (!assoc)
3600                                 continue;
3601                         if (!assoc_line_out)
3602                                 assoc_line_out = assoc;
3603                         else if (assoc_line_out != assoc)
3604                                 continue;
3605                         if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3606                                 continue;
3607                         cfg->line_out_pins[cfg->line_outs] = nid;
3608                         sequences_line_out[cfg->line_outs] = seq;
3609                         cfg->line_outs++;
3610                         break;
3611                 case AC_JACK_SPEAKER:
3612                         seq = get_defcfg_sequence(def_conf);
3613                         assoc = get_defcfg_association(def_conf);
3614                         if (! assoc)
3615                                 continue;
3616                         if (! assoc_speaker)
3617                                 assoc_speaker = assoc;
3618                         else if (assoc_speaker != assoc)
3619                                 continue;
3620                         if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3621                                 continue;
3622                         cfg->speaker_pins[cfg->speaker_outs] = nid;
3623                         sequences_speaker[cfg->speaker_outs] = seq;
3624                         cfg->speaker_outs++;
3625                         break;
3626                 case AC_JACK_HP_OUT:
3627                         seq = get_defcfg_sequence(def_conf);
3628                         assoc = get_defcfg_association(def_conf);
3629                         if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3630                                 continue;
3631                         cfg->hp_pins[cfg->hp_outs] = nid;
3632                         sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3633                         cfg->hp_outs++;
3634                         break;
3635                 case AC_JACK_MIC_IN: {
3636                         int preferred, alt;
3637                         if (loc == AC_JACK_LOC_FRONT) {
3638                                 preferred = AUTO_PIN_FRONT_MIC;
3639                                 alt = AUTO_PIN_MIC;
3640                         } else {
3641                                 preferred = AUTO_PIN_MIC;
3642                                 alt = AUTO_PIN_FRONT_MIC;
3643                         }
3644                         if (!cfg->input_pins[preferred])
3645                                 cfg->input_pins[preferred] = nid;
3646                         else if (!cfg->input_pins[alt])
3647                                 cfg->input_pins[alt] = nid;
3648                         break;
3649                 }
3650                 case AC_JACK_LINE_IN:
3651                         if (loc == AC_JACK_LOC_FRONT)
3652                                 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3653                         else
3654                                 cfg->input_pins[AUTO_PIN_LINE] = nid;
3655                         break;
3656                 case AC_JACK_CD:
3657                         cfg->input_pins[AUTO_PIN_CD] = nid;
3658                         break;
3659                 case AC_JACK_AUX:
3660                         cfg->input_pins[AUTO_PIN_AUX] = nid;
3661                         break;
3662                 case AC_JACK_SPDIF_OUT:
3663                 case AC_JACK_DIG_OTHER_OUT:
3664                         if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
3665                                 continue;
3666                         cfg->dig_out_pins[cfg->dig_outs] = nid;
3667                         cfg->dig_out_type[cfg->dig_outs] =
3668                                 (loc == AC_JACK_LOC_HDMI) ?
3669                                 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
3670                         cfg->dig_outs++;
3671                         break;
3672                 case AC_JACK_SPDIF_IN:
3673                 case AC_JACK_DIG_OTHER_IN:
3674                         cfg->dig_in_pin = nid;
3675                         if (loc == AC_JACK_LOC_HDMI)
3676                                 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
3677                         else
3678                                 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
3679                         break;
3680                 }
3681         }
3682
3683         /* FIX-UP:
3684          * If no line-out is defined but multiple HPs are found,
3685          * some of them might be the real line-outs.
3686          */
3687         if (!cfg->line_outs && cfg->hp_outs > 1) {
3688                 int i = 0;
3689                 while (i < cfg->hp_outs) {
3690                         /* The real HPs should have the sequence 0x0f */
3691                         if ((sequences_hp[i] & 0x0f) == 0x0f) {
3692                                 i++;
3693                                 continue;
3694                         }
3695                         /* Move it to the line-out table */
3696                         cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3697                         sequences_line_out[cfg->line_outs] = sequences_hp[i];
3698                         cfg->line_outs++;
3699                         cfg->hp_outs--;
3700                         memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3701                                 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3702                         memmove(sequences_hp + i - 1, sequences_hp + i,
3703                                 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3704                 }
3705         }
3706
3707         /* sort by sequence */
3708         sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3709                               cfg->line_outs);
3710         sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3711                               cfg->speaker_outs);
3712         sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3713                               cfg->hp_outs);
3714         
3715         /* if we have only one mic, make it AUTO_PIN_MIC */
3716         if (!cfg->input_pins[AUTO_PIN_MIC] &&
3717             cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3718                 cfg->input_pins[AUTO_PIN_MIC] =
3719                         cfg->input_pins[AUTO_PIN_FRONT_MIC];
3720                 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3721         }
3722         /* ditto for line-in */
3723         if (!cfg->input_pins[AUTO_PIN_LINE] &&
3724             cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3725                 cfg->input_pins[AUTO_PIN_LINE] =
3726                         cfg->input_pins[AUTO_PIN_FRONT_LINE];
3727                 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3728         }
3729
3730         /*
3731          * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3732          * as a primary output
3733          */
3734         if (!cfg->line_outs) {
3735                 if (cfg->speaker_outs) {
3736                         cfg->line_outs = cfg->speaker_outs;
3737                         memcpy(cfg->line_out_pins, cfg->speaker_pins,
3738                                sizeof(cfg->speaker_pins));
3739                         cfg->speaker_outs = 0;
3740                         memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3741                         cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3742                 } else if (cfg->hp_outs) {
3743                         cfg->line_outs = cfg->hp_outs;
3744                         memcpy(cfg->line_out_pins, cfg->hp_pins,
3745                                sizeof(cfg->hp_pins));
3746                         cfg->hp_outs = 0;
3747                         memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3748                         cfg->line_out_type = AUTO_PIN_HP_OUT;
3749                 }
3750         }
3751
3752         /* Reorder the surround channels
3753          * ALSA sequence is front/surr/clfe/side
3754          * HDA sequence is:
3755          *    4-ch: front/surr  =>  OK as it is
3756          *    6-ch: front/clfe/surr
3757          *    8-ch: front/clfe/rear/side|fc
3758          */
3759         switch (cfg->line_outs) {
3760         case 3:
3761         case 4:
3762                 nid = cfg->line_out_pins[1];
3763                 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3764                 cfg->line_out_pins[2] = nid;
3765                 break;
3766         }
3767
3768         /*
3769          * debug prints of the parsed results
3770          */
3771         snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3772                    cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3773                    cfg->line_out_pins[2], cfg->line_out_pins[3],
3774                    cfg->line_out_pins[4]);
3775         snd_printd("   speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3776                    cfg->speaker_outs, cfg->speaker_pins[0],
3777                    cfg->speaker_pins[1], cfg->speaker_pins[2],
3778                    cfg->speaker_pins[3], cfg->speaker_pins[4]);
3779         snd_printd("   hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3780                    cfg->hp_outs, cfg->hp_pins[0],
3781                    cfg->hp_pins[1], cfg->hp_pins[2],
3782                    cfg->hp_pins[3], cfg->hp_pins[4]);
3783         snd_printd("   mono: mono_out=0x%x\n", cfg->mono_out_pin);
3784         if (cfg->dig_outs)
3785                 snd_printd("   dig-out=0x%x/0x%x\n",
3786                            cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
3787         snd_printd("   inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3788                    " cd=0x%x, aux=0x%x\n",
3789                    cfg->input_pins[AUTO_PIN_MIC],
3790                    cfg->input_pins[AUTO_PIN_FRONT_MIC],
3791                    cfg->input_pins[AUTO_PIN_LINE],
3792                    cfg->input_pins[AUTO_PIN_FRONT_LINE],
3793                    cfg->input_pins[AUTO_PIN_CD],
3794                    cfg->input_pins[AUTO_PIN_AUX]);
3795         if (cfg->dig_in_pin)
3796                 snd_printd("   dig-in=0x%x\n", cfg->dig_in_pin);
3797
3798         return 0;
3799 }
3800 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3801
3802 /* labels for input pins */
3803 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3804         "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3805 };
3806 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3807
3808
3809 #ifdef CONFIG_PM
3810 /*
3811  * power management
3812  */
3813
3814 /**
3815  * snd_hda_suspend - suspend the codecs
3816  * @bus: the HDA bus
3817  * @state: suspsend state
3818  *
3819  * Returns 0 if successful.
3820  */
3821 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
3822 {
3823         struct hda_codec *codec;
3824
3825         list_for_each_entry(codec, &bus->codec_list, list) {
3826 #ifdef CONFIG_SND_HDA_POWER_SAVE
3827                 if (!codec->power_on)
3828                         continue;
3829 #endif
3830                 hda_call_codec_suspend(codec);
3831         }
3832         return 0;
3833 }
3834 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3835
3836 /**
3837  * snd_hda_resume - resume the codecs
3838  * @bus: the HDA bus
3839  *
3840  * Returns 0 if successful.
3841  *
3842  * This fucntion is defined only when POWER_SAVE isn't set.
3843  * In the power-save mode, the codec is resumed dynamically.
3844  */
3845 int snd_hda_resume(struct hda_bus *bus)
3846 {
3847         struct hda_codec *codec;
3848
3849         list_for_each_entry(codec, &bus->codec_list, list) {
3850                 if (snd_hda_codec_needs_resume(codec))
3851                         hda_call_codec_resume(codec);
3852         }
3853         return 0;
3854 }
3855 EXPORT_SYMBOL_HDA(snd_hda_resume);
3856 #endif /* CONFIG_PM */
3857
3858 /*
3859  * generic arrays
3860  */
3861
3862 /* get a new element from the given array
3863  * if it exceeds the pre-allocated array size, re-allocate the array
3864  */
3865 void *snd_array_new(struct snd_array *array)
3866 {
3867         if (array->used >= array->alloced) {
3868                 int num = array->alloced + array->alloc_align;
3869                 void *nlist;
3870                 if (snd_BUG_ON(num >= 4096))
3871                         return NULL;
3872                 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
3873                 if (!nlist)
3874                         return NULL;
3875                 if (array->list) {
3876                         memcpy(nlist, array->list,
3877                                array->elem_size * array->alloced);
3878                         kfree(array->list);
3879                 }
3880                 array->list = nlist;
3881                 array->alloced = num;
3882         }
3883         return snd_array_elem(array, array->used++);
3884 }
3885 EXPORT_SYMBOL_HDA(snd_array_new);
3886
3887 /* free the given array elements */
3888 void snd_array_free(struct snd_array *array)
3889 {
3890         kfree(array->list);
3891         array->used = 0;
3892         array->alloced = 0;
3893         array->list = NULL;
3894 }
3895 EXPORT_SYMBOL_HDA(snd_array_free);
3896
3897 /*
3898  * used by hda_proc.c and hda_eld.c
3899  */
3900 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
3901 {
3902         static unsigned int rates[] = {
3903                 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
3904                 96000, 176400, 192000, 384000
3905         };
3906         int i, j;
3907
3908         for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
3909                 if (pcm & (1 << i))
3910                         j += snprintf(buf + j, buflen - j,  " %d", rates[i]);
3911
3912         buf[j] = '\0'; /* necessary when j == 0 */
3913 }
3914 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
3915
3916 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
3917 {
3918         static unsigned int bits[] = { 8, 16, 20, 24, 32 };
3919         int i, j;
3920
3921         for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
3922                 if (pcm & (AC_SUPPCM_BITS_8 << i))
3923                         j += snprintf(buf + j, buflen - j,  " %d", bits[i]);
3924
3925         buf[j] = '\0'; /* necessary when j == 0 */
3926 }
3927 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
3928
3929 MODULE_DESCRIPTION("HDA codec core");
3930 MODULE_LICENSE("GPL");