OSDN Git Service

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