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