Merge git://git.infradead.org/mtd-2.6
[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 <sound/driver.h>
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/slab.h>
26 #include <linux/pci.h>
27 #include <linux/mutex.h>
28 #include <sound/core.h>
29 #include "hda_codec.h"
30 #include <sound/asoundef.h>
31 #include <sound/tlv.h>
32 #include <sound/initval.h>
33 #include "hda_local.h"
34 #include <sound/hda_hwdep.h>
35
36 #ifdef CONFIG_SND_HDA_POWER_SAVE
37 /* define this option here to hide as static */
38 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
39 module_param(power_save, int, 0644);
40 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
41                  "(in second, 0 = disable).");
42 #endif
43
44 /*
45  * vendor / preset table
46  */
47
48 struct hda_vendor_id {
49         unsigned int id;
50         const char *name;
51 };
52
53 /* codec vendor labels */
54 static struct hda_vendor_id hda_vendor_ids[] = {
55         { 0x10ec, "Realtek" },
56         { 0x1057, "Motorola" },
57         { 0x1106, "VIA" },
58         { 0x11d4, "Analog Devices" },
59         { 0x13f6, "C-Media" },
60         { 0x14f1, "Conexant" },
61         { 0x434d, "C-Media" },
62         { 0x8384, "SigmaTel" },
63         {} /* terminator */
64 };
65
66 /* codec presets */
67 #include "hda_patch.h"
68
69
70 #ifdef CONFIG_SND_HDA_POWER_SAVE
71 static void hda_power_work(struct work_struct *work);
72 static void hda_keep_power_on(struct hda_codec *codec);
73 #else
74 static inline void hda_keep_power_on(struct hda_codec *codec) {}
75 #endif
76
77 /**
78  * snd_hda_codec_read - send a command and get the response
79  * @codec: the HDA codec
80  * @nid: NID to send the command
81  * @direct: direct flag
82  * @verb: the verb to send
83  * @parm: the parameter for the verb
84  *
85  * Send a single command and read the corresponding response.
86  *
87  * Returns the obtained response value, or -1 for an error.
88  */
89 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
90                                 int direct,
91                                 unsigned int verb, unsigned int parm)
92 {
93         unsigned int res;
94         snd_hda_power_up(codec);
95         mutex_lock(&codec->bus->cmd_mutex);
96         if (!codec->bus->ops.command(codec, nid, direct, verb, parm))
97                 res = codec->bus->ops.get_response(codec);
98         else
99                 res = (unsigned int)-1;
100         mutex_unlock(&codec->bus->cmd_mutex);
101         snd_hda_power_down(codec);
102         return res;
103 }
104
105 /**
106  * snd_hda_codec_write - send a single command without waiting for response
107  * @codec: the HDA codec
108  * @nid: NID to send the command
109  * @direct: direct flag
110  * @verb: the verb to send
111  * @parm: the parameter for the verb
112  *
113  * Send a single command without waiting for response.
114  *
115  * Returns 0 if successful, or a negative error code.
116  */
117 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
118                          unsigned int verb, unsigned int parm)
119 {
120         int err;
121         snd_hda_power_up(codec);
122         mutex_lock(&codec->bus->cmd_mutex);
123         err = codec->bus->ops.command(codec, nid, direct, verb, parm);
124         mutex_unlock(&codec->bus->cmd_mutex);
125         snd_hda_power_down(codec);
126         return err;
127 }
128
129 /**
130  * snd_hda_sequence_write - sequence writes
131  * @codec: the HDA codec
132  * @seq: VERB array to send
133  *
134  * Send the commands sequentially from the given array.
135  * The array must be terminated with NID=0.
136  */
137 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
138 {
139         for (; seq->nid; seq++)
140                 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
141 }
142
143 /**
144  * snd_hda_get_sub_nodes - get the range of sub nodes
145  * @codec: the HDA codec
146  * @nid: NID to parse
147  * @start_id: the pointer to store the start NID
148  *
149  * Parse the NID and store the start NID of its sub-nodes.
150  * Returns the number of sub-nodes.
151  */
152 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
153                           hda_nid_t *start_id)
154 {
155         unsigned int parm;
156
157         parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
158         if (parm == -1)
159                 return 0;
160         *start_id = (parm >> 16) & 0x7fff;
161         return (int)(parm & 0x7fff);
162 }
163
164 /**
165  * snd_hda_get_connections - get connection list
166  * @codec: the HDA codec
167  * @nid: NID to parse
168  * @conn_list: connection list array
169  * @max_conns: max. number of connections to store
170  *
171  * Parses the connection list of the given widget and stores the list
172  * of NIDs.
173  *
174  * Returns the number of connections, or a negative error code.
175  */
176 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
177                             hda_nid_t *conn_list, int max_conns)
178 {
179         unsigned int parm;
180         int i, conn_len, conns;
181         unsigned int shift, num_elems, mask;
182         hda_nid_t prev_nid;
183
184         snd_assert(conn_list && max_conns > 0, return -EINVAL);
185
186         parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
187         if (parm & AC_CLIST_LONG) {
188                 /* long form */
189                 shift = 16;
190                 num_elems = 2;
191         } else {
192                 /* short form */
193                 shift = 8;
194                 num_elems = 4;
195         }
196         conn_len = parm & AC_CLIST_LENGTH;
197         mask = (1 << (shift-1)) - 1;
198
199         if (!conn_len)
200                 return 0; /* no connection */
201
202         if (conn_len == 1) {
203                 /* single connection */
204                 parm = snd_hda_codec_read(codec, nid, 0,
205                                           AC_VERB_GET_CONNECT_LIST, 0);
206                 conn_list[0] = parm & mask;
207                 return 1;
208         }
209
210         /* multi connection */
211         conns = 0;
212         prev_nid = 0;
213         for (i = 0; i < conn_len; i++) {
214                 int range_val;
215                 hda_nid_t val, n;
216
217                 if (i % num_elems == 0)
218                         parm = snd_hda_codec_read(codec, nid, 0,
219                                                   AC_VERB_GET_CONNECT_LIST, i);
220                 range_val = !!(parm & (1 << (shift-1))); /* ranges */
221                 val = parm & mask;
222                 parm >>= shift;
223                 if (range_val) {
224                         /* ranges between the previous and this one */
225                         if (!prev_nid || prev_nid >= val) {
226                                 snd_printk(KERN_WARNING "hda_codec: "
227                                            "invalid dep_range_val %x:%x\n",
228                                            prev_nid, val);
229                                 continue;
230                         }
231                         for (n = prev_nid + 1; n <= val; n++) {
232                                 if (conns >= max_conns) {
233                                         snd_printk(KERN_ERR
234                                                    "Too many connections\n");
235                                         return -EINVAL;
236                                 }
237                                 conn_list[conns++] = n;
238                         }
239                 } else {
240                         if (conns >= max_conns) {
241                                 snd_printk(KERN_ERR "Too many connections\n");
242                                 return -EINVAL;
243                         }
244                         conn_list[conns++] = val;
245                 }
246                 prev_nid = val;
247         }
248         return conns;
249 }
250
251
252 /**
253  * snd_hda_queue_unsol_event - add an unsolicited event to queue
254  * @bus: the BUS
255  * @res: unsolicited event (lower 32bit of RIRB entry)
256  * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
257  *
258  * Adds the given event to the queue.  The events are processed in
259  * the workqueue asynchronously.  Call this function in the interrupt
260  * hanlder when RIRB receives an unsolicited event.
261  *
262  * Returns 0 if successful, or a negative error code.
263  */
264 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
265 {
266         struct hda_bus_unsolicited *unsol;
267         unsigned int wp;
268
269         unsol = bus->unsol;
270         if (!unsol)
271                 return 0;
272
273         wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
274         unsol->wp = wp;
275
276         wp <<= 1;
277         unsol->queue[wp] = res;
278         unsol->queue[wp + 1] = res_ex;
279
280         schedule_work(&unsol->work);
281
282         return 0;
283 }
284
285 /*
286  * process queueud unsolicited events
287  */
288 static void process_unsol_events(struct work_struct *work)
289 {
290         struct hda_bus_unsolicited *unsol =
291                 container_of(work, struct hda_bus_unsolicited, work);
292         struct hda_bus *bus = unsol->bus;
293         struct hda_codec *codec;
294         unsigned int rp, caddr, res;
295
296         while (unsol->rp != unsol->wp) {
297                 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
298                 unsol->rp = rp;
299                 rp <<= 1;
300                 res = unsol->queue[rp];
301                 caddr = unsol->queue[rp + 1];
302                 if (!(caddr & (1 << 4))) /* no unsolicited event? */
303                         continue;
304                 codec = bus->caddr_tbl[caddr & 0x0f];
305                 if (codec && codec->patch_ops.unsol_event)
306                         codec->patch_ops.unsol_event(codec, res);
307         }
308 }
309
310 /*
311  * initialize unsolicited queue
312  */
313 static int __devinit init_unsol_queue(struct hda_bus *bus)
314 {
315         struct hda_bus_unsolicited *unsol;
316
317         if (bus->unsol) /* already initialized */
318                 return 0;
319
320         unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
321         if (!unsol) {
322                 snd_printk(KERN_ERR "hda_codec: "
323                            "can't allocate unsolicited queue\n");
324                 return -ENOMEM;
325         }
326         INIT_WORK(&unsol->work, process_unsol_events);
327         unsol->bus = bus;
328         bus->unsol = unsol;
329         return 0;
330 }
331
332 /*
333  * destructor
334  */
335 static void snd_hda_codec_free(struct hda_codec *codec);
336
337 static int snd_hda_bus_free(struct hda_bus *bus)
338 {
339         struct hda_codec *codec, *n;
340
341         if (!bus)
342                 return 0;
343         if (bus->unsol) {
344                 flush_scheduled_work();
345                 kfree(bus->unsol);
346         }
347         list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
348                 snd_hda_codec_free(codec);
349         }
350         if (bus->ops.private_free)
351                 bus->ops.private_free(bus);
352         kfree(bus);
353         return 0;
354 }
355
356 static int snd_hda_bus_dev_free(struct snd_device *device)
357 {
358         struct hda_bus *bus = device->device_data;
359         return snd_hda_bus_free(bus);
360 }
361
362 /**
363  * snd_hda_bus_new - create a HDA bus
364  * @card: the card entry
365  * @temp: the template for hda_bus information
366  * @busp: the pointer to store the created bus instance
367  *
368  * Returns 0 if successful, or a negative error code.
369  */
370 int __devinit snd_hda_bus_new(struct snd_card *card,
371                               const struct hda_bus_template *temp,
372                               struct hda_bus **busp)
373 {
374         struct hda_bus *bus;
375         int err;
376         static struct snd_device_ops dev_ops = {
377                 .dev_free = snd_hda_bus_dev_free,
378         };
379
380         snd_assert(temp, return -EINVAL);
381         snd_assert(temp->ops.command && temp->ops.get_response, return -EINVAL);
382
383         if (busp)
384                 *busp = NULL;
385
386         bus = kzalloc(sizeof(*bus), GFP_KERNEL);
387         if (bus == NULL) {
388                 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
389                 return -ENOMEM;
390         }
391
392         bus->card = card;
393         bus->private_data = temp->private_data;
394         bus->pci = temp->pci;
395         bus->modelname = temp->modelname;
396         bus->ops = temp->ops;
397
398         mutex_init(&bus->cmd_mutex);
399         INIT_LIST_HEAD(&bus->codec_list);
400
401         err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
402         if (err < 0) {
403                 snd_hda_bus_free(bus);
404                 return err;
405         }
406         if (busp)
407                 *busp = bus;
408         return 0;
409 }
410
411 #ifdef CONFIG_SND_HDA_GENERIC
412 #define is_generic_config(codec) \
413         (codec->bus->modelname && !strcmp(codec->bus->modelname, "generic"))
414 #else
415 #define is_generic_config(codec)        0
416 #endif
417
418 /*
419  * find a matching codec preset
420  */
421 static const struct hda_codec_preset __devinit *
422 find_codec_preset(struct hda_codec *codec)
423 {
424         const struct hda_codec_preset **tbl, *preset;
425
426         if (is_generic_config(codec))
427                 return NULL; /* use the generic parser */
428
429         for (tbl = hda_preset_tables; *tbl; tbl++) {
430                 for (preset = *tbl; preset->id; preset++) {
431                         u32 mask = preset->mask;
432                         if (!mask)
433                                 mask = ~0;
434                         if (preset->id == (codec->vendor_id & mask) &&
435                             (!preset->rev ||
436                              preset->rev == codec->revision_id))
437                                 return preset;
438                 }
439         }
440         return NULL;
441 }
442
443 /*
444  * snd_hda_get_codec_name - store the codec name
445  */
446 void snd_hda_get_codec_name(struct hda_codec *codec,
447                             char *name, int namelen)
448 {
449         const struct hda_vendor_id *c;
450         const char *vendor = NULL;
451         u16 vendor_id = codec->vendor_id >> 16;
452         char tmp[16];
453
454         for (c = hda_vendor_ids; c->id; c++) {
455                 if (c->id == vendor_id) {
456                         vendor = c->name;
457                         break;
458                 }
459         }
460         if (!vendor) {
461                 sprintf(tmp, "Generic %04x", vendor_id);
462                 vendor = tmp;
463         }
464         if (codec->preset && codec->preset->name)
465                 snprintf(name, namelen, "%s %s", vendor, codec->preset->name);
466         else
467                 snprintf(name, namelen, "%s ID %x", vendor,
468                          codec->vendor_id & 0xffff);
469 }
470
471 /*
472  * look for an AFG and MFG nodes
473  */
474 static void __devinit setup_fg_nodes(struct hda_codec *codec)
475 {
476         int i, total_nodes;
477         hda_nid_t nid;
478
479         total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
480         for (i = 0; i < total_nodes; i++, nid++) {
481                 unsigned int func;
482                 func = snd_hda_param_read(codec, nid, AC_PAR_FUNCTION_TYPE);
483                 switch (func & 0xff) {
484                 case AC_GRP_AUDIO_FUNCTION:
485                         codec->afg = nid;
486                         break;
487                 case AC_GRP_MODEM_FUNCTION:
488                         codec->mfg = nid;
489                         break;
490                 default:
491                         break;
492                 }
493         }
494 }
495
496 /*
497  * read widget caps for each widget and store in cache
498  */
499 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
500 {
501         int i;
502         hda_nid_t nid;
503
504         codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
505                                                  &codec->start_nid);
506         codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
507         if (!codec->wcaps)
508                 return -ENOMEM;
509         nid = codec->start_nid;
510         for (i = 0; i < codec->num_nodes; i++, nid++)
511                 codec->wcaps[i] = snd_hda_param_read(codec, nid,
512                                                      AC_PAR_AUDIO_WIDGET_CAP);
513         return 0;
514 }
515
516
517 static void init_hda_cache(struct hda_cache_rec *cache,
518                            unsigned int record_size);
519 static void free_hda_cache(struct hda_cache_rec *cache);
520
521 /*
522  * codec destructor
523  */
524 static void snd_hda_codec_free(struct hda_codec *codec)
525 {
526         if (!codec)
527                 return;
528 #ifdef CONFIG_SND_HDA_POWER_SAVE
529         cancel_delayed_work(&codec->power_work);
530         flush_scheduled_work();
531 #endif
532         list_del(&codec->list);
533         codec->bus->caddr_tbl[codec->addr] = NULL;
534         if (codec->patch_ops.free)
535                 codec->patch_ops.free(codec);
536         free_hda_cache(&codec->amp_cache);
537         free_hda_cache(&codec->cmd_cache);
538         kfree(codec->wcaps);
539         kfree(codec);
540 }
541
542 /**
543  * snd_hda_codec_new - create a HDA codec
544  * @bus: the bus to assign
545  * @codec_addr: the codec address
546  * @codecp: the pointer to store the generated codec
547  *
548  * Returns 0 if successful, or a negative error code.
549  */
550 int __devinit snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
551                                 struct hda_codec **codecp)
552 {
553         struct hda_codec *codec;
554         char component[13];
555         int err;
556
557         snd_assert(bus, return -EINVAL);
558         snd_assert(codec_addr <= HDA_MAX_CODEC_ADDRESS, return -EINVAL);
559
560         if (bus->caddr_tbl[codec_addr]) {
561                 snd_printk(KERN_ERR "hda_codec: "
562                            "address 0x%x is already occupied\n", codec_addr);
563                 return -EBUSY;
564         }
565
566         codec = kzalloc(sizeof(*codec), GFP_KERNEL);
567         if (codec == NULL) {
568                 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
569                 return -ENOMEM;
570         }
571
572         codec->bus = bus;
573         codec->addr = codec_addr;
574         mutex_init(&codec->spdif_mutex);
575         init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
576         init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
577
578 #ifdef CONFIG_SND_HDA_POWER_SAVE
579         INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
580         /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
581          * the caller has to power down appropriatley after initialization
582          * phase.
583          */
584         hda_keep_power_on(codec);
585 #endif
586
587         list_add_tail(&codec->list, &bus->codec_list);
588         bus->caddr_tbl[codec_addr] = codec;
589
590         codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
591                                               AC_PAR_VENDOR_ID);
592         if (codec->vendor_id == -1)
593                 /* read again, hopefully the access method was corrected
594                  * in the last read...
595                  */
596                 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
597                                                       AC_PAR_VENDOR_ID);
598         codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
599                                                  AC_PAR_SUBSYSTEM_ID);
600         codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
601                                                 AC_PAR_REV_ID);
602
603         setup_fg_nodes(codec);
604         if (!codec->afg && !codec->mfg) {
605                 snd_printdd("hda_codec: no AFG or MFG node found\n");
606                 snd_hda_codec_free(codec);
607                 return -ENODEV;
608         }
609
610         if (read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg) < 0) {
611                 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
612                 snd_hda_codec_free(codec);
613                 return -ENOMEM;
614         }
615
616         if (!codec->subsystem_id) {
617                 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
618                 codec->subsystem_id =
619                         snd_hda_codec_read(codec, nid, 0,
620                                            AC_VERB_GET_SUBSYSTEM_ID, 0);
621         }
622
623         codec->preset = find_codec_preset(codec);
624         /* audio codec should override the mixer name */
625         if (codec->afg || !*bus->card->mixername)
626                 snd_hda_get_codec_name(codec, bus->card->mixername,
627                                        sizeof(bus->card->mixername));
628
629         if (is_generic_config(codec)) {
630                 err = snd_hda_parse_generic_codec(codec);
631                 goto patched;
632         }
633         if (codec->preset && codec->preset->patch) {
634                 err = codec->preset->patch(codec);
635                 goto patched;
636         }
637
638         /* call the default parser */
639         err = snd_hda_parse_generic_codec(codec);
640         if (err < 0)
641                 printk(KERN_ERR "hda-codec: No codec parser is available\n");
642
643  patched:
644         if (err < 0) {
645                 snd_hda_codec_free(codec);
646                 return err;
647         }
648
649         if (codec->patch_ops.unsol_event)
650                 init_unsol_queue(bus);
651
652         snd_hda_codec_proc_new(codec);
653 #ifdef CONFIG_SND_HDA_HWDEP
654         snd_hda_create_hwdep(codec);
655 #endif
656
657         sprintf(component, "HDA:%08x", codec->vendor_id);
658         snd_component_add(codec->bus->card, component);
659
660         if (codecp)
661                 *codecp = codec;
662         return 0;
663 }
664
665 /**
666  * snd_hda_codec_setup_stream - set up the codec for streaming
667  * @codec: the CODEC to set up
668  * @nid: the NID to set up
669  * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
670  * @channel_id: channel id to pass, zero based.
671  * @format: stream format.
672  */
673 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
674                                 u32 stream_tag,
675                                 int channel_id, int format)
676 {
677         if (!nid)
678                 return;
679
680         snd_printdd("hda_codec_setup_stream: "
681                     "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
682                     nid, stream_tag, channel_id, format);
683         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
684                             (stream_tag << 4) | channel_id);
685         msleep(1);
686         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
687 }
688
689 /*
690  * amp access functions
691  */
692
693 /* FIXME: more better hash key? */
694 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
695 #define INFO_AMP_CAPS   (1<<0)
696 #define INFO_AMP_VOL(ch)        (1 << (1 + (ch)))
697
698 /* initialize the hash table */
699 static void __devinit init_hda_cache(struct hda_cache_rec *cache,
700                                      unsigned int record_size)
701 {
702         memset(cache, 0, sizeof(*cache));
703         memset(cache->hash, 0xff, sizeof(cache->hash));
704         cache->record_size = record_size;
705 }
706
707 static void free_hda_cache(struct hda_cache_rec *cache)
708 {
709         kfree(cache->buffer);
710 }
711
712 /* query the hash.  allocate an entry if not found. */
713 static struct hda_cache_head  *get_alloc_hash(struct hda_cache_rec *cache,
714                                               u32 key)
715 {
716         u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
717         u16 cur = cache->hash[idx];
718         struct hda_cache_head *info;
719
720         while (cur != 0xffff) {
721                 info = (struct hda_cache_head *)(cache->buffer +
722                                                  cur * cache->record_size);
723                 if (info->key == key)
724                         return info;
725                 cur = info->next;
726         }
727
728         /* add a new hash entry */
729         if (cache->num_entries >= cache->size) {
730                 /* reallocate the array */
731                 unsigned int new_size = cache->size + 64;
732                 void *new_buffer;
733                 new_buffer = kcalloc(new_size, cache->record_size, GFP_KERNEL);
734                 if (!new_buffer) {
735                         snd_printk(KERN_ERR "hda_codec: "
736                                    "can't malloc amp_info\n");
737                         return NULL;
738                 }
739                 if (cache->buffer) {
740                         memcpy(new_buffer, cache->buffer,
741                                cache->size * cache->record_size);
742                         kfree(cache->buffer);
743                 }
744                 cache->size = new_size;
745                 cache->buffer = new_buffer;
746         }
747         cur = cache->num_entries++;
748         info = (struct hda_cache_head *)(cache->buffer +
749                                          cur * cache->record_size);
750         info->key = key;
751         info->val = 0;
752         info->next = cache->hash[idx];
753         cache->hash[idx] = cur;
754
755         return info;
756 }
757
758 /* query and allocate an amp hash entry */
759 static inline struct hda_amp_info *
760 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
761 {
762         return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
763 }
764
765 /*
766  * query AMP capabilities for the given widget and direction
767  */
768 static u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
769 {
770         struct hda_amp_info *info;
771
772         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
773         if (!info)
774                 return 0;
775         if (!(info->head.val & INFO_AMP_CAPS)) {
776                 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
777                         nid = codec->afg;
778                 info->amp_caps = snd_hda_param_read(codec, nid,
779                                                     direction == HDA_OUTPUT ?
780                                                     AC_PAR_AMP_OUT_CAP :
781                                                     AC_PAR_AMP_IN_CAP);
782                 if (info->amp_caps)
783                         info->head.val |= INFO_AMP_CAPS;
784         }
785         return info->amp_caps;
786 }
787
788 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
789                               unsigned int caps)
790 {
791         struct hda_amp_info *info;
792
793         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
794         if (!info)
795                 return -EINVAL;
796         info->amp_caps = caps;
797         info->head.val |= INFO_AMP_CAPS;
798         return 0;
799 }
800
801 /*
802  * read the current volume to info
803  * if the cache exists, read the cache value.
804  */
805 static unsigned int get_vol_mute(struct hda_codec *codec,
806                                  struct hda_amp_info *info, hda_nid_t nid,
807                                  int ch, int direction, int index)
808 {
809         u32 val, parm;
810
811         if (info->head.val & INFO_AMP_VOL(ch))
812                 return info->vol[ch];
813
814         parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
815         parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
816         parm |= index;
817         val = snd_hda_codec_read(codec, nid, 0,
818                                  AC_VERB_GET_AMP_GAIN_MUTE, parm);
819         info->vol[ch] = val & 0xff;
820         info->head.val |= INFO_AMP_VOL(ch);
821         return info->vol[ch];
822 }
823
824 /*
825  * write the current volume in info to the h/w and update the cache
826  */
827 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
828                          hda_nid_t nid, int ch, int direction, int index,
829                          int val)
830 {
831         u32 parm;
832
833         parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
834         parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
835         parm |= index << AC_AMP_SET_INDEX_SHIFT;
836         parm |= val;
837         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
838         info->vol[ch] = val;
839 }
840
841 /*
842  * read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit.
843  */
844 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
845                            int direction, int index)
846 {
847         struct hda_amp_info *info;
848         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
849         if (!info)
850                 return 0;
851         return get_vol_mute(codec, info, nid, ch, direction, index);
852 }
853
854 /*
855  * update the AMP value, mask = bit mask to set, val = the value
856  */
857 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
858                              int direction, int idx, int mask, int val)
859 {
860         struct hda_amp_info *info;
861
862         info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
863         if (!info)
864                 return 0;
865         val &= mask;
866         val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
867         if (info->vol[ch] == val)
868                 return 0;
869         put_vol_mute(codec, info, nid, ch, direction, idx, val);
870         return 1;
871 }
872
873 /*
874  * update the AMP stereo with the same mask and value
875  */
876 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
877                              int direction, int idx, int mask, int val)
878 {
879         int ch, ret = 0;
880         for (ch = 0; ch < 2; ch++)
881                 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
882                                                 idx, mask, val);
883         return ret;
884 }
885
886 #ifdef SND_HDA_NEEDS_RESUME
887 /* resume the all amp commands from the cache */
888 void snd_hda_codec_resume_amp(struct hda_codec *codec)
889 {
890         struct hda_amp_info *buffer = codec->amp_cache.buffer;
891         int i;
892
893         for (i = 0; i < codec->amp_cache.size; i++, buffer++) {
894                 u32 key = buffer->head.key;
895                 hda_nid_t nid;
896                 unsigned int idx, dir, ch;
897                 if (!key)
898                         continue;
899                 nid = key & 0xff;
900                 idx = (key >> 16) & 0xff;
901                 dir = (key >> 24) & 0xff;
902                 for (ch = 0; ch < 2; ch++) {
903                         if (!(buffer->head.val & INFO_AMP_VOL(ch)))
904                                 continue;
905                         put_vol_mute(codec, buffer, nid, ch, dir, idx,
906                                      buffer->vol[ch]);
907                 }
908         }
909 }
910 #endif /* SND_HDA_NEEDS_RESUME */
911
912 /*
913  * AMP control callbacks
914  */
915 /* retrieve parameters from private_value */
916 #define get_amp_nid(kc)         ((kc)->private_value & 0xffff)
917 #define get_amp_channels(kc)    (((kc)->private_value >> 16) & 0x3)
918 #define get_amp_direction(kc)   (((kc)->private_value >> 18) & 0x1)
919 #define get_amp_index(kc)       (((kc)->private_value >> 19) & 0xf)
920
921 /* volume */
922 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
923                                   struct snd_ctl_elem_info *uinfo)
924 {
925         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
926         u16 nid = get_amp_nid(kcontrol);
927         u8 chs = get_amp_channels(kcontrol);
928         int dir = get_amp_direction(kcontrol);
929         u32 caps;
930
931         caps = query_amp_caps(codec, nid, dir);
932         /* num steps */
933         caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
934         if (!caps) {
935                 printk(KERN_WARNING "hda_codec: "
936                        "num_steps = 0 for NID=0x%x\n", nid);
937                 return -EINVAL;
938         }
939         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
940         uinfo->count = chs == 3 ? 2 : 1;
941         uinfo->value.integer.min = 0;
942         uinfo->value.integer.max = caps;
943         return 0;
944 }
945
946 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
947                                  struct snd_ctl_elem_value *ucontrol)
948 {
949         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
950         hda_nid_t nid = get_amp_nid(kcontrol);
951         int chs = get_amp_channels(kcontrol);
952         int dir = get_amp_direction(kcontrol);
953         int idx = get_amp_index(kcontrol);
954         long *valp = ucontrol->value.integer.value;
955
956         if (chs & 1)
957                 *valp++ = snd_hda_codec_amp_read(codec, nid, 0, dir, idx)
958                         & HDA_AMP_VOLMASK;
959         if (chs & 2)
960                 *valp = snd_hda_codec_amp_read(codec, nid, 1, dir, idx)
961                         & HDA_AMP_VOLMASK;
962         return 0;
963 }
964
965 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
966                                  struct snd_ctl_elem_value *ucontrol)
967 {
968         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
969         hda_nid_t nid = get_amp_nid(kcontrol);
970         int chs = get_amp_channels(kcontrol);
971         int dir = get_amp_direction(kcontrol);
972         int idx = get_amp_index(kcontrol);
973         long *valp = ucontrol->value.integer.value;
974         int change = 0;
975
976         snd_hda_power_up(codec);
977         if (chs & 1) {
978                 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
979                                                   0x7f, *valp);
980                 valp++;
981         }
982         if (chs & 2)
983                 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
984                                                    0x7f, *valp);
985         snd_hda_power_down(codec);
986         return change;
987 }
988
989 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
990                           unsigned int size, unsigned int __user *_tlv)
991 {
992         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
993         hda_nid_t nid = get_amp_nid(kcontrol);
994         int dir = get_amp_direction(kcontrol);
995         u32 caps, val1, val2;
996
997         if (size < 4 * sizeof(unsigned int))
998                 return -ENOMEM;
999         caps = query_amp_caps(codec, nid, dir);
1000         val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1001         val2 = (val2 + 1) * 25;
1002         val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1003         val1 = ((int)val1) * ((int)val2);
1004         if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1005                 return -EFAULT;
1006         if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1007                 return -EFAULT;
1008         if (put_user(val1, _tlv + 2))
1009                 return -EFAULT;
1010         if (put_user(val2, _tlv + 3))
1011                 return -EFAULT;
1012         return 0;
1013 }
1014
1015 /* switch */
1016 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1017                                   struct snd_ctl_elem_info *uinfo)
1018 {
1019         int chs = get_amp_channels(kcontrol);
1020
1021         uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1022         uinfo->count = chs == 3 ? 2 : 1;
1023         uinfo->value.integer.min = 0;
1024         uinfo->value.integer.max = 1;
1025         return 0;
1026 }
1027
1028 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1029                                  struct snd_ctl_elem_value *ucontrol)
1030 {
1031         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1032         hda_nid_t nid = get_amp_nid(kcontrol);
1033         int chs = get_amp_channels(kcontrol);
1034         int dir = get_amp_direction(kcontrol);
1035         int idx = get_amp_index(kcontrol);
1036         long *valp = ucontrol->value.integer.value;
1037
1038         if (chs & 1)
1039                 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1040                            HDA_AMP_MUTE) ? 0 : 1;
1041         if (chs & 2)
1042                 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1043                          HDA_AMP_MUTE) ? 0 : 1;
1044         return 0;
1045 }
1046
1047 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1048                                  struct snd_ctl_elem_value *ucontrol)
1049 {
1050         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1051         hda_nid_t nid = get_amp_nid(kcontrol);
1052         int chs = get_amp_channels(kcontrol);
1053         int dir = get_amp_direction(kcontrol);
1054         int idx = get_amp_index(kcontrol);
1055         long *valp = ucontrol->value.integer.value;
1056         int change = 0;
1057
1058         snd_hda_power_up(codec);
1059         if (chs & 1) {
1060                 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1061                                                   HDA_AMP_MUTE,
1062                                                   *valp ? 0 : HDA_AMP_MUTE);
1063                 valp++;
1064         }
1065         if (chs & 2)
1066                 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1067                                                    HDA_AMP_MUTE,
1068                                                    *valp ? 0 : HDA_AMP_MUTE);
1069 #ifdef CONFIG_SND_HDA_POWER_SAVE
1070         if (codec->patch_ops.check_power_status)
1071                 codec->patch_ops.check_power_status(codec, nid);
1072 #endif
1073         snd_hda_power_down(codec);
1074         return change;
1075 }
1076
1077 /*
1078  * bound volume controls
1079  *
1080  * bind multiple volumes (# indices, from 0)
1081  */
1082
1083 #define AMP_VAL_IDX_SHIFT       19
1084 #define AMP_VAL_IDX_MASK        (0x0f<<19)
1085
1086 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1087                                   struct snd_ctl_elem_value *ucontrol)
1088 {
1089         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1090         unsigned long pval;
1091         int err;
1092
1093         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1094         pval = kcontrol->private_value;
1095         kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1096         err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1097         kcontrol->private_value = pval;
1098         mutex_unlock(&codec->spdif_mutex);
1099         return err;
1100 }
1101
1102 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1103                                   struct snd_ctl_elem_value *ucontrol)
1104 {
1105         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1106         unsigned long pval;
1107         int i, indices, err = 0, change = 0;
1108
1109         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1110         pval = kcontrol->private_value;
1111         indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1112         for (i = 0; i < indices; i++) {
1113                 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1114                         (i << AMP_VAL_IDX_SHIFT);
1115                 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1116                 if (err < 0)
1117                         break;
1118                 change |= err;
1119         }
1120         kcontrol->private_value = pval;
1121         mutex_unlock(&codec->spdif_mutex);
1122         return err < 0 ? err : change;
1123 }
1124
1125 /*
1126  * generic bound volume/swtich controls
1127  */
1128 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1129                                  struct snd_ctl_elem_info *uinfo)
1130 {
1131         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1132         struct hda_bind_ctls *c;
1133         int err;
1134
1135         c = (struct hda_bind_ctls *)kcontrol->private_value;
1136         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1137         kcontrol->private_value = *c->values;
1138         err = c->ops->info(kcontrol, uinfo);
1139         kcontrol->private_value = (long)c;
1140         mutex_unlock(&codec->spdif_mutex);
1141         return err;
1142 }
1143
1144 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1145                                 struct snd_ctl_elem_value *ucontrol)
1146 {
1147         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1148         struct hda_bind_ctls *c;
1149         int err;
1150
1151         c = (struct hda_bind_ctls *)kcontrol->private_value;
1152         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1153         kcontrol->private_value = *c->values;
1154         err = c->ops->get(kcontrol, ucontrol);
1155         kcontrol->private_value = (long)c;
1156         mutex_unlock(&codec->spdif_mutex);
1157         return err;
1158 }
1159
1160 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1161                                 struct snd_ctl_elem_value *ucontrol)
1162 {
1163         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1164         struct hda_bind_ctls *c;
1165         unsigned long *vals;
1166         int err = 0, change = 0;
1167
1168         c = (struct hda_bind_ctls *)kcontrol->private_value;
1169         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1170         for (vals = c->values; *vals; vals++) {
1171                 kcontrol->private_value = *vals;
1172                 err = c->ops->put(kcontrol, ucontrol);
1173                 if (err < 0)
1174                         break;
1175                 change |= err;
1176         }
1177         kcontrol->private_value = (long)c;
1178         mutex_unlock(&codec->spdif_mutex);
1179         return err < 0 ? err : change;
1180 }
1181
1182 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1183                            unsigned int size, unsigned int __user *tlv)
1184 {
1185         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1186         struct hda_bind_ctls *c;
1187         int err;
1188
1189         c = (struct hda_bind_ctls *)kcontrol->private_value;
1190         mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1191         kcontrol->private_value = *c->values;
1192         err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1193         kcontrol->private_value = (long)c;
1194         mutex_unlock(&codec->spdif_mutex);
1195         return err;
1196 }
1197
1198 struct hda_ctl_ops snd_hda_bind_vol = {
1199         .info = snd_hda_mixer_amp_volume_info,
1200         .get = snd_hda_mixer_amp_volume_get,
1201         .put = snd_hda_mixer_amp_volume_put,
1202         .tlv = snd_hda_mixer_amp_tlv
1203 };
1204
1205 struct hda_ctl_ops snd_hda_bind_sw = {
1206         .info = snd_hda_mixer_amp_switch_info,
1207         .get = snd_hda_mixer_amp_switch_get,
1208         .put = snd_hda_mixer_amp_switch_put,
1209         .tlv = snd_hda_mixer_amp_tlv
1210 };
1211
1212 /*
1213  * SPDIF out controls
1214  */
1215
1216 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1217                                    struct snd_ctl_elem_info *uinfo)
1218 {
1219         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1220         uinfo->count = 1;
1221         return 0;
1222 }
1223
1224 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1225                                    struct snd_ctl_elem_value *ucontrol)
1226 {
1227         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1228                                            IEC958_AES0_NONAUDIO |
1229                                            IEC958_AES0_CON_EMPHASIS_5015 |
1230                                            IEC958_AES0_CON_NOT_COPYRIGHT;
1231         ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1232                                            IEC958_AES1_CON_ORIGINAL;
1233         return 0;
1234 }
1235
1236 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1237                                    struct snd_ctl_elem_value *ucontrol)
1238 {
1239         ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1240                                            IEC958_AES0_NONAUDIO |
1241                                            IEC958_AES0_PRO_EMPHASIS_5015;
1242         return 0;
1243 }
1244
1245 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1246                                      struct snd_ctl_elem_value *ucontrol)
1247 {
1248         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1249
1250         ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1251         ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1252         ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1253         ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1254
1255         return 0;
1256 }
1257
1258 /* convert from SPDIF status bits to HDA SPDIF bits
1259  * bit 0 (DigEn) is always set zero (to be filled later)
1260  */
1261 static unsigned short convert_from_spdif_status(unsigned int sbits)
1262 {
1263         unsigned short val = 0;
1264
1265         if (sbits & IEC958_AES0_PROFESSIONAL)
1266                 val |= AC_DIG1_PROFESSIONAL;
1267         if (sbits & IEC958_AES0_NONAUDIO)
1268                 val |= AC_DIG1_NONAUDIO;
1269         if (sbits & IEC958_AES0_PROFESSIONAL) {
1270                 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1271                     IEC958_AES0_PRO_EMPHASIS_5015)
1272                         val |= AC_DIG1_EMPHASIS;
1273         } else {
1274                 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1275                     IEC958_AES0_CON_EMPHASIS_5015)
1276                         val |= AC_DIG1_EMPHASIS;
1277                 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1278                         val |= AC_DIG1_COPYRIGHT;
1279                 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1280                         val |= AC_DIG1_LEVEL;
1281                 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1282         }
1283         return val;
1284 }
1285
1286 /* convert to SPDIF status bits from HDA SPDIF bits
1287  */
1288 static unsigned int convert_to_spdif_status(unsigned short val)
1289 {
1290         unsigned int sbits = 0;
1291
1292         if (val & AC_DIG1_NONAUDIO)
1293                 sbits |= IEC958_AES0_NONAUDIO;
1294         if (val & AC_DIG1_PROFESSIONAL)
1295                 sbits |= IEC958_AES0_PROFESSIONAL;
1296         if (sbits & IEC958_AES0_PROFESSIONAL) {
1297                 if (sbits & AC_DIG1_EMPHASIS)
1298                         sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1299         } else {
1300                 if (val & AC_DIG1_EMPHASIS)
1301                         sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1302                 if (!(val & AC_DIG1_COPYRIGHT))
1303                         sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1304                 if (val & AC_DIG1_LEVEL)
1305                         sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1306                 sbits |= val & (0x7f << 8);
1307         }
1308         return sbits;
1309 }
1310
1311 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1312                                      struct snd_ctl_elem_value *ucontrol)
1313 {
1314         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1315         hda_nid_t nid = kcontrol->private_value;
1316         unsigned short val;
1317         int change;
1318
1319         mutex_lock(&codec->spdif_mutex);
1320         codec->spdif_status = ucontrol->value.iec958.status[0] |
1321                 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1322                 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1323                 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1324         val = convert_from_spdif_status(codec->spdif_status);
1325         val |= codec->spdif_ctls & 1;
1326         change = codec->spdif_ctls != val;
1327         codec->spdif_ctls = val;
1328
1329         if (change) {
1330                 snd_hda_codec_write_cache(codec, nid, 0,
1331                                           AC_VERB_SET_DIGI_CONVERT_1,
1332                                           val & 0xff);
1333                 snd_hda_codec_write_cache(codec, nid, 0,
1334                                           AC_VERB_SET_DIGI_CONVERT_2,
1335                                           val >> 8);
1336         }
1337
1338         mutex_unlock(&codec->spdif_mutex);
1339         return change;
1340 }
1341
1342 #define snd_hda_spdif_out_switch_info   snd_ctl_boolean_mono_info
1343
1344 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1345                                         struct snd_ctl_elem_value *ucontrol)
1346 {
1347         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1348
1349         ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1350         return 0;
1351 }
1352
1353 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1354                                         struct snd_ctl_elem_value *ucontrol)
1355 {
1356         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1357         hda_nid_t nid = kcontrol->private_value;
1358         unsigned short val;
1359         int change;
1360
1361         mutex_lock(&codec->spdif_mutex);
1362         val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1363         if (ucontrol->value.integer.value[0])
1364                 val |= AC_DIG1_ENABLE;
1365         change = codec->spdif_ctls != val;
1366         if (change) {
1367                 codec->spdif_ctls = val;
1368                 snd_hda_codec_write_cache(codec, nid, 0,
1369                                           AC_VERB_SET_DIGI_CONVERT_1,
1370                                           val & 0xff);
1371                 /* unmute amp switch (if any) */
1372                 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1373                     (val & AC_DIG1_ENABLE))
1374                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
1375                                                  HDA_AMP_MUTE, 0);
1376         }
1377         mutex_unlock(&codec->spdif_mutex);
1378         return change;
1379 }
1380
1381 static struct snd_kcontrol_new dig_mixes[] = {
1382         {
1383                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1384                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1385                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1386                 .info = snd_hda_spdif_mask_info,
1387                 .get = snd_hda_spdif_cmask_get,
1388         },
1389         {
1390                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1391                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1392                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
1393                 .info = snd_hda_spdif_mask_info,
1394                 .get = snd_hda_spdif_pmask_get,
1395         },
1396         {
1397                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1398                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1399                 .info = snd_hda_spdif_mask_info,
1400                 .get = snd_hda_spdif_default_get,
1401                 .put = snd_hda_spdif_default_put,
1402         },
1403         {
1404                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1405                 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
1406                 .info = snd_hda_spdif_out_switch_info,
1407                 .get = snd_hda_spdif_out_switch_get,
1408                 .put = snd_hda_spdif_out_switch_put,
1409         },
1410         { } /* end */
1411 };
1412
1413 /**
1414  * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
1415  * @codec: the HDA codec
1416  * @nid: audio out widget NID
1417  *
1418  * Creates controls related with the SPDIF output.
1419  * Called from each patch supporting the SPDIF out.
1420  *
1421  * Returns 0 if successful, or a negative error code.
1422  */
1423 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
1424 {
1425         int err;
1426         struct snd_kcontrol *kctl;
1427         struct snd_kcontrol_new *dig_mix;
1428
1429         for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
1430                 kctl = snd_ctl_new1(dig_mix, codec);
1431                 kctl->private_value = nid;
1432                 err = snd_ctl_add(codec->bus->card, kctl);
1433                 if (err < 0)
1434                         return err;
1435         }
1436         codec->spdif_ctls =
1437                 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0);
1438         codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
1439         return 0;
1440 }
1441
1442 /*
1443  * SPDIF input
1444  */
1445
1446 #define snd_hda_spdif_in_switch_info    snd_hda_spdif_out_switch_info
1447
1448 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
1449                                        struct snd_ctl_elem_value *ucontrol)
1450 {
1451         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1452
1453         ucontrol->value.integer.value[0] = codec->spdif_in_enable;
1454         return 0;
1455 }
1456
1457 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
1458                                        struct snd_ctl_elem_value *ucontrol)
1459 {
1460         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1461         hda_nid_t nid = kcontrol->private_value;
1462         unsigned int val = !!ucontrol->value.integer.value[0];
1463         int change;
1464
1465         mutex_lock(&codec->spdif_mutex);
1466         change = codec->spdif_in_enable != val;
1467         if (change) {
1468                 codec->spdif_in_enable = val;
1469                 snd_hda_codec_write_cache(codec, nid, 0,
1470                                           AC_VERB_SET_DIGI_CONVERT_1, val);
1471         }
1472         mutex_unlock(&codec->spdif_mutex);
1473         return change;
1474 }
1475
1476 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
1477                                        struct snd_ctl_elem_value *ucontrol)
1478 {
1479         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1480         hda_nid_t nid = kcontrol->private_value;
1481         unsigned short val;
1482         unsigned int sbits;
1483
1484         val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0);
1485         sbits = convert_to_spdif_status(val);
1486         ucontrol->value.iec958.status[0] = sbits;
1487         ucontrol->value.iec958.status[1] = sbits >> 8;
1488         ucontrol->value.iec958.status[2] = sbits >> 16;
1489         ucontrol->value.iec958.status[3] = sbits >> 24;
1490         return 0;
1491 }
1492
1493 static struct snd_kcontrol_new dig_in_ctls[] = {
1494         {
1495                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1496                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
1497                 .info = snd_hda_spdif_in_switch_info,
1498                 .get = snd_hda_spdif_in_switch_get,
1499                 .put = snd_hda_spdif_in_switch_put,
1500         },
1501         {
1502                 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1503                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1504                 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
1505                 .info = snd_hda_spdif_mask_info,
1506                 .get = snd_hda_spdif_in_status_get,
1507         },
1508         { } /* end */
1509 };
1510
1511 /**
1512  * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
1513  * @codec: the HDA codec
1514  * @nid: audio in widget NID
1515  *
1516  * Creates controls related with the SPDIF input.
1517  * Called from each patch supporting the SPDIF in.
1518  *
1519  * Returns 0 if successful, or a negative error code.
1520  */
1521 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
1522 {
1523         int err;
1524         struct snd_kcontrol *kctl;
1525         struct snd_kcontrol_new *dig_mix;
1526
1527         for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
1528                 kctl = snd_ctl_new1(dig_mix, codec);
1529                 kctl->private_value = nid;
1530                 err = snd_ctl_add(codec->bus->card, kctl);
1531                 if (err < 0)
1532                         return err;
1533         }
1534         codec->spdif_in_enable =
1535                 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0) &
1536                 AC_DIG1_ENABLE;
1537         return 0;
1538 }
1539
1540 #ifdef SND_HDA_NEEDS_RESUME
1541 /*
1542  * command cache
1543  */
1544
1545 /* build a 32bit cache key with the widget id and the command parameter */
1546 #define build_cmd_cache_key(nid, verb)  ((verb << 8) | nid)
1547 #define get_cmd_cache_nid(key)          ((key) & 0xff)
1548 #define get_cmd_cache_cmd(key)          (((key) >> 8) & 0xffff)
1549
1550 /**
1551  * snd_hda_codec_write_cache - send a single command with caching
1552  * @codec: the HDA codec
1553  * @nid: NID to send the command
1554  * @direct: direct flag
1555  * @verb: the verb to send
1556  * @parm: the parameter for the verb
1557  *
1558  * Send a single command without waiting for response.
1559  *
1560  * Returns 0 if successful, or a negative error code.
1561  */
1562 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
1563                               int direct, unsigned int verb, unsigned int parm)
1564 {
1565         int err;
1566         snd_hda_power_up(codec);
1567         mutex_lock(&codec->bus->cmd_mutex);
1568         err = codec->bus->ops.command(codec, nid, direct, verb, parm);
1569         if (!err) {
1570                 struct hda_cache_head *c;
1571                 u32 key = build_cmd_cache_key(nid, verb);
1572                 c = get_alloc_hash(&codec->cmd_cache, key);
1573                 if (c)
1574                         c->val = parm;
1575         }
1576         mutex_unlock(&codec->bus->cmd_mutex);
1577         snd_hda_power_down(codec);
1578         return err;
1579 }
1580
1581 /* resume the all commands from the cache */
1582 void snd_hda_codec_resume_cache(struct hda_codec *codec)
1583 {
1584         struct hda_cache_head *buffer = codec->cmd_cache.buffer;
1585         int i;
1586
1587         for (i = 0; i < codec->cmd_cache.size; i++, buffer++) {
1588                 u32 key = buffer->key;
1589                 if (!key)
1590                         continue;
1591                 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
1592                                     get_cmd_cache_cmd(key), buffer->val);
1593         }
1594 }
1595
1596 /**
1597  * snd_hda_sequence_write_cache - sequence writes with caching
1598  * @codec: the HDA codec
1599  * @seq: VERB array to send
1600  *
1601  * Send the commands sequentially from the given array.
1602  * Thte commands are recorded on cache for power-save and resume.
1603  * The array must be terminated with NID=0.
1604  */
1605 void snd_hda_sequence_write_cache(struct hda_codec *codec,
1606                                   const struct hda_verb *seq)
1607 {
1608         for (; seq->nid; seq++)
1609                 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
1610                                           seq->param);
1611 }
1612 #endif /* SND_HDA_NEEDS_RESUME */
1613
1614 /*
1615  * set power state of the codec
1616  */
1617 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1618                                 unsigned int power_state)
1619 {
1620         hda_nid_t nid;
1621         int i;
1622
1623         snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
1624                             power_state);
1625
1626         nid = codec->start_nid;
1627         for (i = 0; i < codec->num_nodes; i++, nid++) {
1628                 if (get_wcaps(codec, nid) & AC_WCAP_POWER) {
1629                         unsigned int pincap;
1630                         /*
1631                          * don't power down the widget if it controls eapd
1632                          * and EAPD_BTLENABLE is set.
1633                          */
1634                         pincap = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1635                         if (pincap & AC_PINCAP_EAPD) {
1636                                 int eapd = snd_hda_codec_read(codec, nid,
1637                                         0, AC_VERB_GET_EAPD_BTLENABLE, 0);
1638                                 eapd &= 0x02;
1639                                 if (power_state == AC_PWRST_D3 && eapd)
1640                                         continue;
1641                         }
1642                         snd_hda_codec_write(codec, nid, 0,
1643                                             AC_VERB_SET_POWER_STATE,
1644                                             power_state);
1645                 }
1646         }
1647
1648         if (power_state == AC_PWRST_D0) {
1649                 unsigned long end_time;
1650                 int state;
1651                 msleep(10);
1652                 /* wait until the codec reachs to D0 */
1653                 end_time = jiffies + msecs_to_jiffies(500);
1654                 do {
1655                         state = snd_hda_codec_read(codec, fg, 0,
1656                                                    AC_VERB_GET_POWER_STATE, 0);
1657                         if (state == power_state)
1658                                 break;
1659                         msleep(1);
1660                 } while (time_after_eq(end_time, jiffies));
1661         }
1662 }
1663
1664 #ifdef SND_HDA_NEEDS_RESUME
1665 /*
1666  * call suspend and power-down; used both from PM and power-save
1667  */
1668 static void hda_call_codec_suspend(struct hda_codec *codec)
1669 {
1670         if (codec->patch_ops.suspend)
1671                 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
1672         hda_set_power_state(codec,
1673                             codec->afg ? codec->afg : codec->mfg,
1674                             AC_PWRST_D3);
1675 #ifdef CONFIG_SND_HDA_POWER_SAVE
1676         cancel_delayed_work(&codec->power_work);
1677         codec->power_on = 0;
1678         codec->power_transition = 0;
1679 #endif
1680 }
1681
1682 /*
1683  * kick up codec; used both from PM and power-save
1684  */
1685 static void hda_call_codec_resume(struct hda_codec *codec)
1686 {
1687         hda_set_power_state(codec,
1688                             codec->afg ? codec->afg : codec->mfg,
1689                             AC_PWRST_D0);
1690         if (codec->patch_ops.resume)
1691                 codec->patch_ops.resume(codec);
1692         else {
1693                 if (codec->patch_ops.init)
1694                         codec->patch_ops.init(codec);
1695                 snd_hda_codec_resume_amp(codec);
1696                 snd_hda_codec_resume_cache(codec);
1697         }
1698 }
1699 #endif /* SND_HDA_NEEDS_RESUME */
1700
1701
1702 /**
1703  * snd_hda_build_controls - build mixer controls
1704  * @bus: the BUS
1705  *
1706  * Creates mixer controls for each codec included in the bus.
1707  *
1708  * Returns 0 if successful, otherwise a negative error code.
1709  */
1710 int __devinit snd_hda_build_controls(struct hda_bus *bus)
1711 {
1712         struct hda_codec *codec;
1713
1714         list_for_each_entry(codec, &bus->codec_list, list) {
1715                 int err = 0;
1716                 /* fake as if already powered-on */
1717                 hda_keep_power_on(codec);
1718                 /* then fire up */
1719                 hda_set_power_state(codec,
1720                                     codec->afg ? codec->afg : codec->mfg,
1721                                     AC_PWRST_D0);
1722                 /* continue to initialize... */
1723                 if (codec->patch_ops.init)
1724                         err = codec->patch_ops.init(codec);
1725                 if (!err && codec->patch_ops.build_controls)
1726                         err = codec->patch_ops.build_controls(codec);
1727                 snd_hda_power_down(codec);
1728                 if (err < 0)
1729                         return err;
1730         }
1731
1732         return 0;
1733 }
1734
1735 /*
1736  * stream formats
1737  */
1738 struct hda_rate_tbl {
1739         unsigned int hz;
1740         unsigned int alsa_bits;
1741         unsigned int hda_fmt;
1742 };
1743
1744 static struct hda_rate_tbl rate_bits[] = {
1745         /* rate in Hz, ALSA rate bitmask, HDA format value */
1746
1747         /* autodetected value used in snd_hda_query_supported_pcm */
1748         { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
1749         { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
1750         { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
1751         { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
1752         { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
1753         { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
1754         { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
1755         { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
1756         { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
1757         { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
1758         { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
1759 #define AC_PAR_PCM_RATE_BITS    11
1760         /* up to bits 10, 384kHZ isn't supported properly */
1761
1762         /* not autodetected value */
1763         { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
1764
1765         { 0 } /* terminator */
1766 };
1767
1768 /**
1769  * snd_hda_calc_stream_format - calculate format bitset
1770  * @rate: the sample rate
1771  * @channels: the number of channels
1772  * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
1773  * @maxbps: the max. bps
1774  *
1775  * Calculate the format bitset from the given rate, channels and th PCM format.
1776  *
1777  * Return zero if invalid.
1778  */
1779 unsigned int snd_hda_calc_stream_format(unsigned int rate,
1780                                         unsigned int channels,
1781                                         unsigned int format,
1782                                         unsigned int maxbps)
1783 {
1784         int i;
1785         unsigned int val = 0;
1786
1787         for (i = 0; rate_bits[i].hz; i++)
1788                 if (rate_bits[i].hz == rate) {
1789                         val = rate_bits[i].hda_fmt;
1790                         break;
1791                 }
1792         if (!rate_bits[i].hz) {
1793                 snd_printdd("invalid rate %d\n", rate);
1794                 return 0;
1795         }
1796
1797         if (channels == 0 || channels > 8) {
1798                 snd_printdd("invalid channels %d\n", channels);
1799                 return 0;
1800         }
1801         val |= channels - 1;
1802
1803         switch (snd_pcm_format_width(format)) {
1804         case 8:  val |= 0x00; break;
1805         case 16: val |= 0x10; break;
1806         case 20:
1807         case 24:
1808         case 32:
1809                 if (maxbps >= 32)
1810                         val |= 0x40;
1811                 else if (maxbps >= 24)
1812                         val |= 0x30;
1813                 else
1814                         val |= 0x20;
1815                 break;
1816         default:
1817                 snd_printdd("invalid format width %d\n",
1818                             snd_pcm_format_width(format));
1819                 return 0;
1820         }
1821
1822         return val;
1823 }
1824
1825 /**
1826  * snd_hda_query_supported_pcm - query the supported PCM rates and formats
1827  * @codec: the HDA codec
1828  * @nid: NID to query
1829  * @ratesp: the pointer to store the detected rate bitflags
1830  * @formatsp: the pointer to store the detected formats
1831  * @bpsp: the pointer to store the detected format widths
1832  *
1833  * Queries the supported PCM rates and formats.  The NULL @ratesp, @formatsp
1834  * or @bsps argument is ignored.
1835  *
1836  * Returns 0 if successful, otherwise a negative error code.
1837  */
1838 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
1839                                 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
1840 {
1841         int i;
1842         unsigned int val, streams;
1843
1844         val = 0;
1845         if (nid != codec->afg &&
1846             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
1847                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
1848                 if (val == -1)
1849                         return -EIO;
1850         }
1851         if (!val)
1852                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
1853
1854         if (ratesp) {
1855                 u32 rates = 0;
1856                 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
1857                         if (val & (1 << i))
1858                                 rates |= rate_bits[i].alsa_bits;
1859                 }
1860                 *ratesp = rates;
1861         }
1862
1863         if (formatsp || bpsp) {
1864                 u64 formats = 0;
1865                 unsigned int bps;
1866                 unsigned int wcaps;
1867
1868                 wcaps = get_wcaps(codec, nid);
1869                 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
1870                 if (streams == -1)
1871                         return -EIO;
1872                 if (!streams) {
1873                         streams = snd_hda_param_read(codec, codec->afg,
1874                                                      AC_PAR_STREAM);
1875                         if (streams == -1)
1876                                 return -EIO;
1877                 }
1878
1879                 bps = 0;
1880                 if (streams & AC_SUPFMT_PCM) {
1881                         if (val & AC_SUPPCM_BITS_8) {
1882                                 formats |= SNDRV_PCM_FMTBIT_U8;
1883                                 bps = 8;
1884                         }
1885                         if (val & AC_SUPPCM_BITS_16) {
1886                                 formats |= SNDRV_PCM_FMTBIT_S16_LE;
1887                                 bps = 16;
1888                         }
1889                         if (wcaps & AC_WCAP_DIGITAL) {
1890                                 if (val & AC_SUPPCM_BITS_32)
1891                                         formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
1892                                 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
1893                                         formats |= SNDRV_PCM_FMTBIT_S32_LE;
1894                                 if (val & AC_SUPPCM_BITS_24)
1895                                         bps = 24;
1896                                 else if (val & AC_SUPPCM_BITS_20)
1897                                         bps = 20;
1898                         } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
1899                                           AC_SUPPCM_BITS_32)) {
1900                                 formats |= SNDRV_PCM_FMTBIT_S32_LE;
1901                                 if (val & AC_SUPPCM_BITS_32)
1902                                         bps = 32;
1903                                 else if (val & AC_SUPPCM_BITS_24)
1904                                         bps = 24;
1905                                 else if (val & AC_SUPPCM_BITS_20)
1906                                         bps = 20;
1907                         }
1908                 }
1909                 else if (streams == AC_SUPFMT_FLOAT32) {
1910                         /* should be exclusive */
1911                         formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
1912                         bps = 32;
1913                 } else if (streams == AC_SUPFMT_AC3) {
1914                         /* should be exclusive */
1915                         /* temporary hack: we have still no proper support
1916                          * for the direct AC3 stream...
1917                          */
1918                         formats |= SNDRV_PCM_FMTBIT_U8;
1919                         bps = 8;
1920                 }
1921                 if (formatsp)
1922                         *formatsp = formats;
1923                 if (bpsp)
1924                         *bpsp = bps;
1925         }
1926
1927         return 0;
1928 }
1929
1930 /**
1931  * snd_hda_is_supported_format - check whether the given node supports
1932  * the format val
1933  *
1934  * Returns 1 if supported, 0 if not.
1935  */
1936 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
1937                                 unsigned int format)
1938 {
1939         int i;
1940         unsigned int val = 0, rate, stream;
1941
1942         if (nid != codec->afg &&
1943             (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
1944                 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
1945                 if (val == -1)
1946                         return 0;
1947         }
1948         if (!val) {
1949                 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
1950                 if (val == -1)
1951                         return 0;
1952         }
1953
1954         rate = format & 0xff00;
1955         for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
1956                 if (rate_bits[i].hda_fmt == rate) {
1957                         if (val & (1 << i))
1958                                 break;
1959                         return 0;
1960                 }
1961         if (i >= AC_PAR_PCM_RATE_BITS)
1962                 return 0;
1963
1964         stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
1965         if (stream == -1)
1966                 return 0;
1967         if (!stream && nid != codec->afg)
1968                 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
1969         if (!stream || stream == -1)
1970                 return 0;
1971
1972         if (stream & AC_SUPFMT_PCM) {
1973                 switch (format & 0xf0) {
1974                 case 0x00:
1975                         if (!(val & AC_SUPPCM_BITS_8))
1976                                 return 0;
1977                         break;
1978                 case 0x10:
1979                         if (!(val & AC_SUPPCM_BITS_16))
1980                                 return 0;
1981                         break;
1982                 case 0x20:
1983                         if (!(val & AC_SUPPCM_BITS_20))
1984                                 return 0;
1985                         break;
1986                 case 0x30:
1987                         if (!(val & AC_SUPPCM_BITS_24))
1988                                 return 0;
1989                         break;
1990                 case 0x40:
1991                         if (!(val & AC_SUPPCM_BITS_32))
1992                                 return 0;
1993                         break;
1994                 default:
1995                         return 0;
1996                 }
1997         } else {
1998                 /* FIXME: check for float32 and AC3? */
1999         }
2000
2001         return 1;
2002 }
2003
2004 /*
2005  * PCM stuff
2006  */
2007 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2008                                       struct hda_codec *codec,
2009                                       struct snd_pcm_substream *substream)
2010 {
2011         return 0;
2012 }
2013
2014 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2015                                    struct hda_codec *codec,
2016                                    unsigned int stream_tag,
2017                                    unsigned int format,
2018                                    struct snd_pcm_substream *substream)
2019 {
2020         snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2021         return 0;
2022 }
2023
2024 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2025                                    struct hda_codec *codec,
2026                                    struct snd_pcm_substream *substream)
2027 {
2028         snd_hda_codec_setup_stream(codec, hinfo->nid, 0, 0, 0);
2029         return 0;
2030 }
2031
2032 static int __devinit set_pcm_default_values(struct hda_codec *codec,
2033                                             struct hda_pcm_stream *info)
2034 {
2035         /* query support PCM information from the given NID */
2036         if (info->nid && (!info->rates || !info->formats)) {
2037                 snd_hda_query_supported_pcm(codec, info->nid,
2038                                 info->rates ? NULL : &info->rates,
2039                                 info->formats ? NULL : &info->formats,
2040                                 info->maxbps ? NULL : &info->maxbps);
2041         }
2042         if (info->ops.open == NULL)
2043                 info->ops.open = hda_pcm_default_open_close;
2044         if (info->ops.close == NULL)
2045                 info->ops.close = hda_pcm_default_open_close;
2046         if (info->ops.prepare == NULL) {
2047                 snd_assert(info->nid, return -EINVAL);
2048                 info->ops.prepare = hda_pcm_default_prepare;
2049         }
2050         if (info->ops.cleanup == NULL) {
2051                 snd_assert(info->nid, return -EINVAL);
2052                 info->ops.cleanup = hda_pcm_default_cleanup;
2053         }
2054         return 0;
2055 }
2056
2057 /**
2058  * snd_hda_build_pcms - build PCM information
2059  * @bus: the BUS
2060  *
2061  * Create PCM information for each codec included in the bus.
2062  *
2063  * The build_pcms codec patch is requested to set up codec->num_pcms and
2064  * codec->pcm_info properly.  The array is referred by the top-level driver
2065  * to create its PCM instances.
2066  * The allocated codec->pcm_info should be released in codec->patch_ops.free
2067  * callback.
2068  *
2069  * At least, substreams, channels_min and channels_max must be filled for
2070  * each stream.  substreams = 0 indicates that the stream doesn't exist.
2071  * When rates and/or formats are zero, the supported values are queried
2072  * from the given nid.  The nid is used also by the default ops.prepare
2073  * and ops.cleanup callbacks.
2074  *
2075  * The driver needs to call ops.open in its open callback.  Similarly,
2076  * ops.close is supposed to be called in the close callback.
2077  * ops.prepare should be called in the prepare or hw_params callback
2078  * with the proper parameters for set up.
2079  * ops.cleanup should be called in hw_free for clean up of streams.
2080  *
2081  * This function returns 0 if successfull, or a negative error code.
2082  */
2083 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2084 {
2085         struct hda_codec *codec;
2086
2087         list_for_each_entry(codec, &bus->codec_list, list) {
2088                 unsigned int pcm, s;
2089                 int err;
2090                 if (!codec->patch_ops.build_pcms)
2091                         continue;
2092                 err = codec->patch_ops.build_pcms(codec);
2093                 if (err < 0)
2094                         return err;
2095                 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2096                         for (s = 0; s < 2; s++) {
2097                                 struct hda_pcm_stream *info;
2098                                 info = &codec->pcm_info[pcm].stream[s];
2099                                 if (!info->substreams)
2100                                         continue;
2101                                 err = set_pcm_default_values(codec, info);
2102                                 if (err < 0)
2103                                         return err;
2104                         }
2105                 }
2106         }
2107         return 0;
2108 }
2109
2110 /**
2111  * snd_hda_check_board_config - compare the current codec with the config table
2112  * @codec: the HDA codec
2113  * @num_configs: number of config enums
2114  * @models: array of model name strings
2115  * @tbl: configuration table, terminated by null entries
2116  *
2117  * Compares the modelname or PCI subsystem id of the current codec with the
2118  * given configuration table.  If a matching entry is found, returns its
2119  * config value (supposed to be 0 or positive).
2120  *
2121  * If no entries are matching, the function returns a negative value.
2122  */
2123 int snd_hda_check_board_config(struct hda_codec *codec,
2124                                int num_configs, const char **models,
2125                                const struct snd_pci_quirk *tbl)
2126 {
2127         if (codec->bus->modelname && models) {
2128                 int i;
2129                 for (i = 0; i < num_configs; i++) {
2130                         if (models[i] &&
2131                             !strcmp(codec->bus->modelname, models[i])) {
2132                                 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2133                                            "selected\n", models[i]);
2134                                 return i;
2135                         }
2136                 }
2137         }
2138
2139         if (!codec->bus->pci || !tbl)
2140                 return -1;
2141
2142         tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
2143         if (!tbl)
2144                 return -1;
2145         if (tbl->value >= 0 && tbl->value < num_configs) {
2146 #ifdef CONFIG_SND_DEBUG_DETECT
2147                 char tmp[10];
2148                 const char *model = NULL;
2149                 if (models)
2150                         model = models[tbl->value];
2151                 if (!model) {
2152                         sprintf(tmp, "#%d", tbl->value);
2153                         model = tmp;
2154                 }
2155                 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2156                             "for config %x:%x (%s)\n",
2157                             model, tbl->subvendor, tbl->subdevice,
2158                             (tbl->name ? tbl->name : "Unknown device"));
2159 #endif
2160                 return tbl->value;
2161         }
2162         return -1;
2163 }
2164
2165 /**
2166  * snd_hda_add_new_ctls - create controls from the array
2167  * @codec: the HDA codec
2168  * @knew: the array of struct snd_kcontrol_new
2169  *
2170  * This helper function creates and add new controls in the given array.
2171  * The array must be terminated with an empty entry as terminator.
2172  *
2173  * Returns 0 if successful, or a negative error code.
2174  */
2175 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
2176 {
2177         int err;
2178
2179         for (; knew->name; knew++) {
2180                 struct snd_kcontrol *kctl;
2181                 kctl = snd_ctl_new1(knew, codec);
2182                 if (!kctl)
2183                         return -ENOMEM;
2184                 err = snd_ctl_add(codec->bus->card, kctl);
2185                 if (err < 0) {
2186                         if (!codec->addr)
2187                                 return err;
2188                         kctl = snd_ctl_new1(knew, codec);
2189                         if (!kctl)
2190                                 return -ENOMEM;
2191                         kctl->id.device = codec->addr;
2192                         err = snd_ctl_add(codec->bus->card, kctl);
2193                         if (err < 0)
2194                                 return err;
2195                 }
2196         }
2197         return 0;
2198 }
2199
2200 #ifdef CONFIG_SND_HDA_POWER_SAVE
2201 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2202                                 unsigned int power_state);
2203
2204 static void hda_power_work(struct work_struct *work)
2205 {
2206         struct hda_codec *codec =
2207                 container_of(work, struct hda_codec, power_work.work);
2208
2209         if (!codec->power_on || codec->power_count) {
2210                 codec->power_transition = 0;
2211                 return;
2212         }
2213
2214         hda_call_codec_suspend(codec);
2215         if (codec->bus->ops.pm_notify)
2216                 codec->bus->ops.pm_notify(codec);
2217 }
2218
2219 static void hda_keep_power_on(struct hda_codec *codec)
2220 {
2221         codec->power_count++;
2222         codec->power_on = 1;
2223 }
2224
2225 void snd_hda_power_up(struct hda_codec *codec)
2226 {
2227         codec->power_count++;
2228         if (codec->power_on || codec->power_transition)
2229                 return;
2230
2231         codec->power_on = 1;
2232         if (codec->bus->ops.pm_notify)
2233                 codec->bus->ops.pm_notify(codec);
2234         hda_call_codec_resume(codec);
2235         cancel_delayed_work(&codec->power_work);
2236         codec->power_transition = 0;
2237 }
2238
2239 void snd_hda_power_down(struct hda_codec *codec)
2240 {
2241         --codec->power_count;
2242         if (!codec->power_on || codec->power_count || codec->power_transition)
2243                 return;
2244         if (power_save) {
2245                 codec->power_transition = 1; /* avoid reentrance */
2246                 schedule_delayed_work(&codec->power_work,
2247                                       msecs_to_jiffies(power_save * 1000));
2248         }
2249 }
2250
2251 int snd_hda_check_amp_list_power(struct hda_codec *codec,
2252                                  struct hda_loopback_check *check,
2253                                  hda_nid_t nid)
2254 {
2255         struct hda_amp_list *p;
2256         int ch, v;
2257
2258         if (!check->amplist)
2259                 return 0;
2260         for (p = check->amplist; p->nid; p++) {
2261                 if (p->nid == nid)
2262                         break;
2263         }
2264         if (!p->nid)
2265                 return 0; /* nothing changed */
2266
2267         for (p = check->amplist; p->nid; p++) {
2268                 for (ch = 0; ch < 2; ch++) {
2269                         v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
2270                                                    p->idx);
2271                         if (!(v & HDA_AMP_MUTE) && v > 0) {
2272                                 if (!check->power_on) {
2273                                         check->power_on = 1;
2274                                         snd_hda_power_up(codec);
2275                                 }
2276                                 return 1;
2277                         }
2278                 }
2279         }
2280         if (check->power_on) {
2281                 check->power_on = 0;
2282                 snd_hda_power_down(codec);
2283         }
2284         return 0;
2285 }
2286 #endif
2287
2288 /*
2289  * Channel mode helper
2290  */
2291 int snd_hda_ch_mode_info(struct hda_codec *codec,
2292                          struct snd_ctl_elem_info *uinfo,
2293                          const struct hda_channel_mode *chmode,
2294                          int num_chmodes)
2295 {
2296         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2297         uinfo->count = 1;
2298         uinfo->value.enumerated.items = num_chmodes;
2299         if (uinfo->value.enumerated.item >= num_chmodes)
2300                 uinfo->value.enumerated.item = num_chmodes - 1;
2301         sprintf(uinfo->value.enumerated.name, "%dch",
2302                 chmode[uinfo->value.enumerated.item].channels);
2303         return 0;
2304 }
2305
2306 int snd_hda_ch_mode_get(struct hda_codec *codec,
2307                         struct snd_ctl_elem_value *ucontrol,
2308                         const struct hda_channel_mode *chmode,
2309                         int num_chmodes,
2310                         int max_channels)
2311 {
2312         int i;
2313
2314         for (i = 0; i < num_chmodes; i++) {
2315                 if (max_channels == chmode[i].channels) {
2316                         ucontrol->value.enumerated.item[0] = i;
2317                         break;
2318                 }
2319         }
2320         return 0;
2321 }
2322
2323 int snd_hda_ch_mode_put(struct hda_codec *codec,
2324                         struct snd_ctl_elem_value *ucontrol,
2325                         const struct hda_channel_mode *chmode,
2326                         int num_chmodes,
2327                         int *max_channelsp)
2328 {
2329         unsigned int mode;
2330
2331         mode = ucontrol->value.enumerated.item[0];
2332         snd_assert(mode < num_chmodes, return -EINVAL);
2333         if (*max_channelsp == chmode[mode].channels)
2334                 return 0;
2335         /* change the current channel setting */
2336         *max_channelsp = chmode[mode].channels;
2337         if (chmode[mode].sequence)
2338                 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
2339         return 1;
2340 }
2341
2342 /*
2343  * input MUX helper
2344  */
2345 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
2346                            struct snd_ctl_elem_info *uinfo)
2347 {
2348         unsigned int index;
2349
2350         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2351         uinfo->count = 1;
2352         uinfo->value.enumerated.items = imux->num_items;
2353         if (!imux->num_items)
2354                 return 0;
2355         index = uinfo->value.enumerated.item;
2356         if (index >= imux->num_items)
2357                 index = imux->num_items - 1;
2358         strcpy(uinfo->value.enumerated.name, imux->items[index].label);
2359         return 0;
2360 }
2361
2362 int snd_hda_input_mux_put(struct hda_codec *codec,
2363                           const struct hda_input_mux *imux,
2364                           struct snd_ctl_elem_value *ucontrol,
2365                           hda_nid_t nid,
2366                           unsigned int *cur_val)
2367 {
2368         unsigned int idx;
2369
2370         if (!imux->num_items)
2371                 return 0;
2372         idx = ucontrol->value.enumerated.item[0];
2373         if (idx >= imux->num_items)
2374                 idx = imux->num_items - 1;
2375         if (*cur_val == idx)
2376                 return 0;
2377         snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
2378                                   imux->items[idx].index);
2379         *cur_val = idx;
2380         return 1;
2381 }
2382
2383
2384 /*
2385  * Multi-channel / digital-out PCM helper functions
2386  */
2387
2388 /* setup SPDIF output stream */
2389 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
2390                                  unsigned int stream_tag, unsigned int format)
2391 {
2392         /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
2393         if (codec->spdif_ctls & AC_DIG1_ENABLE)
2394                 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
2395                                     codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff);
2396         snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
2397         /* turn on again (if needed) */
2398         if (codec->spdif_ctls & AC_DIG1_ENABLE)
2399                 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
2400                                     codec->spdif_ctls & 0xff);
2401 }
2402
2403 /*
2404  * open the digital out in the exclusive mode
2405  */
2406 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
2407                                struct hda_multi_out *mout)
2408 {
2409         mutex_lock(&codec->spdif_mutex);
2410         if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
2411                 /* already opened as analog dup; reset it once */
2412                 snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 0, 0, 0);
2413         mout->dig_out_used = HDA_DIG_EXCLUSIVE;
2414         mutex_unlock(&codec->spdif_mutex);
2415         return 0;
2416 }
2417
2418 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
2419                                   struct hda_multi_out *mout,
2420                                   unsigned int stream_tag,
2421                                   unsigned int format,
2422                                   struct snd_pcm_substream *substream)
2423 {
2424         mutex_lock(&codec->spdif_mutex);
2425         setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
2426         mutex_unlock(&codec->spdif_mutex);
2427         return 0;
2428 }
2429
2430 /*
2431  * release the digital out
2432  */
2433 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
2434                                 struct hda_multi_out *mout)
2435 {
2436         mutex_lock(&codec->spdif_mutex);
2437         mout->dig_out_used = 0;
2438         mutex_unlock(&codec->spdif_mutex);
2439         return 0;
2440 }
2441
2442 /*
2443  * set up more restrictions for analog out
2444  */
2445 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
2446                                   struct hda_multi_out *mout,
2447                                   struct snd_pcm_substream *substream)
2448 {
2449         substream->runtime->hw.channels_max = mout->max_channels;
2450         return snd_pcm_hw_constraint_step(substream->runtime, 0,
2451                                           SNDRV_PCM_HW_PARAM_CHANNELS, 2);
2452 }
2453
2454 /*
2455  * set up the i/o for analog out
2456  * when the digital out is available, copy the front out to digital out, too.
2457  */
2458 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
2459                                      struct hda_multi_out *mout,
2460                                      unsigned int stream_tag,
2461                                      unsigned int format,
2462                                      struct snd_pcm_substream *substream)
2463 {
2464         hda_nid_t *nids = mout->dac_nids;
2465         int chs = substream->runtime->channels;
2466         int i;
2467
2468         mutex_lock(&codec->spdif_mutex);
2469         if (mout->dig_out_nid && mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
2470                 if (chs == 2 &&
2471                     snd_hda_is_supported_format(codec, mout->dig_out_nid,
2472                                                 format) &&
2473                     !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
2474                         mout->dig_out_used = HDA_DIG_ANALOG_DUP;
2475                         setup_dig_out_stream(codec, mout->dig_out_nid,
2476                                              stream_tag, format);
2477                 } else {
2478                         mout->dig_out_used = 0;
2479                         snd_hda_codec_setup_stream(codec, mout->dig_out_nid,
2480                                                    0, 0, 0);
2481                 }
2482         }
2483         mutex_unlock(&codec->spdif_mutex);
2484
2485         /* front */
2486         snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
2487                                    0, format);
2488         if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
2489                 /* headphone out will just decode front left/right (stereo) */
2490                 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
2491                                            0, format);
2492         /* extra outputs copied from front */
2493         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
2494                 if (mout->extra_out_nid[i])
2495                         snd_hda_codec_setup_stream(codec,
2496                                                    mout->extra_out_nid[i],
2497                                                    stream_tag, 0, format);
2498
2499         /* surrounds */
2500         for (i = 1; i < mout->num_dacs; i++) {
2501                 if (chs >= (i + 1) * 2) /* independent out */
2502                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
2503                                                    i * 2, format);
2504                 else /* copy front */
2505                         snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
2506                                                    0, format);
2507         }
2508         return 0;
2509 }
2510
2511 /*
2512  * clean up the setting for analog out
2513  */
2514 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
2515                                      struct hda_multi_out *mout)
2516 {
2517         hda_nid_t *nids = mout->dac_nids;
2518         int i;
2519
2520         for (i = 0; i < mout->num_dacs; i++)
2521                 snd_hda_codec_setup_stream(codec, nids[i], 0, 0, 0);
2522         if (mout->hp_nid)
2523                 snd_hda_codec_setup_stream(codec, mout->hp_nid, 0, 0, 0);
2524         for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
2525                 if (mout->extra_out_nid[i])
2526                         snd_hda_codec_setup_stream(codec,
2527                                                    mout->extra_out_nid[i],
2528                                                    0, 0, 0);
2529         mutex_lock(&codec->spdif_mutex);
2530         if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
2531                 snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 0, 0, 0);
2532                 mout->dig_out_used = 0;
2533         }
2534         mutex_unlock(&codec->spdif_mutex);
2535         return 0;
2536 }
2537
2538 /*
2539  * Helper for automatic ping configuration
2540  */
2541
2542 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
2543 {
2544         for (; *list; list++)
2545                 if (*list == nid)
2546                         return 1;
2547         return 0;
2548 }
2549
2550
2551 /*
2552  * Sort an associated group of pins according to their sequence numbers.
2553  */
2554 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
2555                                   int num_pins)
2556 {
2557         int i, j;
2558         short seq;
2559         hda_nid_t nid;
2560         
2561         for (i = 0; i < num_pins; i++) {
2562                 for (j = i + 1; j < num_pins; j++) {
2563                         if (sequences[i] > sequences[j]) {
2564                                 seq = sequences[i];
2565                                 sequences[i] = sequences[j];
2566                                 sequences[j] = seq;
2567                                 nid = pins[i];
2568                                 pins[i] = pins[j];
2569                                 pins[j] = nid;
2570                         }
2571                 }
2572         }
2573 }
2574
2575
2576 /*
2577  * Parse all pin widgets and store the useful pin nids to cfg
2578  *
2579  * The number of line-outs or any primary output is stored in line_outs,
2580  * and the corresponding output pins are assigned to line_out_pins[],
2581  * in the order of front, rear, CLFE, side, ...
2582  *
2583  * If more extra outputs (speaker and headphone) are found, the pins are
2584  * assisnged to hp_pins[] and speaker_pins[], respectively.  If no line-out jack
2585  * is detected, one of speaker of HP pins is assigned as the primary
2586  * output, i.e. to line_out_pins[0].  So, line_outs is always positive
2587  * if any analog output exists.
2588  * 
2589  * The analog input pins are assigned to input_pins array.
2590  * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
2591  * respectively.
2592  */
2593 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
2594                                  struct auto_pin_cfg *cfg,
2595                                  hda_nid_t *ignore_nids)
2596 {
2597         hda_nid_t nid, nid_start;
2598         int nodes;
2599         short seq, assoc_line_out, assoc_speaker;
2600         short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
2601         short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
2602
2603         memset(cfg, 0, sizeof(*cfg));
2604
2605         memset(sequences_line_out, 0, sizeof(sequences_line_out));
2606         memset(sequences_speaker, 0, sizeof(sequences_speaker));
2607         assoc_line_out = assoc_speaker = 0;
2608
2609         nodes = snd_hda_get_sub_nodes(codec, codec->afg, &nid_start);
2610         for (nid = nid_start; nid < nodes + nid_start; nid++) {
2611                 unsigned int wid_caps = get_wcaps(codec, nid);
2612                 unsigned int wid_type =
2613                         (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
2614                 unsigned int def_conf;
2615                 short assoc, loc;
2616
2617                 /* read all default configuration for pin complex */
2618                 if (wid_type != AC_WID_PIN)
2619                         continue;
2620                 /* ignore the given nids (e.g. pc-beep returns error) */
2621                 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
2622                         continue;
2623
2624                 def_conf = snd_hda_codec_read(codec, nid, 0,
2625                                               AC_VERB_GET_CONFIG_DEFAULT, 0);
2626                 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
2627                         continue;
2628                 loc = get_defcfg_location(def_conf);
2629                 switch (get_defcfg_device(def_conf)) {
2630                 case AC_JACK_LINE_OUT:
2631                         seq = get_defcfg_sequence(def_conf);
2632                         assoc = get_defcfg_association(def_conf);
2633                         if (!assoc)
2634                                 continue;
2635                         if (!assoc_line_out)
2636                                 assoc_line_out = assoc;
2637                         else if (assoc_line_out != assoc)
2638                                 continue;
2639                         if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
2640                                 continue;
2641                         cfg->line_out_pins[cfg->line_outs] = nid;
2642                         sequences_line_out[cfg->line_outs] = seq;
2643                         cfg->line_outs++;
2644                         break;
2645                 case AC_JACK_SPEAKER:
2646                         seq = get_defcfg_sequence(def_conf);
2647                         assoc = get_defcfg_association(def_conf);
2648                         if (! assoc)
2649                                 continue;
2650                         if (! assoc_speaker)
2651                                 assoc_speaker = assoc;
2652                         else if (assoc_speaker != assoc)
2653                                 continue;
2654                         if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
2655                                 continue;
2656                         cfg->speaker_pins[cfg->speaker_outs] = nid;
2657                         sequences_speaker[cfg->speaker_outs] = seq;
2658                         cfg->speaker_outs++;
2659                         break;
2660                 case AC_JACK_HP_OUT:
2661                         if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
2662                                 continue;
2663                         cfg->hp_pins[cfg->hp_outs] = nid;
2664                         cfg->hp_outs++;
2665                         break;
2666                 case AC_JACK_MIC_IN: {
2667                         int preferred, alt;
2668                         if (loc == AC_JACK_LOC_FRONT) {
2669                                 preferred = AUTO_PIN_FRONT_MIC;
2670                                 alt = AUTO_PIN_MIC;
2671                         } else {
2672                                 preferred = AUTO_PIN_MIC;
2673                                 alt = AUTO_PIN_FRONT_MIC;
2674                         }
2675                         if (!cfg->input_pins[preferred])
2676                                 cfg->input_pins[preferred] = nid;
2677                         else if (!cfg->input_pins[alt])
2678                                 cfg->input_pins[alt] = nid;
2679                         break;
2680                 }
2681                 case AC_JACK_LINE_IN:
2682                         if (loc == AC_JACK_LOC_FRONT)
2683                                 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
2684                         else
2685                                 cfg->input_pins[AUTO_PIN_LINE] = nid;
2686                         break;
2687                 case AC_JACK_CD:
2688                         cfg->input_pins[AUTO_PIN_CD] = nid;
2689                         break;
2690                 case AC_JACK_AUX:
2691                         cfg->input_pins[AUTO_PIN_AUX] = nid;
2692                         break;
2693                 case AC_JACK_SPDIF_OUT:
2694                         cfg->dig_out_pin = nid;
2695                         break;
2696                 case AC_JACK_SPDIF_IN:
2697                         cfg->dig_in_pin = nid;
2698                         break;
2699                 }
2700         }
2701
2702         /* sort by sequence */
2703         sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
2704                               cfg->line_outs);
2705         sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
2706                               cfg->speaker_outs);
2707         
2708         /*
2709          * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
2710          * as a primary output
2711          */
2712         if (!cfg->line_outs) {
2713                 if (cfg->speaker_outs) {
2714                         cfg->line_outs = cfg->speaker_outs;
2715                         memcpy(cfg->line_out_pins, cfg->speaker_pins,
2716                                sizeof(cfg->speaker_pins));
2717                         cfg->speaker_outs = 0;
2718                         memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
2719                         cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
2720                 } else if (cfg->hp_outs) {
2721                         cfg->line_outs = cfg->hp_outs;
2722                         memcpy(cfg->line_out_pins, cfg->hp_pins,
2723                                sizeof(cfg->hp_pins));
2724                         cfg->hp_outs = 0;
2725                         memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
2726                         cfg->line_out_type = AUTO_PIN_HP_OUT;
2727                 }
2728         }
2729
2730         /* Reorder the surround channels
2731          * ALSA sequence is front/surr/clfe/side
2732          * HDA sequence is:
2733          *    4-ch: front/surr  =>  OK as it is
2734          *    6-ch: front/clfe/surr
2735          *    8-ch: front/clfe/rear/side|fc
2736          */
2737         switch (cfg->line_outs) {
2738         case 3:
2739         case 4:
2740                 nid = cfg->line_out_pins[1];
2741                 cfg->line_out_pins[1] = cfg->line_out_pins[2];
2742                 cfg->line_out_pins[2] = nid;
2743                 break;
2744         }
2745
2746         /*
2747          * debug prints of the parsed results
2748          */
2749         snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
2750                    cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
2751                    cfg->line_out_pins[2], cfg->line_out_pins[3],
2752                    cfg->line_out_pins[4]);
2753         snd_printd("   speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
2754                    cfg->speaker_outs, cfg->speaker_pins[0],
2755                    cfg->speaker_pins[1], cfg->speaker_pins[2],
2756                    cfg->speaker_pins[3], cfg->speaker_pins[4]);
2757         snd_printd("   hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
2758                    cfg->hp_outs, cfg->hp_pins[0],
2759                    cfg->hp_pins[1], cfg->hp_pins[2],
2760                    cfg->hp_pins[3], cfg->hp_pins[4]);
2761         snd_printd("   inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
2762                    " cd=0x%x, aux=0x%x\n",
2763                    cfg->input_pins[AUTO_PIN_MIC],
2764                    cfg->input_pins[AUTO_PIN_FRONT_MIC],
2765                    cfg->input_pins[AUTO_PIN_LINE],
2766                    cfg->input_pins[AUTO_PIN_FRONT_LINE],
2767                    cfg->input_pins[AUTO_PIN_CD],
2768                    cfg->input_pins[AUTO_PIN_AUX]);
2769
2770         return 0;
2771 }
2772
2773 /* labels for input pins */
2774 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
2775         "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
2776 };
2777
2778
2779 #ifdef CONFIG_PM
2780 /*
2781  * power management
2782  */
2783
2784 /**
2785  * snd_hda_suspend - suspend the codecs
2786  * @bus: the HDA bus
2787  * @state: suspsend state
2788  *
2789  * Returns 0 if successful.
2790  */
2791 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
2792 {
2793         struct hda_codec *codec;
2794
2795         list_for_each_entry(codec, &bus->codec_list, list) {
2796 #ifdef CONFIG_SND_HDA_POWER_SAVE
2797                 if (!codec->power_on)
2798                         continue;
2799 #endif
2800                 hda_call_codec_suspend(codec);
2801         }
2802         return 0;
2803 }
2804
2805 /**
2806  * snd_hda_resume - resume the codecs
2807  * @bus: the HDA bus
2808  * @state: resume state
2809  *
2810  * Returns 0 if successful.
2811  *
2812  * This fucntion is defined only when POWER_SAVE isn't set.
2813  * In the power-save mode, the codec is resumed dynamically.
2814  */
2815 int snd_hda_resume(struct hda_bus *bus)
2816 {
2817         struct hda_codec *codec;
2818
2819         list_for_each_entry(codec, &bus->codec_list, list) {
2820                 if (snd_hda_codec_needs_resume(codec))
2821                         hda_call_codec_resume(codec);
2822         }
2823         return 0;
2824 }
2825 #ifdef CONFIG_SND_HDA_POWER_SAVE
2826 int snd_hda_codecs_inuse(struct hda_bus *bus)
2827 {
2828         struct hda_codec *codec;
2829
2830         list_for_each_entry(codec, &bus->codec_list, list) {
2831                 if (snd_hda_codec_needs_resume(codec))
2832                         return 1;
2833         }
2834         return 0;
2835 }
2836 #endif
2837 #endif