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