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