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