Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hda_codec.c
Go to the documentation of this file.
1 /*
2  * Universal Interface for Intel High Definition Audio Codec
3  *
4  * Copyright (c) 2004 Takashi Iwai <[email protected]>
5  *
6  *
7  * This driver is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This driver is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */
21 
22 #include <linux/mm.h>
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/slab.h>
26 #include <linux/pci.h>
27 #include <linux/mutex.h>
28 #include <linux/module.h>
29 #include <sound/core.h>
30 #include "hda_codec.h"
31 #include <sound/asoundef.h>
32 #include <sound/tlv.h>
33 #include <sound/initval.h>
34 #include <sound/jack.h>
35 #include "hda_local.h"
36 #include "hda_beep.h"
37 #include "hda_jack.h"
38 #include <sound/hda_hwdep.h>
39 
40 #define CREATE_TRACE_POINTS
41 #include "hda_trace.h"
42 
43 /*
44  * vendor / preset table
45  */
46 
47 struct hda_vendor_id {
48  unsigned int id;
49  const char *name;
50 };
51 
52 /* codec vendor labels */
53 static struct hda_vendor_id hda_vendor_ids[] = {
54  { 0x1002, "ATI" },
55  { 0x1013, "Cirrus Logic" },
56  { 0x1057, "Motorola" },
57  { 0x1095, "Silicon Image" },
58  { 0x10de, "Nvidia" },
59  { 0x10ec, "Realtek" },
60  { 0x1102, "Creative" },
61  { 0x1106, "VIA" },
62  { 0x111d, "IDT" },
63  { 0x11c1, "LSI" },
64  { 0x11d4, "Analog Devices" },
65  { 0x13f6, "C-Media" },
66  { 0x14f1, "Conexant" },
67  { 0x17e8, "Chrontel" },
68  { 0x1854, "LG" },
69  { 0x1aec, "Wolfson Microelectronics" },
70  { 0x434d, "C-Media" },
71  { 0x8086, "Intel" },
72  { 0x8384, "SigmaTel" },
73  {} /* terminator */
74 };
75 
76 static DEFINE_MUTEX(preset_mutex);
77 static LIST_HEAD(hda_preset_tables);
78 
80 {
81  mutex_lock(&preset_mutex);
82  list_add_tail(&preset->list, &hda_preset_tables);
83  mutex_unlock(&preset_mutex);
84  return 0;
85 }
87 
89 {
90  mutex_lock(&preset_mutex);
91  list_del(&preset->list);
92  mutex_unlock(&preset_mutex);
93  return 0;
94 }
96 
97 #ifdef CONFIG_PM
98 #define codec_in_pm(codec) ((codec)->in_pm)
99 static void hda_power_work(struct work_struct *work);
100 static void hda_keep_power_on(struct hda_codec *codec);
101 #define hda_codec_is_power_on(codec) ((codec)->power_on)
102 static inline void hda_call_pm_notify(struct hda_bus *bus, bool power_up)
103 {
104  if (bus->ops.pm_notify)
105  bus->ops.pm_notify(bus, power_up);
106 }
107 #else
108 #define codec_in_pm(codec) 0
109 static inline void hda_keep_power_on(struct hda_codec *codec) {}
110 #define hda_codec_is_power_on(codec) 1
111 #define hda_call_pm_notify(bus, state) {}
112 #endif
113 
122 {
123  static char *bases[7] = {
124  "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
125  };
126  static unsigned char specials_idx[] = {
127  0x07, 0x08,
128  0x17, 0x18, 0x19,
129  0x37, 0x38
130  };
131  static char *specials[] = {
132  "Rear Panel", "Drive Bar",
133  "Riser", "HDMI", "ATAPI",
134  "Mobile-In", "Mobile-Out"
135  };
136  int i;
138  if ((cfg & 0x0f) < 7)
139  return bases[cfg & 0x0f];
140  for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
141  if (cfg == specials_idx[i])
142  return specials[i];
143  }
144  return "UNKNOWN";
145 }
147 
156 {
157  static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
158 
159  return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
160 }
162 
171 {
172  static char *jack_types[16] = {
173  "Line Out", "Speaker", "HP Out", "CD",
174  "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
175  "Line In", "Aux", "Mic", "Telephony",
176  "SPDIF In", "Digitial In", "Reserved", "Other"
177  };
178 
179  return jack_types[(cfg & AC_DEFCFG_DEVICE)
181 }
183 
184 /*
185  * Compose a 32bit command word to be sent to the HD-audio controller
186  */
187 static inline unsigned int
188 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
189  unsigned int verb, unsigned int parm)
190 {
191  u32 val;
192 
193  if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
194  (verb & ~0xfff) || (parm & ~0xffff)) {
195  printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
196  codec->addr, direct, nid, verb, parm);
197  return ~0;
198  }
199 
200  val = (u32)codec->addr << 28;
201  val |= (u32)direct << 27;
202  val |= (u32)nid << 20;
203  val |= verb << 8;
204  val |= parm;
205  return val;
206 }
207 
208 /*
209  * Send and receive a verb
210  */
211 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
212  unsigned int *res)
213 {
214  struct hda_bus *bus = codec->bus;
215  int err;
216 
217  if (cmd == ~0)
218  return -1;
219 
220  if (res)
221  *res = -1;
222  again:
223  snd_hda_power_up(codec);
224  mutex_lock(&bus->cmd_mutex);
225  trace_hda_send_cmd(codec, cmd);
226  err = bus->ops.command(bus, cmd);
227  if (!err && res) {
228  *res = bus->ops.get_response(bus, codec->addr);
229  trace_hda_get_response(codec, *res);
230  }
231  mutex_unlock(&bus->cmd_mutex);
232  snd_hda_power_down(codec);
233  if (!codec_in_pm(codec) && res && *res == -1 && bus->rirb_error) {
234  if (bus->response_reset) {
235  snd_printd("hda_codec: resetting BUS due to "
236  "fatal communication error\n");
237  trace_hda_bus_reset(bus);
238  bus->ops.bus_reset(bus);
239  }
240  goto again;
241  }
242  /* clear reset-flag when the communication gets recovered */
243  if (!err || codec_in_pm(codec))
244  bus->response_reset = 0;
245  return err;
246 }
247 
260 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
261  int direct,
262  unsigned int verb, unsigned int parm)
263 {
264  unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
265  unsigned int res;
266  if (codec_exec_verb(codec, cmd, &res))
267  return -1;
268  return res;
269 }
271 
284 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
285  unsigned int verb, unsigned int parm)
286 {
287  unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
288  unsigned int res;
289  return codec_exec_verb(codec, cmd,
290  codec->bus->sync_write ? &res : NULL);
291 }
293 
302 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
303 {
304  for (; seq->nid; seq++)
305  snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
306 }
308 
319  hda_nid_t *start_id)
320 {
321  unsigned int parm;
322 
323  parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
324  if (parm == -1)
325  return 0;
326  *start_id = (parm >> 16) & 0x7fff;
327  return (int)(parm & 0x7fff);
328 }
330 
331 /* look up the cached results */
332 static hda_nid_t *lookup_conn_list(struct snd_array *array, hda_nid_t nid)
333 {
334  int i, len;
335  for (i = 0; i < array->used; ) {
336  hda_nid_t *p = snd_array_elem(array, i);
337  if (nid == *p)
338  return p;
339  len = p[1];
340  i += len + 2;
341  }
342  return NULL;
343 }
344 
345 /* read the connection and add to the cache */
346 static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
347 {
349  int len;
350 
351  len = snd_hda_get_raw_connections(codec, nid, list, ARRAY_SIZE(list));
352  if (len < 0)
353  return len;
354  return snd_hda_override_conn_list(codec, nid, len, list);
355 }
356 
370  hda_nid_t *conn_list, int max_conns)
371 {
372  struct snd_array *array = &codec->conn_lists;
373  int len;
374  hda_nid_t *p;
375  bool added = false;
376 
377  again:
378  mutex_lock(&codec->hash_mutex);
379  len = -1;
380  /* if the connection-list is already cached, read it */
381  p = lookup_conn_list(array, nid);
382  if (p) {
383  len = p[1];
384  if (conn_list && len > max_conns) {
385  snd_printk(KERN_ERR "hda_codec: "
386  "Too many connections %d for NID 0x%x\n",
387  len, nid);
388  mutex_unlock(&codec->hash_mutex);
389  return -EINVAL;
390  }
391  if (conn_list && len)
392  memcpy(conn_list, p + 2, len * sizeof(hda_nid_t));
393  }
394  mutex_unlock(&codec->hash_mutex);
395  if (len >= 0)
396  return len;
397  if (snd_BUG_ON(added))
398  return -EINVAL;
399 
400  len = read_and_add_raw_conns(codec, nid);
401  if (len < 0)
402  return len;
403  added = true;
404  goto again;
405 }
407 
420  hda_nid_t *conn_list, int max_conns)
421 {
422  unsigned int parm;
423  int i, conn_len, conns;
424  unsigned int shift, num_elems, mask;
425  unsigned int wcaps;
426  hda_nid_t prev_nid;
427 
428  if (snd_BUG_ON(!conn_list || max_conns <= 0))
429  return -EINVAL;
430 
431  wcaps = get_wcaps(codec, nid);
432  if (!(wcaps & AC_WCAP_CONN_LIST) &&
433  get_wcaps_type(wcaps) != AC_WID_VOL_KNB)
434  return 0;
435 
436  parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
437  if (parm & AC_CLIST_LONG) {
438  /* long form */
439  shift = 16;
440  num_elems = 2;
441  } else {
442  /* short form */
443  shift = 8;
444  num_elems = 4;
445  }
446  conn_len = parm & AC_CLIST_LENGTH;
447  mask = (1 << (shift-1)) - 1;
448 
449  if (!conn_len)
450  return 0; /* no connection */
451 
452  if (conn_len == 1) {
453  /* single connection */
454  parm = snd_hda_codec_read(codec, nid, 0,
456  if (parm == -1 && codec->bus->rirb_error)
457  return -EIO;
458  conn_list[0] = parm & mask;
459  return 1;
460  }
461 
462  /* multi connection */
463  conns = 0;
464  prev_nid = 0;
465  for (i = 0; i < conn_len; i++) {
466  int range_val;
467  hda_nid_t val, n;
468 
469  if (i % num_elems == 0) {
470  parm = snd_hda_codec_read(codec, nid, 0,
472  if (parm == -1 && codec->bus->rirb_error)
473  return -EIO;
474  }
475  range_val = !!(parm & (1 << (shift-1))); /* ranges */
476  val = parm & mask;
477  if (val == 0) {
478  snd_printk(KERN_WARNING "hda_codec: "
479  "invalid CONNECT_LIST verb %x[%i]:%x\n",
480  nid, i, parm);
481  return 0;
482  }
483  parm >>= shift;
484  if (range_val) {
485  /* ranges between the previous and this one */
486  if (!prev_nid || prev_nid >= val) {
487  snd_printk(KERN_WARNING "hda_codec: "
488  "invalid dep_range_val %x:%x\n",
489  prev_nid, val);
490  continue;
491  }
492  for (n = prev_nid + 1; n <= val; n++) {
493  if (conns >= max_conns) {
494  snd_printk(KERN_ERR "hda_codec: "
495  "Too many connections %d for NID 0x%x\n",
496  conns, nid);
497  return -EINVAL;
498  }
499  conn_list[conns++] = n;
500  }
501  } else {
502  if (conns >= max_conns) {
503  snd_printk(KERN_ERR "hda_codec: "
504  "Too many connections %d for NID 0x%x\n",
505  conns, nid);
506  return -EINVAL;
507  }
508  conn_list[conns++] = val;
509  }
510  prev_nid = val;
511  }
512  return conns;
513 }
514 
515 static bool add_conn_list(struct snd_array *array, hda_nid_t nid)
516 {
517  hda_nid_t *p = snd_array_new(array);
518  if (!p)
519  return false;
520  *p = nid;
521  return true;
522 }
523 
536 int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
537  const hda_nid_t *list)
538 {
539  struct snd_array *array = &codec->conn_lists;
540  hda_nid_t *p;
541  int i, old_used;
542 
543  mutex_lock(&codec->hash_mutex);
544  p = lookup_conn_list(array, nid);
545  if (p)
546  *p = -1; /* invalidate the old entry */
547 
548  old_used = array->used;
549  if (!add_conn_list(array, nid) || !add_conn_list(array, len))
550  goto error_add;
551  for (i = 0; i < len; i++)
552  if (!add_conn_list(array, list[i]))
553  goto error_add;
554  mutex_unlock(&codec->hash_mutex);
555  return 0;
556 
557  error_add:
558  array->used = old_used;
559  mutex_unlock(&codec->hash_mutex);
560  return -ENOMEM;
561 }
563 
576  hda_nid_t nid, int recursive)
577 {
579  int i, nums;
580 
581  nums = snd_hda_get_connections(codec, mux, conn, ARRAY_SIZE(conn));
582  for (i = 0; i < nums; i++)
583  if (conn[i] == nid)
584  return i;
585  if (!recursive)
586  return -1;
587  if (recursive > 5) {
588  snd_printd("hda_codec: too deep connection for 0x%x\n", nid);
589  return -1;
590  }
591  recursive++;
592  for (i = 0; i < nums; i++) {
593  unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i]));
594  if (type == AC_WID_PIN || type == AC_WID_AUD_OUT)
595  continue;
596  if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0)
597  return i;
598  }
599  return -1;
600 }
602 
615 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
616 {
617  struct hda_bus_unsolicited *unsol;
618  unsigned int wp;
619 
620  trace_hda_unsol_event(bus, res, res_ex);
621  unsol = bus->unsol;
622  if (!unsol)
623  return 0;
624 
625  wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
626  unsol->wp = wp;
627 
628  wp <<= 1;
629  unsol->queue[wp] = res;
630  unsol->queue[wp + 1] = res_ex;
631 
632  queue_work(bus->workq, &unsol->work);
633 
634  return 0;
635 }
637 
638 /*
639  * process queued unsolicited events
640  */
641 static void process_unsol_events(struct work_struct *work)
642 {
643  struct hda_bus_unsolicited *unsol =
644  container_of(work, struct hda_bus_unsolicited, work);
645  struct hda_bus *bus = unsol->bus;
646  struct hda_codec *codec;
647  unsigned int rp, caddr, res;
648 
649  while (unsol->rp != unsol->wp) {
650  rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
651  unsol->rp = rp;
652  rp <<= 1;
653  res = unsol->queue[rp];
654  caddr = unsol->queue[rp + 1];
655  if (!(caddr & (1 << 4))) /* no unsolicited event? */
656  continue;
657  codec = bus->caddr_tbl[caddr & 0x0f];
658  if (codec && codec->patch_ops.unsol_event)
659  codec->patch_ops.unsol_event(codec, res);
660  }
661 }
662 
663 /*
664  * initialize unsolicited queue
665  */
666 static int init_unsol_queue(struct hda_bus *bus)
667 {
668  struct hda_bus_unsolicited *unsol;
669 
670  if (bus->unsol) /* already initialized */
671  return 0;
672 
673  unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
674  if (!unsol) {
675  snd_printk(KERN_ERR "hda_codec: "
676  "can't allocate unsolicited queue\n");
677  return -ENOMEM;
678  }
679  INIT_WORK(&unsol->work, process_unsol_events);
680  unsol->bus = bus;
681  bus->unsol = unsol;
682  return 0;
683 }
684 
685 /*
686  * destructor
687  */
688 static void snd_hda_codec_free(struct hda_codec *codec);
689 
690 static int snd_hda_bus_free(struct hda_bus *bus)
691 {
692  struct hda_codec *codec, *n;
693 
694  if (!bus)
695  return 0;
696  if (bus->workq)
697  flush_workqueue(bus->workq);
698  if (bus->unsol)
699  kfree(bus->unsol);
700  list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
701  snd_hda_codec_free(codec);
702  }
703  if (bus->ops.private_free)
704  bus->ops.private_free(bus);
705  if (bus->workq)
706  destroy_workqueue(bus->workq);
707  kfree(bus);
708  return 0;
709 }
710 
711 static int snd_hda_bus_dev_free(struct snd_device *device)
712 {
713  struct hda_bus *bus = device->device_data;
714  bus->shutdown = 1;
715  return snd_hda_bus_free(bus);
716 }
717 
718 #ifdef CONFIG_SND_HDA_HWDEP
719 static int snd_hda_bus_dev_register(struct snd_device *device)
720 {
721  struct hda_bus *bus = device->device_data;
722  struct hda_codec *codec;
723  list_for_each_entry(codec, &bus->codec_list, list) {
724  snd_hda_hwdep_add_sysfs(codec);
725  snd_hda_hwdep_add_power_sysfs(codec);
726  }
727  return 0;
728 }
729 #else
730 #define snd_hda_bus_dev_register NULL
731 #endif
732 
741 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
742  const struct hda_bus_template *temp,
743  struct hda_bus **busp)
744 {
745  struct hda_bus *bus;
746  int err;
747  static struct snd_device_ops dev_ops = {
749  .dev_free = snd_hda_bus_dev_free,
750  };
751 
752  if (snd_BUG_ON(!temp))
753  return -EINVAL;
754  if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
755  return -EINVAL;
756 
757  if (busp)
758  *busp = NULL;
759 
760  bus = kzalloc(sizeof(*bus), GFP_KERNEL);
761  if (bus == NULL) {
762  snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
763  return -ENOMEM;
764  }
765 
766  bus->card = card;
767  bus->private_data = temp->private_data;
768  bus->pci = temp->pci;
769  bus->modelname = temp->modelname;
770  bus->power_save = temp->power_save;
771  bus->ops = temp->ops;
772 
773  mutex_init(&bus->cmd_mutex);
774  mutex_init(&bus->prepare_mutex);
775  INIT_LIST_HEAD(&bus->codec_list);
776 
777  snprintf(bus->workq_name, sizeof(bus->workq_name),
778  "hd-audio%d", card->number);
780  if (!bus->workq) {
781  snd_printk(KERN_ERR "cannot create workqueue %s\n",
782  bus->workq_name);
783  kfree(bus);
784  return -ENOMEM;
785  }
786 
787  err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
788  if (err < 0) {
789  snd_hda_bus_free(bus);
790  return err;
791  }
792  if (busp)
793  *busp = bus;
794  return 0;
795 }
797 
798 #ifdef CONFIG_SND_HDA_GENERIC
799 #define is_generic_config(codec) \
800  (codec->modelname && !strcmp(codec->modelname, "generic"))
801 #else
802 #define is_generic_config(codec) 0
803 #endif
804 
805 #ifdef MODULE
806 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
807 #else
808 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
809 #endif
810 
811 /*
812  * find a matching codec preset
813  */
814 static const struct hda_codec_preset *
815 find_codec_preset(struct hda_codec *codec)
816 {
817  struct hda_codec_preset_list *tbl;
818  const struct hda_codec_preset *preset;
819  unsigned int mod_requested = 0;
820 
821  if (is_generic_config(codec))
822  return NULL; /* use the generic parser */
823 
824  again:
825  mutex_lock(&preset_mutex);
826  list_for_each_entry(tbl, &hda_preset_tables, list) {
827  if (!try_module_get(tbl->owner)) {
828  snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
829  continue;
830  }
831  for (preset = tbl->preset; preset->id; preset++) {
832  u32 mask = preset->mask;
833  if (preset->afg && preset->afg != codec->afg)
834  continue;
835  if (preset->mfg && preset->mfg != codec->mfg)
836  continue;
837  if (!mask)
838  mask = ~0;
839  if (preset->id == (codec->vendor_id & mask) &&
840  (!preset->rev ||
841  preset->rev == codec->revision_id)) {
842  mutex_unlock(&preset_mutex);
843  codec->owner = tbl->owner;
844  return preset;
845  }
846  }
847  module_put(tbl->owner);
848  }
849  mutex_unlock(&preset_mutex);
850 
851  if (mod_requested < HDA_MODREQ_MAX_COUNT) {
852  char name[32];
853  if (!mod_requested)
854  snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
855  codec->vendor_id);
856  else
857  snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
858  (codec->vendor_id >> 16) & 0xffff);
859  request_module(name);
860  mod_requested++;
861  goto again;
862  }
863  return NULL;
864 }
865 
866 /*
867  * get_codec_name - store the codec name
868  */
869 static int get_codec_name(struct hda_codec *codec)
870 {
871  const struct hda_vendor_id *c;
872  const char *vendor = NULL;
873  u16 vendor_id = codec->vendor_id >> 16;
874  char tmp[16];
875 
876  if (codec->vendor_name)
877  goto get_chip_name;
878 
879  for (c = hda_vendor_ids; c->id; c++) {
880  if (c->id == vendor_id) {
881  vendor = c->name;
882  break;
883  }
884  }
885  if (!vendor) {
886  sprintf(tmp, "Generic %04x", vendor_id);
887  vendor = tmp;
888  }
889  codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
890  if (!codec->vendor_name)
891  return -ENOMEM;
892 
893  get_chip_name:
894  if (codec->chip_name)
895  return 0;
896 
897  if (codec->preset && codec->preset->name)
898  codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
899  else {
900  sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
901  codec->chip_name = kstrdup(tmp, GFP_KERNEL);
902  }
903  if (!codec->chip_name)
904  return -ENOMEM;
905  return 0;
906 }
907 
908 /*
909  * look for an AFG and MFG nodes
910  */
911 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
912 {
913  int i, total_nodes, function_id;
914  hda_nid_t nid;
915 
916  total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
917  for (i = 0; i < total_nodes; i++, nid++) {
918  function_id = snd_hda_param_read(codec, nid,
920  switch (function_id & 0xff) {
922  codec->afg = nid;
923  codec->afg_function_id = function_id & 0xff;
924  codec->afg_unsol = (function_id >> 8) & 1;
925  break;
927  codec->mfg = nid;
928  codec->mfg_function_id = function_id & 0xff;
929  codec->mfg_unsol = (function_id >> 8) & 1;
930  break;
931  default:
932  break;
933  }
934  }
935 }
936 
937 /*
938  * read widget caps for each widget and store in cache
939  */
940 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
941 {
942  int i;
943  hda_nid_t nid;
944 
945  codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
946  &codec->start_nid);
947  codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
948  if (!codec->wcaps)
949  return -ENOMEM;
950  nid = codec->start_nid;
951  for (i = 0; i < codec->num_nodes; i++, nid++)
952  codec->wcaps[i] = snd_hda_param_read(codec, nid,
954  return 0;
955 }
956 
957 /* read all pin default configurations and save codec->init_pins */
958 static int read_pin_defaults(struct hda_codec *codec)
959 {
960  int i;
961  hda_nid_t nid = codec->start_nid;
962 
963  for (i = 0; i < codec->num_nodes; i++, nid++) {
964  struct hda_pincfg *pin;
965  unsigned int wcaps = get_wcaps(codec, nid);
966  unsigned int wid_type = get_wcaps_type(wcaps);
967  if (wid_type != AC_WID_PIN)
968  continue;
969  pin = snd_array_new(&codec->init_pins);
970  if (!pin)
971  return -ENOMEM;
972  pin->nid = nid;
973  pin->cfg = snd_hda_codec_read(codec, nid, 0,
975  pin->ctrl = snd_hda_codec_read(codec, nid, 0,
977  0);
978  }
979  return 0;
980 }
981 
982 /* look up the given pin config list and return the item matching with NID */
983 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
984  struct snd_array *array,
985  hda_nid_t nid)
986 {
987  int i;
988  for (i = 0; i < array->used; i++) {
989  struct hda_pincfg *pin = snd_array_elem(array, i);
990  if (pin->nid == nid)
991  return pin;
992  }
993  return NULL;
994 }
995 
996 /* write a config value for the given NID */
997 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
998  unsigned int cfg)
999 {
1000  int i;
1001  for (i = 0; i < 4; i++) {
1002  snd_hda_codec_write(codec, nid, 0,
1004  cfg & 0xff);
1005  cfg >>= 8;
1006  }
1007 }
1008 
1009 /* set the current pin config value for the given NID.
1010  * the value is cached, and read via snd_hda_codec_get_pincfg()
1011  */
1012 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
1013  hda_nid_t nid, unsigned int cfg)
1014 {
1015  struct hda_pincfg *pin;
1016  unsigned int oldcfg;
1017 
1018  if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
1019  return -EINVAL;
1020 
1021  oldcfg = snd_hda_codec_get_pincfg(codec, nid);
1022  pin = look_up_pincfg(codec, list, nid);
1023  if (!pin) {
1024  pin = snd_array_new(list);
1025  if (!pin)
1026  return -ENOMEM;
1027  pin->nid = nid;
1028  }
1029  pin->cfg = cfg;
1030 
1031  /* change only when needed; e.g. if the pincfg is already present
1032  * in user_pins[], don't write it
1033  */
1034  cfg = snd_hda_codec_get_pincfg(codec, nid);
1035  if (oldcfg != cfg)
1036  set_pincfg(codec, nid, cfg);
1037  return 0;
1038 }
1039 
1051  hda_nid_t nid, unsigned int cfg)
1052 {
1053  return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
1054 }
1056 
1066 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
1067 {
1068  struct hda_pincfg *pin;
1069 
1070 #ifdef CONFIG_SND_HDA_HWDEP
1071  pin = look_up_pincfg(codec, &codec->user_pins, nid);
1072  if (pin)
1073  return pin->cfg;
1074 #endif
1075  pin = look_up_pincfg(codec, &codec->driver_pins, nid);
1076  if (pin)
1077  return pin->cfg;
1078  pin = look_up_pincfg(codec, &codec->init_pins, nid);
1079  if (pin)
1080  return pin->cfg;
1081  return 0;
1082 }
1084 
1085 /* restore all current pin configs */
1086 static void restore_pincfgs(struct hda_codec *codec)
1087 {
1088  int i;
1089  for (i = 0; i < codec->init_pins.used; i++) {
1090  struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1091  set_pincfg(codec, pin->nid,
1092  snd_hda_codec_get_pincfg(codec, pin->nid));
1093  }
1094 }
1095 
1103 void snd_hda_shutup_pins(struct hda_codec *codec)
1104 {
1105  int i;
1106  /* don't shut up pins when unloading the driver; otherwise it breaks
1107  * the default pin setup at the next load of the driver
1108  */
1109  if (codec->bus->shutdown)
1110  return;
1111  for (i = 0; i < codec->init_pins.used; i++) {
1112  struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1113  /* use read here for syncing after issuing each verb */
1114  snd_hda_codec_read(codec, pin->nid, 0,
1116  }
1117  codec->pins_shutup = 1;
1118 }
1120 
1121 #ifdef CONFIG_PM
1122 /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
1123 static void restore_shutup_pins(struct hda_codec *codec)
1124 {
1125  int i;
1126  if (!codec->pins_shutup)
1127  return;
1128  if (codec->bus->shutdown)
1129  return;
1130  for (i = 0; i < codec->init_pins.used; i++) {
1131  struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1132  snd_hda_codec_write(codec, pin->nid, 0,
1134  pin->ctrl);
1135  }
1136  codec->pins_shutup = 0;
1137 }
1138 #endif
1139 
1140 static void init_hda_cache(struct hda_cache_rec *cache,
1141  unsigned int record_size);
1142 static void free_hda_cache(struct hda_cache_rec *cache);
1143 
1144 /* restore the initial pin cfgs and release all pincfg lists */
1145 static void restore_init_pincfgs(struct hda_codec *codec)
1146 {
1147  /* first free driver_pins and user_pins, then call restore_pincfg
1148  * so that only the values in init_pins are restored
1149  */
1150  snd_array_free(&codec->driver_pins);
1151 #ifdef CONFIG_SND_HDA_HWDEP
1152  snd_array_free(&codec->user_pins);
1153 #endif
1154  restore_pincfgs(codec);
1155  snd_array_free(&codec->init_pins);
1156 }
1157 
1158 /*
1159  * audio-converter setup caches
1160  */
1166  unsigned char active; /* cvt is currently used */
1167  unsigned char dirty; /* setups should be cleared */
1168 };
1169 
1170 /* get or create a cache entry for the given audio converter NID */
1171 static struct hda_cvt_setup *
1172 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
1173 {
1174  struct hda_cvt_setup *p;
1175  int i;
1176 
1177  for (i = 0; i < codec->cvt_setups.used; i++) {
1178  p = snd_array_elem(&codec->cvt_setups, i);
1179  if (p->nid == nid)
1180  return p;
1181  }
1182  p = snd_array_new(&codec->cvt_setups);
1183  if (p)
1184  p->nid = nid;
1185  return p;
1186 }
1187 
1188 /*
1189  * codec destructor
1190  */
1191 static void snd_hda_codec_free(struct hda_codec *codec)
1192 {
1193  if (!codec)
1194  return;
1195  snd_hda_jack_tbl_clear(codec);
1196  restore_init_pincfgs(codec);
1197 #ifdef CONFIG_PM
1198  cancel_delayed_work(&codec->power_work);
1199  flush_workqueue(codec->bus->workq);
1200 #endif
1201  list_del(&codec->list);
1202  snd_array_free(&codec->mixers);
1203  snd_array_free(&codec->nids);
1204  snd_array_free(&codec->cvt_setups);
1205  snd_array_free(&codec->conn_lists);
1206  snd_array_free(&codec->spdif_out);
1207  codec->bus->caddr_tbl[codec->addr] = NULL;
1208  if (codec->patch_ops.free)
1209  codec->patch_ops.free(codec);
1210 #ifdef CONFIG_PM
1211  if (!codec->pm_down_notified) /* cancel leftover refcounts */
1212  hda_call_pm_notify(codec->bus, false);
1213 #endif
1214  module_put(codec->owner);
1215  free_hda_cache(&codec->amp_cache);
1216  free_hda_cache(&codec->cmd_cache);
1217  kfree(codec->vendor_name);
1218  kfree(codec->chip_name);
1219  kfree(codec->modelname);
1220  kfree(codec->wcaps);
1221  kfree(codec);
1222 }
1223 
1224 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec,
1225  hda_nid_t fg, unsigned int power_state);
1226 
1227 static unsigned int hda_set_power_state(struct hda_codec *codec,
1228  unsigned int power_state);
1229 
1238 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
1239  unsigned int codec_addr,
1240  struct hda_codec **codecp)
1241 {
1242  struct hda_codec *codec;
1243  char component[31];
1244  hda_nid_t fg;
1245  int err;
1246 
1247  if (snd_BUG_ON(!bus))
1248  return -EINVAL;
1249  if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1250  return -EINVAL;
1251 
1252  if (bus->caddr_tbl[codec_addr]) {
1253  snd_printk(KERN_ERR "hda_codec: "
1254  "address 0x%x is already occupied\n", codec_addr);
1255  return -EBUSY;
1256  }
1257 
1258  codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1259  if (codec == NULL) {
1260  snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1261  return -ENOMEM;
1262  }
1263 
1264  codec->bus = bus;
1265  codec->addr = codec_addr;
1266  mutex_init(&codec->spdif_mutex);
1267  mutex_init(&codec->control_mutex);
1268  mutex_init(&codec->hash_mutex);
1269  init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1270  init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1271  snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1272  snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1273  snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1274  snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1275  snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1276  snd_array_init(&codec->conn_lists, sizeof(hda_nid_t), 64);
1277  snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
1278 
1279 #ifdef CONFIG_PM
1280  spin_lock_init(&codec->power_lock);
1281  INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1282  /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1283  * the caller has to power down appropriatley after initialization
1284  * phase.
1285  */
1286  hda_keep_power_on(codec);
1287  hda_call_pm_notify(bus, true);
1288 #endif
1289 
1290  if (codec->bus->modelname) {
1291  codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1292  if (!codec->modelname) {
1293  snd_hda_codec_free(codec);
1294  return -ENODEV;
1295  }
1296  }
1297 
1298  list_add_tail(&codec->list, &bus->codec_list);
1299  bus->caddr_tbl[codec_addr] = codec;
1300 
1301  codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1303  if (codec->vendor_id == -1)
1304  /* read again, hopefully the access method was corrected
1305  * in the last read...
1306  */
1307  codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1312  AC_PAR_REV_ID);
1313 
1314  setup_fg_nodes(codec);
1315  if (!codec->afg && !codec->mfg) {
1316  snd_printdd("hda_codec: no AFG or MFG node found\n");
1317  err = -ENODEV;
1318  goto error;
1319  }
1320 
1321  fg = codec->afg ? codec->afg : codec->mfg;
1322  err = read_widget_caps(codec, fg);
1323  if (err < 0) {
1324  snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1325  goto error;
1326  }
1327  err = read_pin_defaults(codec);
1328  if (err < 0)
1329  goto error;
1330 
1331  if (!codec->subsystem_id) {
1332  codec->subsystem_id =
1333  snd_hda_codec_read(codec, fg, 0,
1335  }
1336 
1337 #ifdef CONFIG_PM
1338  codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec, fg,
1340  if (!codec->d3_stop_clk)
1341  bus->power_keep_link_on = 1;
1342 #endif
1343  codec->epss = snd_hda_codec_get_supported_ps(codec, fg,
1344  AC_PWRST_EPSS);
1345 
1346  /* power-up all before initialization */
1347  hda_set_power_state(codec, AC_PWRST_D0);
1348 
1349  snd_hda_codec_proc_new(codec);
1350 
1351  snd_hda_create_hwdep(codec);
1352 
1353  sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1354  codec->subsystem_id, codec->revision_id);
1355  snd_component_add(codec->bus->card, component);
1356 
1357  if (codecp)
1358  *codecp = codec;
1359  return 0;
1360 
1361  error:
1362  snd_hda_codec_free(codec);
1363  return err;
1364 }
1366 
1377 {
1378  int err;
1379 
1380  codec->preset = find_codec_preset(codec);
1381  if (!codec->vendor_name || !codec->chip_name) {
1382  err = get_codec_name(codec);
1383  if (err < 0)
1384  return err;
1385  }
1386 
1387  if (is_generic_config(codec)) {
1388  err = snd_hda_parse_generic_codec(codec);
1389  goto patched;
1390  }
1391  if (codec->preset && codec->preset->patch) {
1392  err = codec->preset->patch(codec);
1393  goto patched;
1394  }
1395 
1396  /* call the default parser */
1397  err = snd_hda_parse_generic_codec(codec);
1398  if (err < 0)
1399  printk(KERN_ERR "hda-codec: No codec parser is available\n");
1400 
1401  patched:
1402  if (!err && codec->patch_ops.unsol_event)
1403  err = init_unsol_queue(codec->bus);
1404  /* audio codec should override the mixer name */
1405  if (!err && (codec->afg || !*codec->bus->card->mixername))
1406  snprintf(codec->bus->card->mixername,
1407  sizeof(codec->bus->card->mixername),
1408  "%s %s", codec->vendor_name, codec->chip_name);
1409  return err;
1410 }
1412 
1413 /* update the stream-id if changed */
1414 static void update_pcm_stream_id(struct hda_codec *codec,
1415  struct hda_cvt_setup *p, hda_nid_t nid,
1416  u32 stream_tag, int channel_id)
1417 {
1418  unsigned int oldval, newval;
1419 
1420  if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1421  oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1422  newval = (stream_tag << 4) | channel_id;
1423  if (oldval != newval)
1424  snd_hda_codec_write(codec, nid, 0,
1426  newval);
1427  p->stream_tag = stream_tag;
1428  p->channel_id = channel_id;
1429  }
1430 }
1431 
1432 /* update the format-id if changed */
1433 static void update_pcm_format(struct hda_codec *codec, struct hda_cvt_setup *p,
1434  hda_nid_t nid, int format)
1435 {
1436  unsigned int oldval;
1437 
1438  if (p->format_id != format) {
1439  oldval = snd_hda_codec_read(codec, nid, 0,
1441  if (oldval != format) {
1442  msleep(1);
1443  snd_hda_codec_write(codec, nid, 0,
1445  format);
1446  }
1447  p->format_id = format;
1448  }
1449 }
1450 
1460  u32 stream_tag,
1461  int channel_id, int format)
1462 {
1463  struct hda_codec *c;
1464  struct hda_cvt_setup *p;
1465  int type;
1466  int i;
1467 
1468  if (!nid)
1469  return;
1470 
1471  snd_printdd("hda_codec_setup_stream: "
1472  "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1473  nid, stream_tag, channel_id, format);
1474  p = get_hda_cvt_setup(codec, nid);
1475  if (!p)
1476  return;
1477 
1478  if (codec->pcm_format_first)
1479  update_pcm_format(codec, p, nid, format);
1480  update_pcm_stream_id(codec, p, nid, stream_tag, channel_id);
1481  if (!codec->pcm_format_first)
1482  update_pcm_format(codec, p, nid, format);
1483 
1484  p->active = 1;
1485  p->dirty = 0;
1486 
1487  /* make other inactive cvts with the same stream-tag dirty */
1488  type = get_wcaps_type(get_wcaps(codec, nid));
1489  list_for_each_entry(c, &codec->bus->codec_list, list) {
1490  for (i = 0; i < c->cvt_setups.used; i++) {
1491  p = snd_array_elem(&c->cvt_setups, i);
1492  if (!p->active && p->stream_tag == stream_tag &&
1493  get_wcaps_type(get_wcaps(c, p->nid)) == type)
1494  p->dirty = 1;
1495  }
1496  }
1497 }
1499 
1500 static void really_cleanup_stream(struct hda_codec *codec,
1501  struct hda_cvt_setup *q);
1502 
1510  int do_now)
1511 {
1512  struct hda_cvt_setup *p;
1513 
1514  if (!nid)
1515  return;
1516 
1517  if (codec->no_sticky_stream)
1518  do_now = 1;
1519 
1520  snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1521  p = get_hda_cvt_setup(codec, nid);
1522  if (p) {
1523  /* here we just clear the active flag when do_now isn't set;
1524  * actual clean-ups will be done later in
1525  * purify_inactive_streams() called from snd_hda_codec_prpapre()
1526  */
1527  if (do_now)
1528  really_cleanup_stream(codec, p);
1529  else
1530  p->active = 0;
1531  }
1532 }
1534 
1535 static void really_cleanup_stream(struct hda_codec *codec,
1536  struct hda_cvt_setup *q)
1537 {
1538  hda_nid_t nid = q->nid;
1539  if (q->stream_tag || q->channel_id)
1541  if (q->format_id)
1543 );
1544  memset(q, 0, sizeof(*q));
1545  q->nid = nid;
1546 }
1547 
1548 /* clean up the all conflicting obsolete streams */
1549 static void purify_inactive_streams(struct hda_codec *codec)
1550 {
1551  struct hda_codec *c;
1552  int i;
1553 
1554  list_for_each_entry(c, &codec->bus->codec_list, list) {
1555  for (i = 0; i < c->cvt_setups.used; i++) {
1556  struct hda_cvt_setup *p;
1557  p = snd_array_elem(&c->cvt_setups, i);
1558  if (p->dirty)
1559  really_cleanup_stream(c, p);
1560  }
1561  }
1562 }
1563 
1564 #ifdef CONFIG_PM
1565 /* clean up all streams; called from suspend */
1566 static void hda_cleanup_all_streams(struct hda_codec *codec)
1567 {
1568  int i;
1569 
1570  for (i = 0; i < codec->cvt_setups.used; i++) {
1571  struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1572  if (p->stream_tag)
1573  really_cleanup_stream(codec, p);
1574  }
1575 }
1576 #endif
1577 
1578 /*
1579  * amp access functions
1580  */
1581 
1582 /* FIXME: more better hash key? */
1583 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1584 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1585 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1586 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1587 #define INFO_AMP_CAPS (1<<0)
1588 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1589 
1590 /* initialize the hash table */
1591 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1592  unsigned int record_size)
1593 {
1594  memset(cache, 0, sizeof(*cache));
1595  memset(cache->hash, 0xff, sizeof(cache->hash));
1596  snd_array_init(&cache->buf, record_size, 64);
1597 }
1598 
1599 static void free_hda_cache(struct hda_cache_rec *cache)
1600 {
1601  snd_array_free(&cache->buf);
1602 }
1603 
1604 /* query the hash. allocate an entry if not found. */
1605 static struct hda_cache_head *get_hash(struct hda_cache_rec *cache, u32 key)
1606 {
1607  u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1608  u16 cur = cache->hash[idx];
1609  struct hda_cache_head *info;
1610 
1611  while (cur != 0xffff) {
1612  info = snd_array_elem(&cache->buf, cur);
1613  if (info->key == key)
1614  return info;
1615  cur = info->next;
1616  }
1617  return NULL;
1618 }
1619 
1620 /* query the hash. allocate an entry if not found. */
1621 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1622  u32 key)
1623 {
1624  struct hda_cache_head *info = get_hash(cache, key);
1625  if (!info) {
1626  u16 idx, cur;
1627  /* add a new hash entry */
1628  info = snd_array_new(&cache->buf);
1629  if (!info)
1630  return NULL;
1631  cur = snd_array_index(&cache->buf, info);
1632  info->key = key;
1633  info->val = 0;
1634  idx = key % (u16)ARRAY_SIZE(cache->hash);
1635  info->next = cache->hash[idx];
1636  cache->hash[idx] = cur;
1637  }
1638  return info;
1639 }
1640 
1641 /* query and allocate an amp hash entry */
1642 static inline struct hda_amp_info *
1643 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1644 {
1645  return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1646 }
1647 
1648 /* overwrite the value with the key in the caps hash */
1649 static int write_caps_hash(struct hda_codec *codec, u32 key, unsigned int val)
1650 {
1651  struct hda_amp_info *info;
1652 
1653  mutex_lock(&codec->hash_mutex);
1654  info = get_alloc_amp_hash(codec, key);
1655  if (!info) {
1656  mutex_unlock(&codec->hash_mutex);
1657  return -EINVAL;
1658  }
1659  info->amp_caps = val;
1660  info->head.val |= INFO_AMP_CAPS;
1661  mutex_unlock(&codec->hash_mutex);
1662  return 0;
1663 }
1664 
1665 /* query the value from the caps hash; if not found, fetch the current
1666  * value from the given function and store in the hash
1667  */
1668 static unsigned int
1669 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, int dir, u32 key,
1670  unsigned int (*func)(struct hda_codec *, hda_nid_t, int))
1671 {
1672  struct hda_amp_info *info;
1673  unsigned int val;
1674 
1675  mutex_lock(&codec->hash_mutex);
1676  info = get_alloc_amp_hash(codec, key);
1677  if (!info) {
1678  mutex_unlock(&codec->hash_mutex);
1679  return 0;
1680  }
1681  if (!(info->head.val & INFO_AMP_CAPS)) {
1682  mutex_unlock(&codec->hash_mutex); /* for reentrance */
1683  val = func(codec, nid, dir);
1684  write_caps_hash(codec, key, val);
1685  } else {
1686  val = info->amp_caps;
1687  mutex_unlock(&codec->hash_mutex);
1688  }
1689  return val;
1690 }
1691 
1692 static unsigned int read_amp_cap(struct hda_codec *codec, hda_nid_t nid,
1693  int direction)
1694 {
1695  if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1696  nid = codec->afg;
1697  return snd_hda_param_read(codec, nid,
1698  direction == HDA_OUTPUT ?
1700 }
1701 
1714 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1715 {
1716  return query_caps_hash(codec, nid, direction,
1717  HDA_HASH_KEY(nid, direction, 0),
1718  read_amp_cap);
1719 }
1721 
1735 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1736  unsigned int caps)
1737 {
1738  return write_caps_hash(codec, HDA_HASH_KEY(nid, dir, 0), caps);
1739 }
1741 
1742 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid,
1743  int dir)
1744 {
1745  return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1746 }
1747 
1760 {
1761  return query_caps_hash(codec, nid, 0, HDA_HASH_PINCAP_KEY(nid),
1762  read_pin_cap);
1763 }
1765 
1777  unsigned int caps)
1778 {
1779  return write_caps_hash(codec, HDA_HASH_PINCAP_KEY(nid), caps);
1780 }
1782 
1783 /* read or sync the hash value with the current value;
1784  * call within hash_mutex
1785  */
1786 static struct hda_amp_info *
1787 update_amp_hash(struct hda_codec *codec, hda_nid_t nid, int ch,
1788  int direction, int index)
1789 {
1790  struct hda_amp_info *info;
1791  unsigned int parm, val = 0;
1792  bool val_read = false;
1793 
1794  retry:
1795  info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1796  if (!info)
1797  return NULL;
1798  if (!(info->head.val & INFO_AMP_VOL(ch))) {
1799  if (!val_read) {
1800  mutex_unlock(&codec->hash_mutex);
1801  parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1802  parm |= direction == HDA_OUTPUT ?
1804  parm |= index;
1805  val = snd_hda_codec_read(codec, nid, 0,
1807  val &= 0xff;
1808  val_read = true;
1809  mutex_lock(&codec->hash_mutex);
1810  goto retry;
1811  }
1812  info->vol[ch] = val;
1813  info->head.val |= INFO_AMP_VOL(ch);
1814  }
1815  return info;
1816 }
1817 
1818 /*
1819  * write the current volume in info to the h/w
1820  */
1821 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1822  hda_nid_t nid, int ch, int direction, int index,
1823  int val)
1824 {
1825  u32 parm;
1826 
1827  parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1828  parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1829  parm |= index << AC_AMP_SET_INDEX_SHIFT;
1830  if ((val & HDA_AMP_MUTE) && !(info->amp_caps & AC_AMPCAP_MUTE) &&
1831  (info->amp_caps & AC_AMPCAP_MIN_MUTE))
1832  ; /* set the zero value as a fake mute */
1833  else
1834  parm |= val;
1835  snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1836 }
1837 
1848 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1849  int direction, int index)
1850 {
1851  struct hda_amp_info *info;
1852  unsigned int val = 0;
1853 
1854  mutex_lock(&codec->hash_mutex);
1855  info = update_amp_hash(codec, nid, ch, direction, index);
1856  if (info)
1857  val = info->vol[ch];
1858  mutex_unlock(&codec->hash_mutex);
1859  return val;
1860 }
1862 
1876 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1877  int direction, int idx, int mask, int val)
1878 {
1879  struct hda_amp_info *info;
1880 
1881  if (snd_BUG_ON(mask & ~0xff))
1882  mask &= 0xff;
1883  val &= mask;
1884 
1885  mutex_lock(&codec->hash_mutex);
1886  info = update_amp_hash(codec, nid, ch, direction, idx);
1887  if (!info) {
1888  mutex_unlock(&codec->hash_mutex);
1889  return 0;
1890  }
1891  val |= info->vol[ch] & ~mask;
1892  if (info->vol[ch] == val) {
1893  mutex_unlock(&codec->hash_mutex);
1894  return 0;
1895  }
1896  info->vol[ch] = val;
1897  mutex_unlock(&codec->hash_mutex);
1898  put_vol_mute(codec, info, nid, ch, direction, idx, val);
1899  return 1;
1900 }
1902 
1916  int direction, int idx, int mask, int val)
1917 {
1918  int ch, ret = 0;
1919 
1920  if (snd_BUG_ON(mask & ~0xff))
1921  mask &= 0xff;
1922  for (ch = 0; ch < 2; ch++)
1923  ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1924  idx, mask, val);
1925  return ret;
1926 }
1928 
1929 #ifdef CONFIG_PM
1930 
1936 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1937 {
1938  struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1939  int i;
1940 
1941  for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1942  u32 key = buffer->head.key;
1943  hda_nid_t nid;
1944  unsigned int idx, dir, ch;
1945  if (!key)
1946  continue;
1947  nid = key & 0xff;
1948  idx = (key >> 16) & 0xff;
1949  dir = (key >> 24) & 0xff;
1950  for (ch = 0; ch < 2; ch++) {
1951  if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1952  continue;
1953  put_vol_mute(codec, buffer, nid, ch, dir, idx,
1954  buffer->vol[ch]);
1955  }
1956  }
1957 }
1958 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1959 #endif /* CONFIG_PM */
1960 
1961 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
1962  unsigned int ofs)
1963 {
1964  u32 caps = query_amp_caps(codec, nid, dir);
1965  /* get num steps */
1967  if (ofs < caps)
1968  caps -= ofs;
1969  return caps;
1970 }
1971 
1979  struct snd_ctl_elem_info *uinfo)
1980 {
1981  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1982  u16 nid = get_amp_nid(kcontrol);
1983  u8 chs = get_amp_channels(kcontrol);
1984  int dir = get_amp_direction(kcontrol);
1985  unsigned int ofs = get_amp_offset(kcontrol);
1986 
1988  uinfo->count = chs == 3 ? 2 : 1;
1989  uinfo->value.integer.min = 0;
1990  uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
1991  if (!uinfo->value.integer.max) {
1992  printk(KERN_WARNING "hda_codec: "
1993  "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1994  kcontrol->id.name);
1995  return -EINVAL;
1996  }
1997  return 0;
1998 }
2000 
2001 
2002 static inline unsigned int
2003 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
2004  int ch, int dir, int idx, unsigned int ofs)
2005 {
2006  unsigned int val;
2007  val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
2008  val &= HDA_AMP_VOLMASK;
2009  if (val >= ofs)
2010  val -= ofs;
2011  else
2012  val = 0;
2013  return val;
2014 }
2015 
2016 static inline int
2017 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
2018  int ch, int dir, int idx, unsigned int ofs,
2019  unsigned int val)
2020 {
2021  unsigned int maxval;
2022 
2023  if (val > 0)
2024  val += ofs;
2025  /* ofs = 0: raw max value */
2026  maxval = get_amp_max_value(codec, nid, dir, 0);
2027  if (val > maxval)
2028  val = maxval;
2029  return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
2030  HDA_AMP_VOLMASK, val);
2031 }
2032 
2040  struct snd_ctl_elem_value *ucontrol)
2041 {
2042  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2043  hda_nid_t nid = get_amp_nid(kcontrol);
2044  int chs = get_amp_channels(kcontrol);
2045  int dir = get_amp_direction(kcontrol);
2046  int idx = get_amp_index(kcontrol);
2047  unsigned int ofs = get_amp_offset(kcontrol);
2048  long *valp = ucontrol->value.integer.value;
2049 
2050  if (chs & 1)
2051  *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
2052  if (chs & 2)
2053  *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
2054  return 0;
2055 }
2057 
2065  struct snd_ctl_elem_value *ucontrol)
2066 {
2067  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2068  hda_nid_t nid = get_amp_nid(kcontrol);
2069  int chs = get_amp_channels(kcontrol);
2070  int dir = get_amp_direction(kcontrol);
2071  int idx = get_amp_index(kcontrol);
2072  unsigned int ofs = get_amp_offset(kcontrol);
2073  long *valp = ucontrol->value.integer.value;
2074  int change = 0;
2075 
2076  snd_hda_power_up(codec);
2077  if (chs & 1) {
2078  change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
2079  valp++;
2080  }
2081  if (chs & 2)
2082  change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
2083  snd_hda_power_down(codec);
2084  return change;
2085 }
2087 
2094 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2095  unsigned int size, unsigned int __user *_tlv)
2096 {
2097  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2098  hda_nid_t nid = get_amp_nid(kcontrol);
2099  int dir = get_amp_direction(kcontrol);
2100  unsigned int ofs = get_amp_offset(kcontrol);
2101  bool min_mute = get_amp_min_mute(kcontrol);
2102  u32 caps, val1, val2;
2103 
2104  if (size < 4 * sizeof(unsigned int))
2105  return -ENOMEM;
2106  caps = query_amp_caps(codec, nid, dir);
2108  val2 = (val2 + 1) * 25;
2109  val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
2110  val1 += ofs;
2111  val1 = ((int)val1) * ((int)val2);
2112  if (min_mute || (caps & AC_AMPCAP_MIN_MUTE))
2113  val2 |= TLV_DB_SCALE_MUTE;
2114  if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
2115  return -EFAULT;
2116  if (put_user(2 * sizeof(unsigned int), _tlv + 1))
2117  return -EFAULT;
2118  if (put_user(val1, _tlv + 2))
2119  return -EFAULT;
2120  if (put_user(val2, _tlv + 3))
2121  return -EFAULT;
2122  return 0;
2123 }
2125 
2137 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
2138  unsigned int *tlv)
2139 {
2140  u32 caps;
2141  int nums, step;
2142 
2143  caps = query_amp_caps(codec, nid, dir);
2146  step = (step + 1) * 25;
2147  tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
2148  tlv[1] = 2 * sizeof(unsigned int);
2149  tlv[2] = -nums * step;
2150  tlv[3] = step;
2151 }
2153 
2154 /* find a mixer control element with the given name */
2155 static struct snd_kcontrol *
2156 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
2157  const char *name, int idx)
2158 {
2159  struct snd_ctl_elem_id id;
2160  memset(&id, 0, sizeof(id));
2161  id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2162  id.index = idx;
2163  if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
2164  return NULL;
2165  strcpy(id.name, name);
2166  return snd_ctl_find_id(codec->bus->card, &id);
2167 }
2168 
2177  const char *name)
2178 {
2179  return _snd_hda_find_mixer_ctl(codec, name, 0);
2180 }
2182 
2183 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name)
2184 {
2185  int idx;
2186  for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
2187  if (!_snd_hda_find_mixer_ctl(codec, name, idx))
2188  return idx;
2189  }
2190  return -EBUSY;
2191 }
2192 
2212 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
2213  struct snd_kcontrol *kctl)
2214 {
2215  int err;
2216  unsigned short flags = 0;
2217  struct hda_nid_item *item;
2218 
2219  if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
2220  flags |= HDA_NID_ITEM_AMP;
2221  if (nid == 0)
2222  nid = get_amp_nid_(kctl->private_value);
2223  }
2224  if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
2225  nid = kctl->id.subdevice & 0xffff;
2226  if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
2227  kctl->id.subdevice = 0;
2228  err = snd_ctl_add(codec->bus->card, kctl);
2229  if (err < 0)
2230  return err;
2231  item = snd_array_new(&codec->mixers);
2232  if (!item)
2233  return -ENOMEM;
2234  item->kctl = kctl;
2235  item->nid = nid;
2236  item->flags = flags;
2237  return 0;
2238 }
2240 
2252 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
2253  unsigned int index, hda_nid_t nid)
2254 {
2255  struct hda_nid_item *item;
2256 
2257  if (nid > 0) {
2258  item = snd_array_new(&codec->nids);
2259  if (!item)
2260  return -ENOMEM;
2261  item->kctl = kctl;
2262  item->index = index;
2263  item->nid = nid;
2264  return 0;
2265  }
2266  printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
2267  kctl->id.name, kctl->id.index, index);
2268  return -EINVAL;
2269 }
2271 
2276 void snd_hda_ctls_clear(struct hda_codec *codec)
2277 {
2278  int i;
2279  struct hda_nid_item *items = codec->mixers.list;
2280  for (i = 0; i < codec->mixers.used; i++)
2281  snd_ctl_remove(codec->bus->card, items[i].kctl);
2282  snd_array_free(&codec->mixers);
2283  snd_array_free(&codec->nids);
2284 }
2285 
2286 /* pseudo device locking
2287  * toggle card->shutdown to allow/disallow the device access (as a hack)
2288  */
2290 {
2291  struct snd_card *card = bus->card;
2292  struct hda_codec *codec;
2293 
2294  spin_lock(&card->files_lock);
2295  if (card->shutdown)
2296  goto err_unlock;
2297  card->shutdown = 1;
2298  if (!list_empty(&card->ctl_files))
2299  goto err_clear;
2300 
2301  list_for_each_entry(codec, &bus->codec_list, list) {
2302  int pcm;
2303  for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2304  struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2305  if (!cpcm->pcm)
2306  continue;
2307  if (cpcm->pcm->streams[0].substream_opened ||
2308  cpcm->pcm->streams[1].substream_opened)
2309  goto err_clear;
2310  }
2311  }
2312  spin_unlock(&card->files_lock);
2313  return 0;
2314 
2315  err_clear:
2316  card->shutdown = 0;
2317  err_unlock:
2318  spin_unlock(&card->files_lock);
2319  return -EINVAL;
2320 }
2322 
2324 {
2325  struct snd_card *card = bus->card;
2326 
2327  card = bus->card;
2328  spin_lock(&card->files_lock);
2329  card->shutdown = 0;
2330  spin_unlock(&card->files_lock);
2331 }
2333 
2344 int snd_hda_codec_reset(struct hda_codec *codec)
2345 {
2346  struct hda_bus *bus = codec->bus;
2347  struct snd_card *card = bus->card;
2348  int i;
2349 
2350  if (snd_hda_lock_devices(bus) < 0)
2351  return -EBUSY;
2352 
2353  /* OK, let it free */
2354 
2355 #ifdef CONFIG_PM
2356  cancel_delayed_work_sync(&codec->power_work);
2357  codec->power_on = 0;
2358  codec->power_transition = 0;
2359  codec->power_jiffies = jiffies;
2360  flush_workqueue(bus->workq);
2361 #endif
2362  snd_hda_ctls_clear(codec);
2363  /* relase PCMs */
2364  for (i = 0; i < codec->num_pcms; i++) {
2365  if (codec->pcm_info[i].pcm) {
2366  snd_device_free(card, codec->pcm_info[i].pcm);
2367  clear_bit(codec->pcm_info[i].device,
2368  bus->pcm_dev_bits);
2369  }
2370  }
2371  if (codec->patch_ops.free)
2372  codec->patch_ops.free(codec);
2373  memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2374  snd_hda_jack_tbl_clear(codec);
2375  codec->proc_widget_hook = NULL;
2376  codec->spec = NULL;
2377  free_hda_cache(&codec->amp_cache);
2378  free_hda_cache(&codec->cmd_cache);
2379  init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2380  init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2381  /* free only driver_pins so that init_pins + user_pins are restored */
2382  snd_array_free(&codec->driver_pins);
2383  restore_pincfgs(codec);
2384  snd_array_free(&codec->cvt_setups);
2385  snd_array_free(&codec->spdif_out);
2386  codec->num_pcms = 0;
2387  codec->pcm_info = NULL;
2388  codec->preset = NULL;
2389  codec->slave_dig_outs = NULL;
2390  codec->spdif_status_reset = 0;
2391  module_put(codec->owner);
2392  codec->owner = NULL;
2393 
2394  /* allow device access again */
2396  return 0;
2397 }
2398 
2399 typedef int (*map_slave_func_t)(void *, struct snd_kcontrol *);
2400 
2401 /* apply the function to all matching slave ctls in the mixer list */
2402 static int map_slaves(struct hda_codec *codec, const char * const *slaves,
2403  const char *suffix, map_slave_func_t func, void *data)
2404 {
2405  struct hda_nid_item *items;
2406  const char * const *s;
2407  int i, err;
2408 
2409  items = codec->mixers.list;
2410  for (i = 0; i < codec->mixers.used; i++) {
2411  struct snd_kcontrol *sctl = items[i].kctl;
2412  if (!sctl || !sctl->id.name ||
2413  sctl->id.iface != SNDRV_CTL_ELEM_IFACE_MIXER)
2414  continue;
2415  for (s = slaves; *s; s++) {
2416  char tmpname[sizeof(sctl->id.name)];
2417  const char *name = *s;
2418  if (suffix) {
2419  snprintf(tmpname, sizeof(tmpname), "%s %s",
2420  name, suffix);
2421  name = tmpname;
2422  }
2423  if (!strcmp(sctl->id.name, name)) {
2424  err = func(data, sctl);
2425  if (err)
2426  return err;
2427  break;
2428  }
2429  }
2430  }
2431  return 0;
2432 }
2433 
2434 static int check_slave_present(void *data, struct snd_kcontrol *sctl)
2435 {
2436  return 1;
2437 }
2438 
2439 /* guess the value corresponding to 0dB */
2440 static int get_kctl_0dB_offset(struct snd_kcontrol *kctl)
2441 {
2442  int _tlv[4];
2443  const int *tlv = NULL;
2444  int val = -1;
2445 
2446  if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
2447  /* FIXME: set_fs() hack for obtaining user-space TLV data */
2448  mm_segment_t fs = get_fs();
2449  set_fs(get_ds());
2450  if (!kctl->tlv.c(kctl, 0, sizeof(_tlv), _tlv))
2451  tlv = _tlv;
2452  set_fs(fs);
2453  } else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
2454  tlv = kctl->tlv.p;
2455  if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE)
2456  val = -tlv[2] / tlv[3];
2457  return val;
2458 }
2459 
2460 /* call kctl->put with the given value(s) */
2461 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
2462 {
2463  struct snd_ctl_elem_value *ucontrol;
2464  ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
2465  if (!ucontrol)
2466  return -ENOMEM;
2467  ucontrol->value.integer.value[0] = val;
2468  ucontrol->value.integer.value[1] = val;
2469  kctl->put(kctl, ucontrol);
2470  kfree(ucontrol);
2471  return 0;
2472 }
2473 
2474 /* initialize the slave volume with 0dB */
2475 static int init_slave_0dB(void *data, struct snd_kcontrol *slave)
2476 {
2477  int offset = get_kctl_0dB_offset(slave);
2478  if (offset > 0)
2479  put_kctl_with_value(slave, offset);
2480  return 0;
2481 }
2482 
2483 /* unmute the slave */
2484 static int init_slave_unmute(void *data, struct snd_kcontrol *slave)
2485 {
2486  return put_kctl_with_value(slave, 1);
2487 }
2488 
2508 int __snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2509  unsigned int *tlv, const char * const *slaves,
2510  const char *suffix, bool init_slave_vol,
2511  struct snd_kcontrol **ctl_ret)
2512 {
2513  struct snd_kcontrol *kctl;
2514  int err;
2515 
2516  if (ctl_ret)
2517  *ctl_ret = NULL;
2518 
2519  err = map_slaves(codec, slaves, suffix, check_slave_present, NULL);
2520  if (err != 1) {
2521  snd_printdd("No slave found for %s\n", name);
2522  return 0;
2523  }
2524  kctl = snd_ctl_make_virtual_master(name, tlv);
2525  if (!kctl)
2526  return -ENOMEM;
2527  err = snd_hda_ctl_add(codec, 0, kctl);
2528  if (err < 0)
2529  return err;
2530 
2531  err = map_slaves(codec, slaves, suffix,
2532  (map_slave_func_t)snd_ctl_add_slave, kctl);
2533  if (err < 0)
2534  return err;
2535 
2536  /* init with master mute & zero volume */
2537  put_kctl_with_value(kctl, 0);
2538  if (init_slave_vol)
2539  map_slaves(codec, slaves, suffix,
2540  tlv ? init_slave_0dB : init_slave_unmute, kctl);
2541 
2542  if (ctl_ret)
2543  *ctl_ret = kctl;
2544  return 0;
2545 }
2547 
2548 /*
2549  * mute-LED control using vmaster
2550  */
2551 static int vmaster_mute_mode_info(struct snd_kcontrol *kcontrol,
2552  struct snd_ctl_elem_info *uinfo)
2553 {
2554  static const char * const texts[] = {
2555  "Off", "On", "Follow Master"
2556  };
2557  unsigned int index;
2558 
2560  uinfo->count = 1;
2561  uinfo->value.enumerated.items = 3;
2562  index = uinfo->value.enumerated.item;
2563  if (index >= 3)
2564  index = 2;
2565  strcpy(uinfo->value.enumerated.name, texts[index]);
2566  return 0;
2567 }
2568 
2569 static int vmaster_mute_mode_get(struct snd_kcontrol *kcontrol,
2570  struct snd_ctl_elem_value *ucontrol)
2571 {
2572  struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2573  ucontrol->value.enumerated.item[0] = hook->mute_mode;
2574  return 0;
2575 }
2576 
2577 static int vmaster_mute_mode_put(struct snd_kcontrol *kcontrol,
2578  struct snd_ctl_elem_value *ucontrol)
2579 {
2580  struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2581  unsigned int old_mode = hook->mute_mode;
2582 
2583  hook->mute_mode = ucontrol->value.enumerated.item[0];
2584  if (hook->mute_mode > HDA_VMUTE_FOLLOW_MASTER)
2586  if (old_mode == hook->mute_mode)
2587  return 0;
2589  return 1;
2590 }
2591 
2592 static struct snd_kcontrol_new vmaster_mute_mode = {
2593  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2594  .name = "Mute-LED Mode",
2595  .info = vmaster_mute_mode_info,
2596  .get = vmaster_mute_mode_get,
2597  .put = vmaster_mute_mode_put,
2598 };
2599 
2600 /*
2601  * Add a mute-LED hook with the given vmaster switch kctl
2602  * "Mute-LED Mode" control is automatically created and associated with
2603  * the given hook.
2604  */
2606  struct hda_vmaster_mute_hook *hook,
2607  bool expose_enum_ctl)
2608 {
2609  struct snd_kcontrol *kctl;
2610 
2611  if (!hook->hook || !hook->sw_kctl)
2612  return 0;
2613  snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
2614  hook->codec = codec;
2616  if (!expose_enum_ctl)
2617  return 0;
2618  kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
2619  if (!kctl)
2620  return -ENOMEM;
2621  return snd_hda_ctl_add(codec, 0, kctl);
2622 }
2624 
2625 /*
2626  * Call the hook with the current value for synchronization
2627  * Should be called in init callback
2628  */
2630 {
2631  if (!hook->hook || !hook->codec)
2632  return;
2633  switch (hook->mute_mode) {
2636  break;
2637  default:
2638  hook->hook(hook->codec, hook->mute_mode);
2639  break;
2640  }
2641 }
2643 
2644 
2652  struct snd_ctl_elem_info *uinfo)
2653 {
2654  int chs = get_amp_channels(kcontrol);
2655 
2657  uinfo->count = chs == 3 ? 2 : 1;
2658  uinfo->value.integer.min = 0;
2659  uinfo->value.integer.max = 1;
2660  return 0;
2661 }
2663 
2671  struct snd_ctl_elem_value *ucontrol)
2672 {
2673  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2674  hda_nid_t nid = get_amp_nid(kcontrol);
2675  int chs = get_amp_channels(kcontrol);
2676  int dir = get_amp_direction(kcontrol);
2677  int idx = get_amp_index(kcontrol);
2678  long *valp = ucontrol->value.integer.value;
2679 
2680  if (chs & 1)
2681  *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2682  HDA_AMP_MUTE) ? 0 : 1;
2683  if (chs & 2)
2684  *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2685  HDA_AMP_MUTE) ? 0 : 1;
2686  return 0;
2687 }
2689 
2697  struct snd_ctl_elem_value *ucontrol)
2698 {
2699  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2700  hda_nid_t nid = get_amp_nid(kcontrol);
2701  int chs = get_amp_channels(kcontrol);
2702  int dir = get_amp_direction(kcontrol);
2703  int idx = get_amp_index(kcontrol);
2704  long *valp = ucontrol->value.integer.value;
2705  int change = 0;
2706 
2707  snd_hda_power_up(codec);
2708  if (chs & 1) {
2709  change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2710  HDA_AMP_MUTE,
2711  *valp ? 0 : HDA_AMP_MUTE);
2712  valp++;
2713  }
2714  if (chs & 2)
2715  change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2716  HDA_AMP_MUTE,
2717  *valp ? 0 : HDA_AMP_MUTE);
2718  hda_call_check_power_status(codec, nid);
2719  snd_hda_power_down(codec);
2720  return change;
2721 }
2723 
2724 /*
2725  * bound volume controls
2726  *
2727  * bind multiple volumes (# indices, from 0)
2728  */
2729 
2730 #define AMP_VAL_IDX_SHIFT 19
2731 #define AMP_VAL_IDX_MASK (0x0f<<19)
2732 
2740  struct snd_ctl_elem_value *ucontrol)
2741 {
2742  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2743  unsigned long pval;
2744  int err;
2745 
2746  mutex_lock(&codec->control_mutex);
2747  pval = kcontrol->private_value;
2748  kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2749  err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2750  kcontrol->private_value = pval;
2751  mutex_unlock(&codec->control_mutex);
2752  return err;
2753 }
2755 
2763  struct snd_ctl_elem_value *ucontrol)
2764 {
2765  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2766  unsigned long pval;
2767  int i, indices, err = 0, change = 0;
2768 
2769  mutex_lock(&codec->control_mutex);
2770  pval = kcontrol->private_value;
2771  indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2772  for (i = 0; i < indices; i++) {
2773  kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2774  (i << AMP_VAL_IDX_SHIFT);
2775  err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2776  if (err < 0)
2777  break;
2778  change |= err;
2779  }
2780  kcontrol->private_value = pval;
2781  mutex_unlock(&codec->control_mutex);
2782  return err < 0 ? err : change;
2783 }
2785 
2793  struct snd_ctl_elem_info *uinfo)
2794 {
2795  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2796  struct hda_bind_ctls *c;
2797  int err;
2798 
2799  mutex_lock(&codec->control_mutex);
2800  c = (struct hda_bind_ctls *)kcontrol->private_value;
2801  kcontrol->private_value = *c->values;
2802  err = c->ops->info(kcontrol, uinfo);
2803  kcontrol->private_value = (long)c;
2804  mutex_unlock(&codec->control_mutex);
2805  return err;
2806 }
2808 
2816  struct snd_ctl_elem_value *ucontrol)
2817 {
2818  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2819  struct hda_bind_ctls *c;
2820  int err;
2821 
2822  mutex_lock(&codec->control_mutex);
2823  c = (struct hda_bind_ctls *)kcontrol->private_value;
2824  kcontrol->private_value = *c->values;
2825  err = c->ops->get(kcontrol, ucontrol);
2826  kcontrol->private_value = (long)c;
2827  mutex_unlock(&codec->control_mutex);
2828  return err;
2829 }
2831 
2839  struct snd_ctl_elem_value *ucontrol)
2840 {
2841  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2842  struct hda_bind_ctls *c;
2843  unsigned long *vals;
2844  int err = 0, change = 0;
2845 
2846  mutex_lock(&codec->control_mutex);
2847  c = (struct hda_bind_ctls *)kcontrol->private_value;
2848  for (vals = c->values; *vals; vals++) {
2849  kcontrol->private_value = *vals;
2850  err = c->ops->put(kcontrol, ucontrol);
2851  if (err < 0)
2852  break;
2853  change |= err;
2854  }
2855  kcontrol->private_value = (long)c;
2856  mutex_unlock(&codec->control_mutex);
2857  return err < 0 ? err : change;
2858 }
2860 
2867 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2868  unsigned int size, unsigned int __user *tlv)
2869 {
2870  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2871  struct hda_bind_ctls *c;
2872  int err;
2873 
2874  mutex_lock(&codec->control_mutex);
2875  c = (struct hda_bind_ctls *)kcontrol->private_value;
2876  kcontrol->private_value = *c->values;
2877  err = c->ops->tlv(kcontrol, op_flag, size, tlv);
2878  kcontrol->private_value = (long)c;
2879  mutex_unlock(&codec->control_mutex);
2880  return err;
2881 }
2883 
2888  .tlv = snd_hda_mixer_amp_tlv
2889 };
2890 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
2891 
2896  .tlv = snd_hda_mixer_amp_tlv
2897 };
2898 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
2899 
2900 /*
2901  * SPDIF out controls
2902  */
2903 
2904 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
2905  struct snd_ctl_elem_info *uinfo)
2906 {
2908  uinfo->count = 1;
2909  return 0;
2910 }
2911 
2912 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
2913  struct snd_ctl_elem_value *ucontrol)
2914 {
2915  ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2919  ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
2921  return 0;
2922 }
2923 
2924 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
2925  struct snd_ctl_elem_value *ucontrol)
2926 {
2927  ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2930  return 0;
2931 }
2932 
2933 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
2934  struct snd_ctl_elem_value *ucontrol)
2935 {
2936  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2937  int idx = kcontrol->private_value;
2938  struct hda_spdif_out *spdif;
2939 
2940  mutex_lock(&codec->spdif_mutex);
2941  spdif = snd_array_elem(&codec->spdif_out, idx);
2942  ucontrol->value.iec958.status[0] = spdif->status & 0xff;
2943  ucontrol->value.iec958.status[1] = (spdif->status >> 8) & 0xff;
2944  ucontrol->value.iec958.status[2] = (spdif->status >> 16) & 0xff;
2945  ucontrol->value.iec958.status[3] = (spdif->status >> 24) & 0xff;
2946  mutex_unlock(&codec->spdif_mutex);
2947 
2948  return 0;
2949 }
2950 
2951 /* convert from SPDIF status bits to HDA SPDIF bits
2952  * bit 0 (DigEn) is always set zero (to be filled later)
2953  */
2954 static unsigned short convert_from_spdif_status(unsigned int sbits)
2955 {
2956  unsigned short val = 0;
2957 
2958  if (sbits & IEC958_AES0_PROFESSIONAL)
2959  val |= AC_DIG1_PROFESSIONAL;
2960  if (sbits & IEC958_AES0_NONAUDIO)
2961  val |= AC_DIG1_NONAUDIO;
2962  if (sbits & IEC958_AES0_PROFESSIONAL) {
2963  if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
2965  val |= AC_DIG1_EMPHASIS;
2966  } else {
2967  if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
2969  val |= AC_DIG1_EMPHASIS;
2970  if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
2971  val |= AC_DIG1_COPYRIGHT;
2972  if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
2973  val |= AC_DIG1_LEVEL;
2974  val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
2975  }
2976  return val;
2977 }
2978 
2979 /* convert to SPDIF status bits from HDA SPDIF bits
2980  */
2981 static unsigned int convert_to_spdif_status(unsigned short val)
2982 {
2983  unsigned int sbits = 0;
2984 
2985  if (val & AC_DIG1_NONAUDIO)
2986  sbits |= IEC958_AES0_NONAUDIO;
2987  if (val & AC_DIG1_PROFESSIONAL)
2988  sbits |= IEC958_AES0_PROFESSIONAL;
2989  if (sbits & IEC958_AES0_PROFESSIONAL) {
2990  if (sbits & AC_DIG1_EMPHASIS)
2992  } else {
2993  if (val & AC_DIG1_EMPHASIS)
2995  if (!(val & AC_DIG1_COPYRIGHT))
2997  if (val & AC_DIG1_LEVEL)
2998  sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
2999  sbits |= val & (0x7f << 8);
3000  }
3001  return sbits;
3002 }
3003 
3004 /* set digital convert verbs both for the given NID and its slaves */
3005 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
3006  int verb, int val)
3007 {
3008  const hda_nid_t *d;
3009 
3010  snd_hda_codec_write_cache(codec, nid, 0, verb, val);
3011  d = codec->slave_dig_outs;
3012  if (!d)
3013  return;
3014  for (; *d; d++)
3015  snd_hda_codec_write_cache(codec, *d, 0, verb, val);
3016 }
3017 
3018 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
3019  int dig1, int dig2)
3020 {
3021  if (dig1 != -1)
3022  set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
3023  if (dig2 != -1)
3024  set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
3025 }
3026 
3027 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
3028  struct snd_ctl_elem_value *ucontrol)
3029 {
3030  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3031  int idx = kcontrol->private_value;
3032  struct hda_spdif_out *spdif;
3033  hda_nid_t nid;
3034  unsigned short val;
3035  int change;
3036 
3037  mutex_lock(&codec->spdif_mutex);
3038  spdif = snd_array_elem(&codec->spdif_out, idx);
3039  nid = spdif->nid;
3040  spdif->status = ucontrol->value.iec958.status[0] |
3041  ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
3042  ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
3043  ((unsigned int)ucontrol->value.iec958.status[3] << 24);
3044  val = convert_from_spdif_status(spdif->status);
3045  val |= spdif->ctls & 1;
3046  change = spdif->ctls != val;
3047  spdif->ctls = val;
3048  if (change && nid != (u16)-1)
3049  set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
3050  mutex_unlock(&codec->spdif_mutex);
3051  return change;
3052 }
3053 
3054 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
3055 
3056 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
3057  struct snd_ctl_elem_value *ucontrol)
3058 {
3059  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3060  int idx = kcontrol->private_value;
3061  struct hda_spdif_out *spdif;
3062 
3063  mutex_lock(&codec->spdif_mutex);
3064  spdif = snd_array_elem(&codec->spdif_out, idx);
3065  ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
3066  mutex_unlock(&codec->spdif_mutex);
3067  return 0;
3068 }
3069 
3070 static inline void set_spdif_ctls(struct hda_codec *codec, hda_nid_t nid,
3071  int dig1, int dig2)
3072 {
3073  set_dig_out_convert(codec, nid, dig1, dig2);
3074  /* unmute amp switch (if any) */
3075  if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
3076  (dig1 & AC_DIG1_ENABLE))
3077  snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
3078  HDA_AMP_MUTE, 0);
3079 }
3080 
3081 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
3082  struct snd_ctl_elem_value *ucontrol)
3083 {
3084  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3085  int idx = kcontrol->private_value;
3086  struct hda_spdif_out *spdif;
3087  hda_nid_t nid;
3088  unsigned short val;
3089  int change;
3090 
3091  mutex_lock(&codec->spdif_mutex);
3092  spdif = snd_array_elem(&codec->spdif_out, idx);
3093  nid = spdif->nid;
3094  val = spdif->ctls & ~AC_DIG1_ENABLE;
3095  if (ucontrol->value.integer.value[0])
3096  val |= AC_DIG1_ENABLE;
3097  change = spdif->ctls != val;
3098  spdif->ctls = val;
3099  if (change && nid != (u16)-1)
3100  set_spdif_ctls(codec, nid, val & 0xff, -1);
3101  mutex_unlock(&codec->spdif_mutex);
3102  return change;
3103 }
3104 
3105 static struct snd_kcontrol_new dig_mixes[] = {
3106  {
3107  .access = SNDRV_CTL_ELEM_ACCESS_READ,
3108  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3109  .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
3110  .info = snd_hda_spdif_mask_info,
3111  .get = snd_hda_spdif_cmask_get,
3112  },
3113  {
3114  .access = SNDRV_CTL_ELEM_ACCESS_READ,
3115  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3116  .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
3117  .info = snd_hda_spdif_mask_info,
3118  .get = snd_hda_spdif_pmask_get,
3119  },
3120  {
3121  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3122  .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
3123  .info = snd_hda_spdif_mask_info,
3124  .get = snd_hda_spdif_default_get,
3125  .put = snd_hda_spdif_default_put,
3126  },
3127  {
3128  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3129  .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
3131  .get = snd_hda_spdif_out_switch_get,
3132  .put = snd_hda_spdif_out_switch_put,
3133  },
3134  { } /* end */
3135 };
3136 
3148  hda_nid_t associated_nid,
3149  hda_nid_t cvt_nid)
3150 {
3151  int err;
3152  struct snd_kcontrol *kctl;
3153  struct snd_kcontrol_new *dig_mix;
3154  int idx;
3155  struct hda_spdif_out *spdif;
3156 
3157  idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch");
3158  if (idx < 0) {
3159  printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
3160  return -EBUSY;
3161  }
3162  spdif = snd_array_new(&codec->spdif_out);
3163  for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
3164  kctl = snd_ctl_new1(dig_mix, codec);
3165  if (!kctl)
3166  return -ENOMEM;
3167  kctl->id.index = idx;
3168  kctl->private_value = codec->spdif_out.used - 1;
3169  err = snd_hda_ctl_add(codec, associated_nid, kctl);
3170  if (err < 0)
3171  return err;
3172  }
3173  spdif->nid = cvt_nid;
3174  spdif->ctls = snd_hda_codec_read(codec, cvt_nid, 0,
3176  spdif->status = convert_to_spdif_status(spdif->ctls);
3177  return 0;
3178 }
3180 
3181 /* get the hda_spdif_out entry from the given NID
3182  * call within spdif_mutex lock
3183  */
3185  hda_nid_t nid)
3186 {
3187  int i;
3188  for (i = 0; i < codec->spdif_out.used; i++) {
3189  struct hda_spdif_out *spdif =
3190  snd_array_elem(&codec->spdif_out, i);
3191  if (spdif->nid == nid)
3192  return spdif;
3193  }
3194  return NULL;
3195 }
3197 
3198 void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
3199 {
3200  struct hda_spdif_out *spdif;
3201 
3202  mutex_lock(&codec->spdif_mutex);
3203  spdif = snd_array_elem(&codec->spdif_out, idx);
3204  spdif->nid = (u16)-1;
3205  mutex_unlock(&codec->spdif_mutex);
3206 }
3208 
3209 void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
3210 {
3211  struct hda_spdif_out *spdif;
3212  unsigned short val;
3213 
3214  mutex_lock(&codec->spdif_mutex);
3215  spdif = snd_array_elem(&codec->spdif_out, idx);
3216  if (spdif->nid != nid) {
3217  spdif->nid = nid;
3218  val = spdif->ctls;
3219  set_spdif_ctls(codec, nid, val & 0xff, (val >> 8) & 0xff);
3220  }
3221  mutex_unlock(&codec->spdif_mutex);
3222 }
3224 
3225 /*
3226  * SPDIF sharing with analog output
3227  */
3228 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
3229  struct snd_ctl_elem_value *ucontrol)
3230 {
3231  struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3232  ucontrol->value.integer.value[0] = mout->share_spdif;
3233  return 0;
3234 }
3235 
3236 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
3237  struct snd_ctl_elem_value *ucontrol)
3238 {
3239  struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3240  mout->share_spdif = !!ucontrol->value.integer.value[0];
3241  return 0;
3242 }
3243 
3244 static struct snd_kcontrol_new spdif_share_sw = {
3245  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3246  .name = "IEC958 Default PCM Playback Switch",
3247  .info = snd_ctl_boolean_mono_info,
3248  .get = spdif_share_sw_get,
3249  .put = spdif_share_sw_put,
3250 };
3251 
3258  struct hda_multi_out *mout)
3259 {
3260  if (!mout->dig_out_nid)
3261  return 0;
3262  /* ATTENTION: here mout is passed as private_data, instead of codec */
3263  return snd_hda_ctl_add(codec, mout->dig_out_nid,
3264  snd_ctl_new1(&spdif_share_sw, mout));
3265 }
3267 
3268 /*
3269  * SPDIF input
3270  */
3271 
3272 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
3273 
3274 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
3275  struct snd_ctl_elem_value *ucontrol)
3276 {
3277  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3278 
3279  ucontrol->value.integer.value[0] = codec->spdif_in_enable;
3280  return 0;
3281 }
3282 
3283 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
3284  struct snd_ctl_elem_value *ucontrol)
3285 {
3286  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3287  hda_nid_t nid = kcontrol->private_value;
3288  unsigned int val = !!ucontrol->value.integer.value[0];
3289  int change;
3290 
3291  mutex_lock(&codec->spdif_mutex);
3292  change = codec->spdif_in_enable != val;
3293  if (change) {
3294  codec->spdif_in_enable = val;
3295  snd_hda_codec_write_cache(codec, nid, 0,
3297  }
3298  mutex_unlock(&codec->spdif_mutex);
3299  return change;
3300 }
3301 
3302 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
3303  struct snd_ctl_elem_value *ucontrol)
3304 {
3305  struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3306  hda_nid_t nid = kcontrol->private_value;
3307  unsigned short val;
3308  unsigned int sbits;
3309 
3310  val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
3311  sbits = convert_to_spdif_status(val);
3312  ucontrol->value.iec958.status[0] = sbits;
3313  ucontrol->value.iec958.status[1] = sbits >> 8;
3314  ucontrol->value.iec958.status[2] = sbits >> 16;
3315  ucontrol->value.iec958.status[3] = sbits >> 24;
3316  return 0;
3317 }
3318 
3319 static struct snd_kcontrol_new dig_in_ctls[] = {
3320  {
3321  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3322  .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
3324  .get = snd_hda_spdif_in_switch_get,
3325  .put = snd_hda_spdif_in_switch_put,
3326  },
3327  {
3328  .access = SNDRV_CTL_ELEM_ACCESS_READ,
3329  .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3330  .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
3331  .info = snd_hda_spdif_mask_info,
3332  .get = snd_hda_spdif_in_status_get,
3333  },
3334  { } /* end */
3335 };
3336 
3348 {
3349  int err;
3350  struct snd_kcontrol *kctl;
3351  struct snd_kcontrol_new *dig_mix;
3352  int idx;
3353 
3354  idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch");
3355  if (idx < 0) {
3356  printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
3357  return -EBUSY;
3358  }
3359  for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
3360  kctl = snd_ctl_new1(dig_mix, codec);
3361  if (!kctl)
3362  return -ENOMEM;
3363  kctl->private_value = nid;
3364  err = snd_hda_ctl_add(codec, nid, kctl);
3365  if (err < 0)
3366  return err;
3367  }
3368  codec->spdif_in_enable =
3369  snd_hda_codec_read(codec, nid, 0,
3372  return 0;
3373 }
3375 
3376 #ifdef CONFIG_PM
3377 /*
3378  * command cache
3379  */
3380 
3381 /* build a 32bit cache key with the widget id and the command parameter */
3382 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
3383 #define get_cmd_cache_nid(key) ((key) & 0xff)
3384 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
3385 
3398 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
3399  int direct, unsigned int verb, unsigned int parm)
3400 {
3401  int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
3402  struct hda_cache_head *c;
3403  u32 key;
3404 
3405  if (err < 0)
3406  return err;
3407  /* parm may contain the verb stuff for get/set amp */
3408  verb = verb | (parm >> 8);
3409  parm &= 0xff;
3410  key = build_cmd_cache_key(nid, verb);
3411  mutex_lock(&codec->bus->cmd_mutex);
3412  c = get_alloc_hash(&codec->cmd_cache, key);
3413  if (c)
3414  c->val = parm;
3415  mutex_unlock(&codec->bus->cmd_mutex);
3416  return 0;
3417 }
3419 
3434 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
3435  int direct, unsigned int verb, unsigned int parm)
3436 {
3437  struct hda_cache_head *c;
3438  u32 key;
3439 
3440  /* parm may contain the verb stuff for get/set amp */
3441  verb = verb | (parm >> 8);
3442  parm &= 0xff;
3443  key = build_cmd_cache_key(nid, verb);
3444  mutex_lock(&codec->bus->cmd_mutex);
3445  c = get_hash(&codec->cmd_cache, key);
3446  if (c && c->val == parm) {
3447  mutex_unlock(&codec->bus->cmd_mutex);
3448  return 0;
3449  }
3450  mutex_unlock(&codec->bus->cmd_mutex);
3451  return snd_hda_codec_write_cache(codec, nid, direct, verb, parm);
3452 }
3454 
3461 void snd_hda_codec_resume_cache(struct hda_codec *codec)
3462 {
3463  struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
3464  int i;
3465 
3466  for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
3467  u32 key = buffer->key;
3468  if (!key)
3469  continue;
3470  snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
3471  get_cmd_cache_cmd(key), buffer->val);
3472  }
3473 }
3474 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
3475 
3485 void snd_hda_sequence_write_cache(struct hda_codec *codec,
3486  const struct hda_verb *seq)
3487 {
3488  for (; seq->nid; seq++)
3489  snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
3490  seq->param);
3491 }
3493 #endif /* CONFIG_PM */
3494 
3496  unsigned int power_state,
3497  bool eapd_workaround)
3498 {
3499  hda_nid_t nid = codec->start_nid;
3500  int i;
3501 
3502  for (i = 0; i < codec->num_nodes; i++, nid++) {
3503  unsigned int wcaps = get_wcaps(codec, nid);
3504  if (!(wcaps & AC_WCAP_POWER))
3505  continue;
3506  /* don't power down the widget if it controls eapd and
3507  * EAPD_BTLENABLE is set.
3508  */
3509  if (eapd_workaround && power_state == AC_PWRST_D3 &&
3510  get_wcaps_type(wcaps) == AC_WID_PIN &&
3511  (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) {
3512  int eapd = snd_hda_codec_read(codec, nid, 0,
3514  if (eapd & 0x02)
3515  continue;
3516  }
3518  power_state);
3519  }
3520 }
3522 
3523 /*
3524  * supported power states check
3525  */
3526 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg,
3527  unsigned int power_state)
3528 {
3529  int sup = snd_hda_param_read(codec, fg, AC_PAR_POWER_STATE);
3530 
3531  if (sup == -1)
3532  return false;
3533  if (sup & power_state)
3534  return true;
3535  else
3536  return false;
3537 }
3538 
3539 /*
3540  * wait until the state is reached, returns the current state
3541  */
3542 static unsigned int hda_sync_power_state(struct hda_codec *codec,
3543  hda_nid_t fg,
3544  unsigned int power_state)
3545 {
3546  unsigned long end_time = jiffies + msecs_to_jiffies(500);
3547  unsigned int state, actual_state;
3548 
3549  for (;;) {
3550  state = snd_hda_codec_read(codec, fg, 0,
3552  if (state & AC_PWRST_ERROR)
3553  break;
3554  actual_state = (state >> 4) & 0x0f;
3555  if (actual_state == power_state)
3556  break;
3557  if (time_after_eq(jiffies, end_time))
3558  break;
3559  /* wait until the codec reachs to the target state */
3560  msleep(1);
3561  }
3562  return state;
3563 }
3564 
3565 /*
3566  * set power state of the codec, and return the power state
3567  */
3568 static unsigned int hda_set_power_state(struct hda_codec *codec,
3569  unsigned int power_state)
3570 {
3571  hda_nid_t fg = codec->afg ? codec->afg : codec->mfg;
3572  int count;
3573  unsigned int state;
3574 
3575  /* this delay seems necessary to avoid click noise at power-down */
3576  if (power_state == AC_PWRST_D3) {
3577  /* transition time less than 10ms for power down */
3578  msleep(codec->epss ? 10 : 100);
3579  }
3580 
3581  /* repeat power states setting at most 10 times*/
3582  for (count = 0; count < 10; count++) {
3583  if (codec->patch_ops.set_power_state)
3584  codec->patch_ops.set_power_state(codec, fg,
3585  power_state);
3586  else {
3587  snd_hda_codec_read(codec, fg, 0,
3589  power_state);
3590  snd_hda_codec_set_power_to_all(codec, fg, power_state,
3591  true);
3592  }
3593  state = hda_sync_power_state(codec, fg, power_state);
3594  if (!(state & AC_PWRST_ERROR))
3595  break;
3596  }
3597 
3598  return state;
3599 }
3600 
3601 #ifdef CONFIG_SND_HDA_HWDEP
3602 /* execute additional init verbs */
3603 static void hda_exec_init_verbs(struct hda_codec *codec)
3604 {
3605  if (codec->init_verbs.list)
3606  snd_hda_sequence_write(codec, codec->init_verbs.list);
3607 }
3608 #else
3609 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
3610 #endif
3611 
3612 #ifdef CONFIG_PM
3613 /*
3614  * call suspend and power-down; used both from PM and power-save
3615  * this function returns the power state in the end
3616  */
3617 static unsigned int hda_call_codec_suspend(struct hda_codec *codec, bool in_wq)
3618 {
3619  unsigned int state;
3620 
3621  codec->in_pm = 1;
3622 
3623  if (codec->patch_ops.suspend)
3624  codec->patch_ops.suspend(codec);
3625  hda_cleanup_all_streams(codec);
3626  state = hda_set_power_state(codec, AC_PWRST_D3);
3627  /* Cancel delayed work if we aren't currently running from it. */
3628  if (!in_wq)
3629  cancel_delayed_work_sync(&codec->power_work);
3630  spin_lock(&codec->power_lock);
3631  snd_hda_update_power_acct(codec);
3632  trace_hda_power_down(codec);
3633  codec->power_on = 0;
3634  codec->power_transition = 0;
3635  codec->power_jiffies = jiffies;
3636  spin_unlock(&codec->power_lock);
3637  codec->in_pm = 0;
3638  return state;
3639 }
3640 
3641 /*
3642  * kick up codec; used both from PM and power-save
3643  */
3644 static void hda_call_codec_resume(struct hda_codec *codec)
3645 {
3646  codec->in_pm = 1;
3647 
3648  /* set as if powered on for avoiding re-entering the resume
3649  * in the resume / power-save sequence
3650  */
3651  hda_keep_power_on(codec);
3652  hda_set_power_state(codec, AC_PWRST_D0);
3653  restore_pincfgs(codec); /* restore all current pin configs */
3654  restore_shutup_pins(codec);
3655  hda_exec_init_verbs(codec);
3657  if (codec->patch_ops.resume)
3658  codec->patch_ops.resume(codec);
3659  else {
3660  if (codec->patch_ops.init)
3661  codec->patch_ops.init(codec);
3662  snd_hda_codec_resume_amp(codec);
3663  snd_hda_codec_resume_cache(codec);
3664  }
3665  snd_hda_jack_report_sync(codec);
3666 
3667  codec->in_pm = 0;
3668  snd_hda_power_down(codec); /* flag down before returning */
3669 }
3670 #endif /* CONFIG_PM */
3671 
3672 
3681 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
3682 {
3683  struct hda_codec *codec;
3684 
3685  list_for_each_entry(codec, &bus->codec_list, list) {
3686  int err = snd_hda_codec_build_controls(codec);
3687  if (err < 0) {
3688  printk(KERN_ERR "hda_codec: cannot build controls "
3689  "for #%d (error %d)\n", codec->addr, err);
3690  err = snd_hda_codec_reset(codec);
3691  if (err < 0) {
3693  "hda_codec: cannot revert codec\n");
3694  return err;
3695  }
3696  }
3697  }
3698  return 0;
3699 }
3701 
3702 /*
3703  * add standard channel maps if not specified
3704  */
3705 static int add_std_chmaps(struct hda_codec *codec)
3706 {
3707  int i, str, err;
3708 
3709  for (i = 0; i < codec->num_pcms; i++) {
3710  for (str = 0; str < 2; str++) {
3711  struct snd_pcm *pcm = codec->pcm_info[i].pcm;
3712  struct hda_pcm_stream *hinfo =
3713  &codec->pcm_info[i].stream[str];
3714  struct snd_pcm_chmap *chmap;
3715 
3716  if (codec->pcm_info[i].own_chmap)
3717  continue;
3718  if (!pcm || !hinfo->substreams)
3719  continue;
3720  err = snd_pcm_add_chmap_ctls(pcm, str,
3722  hinfo->channels_max,
3723  0, &chmap);
3724  if (err < 0)
3725  return err;
3727  }
3728  }
3729  return 0;
3730 }
3731 
3733 {
3734  int err = 0;
3735  hda_exec_init_verbs(codec);
3736  /* continue to initialize... */
3737  if (codec->patch_ops.init)
3738  err = codec->patch_ops.init(codec);
3739  if (!err && codec->patch_ops.build_controls)
3740  err = codec->patch_ops.build_controls(codec);
3741  if (err < 0)
3742  return err;
3743 
3744  /* we create chmaps here instead of build_pcms */
3745  err = add_std_chmaps(codec);
3746  if (err < 0)
3747  return err;
3748 
3749  snd_hda_jack_report_sync(codec); /* call at the last init point */
3750  return 0;
3751 }
3752 
3753 /*
3754  * stream formats
3755  */
3757  unsigned int hz;
3758  unsigned int alsa_bits;
3759  unsigned int hda_fmt;
3760 };
3761 
3762 /* rate = base * mult / div */
3763 #define HDA_RATE(base, mult, div) \
3764  (AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
3765  (((div) - 1) << AC_FMT_DIV_SHIFT))
3766 
3767 static struct hda_rate_tbl rate_bits[] = {
3768  /* rate in Hz, ALSA rate bitmask, HDA format value */
3769 
3770  /* autodetected value used in snd_hda_query_supported_pcm */
3771  { 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
3772  { 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
3773  { 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
3774  { 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
3775  { 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
3776  { 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
3777  { 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
3778  { 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
3779  { 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
3780  { 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
3781  { 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
3782 #define AC_PAR_PCM_RATE_BITS 11
3783  /* up to bits 10, 384kHZ isn't supported properly */
3784 
3785  /* not autodetected value */
3786  { 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
3787 
3788  { 0 } /* terminator */
3789 };
3790 
3802 unsigned int snd_hda_calc_stream_format(unsigned int rate,
3803  unsigned int channels,
3804  unsigned int format,
3805  unsigned int maxbps,
3806  unsigned short spdif_ctls)
3807 {
3808  int i;
3809  unsigned int val = 0;
3810 
3811  for (i = 0; rate_bits[i].hz; i++)
3812  if (rate_bits[i].hz == rate) {
3813  val = rate_bits[i].hda_fmt;
3814  break;
3815  }
3816  if (!rate_bits[i].hz) {
3817  snd_printdd("invalid rate %d\n", rate);
3818  return 0;
3819  }
3820 
3821  if (channels == 0 || channels > 8) {
3822  snd_printdd("invalid channels %d\n", channels);
3823  return 0;
3824  }
3825  val |= channels - 1;
3826 
3827  switch (snd_pcm_format_width(format)) {
3828  case 8:
3829  val |= AC_FMT_BITS_8;
3830  break;
3831  case 16:
3832  val |= AC_FMT_BITS_16;
3833  break;
3834  case 20:
3835  case 24:
3836  case 32:
3837  if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
3838  val |= AC_FMT_BITS_32;
3839  else if (maxbps >= 24)
3840  val |= AC_FMT_BITS_24;
3841  else
3842  val |= AC_FMT_BITS_20;
3843  break;
3844  default:
3845  snd_printdd("invalid format width %d\n",
3846  snd_pcm_format_width(format));
3847  return 0;
3848  }
3849 
3850  if (spdif_ctls & AC_DIG1_NONAUDIO)
3851  val |= AC_FMT_TYPE_NON_PCM;
3852 
3853  return val;
3854 }
3856 
3857 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid,
3858  int dir)
3859 {
3860  unsigned int val = 0;
3861  if (nid != codec->afg &&
3862  (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
3863  val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
3864  if (!val || val == -1)
3865  val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
3866  if (!val || val == -1)
3867  return 0;
3868  return val;
3869 }
3870 
3871 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3872 {
3873  return query_caps_hash(codec, nid, 0, HDA_HASH_PARPCM_KEY(nid),
3874  get_pcm_param);
3875 }
3876 
3877 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid,
3878  int dir)
3879 {
3880  unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
3881  if (!streams || streams == -1)
3882  streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
3883  if (!streams || streams == -1)
3884  return 0;
3885  return streams;
3886 }
3887 
3888 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
3889 {
3890  return query_caps_hash(codec, nid, 0, HDA_HASH_PARSTR_KEY(nid),
3891  get_stream_param);
3892 }
3893 
3908  u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
3909 {
3910  unsigned int i, val, wcaps;
3911 
3912  wcaps = get_wcaps(codec, nid);
3913  val = query_pcm_param(codec, nid);
3914 
3915  if (ratesp) {
3916  u32 rates = 0;
3917  for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
3918  if (val & (1 << i))
3919  rates |= rate_bits[i].alsa_bits;
3920  }
3921  if (rates == 0) {
3922  snd_printk(KERN_ERR "hda_codec: rates == 0 "
3923  "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3924  nid, val,
3925  (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
3926  return -EIO;
3927  }
3928  *ratesp = rates;
3929  }
3930 
3931  if (formatsp || bpsp) {
3932  u64 formats = 0;
3933  unsigned int streams, bps;
3934 
3935  streams = query_stream_param(codec, nid);
3936  if (!streams)
3937  return -EIO;
3938 
3939  bps = 0;
3940  if (streams & AC_SUPFMT_PCM) {
3941  if (val & AC_SUPPCM_BITS_8) {
3942  formats |= SNDRV_PCM_FMTBIT_U8;
3943  bps = 8;
3944  }
3945  if (val & AC_SUPPCM_BITS_16) {
3946  formats |= SNDRV_PCM_FMTBIT_S16_LE;
3947  bps = 16;
3948  }
3949  if (wcaps & AC_WCAP_DIGITAL) {
3950  if (val & AC_SUPPCM_BITS_32)
3953  formats |= SNDRV_PCM_FMTBIT_S32_LE;
3954  if (val & AC_SUPPCM_BITS_24)
3955  bps = 24;
3956  else if (val & AC_SUPPCM_BITS_20)
3957  bps = 20;
3958  } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
3959  AC_SUPPCM_BITS_32)) {
3960  formats |= SNDRV_PCM_FMTBIT_S32_LE;
3961  if (val & AC_SUPPCM_BITS_32)
3962  bps = 32;
3963  else if (val & AC_SUPPCM_BITS_24)
3964  bps = 24;
3965  else if (val & AC_SUPPCM_BITS_20)
3966  bps = 20;
3967  }
3968  }
3969 #if 0 /* FIXME: CS4206 doesn't work, which is the only codec supporting float */
3970  if (streams & AC_SUPFMT_FLOAT32) {
3971  formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
3972  if (!bps)
3973  bps = 32;
3974  }
3975 #endif
3976  if (streams == AC_SUPFMT_AC3) {
3977  /* should be exclusive */
3978  /* temporary hack: we have still no proper support
3979  * for the direct AC3 stream...
3980  */
3981  formats |= SNDRV_PCM_FMTBIT_U8;
3982  bps = 8;
3983  }
3984  if (formats == 0) {
3985  snd_printk(KERN_ERR "hda_codec: formats == 0 "
3986  "(nid=0x%x, val=0x%x, ovrd=%i, "
3987  "streams=0x%x)\n",
3988  nid, val,
3989  (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
3990  streams);
3991  return -EIO;
3992  }
3993  if (formatsp)
3994  *formatsp = formats;
3995  if (bpsp)
3996  *bpsp = bps;
3997  }
3998 
3999  return 0;
4000 }
4002 
4014  unsigned int format)
4015 {
4016  int i;
4017  unsigned int val = 0, rate, stream;
4018 
4019  val = query_pcm_param(codec, nid);
4020  if (!val)
4021  return 0;
4022 
4023  rate = format & 0xff00;
4024  for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
4025  if (rate_bits[i].hda_fmt == rate) {
4026  if (val & (1 << i))
4027  break;
4028  return 0;
4029  }
4030  if (i >= AC_PAR_PCM_RATE_BITS)
4031  return 0;
4032 
4033  stream = query_stream_param(codec, nid);
4034  if (!stream)
4035  return 0;
4036 
4037  if (stream & AC_SUPFMT_PCM) {
4038  switch (format & 0xf0) {
4039  case 0x00:
4040  if (!(val & AC_SUPPCM_BITS_8))
4041  return 0;
4042  break;
4043  case 0x10:
4044  if (!(val & AC_SUPPCM_BITS_16))
4045  return 0;
4046  break;
4047  case 0x20:
4048  if (!(val & AC_SUPPCM_BITS_20))
4049  return 0;
4050  break;
4051  case 0x30:
4052  if (!(val & AC_SUPPCM_BITS_24))
4053  return 0;
4054  break;
4055  case 0x40:
4056  if (!(val & AC_SUPPCM_BITS_32))
4057  return 0;
4058  break;
4059  default:
4060  return 0;
4061  }
4062  } else {
4063  /* FIXME: check for float32 and AC3? */
4064  }
4065 
4066  return 1;
4067 }
4069 
4070 /*
4071  * PCM stuff
4072  */
4073 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
4074  struct hda_codec *codec,
4075  struct snd_pcm_substream *substream)
4076 {
4077  return 0;
4078 }
4079 
4080 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
4081  struct hda_codec *codec,
4082  unsigned int stream_tag,
4083  unsigned int format,
4084  struct snd_pcm_substream *substream)
4085 {
4086  snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4087  return 0;
4088 }
4089 
4090 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
4091  struct hda_codec *codec,
4092  struct snd_pcm_substream *substream)
4093 {
4094  snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4095  return 0;
4096 }
4097 
4098 static int set_pcm_default_values(struct hda_codec *codec,
4099  struct hda_pcm_stream *info)
4100 {
4101  int err;
4102 
4103  /* query support PCM information from the given NID */
4104  if (info->nid && (!info->rates || !info->formats)) {
4105  err = snd_hda_query_supported_pcm(codec, info->nid,
4106  info->rates ? NULL : &info->rates,
4107  info->formats ? NULL : &info->formats,
4108  info->maxbps ? NULL : &info->maxbps);
4109  if (err < 0)
4110  return err;
4111  }
4112  if (info->ops.open == NULL)
4113  info->ops.open = hda_pcm_default_open_close;
4114  if (info->ops.close == NULL)
4115  info->ops.close = hda_pcm_default_open_close;
4116  if (info->ops.prepare == NULL) {
4117  if (snd_BUG_ON(!info->nid))
4118  return -EINVAL;
4119  info->ops.prepare = hda_pcm_default_prepare;
4120  }
4121  if (info->ops.cleanup == NULL) {
4122  if (snd_BUG_ON(!info->nid))
4123  return -EINVAL;
4124  info->ops.cleanup = hda_pcm_default_cleanup;
4125  }
4126  return 0;
4127 }
4128 
4129 /*
4130  * codec prepare/cleanup entries
4131  */
4133  struct hda_pcm_stream *hinfo,
4134  unsigned int stream,
4135  unsigned int format,
4136  struct snd_pcm_substream *substream)
4137 {
4138  int ret;
4139  mutex_lock(&codec->bus->prepare_mutex);
4140  ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
4141  if (ret >= 0)
4142  purify_inactive_streams(codec);
4143  mutex_unlock(&codec->bus->prepare_mutex);
4144  return ret;
4145 }
4147 
4149  struct hda_pcm_stream *hinfo,
4150  struct snd_pcm_substream *substream)
4151 {
4152  mutex_lock(&codec->bus->prepare_mutex);
4153  hinfo->ops.cleanup(hinfo, codec, substream);
4154  mutex_unlock(&codec->bus->prepare_mutex);
4155 }
4157 
4158 /* global */
4160  "Audio", "SPDIF", "HDMI", "Modem"
4161 };
4162 
4163 /*
4164  * get the empty PCM device number to assign
4165  *
4166  * note the max device number is limited by HDA_MAX_PCMS, currently 10
4167  */
4168 static int get_empty_pcm_device(struct hda_bus *bus, int type)
4169 {
4170  /* audio device indices; not linear to keep compatibility */
4171  static int audio_idx[HDA_PCM_NTYPES][5] = {
4172  [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
4173  [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
4174  [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
4175  [HDA_PCM_TYPE_MODEM] = { 6, -1 },
4176  };
4177  int i;
4178 
4179  if (type >= HDA_PCM_NTYPES) {
4180  snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
4181  return -EINVAL;
4182  }
4183 
4184  for (i = 0; audio_idx[type][i] >= 0 ; i++)
4185  if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
4186  return audio_idx[type][i];
4187 
4188  /* non-fixed slots starting from 10 */
4189  for (i = 10; i < 32; i++) {
4190  if (!test_and_set_bit(i, bus->pcm_dev_bits))
4191  return i;
4192  }
4193 
4194  snd_printk(KERN_WARNING "Too many %s devices\n",
4195  snd_hda_pcm_type_name[type]);
4196  return -EAGAIN;
4197 }
4198 
4199 /*
4200  * attach a new PCM stream
4201  */
4202 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
4203 {
4204  struct hda_bus *bus = codec->bus;
4205  struct hda_pcm_stream *info;
4206  int stream, err;
4207 
4208  if (snd_BUG_ON(!pcm->name))
4209  return -EINVAL;
4210  for (stream = 0; stream < 2; stream++) {
4211  info = &pcm->stream[stream];
4212  if (info->substreams) {
4213  err = set_pcm_default_values(codec, info);
4214  if (err < 0)
4215  return err;
4216  }
4217  }
4218  return bus->ops.attach_pcm(bus, codec, pcm);
4219 }
4220 
4221 /* assign all PCMs of the given codec */
4223 {
4224  unsigned int pcm;
4225  int err;
4226 
4227  if (!codec->num_pcms) {
4228  if (!codec->patch_ops.build_pcms)
4229  return 0;
4230  err = codec->patch_ops.build_pcms(codec);
4231  if (err < 0) {
4232  printk(KERN_ERR "hda_codec: cannot build PCMs"
4233  "for #%d (error %d)\n", codec->addr, err);
4234  err = snd_hda_codec_reset(codec);
4235  if (err < 0) {
4237  "hda_codec: cannot revert codec\n");
4238  return err;
4239  }
4240  }
4241  }
4242  for (pcm = 0; pcm < codec->num_pcms; pcm++) {
4243  struct hda_pcm *cpcm = &codec->pcm_info[pcm];
4244  int dev;
4245 
4246  if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
4247  continue; /* no substreams assigned */
4248 
4249  if (!cpcm->pcm) {
4250  dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
4251  if (dev < 0)
4252  continue; /* no fatal error */
4253  cpcm->device = dev;
4254  err = snd_hda_attach_pcm(codec, cpcm);
4255  if (err < 0) {
4256  printk(KERN_ERR "hda_codec: cannot attach "
4257  "PCM stream %d for codec #%d\n",
4258  dev, codec->addr);
4259  continue; /* no fatal error */
4260  }
4261  }
4262  }
4263  return 0;
4264 }
4265 
4292 int snd_hda_build_pcms(struct hda_bus *bus)
4293 {
4294  struct hda_codec *codec;
4295 
4296  list_for_each_entry(codec, &bus->codec_list, list) {
4297  int err = snd_hda_codec_build_pcms(codec);
4298  if (err < 0)
4299  return err;
4300  }
4301  return 0;
4302 }
4304 
4319  int num_configs, const char * const *models,
4320  const struct snd_pci_quirk *tbl)
4321 {
4322  if (codec->modelname && models) {
4323  int i;
4324  for (i = 0; i < num_configs; i++) {
4325  if (models[i] &&
4326  !strcmp(codec->modelname, models[i])) {
4327  snd_printd(KERN_INFO "hda_codec: model '%s' is "
4328  "selected\n", models[i]);
4329  return i;
4330  }
4331  }
4332  }
4333 
4334  if (!codec->bus->pci || !tbl)
4335  return -1;
4336 
4337  tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
4338  if (!tbl)
4339  return -1;
4340  if (tbl->value >= 0 && tbl->value < num_configs) {
4341 #ifdef CONFIG_SND_DEBUG_VERBOSE
4342  char tmp[10];
4343  const char *model = NULL;
4344  if (models)
4345  model = models[tbl->value];
4346  if (!model) {
4347  sprintf(tmp, "#%d", tbl->value);
4348  model = tmp;
4349  }
4350  snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
4351  "for config %x:%x (%s)\n",
4352  model, tbl->subvendor, tbl->subdevice,
4353  (tbl->name ? tbl->name : "Unknown device"));
4354 #endif
4355  return tbl->value;
4356  }
4357  return -1;
4358 }
4360 
4383  int num_configs, const char * const *models,
4384  const struct snd_pci_quirk *tbl)
4385 {
4386  const struct snd_pci_quirk *q;
4387 
4388  /* Search for codec ID */
4389  for (q = tbl; q->subvendor; q++) {
4390  unsigned int mask = 0xffff0000 | q->subdevice_mask;
4391  unsigned int id = (q->subdevice | (q->subvendor << 16)) & mask;
4392  if ((codec->subsystem_id & mask) == id)
4393  break;
4394  }
4395 
4396  if (!q->subvendor)
4397  return -1;
4398 
4399  tbl = q;
4400 
4401  if (tbl->value >= 0 && tbl->value < num_configs) {
4402 #ifdef CONFIG_SND_DEBUG_VERBOSE
4403  char tmp[10];
4404  const char *model = NULL;
4405  if (models)
4406  model = models[tbl->value];
4407  if (!model) {
4408  sprintf(tmp, "#%d", tbl->value);
4409  model = tmp;
4410  }
4411  snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
4412  "for config %x:%x (%s)\n",
4413  model, tbl->subvendor, tbl->subdevice,
4414  (tbl->name ? tbl->name : "Unknown device"));
4415 #endif
4416  return tbl->value;
4417  }
4418  return -1;
4419 }
4421 
4433  const struct snd_kcontrol_new *knew)
4434 {
4435  int err;
4436 
4437  for (; knew->name; knew++) {
4438  struct snd_kcontrol *kctl;
4439  int addr = 0, idx = 0;
4440  if (knew->iface == -1) /* skip this codec private value */
4441  continue;
4442  for (;;) {
4443  kctl = snd_ctl_new1(knew, codec);
4444  if (!kctl)
4445  return -ENOMEM;
4446  if (addr > 0)
4447  kctl->id.device = addr;
4448  if (idx > 0)
4449  kctl->id.index = idx;
4450  err = snd_hda_ctl_add(codec, 0, kctl);
4451  if (!err)
4452  break;
4453  /* try first with another device index corresponding to
4454  * the codec addr; if it still fails (or it's the
4455  * primary codec), then try another control index
4456  */
4457  if (!addr && codec->addr)
4458  addr = codec->addr;
4459  else if (!idx && !knew->index) {
4460  idx = find_empty_mixer_ctl_idx(codec,
4461  knew->name);
4462  if (idx <= 0)
4463  return err;
4464  } else
4465  return err;
4466  }
4467  }
4468  return 0;
4469 }
4471 
4472 #ifdef CONFIG_PM
4473 static void hda_power_work(struct work_struct *work)
4474 {
4475  struct hda_codec *codec =
4476  container_of(work, struct hda_codec, power_work.work);
4477  struct hda_bus *bus = codec->bus;
4478  unsigned int state;
4479 
4480  spin_lock(&codec->power_lock);
4481  if (codec->power_transition > 0) { /* during power-up sequence? */
4482  spin_unlock(&codec->power_lock);
4483  return;
4484  }
4485  if (!codec->power_on || codec->power_count) {
4486  codec->power_transition = 0;
4487  spin_unlock(&codec->power_lock);
4488  return;
4489  }
4490  spin_unlock(&codec->power_lock);
4491 
4492  state = hda_call_codec_suspend(codec, true);
4493  codec->pm_down_notified = 0;
4494  if (!bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
4495  codec->pm_down_notified = 1;
4496  hda_call_pm_notify(bus, false);
4497  }
4498 }
4499 
4500 static void hda_keep_power_on(struct hda_codec *codec)
4501 {
4502  spin_lock(&codec->power_lock);
4503  codec->power_count++;
4504  codec->power_on = 1;
4505  codec->power_jiffies = jiffies;
4506  spin_unlock(&codec->power_lock);
4507 }
4508 
4509 /* update the power on/off account with the current jiffies */
4510 void snd_hda_update_power_acct(struct hda_codec *codec)
4511 {
4512  unsigned long delta = jiffies - codec->power_jiffies;
4513  if (codec->power_on)
4514  codec->power_on_acct += delta;
4515  else
4516  codec->power_off_acct += delta;
4517  codec->power_jiffies += delta;
4518 }
4519 
4520 /* Transition to powered up, if wait_power_down then wait for a pending
4521  * transition to D3 to complete. A pending D3 transition is indicated
4522  * with power_transition == -1. */
4523 /* call this with codec->power_lock held! */
4524 static void __snd_hda_power_up(struct hda_codec *codec, bool wait_power_down)
4525 {
4526  struct hda_bus *bus = codec->bus;
4527 
4528  /* Return if power_on or transitioning to power_on, unless currently
4529  * powering down. */
4530  if ((codec->power_on || codec->power_transition > 0) &&
4531  !(wait_power_down && codec->power_transition < 0))
4532  return;
4533  spin_unlock(&codec->power_lock);
4534 
4535  cancel_delayed_work_sync(&codec->power_work);
4536 
4537  spin_lock(&codec->power_lock);
4538  /* If the power down delayed work was cancelled above before starting,
4539  * then there is no need to go through power up here.
4540  */
4541  if (codec->power_on) {
4542  if (codec->power_transition < 0)
4543  codec->power_transition = 0;
4544  return;
4545  }
4546 
4547  trace_hda_power_up(codec);
4548  snd_hda_update_power_acct(codec);
4549  codec->power_on = 1;
4550  codec->power_jiffies = jiffies;
4551  codec->power_transition = 1; /* avoid reentrance */
4552  spin_unlock(&codec->power_lock);
4553 
4554  if (codec->pm_down_notified) {
4555  codec->pm_down_notified = 0;
4556  hda_call_pm_notify(bus, true);
4557  }
4558 
4559  hda_call_codec_resume(codec);
4560 
4561  spin_lock(&codec->power_lock);
4562  codec->power_transition = 0;
4563 }
4564 
4565 #define power_save(codec) \
4566  ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
4567 
4568 /* Transition to powered down */
4569 static void __snd_hda_power_down(struct hda_codec *codec)
4570 {
4571  if (!codec->power_on || codec->power_count || codec->power_transition)
4572  return;
4573 
4574  if (power_save(codec)) {
4575  codec->power_transition = -1; /* avoid reentrance */
4576  queue_delayed_work(codec->bus->workq, &codec->power_work,
4577  msecs_to_jiffies(power_save(codec) * 1000));
4578  }
4579 }
4580 
4590 void snd_hda_power_save(struct hda_codec *codec, int delta, bool d3wait)
4591 {
4592  spin_lock(&codec->power_lock);
4593  codec->power_count += delta;
4594  trace_hda_power_count(codec);
4595  if (delta > 0)
4596  __snd_hda_power_up(codec, d3wait);
4597  else
4598  __snd_hda_power_down(codec);
4599  spin_unlock(&codec->power_lock);
4600 }
4601 EXPORT_SYMBOL_HDA(snd_hda_power_save);
4602 
4616 int snd_hda_check_amp_list_power(struct hda_codec *codec,
4617  struct hda_loopback_check *check,
4618  hda_nid_t nid)
4619 {
4620  const struct hda_amp_list *p;
4621  int ch, v;
4622 
4623  if (!check->amplist)
4624  return 0;
4625  for (p = check->amplist; p->nid; p++) {
4626  if (p->nid == nid)
4627  break;
4628  }
4629  if (!p->nid)
4630  return 0; /* nothing changed */
4631 
4632  for (p = check->amplist; p->nid; p++) {
4633  for (ch = 0; ch < 2; ch++) {
4634  v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
4635  p->idx);
4636  if (!(v & HDA_AMP_MUTE) && v > 0) {
4637  if (!check->power_on) {
4638  check->power_on = 1;
4639  snd_hda_power_up(codec);
4640  }
4641  return 1;
4642  }
4643  }
4644  }
4645  if (check->power_on) {
4646  check->power_on = 0;
4647  snd_hda_power_down(codec);
4648  }
4649  return 0;
4650 }
4652 #endif
4653 
4654 /*
4655  * Channel mode helper
4656  */
4657 
4662  struct snd_ctl_elem_info *uinfo,
4663  const struct hda_channel_mode *chmode,
4664  int num_chmodes)
4665 {
4667  uinfo->count = 1;
4668  uinfo->value.enumerated.items = num_chmodes;
4669  if (uinfo->value.enumerated.item >= num_chmodes)
4670  uinfo->value.enumerated.item = num_chmodes - 1;
4671  sprintf(uinfo->value.enumerated.name, "%dch",
4672  chmode[uinfo->value.enumerated.item].channels);
4673  return 0;
4674 }
4676 
4680 int snd_hda_ch_mode_get(struct hda_codec *codec,
4681  struct snd_ctl_elem_value *ucontrol,
4682  const struct hda_channel_mode *chmode,
4683  int num_chmodes,
4684  int max_channels)
4685 {
4686  int i;
4687 
4688  for (i = 0; i < num_chmodes; i++) {
4689  if (max_channels == chmode[i].channels) {
4690  ucontrol->value.enumerated.item[0] = i;
4691  break;
4692  }
4693  }
4694  return 0;
4695 }
4697 
4701 int snd_hda_ch_mode_put(struct hda_codec *codec,
4702  struct snd_ctl_elem_value *ucontrol,
4703  const struct hda_channel_mode *chmode,
4704  int num_chmodes,
4705  int *max_channelsp)
4706 {
4707  unsigned int mode;
4708 
4709  mode = ucontrol->value.enumerated.item[0];
4710  if (mode >= num_chmodes)
4711  return -EINVAL;
4712  if (*max_channelsp == chmode[mode].channels)
4713  return 0;
4714  /* change the current channel setting */
4715  *max_channelsp = chmode[mode].channels;
4716  if (chmode[mode].sequence)
4717  snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
4718  return 1;
4719 }
4721 
4722 /*
4723  * input MUX helper
4724  */
4725 
4729 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
4730  struct snd_ctl_elem_info *uinfo)
4731 {
4732  unsigned int index;
4733 
4735  uinfo->count = 1;
4736  uinfo->value.enumerated.items = imux->num_items;
4737  if (!imux->num_items)
4738  return 0;
4739  index = uinfo->value.enumerated.item;
4740  if (index >= imux->num_items)
4741  index = imux->num_items - 1;
4742  strcpy(uinfo->value.enumerated.name, imux->items[index].label);
4743  return 0;
4744 }
4746 
4751  const struct hda_input_mux *imux,
4752  struct snd_ctl_elem_value *ucontrol,
4753  hda_nid_t nid,
4754  unsigned int *cur_val)
4755 {
4756  unsigned int idx;
4757 
4758  if (!imux->num_items)
4759  return 0;
4760  idx = ucontrol->value.enumerated.item[0];
4761  if (idx >= imux->num_items)
4762  idx = imux->num_items - 1;
4763  if (*cur_val == idx)
4764  return 0;
4766  imux->items[idx].index);
4767  *cur_val = idx;
4768  return 1;
4769 }
4771 
4772 
4773 /*
4774  * Multi-channel / digital-out PCM helper functions
4775  */
4776 
4777 /* setup SPDIF output stream */
4778 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
4779  unsigned int stream_tag, unsigned int format)
4780 {
4781  struct hda_spdif_out *spdif = snd_hda_spdif_out_of_nid(codec, nid);
4782 
4783  /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
4784  if (codec->spdif_status_reset && (spdif->ctls & AC_DIG1_ENABLE))
4785  set_dig_out_convert(codec, nid,
4786  spdif->ctls & ~AC_DIG1_ENABLE & 0xff,
4787  -1);
4788  snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
4789  if (codec->slave_dig_outs) {
4790  const hda_nid_t *d;
4791  for (d = codec->slave_dig_outs; *d; d++)
4792  snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
4793  format);
4794  }
4795  /* turn on again (if needed) */
4796  if (codec->spdif_status_reset && (spdif->ctls & AC_DIG1_ENABLE))
4797  set_dig_out_convert(codec, nid,
4798  spdif->ctls & 0xff, -1);
4799 }
4800 
4801 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
4802 {
4803  snd_hda_codec_cleanup_stream(codec, nid);
4804  if (codec->slave_dig_outs) {
4805  const hda_nid_t *d;
4806  for (d = codec->slave_dig_outs; *d; d++)
4807  snd_hda_codec_cleanup_stream(codec, *d);
4808  }
4809 }
4810 
4816 {
4817  struct hda_codec *codec;
4818 
4819  if (!bus)
4820  return;
4821  list_for_each_entry(codec, &bus->codec_list, list) {
4822  if (hda_codec_is_power_on(codec) &&
4823  codec->patch_ops.reboot_notify)
4824  codec->patch_ops.reboot_notify(codec);
4825  }
4826 }
4828 
4833  struct hda_multi_out *mout)
4834 {
4835  mutex_lock(&codec->spdif_mutex);
4836  if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
4837  /* already opened as analog dup; reset it once */
4838  cleanup_dig_out_stream(codec, mout->dig_out_nid);
4840  mutex_unlock(&codec->spdif_mutex);
4841  return 0;
4842 }
4844 
4849  struct hda_multi_out *mout,
4850  unsigned int stream_tag,
4851  unsigned int format,
4852  struct snd_pcm_substream *substream)
4853 {
4854  mutex_lock(&codec->spdif_mutex);
4855  setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
4856  mutex_unlock(&codec->spdif_mutex);
4857  return 0;
4858 }
4860 
4865  struct hda_multi_out *mout)
4866 {
4867  mutex_lock(&codec->spdif_mutex);
4868  cleanup_dig_out_stream(codec, mout->dig_out_nid);
4869  mutex_unlock(&codec->spdif_mutex);
4870  return 0;
4871 }
4873 
4878  struct hda_multi_out *mout)
4879 {
4880  mutex_lock(&codec->spdif_mutex);
4881  mout->dig_out_used = 0;
4882  mutex_unlock(&codec->spdif_mutex);
4883  return 0;
4884 }
4886 
4895  struct hda_multi_out *mout,
4896  struct snd_pcm_substream *substream,
4897  struct hda_pcm_stream *hinfo)
4898 {
4899  struct snd_pcm_runtime *runtime = substream->runtime;
4900  runtime->hw.channels_max = mout->max_channels;
4901  if (mout->dig_out_nid) {
4902  if (!mout->analog_rates) {
4903  mout->analog_rates = hinfo->rates;
4904  mout->analog_formats = hinfo->formats;
4905  mout->analog_maxbps = hinfo->maxbps;
4906  } else {
4907  runtime->hw.rates = mout->analog_rates;
4908  runtime->hw.formats = mout->analog_formats;
4909  hinfo->maxbps = mout->analog_maxbps;
4910  }
4911  if (!mout->spdif_rates) {
4913  &mout->spdif_rates,
4914  &mout->spdif_formats,
4915  &mout->spdif_maxbps);
4916  }
4917  mutex_lock(&codec->spdif_mutex);
4918  if (mout->share_spdif) {
4919  if ((runtime->hw.rates & mout->spdif_rates) &&
4920  (runtime->hw.formats & mout->spdif_formats)) {
4921  runtime->hw.rates &= mout->spdif_rates;
4922  runtime->hw.formats &= mout->spdif_formats;
4923  if (mout->spdif_maxbps < hinfo->maxbps)
4924  hinfo->maxbps = mout->spdif_maxbps;
4925  } else {
4926  mout->share_spdif = 0;
4927  /* FIXME: need notify? */
4928  }
4929  }
4930  mutex_unlock(&codec->spdif_mutex);
4931  }
4932  return snd_pcm_hw_constraint_step(substream->runtime, 0,
4934 }
4936 
4944  struct hda_multi_out *mout,
4945  unsigned int stream_tag,
4946  unsigned int format,
4947  struct snd_pcm_substream *substream)
4948 {
4949  const hda_nid_t *nids = mout->dac_nids;
4950  int chs = substream->runtime->channels;
4951  struct hda_spdif_out *spdif;
4952  int i;
4953 
4954  mutex_lock(&codec->spdif_mutex);
4955  spdif = snd_hda_spdif_out_of_nid(codec, mout->dig_out_nid);
4956  if (mout->dig_out_nid && mout->share_spdif &&
4957  mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
4958  if (chs == 2 &&
4960  format) &&
4961  !(spdif->status & IEC958_AES0_NONAUDIO)) {
4963  setup_dig_out_stream(codec, mout->dig_out_nid,
4964  stream_tag, format);
4965  } else {
4966  mout->dig_out_used = 0;
4967  cleanup_dig_out_stream(codec, mout->dig_out_nid);
4968  }
4969  }
4970  mutex_unlock(&codec->spdif_mutex);
4971 
4972  /* front */
4973  snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
4974  0, format);
4975  if (!mout->no_share_stream &&
4976  mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
4977  /* headphone out will just decode front left/right (stereo) */
4978  snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
4979  0, format);
4980  /* extra outputs copied from front */
4981  for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
4982  if (!mout->no_share_stream && mout->hp_out_nid[i])
4984  mout->hp_out_nid[i],
4985  stream_tag, 0, format);
4986  for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4987  if (!mout->no_share_stream && mout->extra_out_nid[i])
4989  mout->extra_out_nid[i],
4990  stream_tag, 0, format);
4991 
4992  /* surrounds */
4993  for (i = 1; i < mout->num_dacs; i++) {
4994  if (chs >= (i + 1) * 2) /* independent out */
4995  snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4996  i * 2, format);
4997  else if (!mout->no_share_stream) /* copy front */
4998  snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4999  0, format);
5000  }
5001  return 0;
5002 }
5004 
5009  struct hda_multi_out *mout)
5010 {
5011  const hda_nid_t *nids = mout->dac_nids;
5012  int i;
5013 
5014  for (i = 0; i < mout->num_dacs; i++)
5015  snd_hda_codec_cleanup_stream(codec, nids[i]);
5016  if (mout->hp_nid)
5017  snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
5018  for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
5019  if (mout->hp_out_nid[i])
5021  mout->hp_out_nid[i]);
5022  for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
5023  if (mout->extra_out_nid[i])
5025  mout->extra_out_nid[i]);
5026  mutex_lock(&codec->spdif_mutex);
5027  if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
5028  cleanup_dig_out_stream(codec, mout->dig_out_nid);
5029  mout->dig_out_used = 0;
5030  }
5031  mutex_unlock(&codec->spdif_mutex);
5032  return 0;
5033 }
5035 
5042 unsigned int snd_hda_get_default_vref(struct hda_codec *codec, hda_nid_t pin)
5043 {
5044  unsigned int pincap;
5045  unsigned int oldval;
5046  oldval = snd_hda_codec_read(codec, pin, 0,
5048  pincap = snd_hda_query_pin_caps(codec, pin);
5049  pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
5050  /* Exception: if the default pin setup is vref50, we give it priority */
5051  if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50)
5052  return AC_PINCTL_VREF_80;
5053  else if (pincap & AC_PINCAP_VREF_50)
5054  return AC_PINCTL_VREF_50;
5055  else if (pincap & AC_PINCAP_VREF_100)
5056  return AC_PINCTL_VREF_100;
5057  else if (pincap & AC_PINCAP_VREF_GRD)
5058  return AC_PINCTL_VREF_GRD;
5059  return AC_PINCTL_VREF_HIZ;
5060 }
5062 
5064  unsigned int val, bool cached)
5065 {
5066  if (val) {
5067  unsigned int cap = snd_hda_query_pin_caps(codec, pin);
5068  if (cap && (val & AC_PINCTL_OUT_EN)) {
5069  if (!(cap & AC_PINCAP_OUT))
5070  val &= ~(AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
5071  else if ((val & AC_PINCTL_HP_EN) &&
5072  !(cap & AC_PINCAP_HP_DRV))
5073  val &= ~AC_PINCTL_HP_EN;
5074  }
5075  if (cap && (val & AC_PINCTL_IN_EN)) {
5076  if (!(cap & AC_PINCAP_IN))
5077  val &= ~(AC_PINCTL_IN_EN | AC_PINCTL_VREFEN);
5078  }
5079  }
5080  if (cached)
5081  return snd_hda_codec_update_cache(codec, pin, 0,
5083  else
5084  return snd_hda_codec_write(codec, pin, 0,
5086 }
5088 
5096 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
5097  int index, int *type_idx)
5098 {
5099  int i, label_idx = 0;
5100  if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
5101  snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
5102  return -EINVAL;
5103  }
5104  for (i = 0; i < imux->num_items; i++) {
5105  if (!strncmp(label, imux->items[i].label, strlen(label)))
5106  label_idx++;
5107  }
5108  if (type_idx)
5109  *type_idx = label_idx;
5110  if (label_idx > 0)
5111  snprintf(imux->items[imux->num_items].label,
5112  sizeof(imux->items[imux->num_items].label),
5113  "%s %d", label, label_idx);
5114  else
5115  strlcpy(imux->items[imux->num_items].label, label,
5116  sizeof(imux->items[imux->num_items].label));
5117  imux->items[imux->num_items].index = index;
5118  imux->num_items++;
5119  return 0;
5120 }
5122 
5123 
5124 #ifdef CONFIG_PM
5125 /*
5126  * power management
5127  */
5128 
5135 int snd_hda_suspend(struct hda_bus *bus)
5136 {
5137  struct hda_codec *codec;
5138 
5139  list_for_each_entry(codec, &bus->codec_list, list) {
5140  if (hda_codec_is_power_on(codec))
5141  hda_call_codec_suspend(codec, false);
5142  }
5143  return 0;
5144 }
5145 EXPORT_SYMBOL_HDA(snd_hda_suspend);
5146 
5153 int snd_hda_resume(struct hda_bus *bus)
5154 {
5155  struct hda_codec *codec;
5156 
5157  list_for_each_entry(codec, &bus->codec_list, list) {
5158  hda_call_codec_resume(codec);
5159  }
5160  return 0;
5161 }
5162 EXPORT_SYMBOL_HDA(snd_hda_resume);
5163 #endif /* CONFIG_PM */
5164 
5165 /*
5166  * generic arrays
5167  */
5168 
5178 void *snd_array_new(struct snd_array *array)
5179 {
5180  if (snd_BUG_ON(!array->elem_size))
5181  return NULL;
5182  if (array->used >= array->alloced) {
5183  int num = array->alloced + array->alloc_align;
5184  int size = (num + 1) * array->elem_size;
5185  int oldsize = array->alloced * array->elem_size;
5186  void *nlist;
5187  if (snd_BUG_ON(num >= 4096))
5188  return NULL;
5189  nlist = krealloc(array->list, size, GFP_KERNEL);
5190  if (!nlist)
5191  return NULL;
5192  memset(nlist + oldsize, 0, size - oldsize);
5193  array->list = nlist;
5194  array->alloced = num;
5195  }
5196  return snd_array_elem(array, array->used++);
5197 }
5199 
5204 void snd_array_free(struct snd_array *array)
5205 {
5206  kfree(array->list);
5207  array->used = 0;
5208  array->alloced = 0;
5209  array->list = NULL;
5210 }
5212 
5221 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
5222 {
5223  static unsigned int bits[] = { 8, 16, 20, 24, 32 };
5224  int i, j;
5225 
5226  for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
5227  if (pcm & (AC_SUPPCM_BITS_8 << i))
5228  j += snprintf(buf + j, buflen - j, " %d", bits[i]);
5229 
5230  buf[j] = '\0'; /* necessary when j == 0 */
5231 }
5233 
5234 MODULE_DESCRIPTION("HDA codec core");
5235 MODULE_LICENSE("GPL");