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