Takashi Iwai | 23d30f2 | 2012-05-07 17:17:32 +0200 | [diff] [blame] | 1 | /* |
| 2 | * BIOS auto-parser helper functions for HD-audio |
| 3 | * |
| 4 | * Copyright (c) 2012 Takashi Iwai <tiwai@suse.de> |
| 5 | * |
| 6 | * This driver is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by |
| 8 | * the Free Software Foundation; either version 2 of the License, or |
| 9 | * (at your option) any later version. |
| 10 | */ |
| 11 | |
| 12 | #ifndef __SOUND_HDA_AUTO_PARSER_H |
| 13 | #define __SOUND_HDA_AUTO_PARSER_H |
| 14 | |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 15 | /* |
| 16 | * Helper for automatic pin configuration |
| 17 | */ |
| 18 | |
| 19 | enum { |
| 20 | AUTO_PIN_MIC, |
| 21 | AUTO_PIN_LINE_IN, |
| 22 | AUTO_PIN_CD, |
| 23 | AUTO_PIN_AUX, |
| 24 | AUTO_PIN_LAST |
| 25 | }; |
| 26 | |
| 27 | enum { |
| 28 | AUTO_PIN_LINE_OUT, |
| 29 | AUTO_PIN_SPEAKER_OUT, |
| 30 | AUTO_PIN_HP_OUT |
| 31 | }; |
| 32 | |
| 33 | #define AUTO_CFG_MAX_OUTS HDA_MAX_OUTS |
| 34 | #define AUTO_CFG_MAX_INS 8 |
| 35 | |
| 36 | struct auto_pin_cfg_item { |
| 37 | hda_nid_t pin; |
| 38 | int type; |
| 39 | }; |
| 40 | |
| 41 | struct auto_pin_cfg; |
| 42 | const char *hda_get_autocfg_input_label(struct hda_codec *codec, |
| 43 | const struct auto_pin_cfg *cfg, |
| 44 | int input); |
| 45 | int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, |
| 46 | const struct auto_pin_cfg *cfg, |
| 47 | char *label, int maxlen, int *indexp); |
| 48 | |
| 49 | enum { |
| 50 | INPUT_PIN_ATTR_UNUSED, /* pin not connected */ |
| 51 | INPUT_PIN_ATTR_INT, /* internal mic/line-in */ |
| 52 | INPUT_PIN_ATTR_DOCK, /* docking mic/line-in */ |
| 53 | INPUT_PIN_ATTR_NORMAL, /* mic/line-in jack */ |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 54 | INPUT_PIN_ATTR_REAR, /* mic/line-in jack in rear */ |
Takashi Iwai | 5ec16d1 | 2012-11-28 18:11:59 +0100 | [diff] [blame] | 55 | INPUT_PIN_ATTR_FRONT, /* mic/line-in jack in front */ |
| 56 | INPUT_PIN_ATTR_LAST = INPUT_PIN_ATTR_FRONT, |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 57 | }; |
| 58 | |
| 59 | int snd_hda_get_input_pin_attr(unsigned int def_conf); |
| 60 | |
| 61 | struct auto_pin_cfg { |
| 62 | int line_outs; |
| 63 | /* sorted in the order of Front/Surr/CLFE/Side */ |
| 64 | hda_nid_t line_out_pins[AUTO_CFG_MAX_OUTS]; |
| 65 | int speaker_outs; |
| 66 | hda_nid_t speaker_pins[AUTO_CFG_MAX_OUTS]; |
| 67 | int hp_outs; |
| 68 | int line_out_type; /* AUTO_PIN_XXX_OUT */ |
| 69 | hda_nid_t hp_pins[AUTO_CFG_MAX_OUTS]; |
| 70 | int num_inputs; |
| 71 | struct auto_pin_cfg_item inputs[AUTO_CFG_MAX_INS]; |
| 72 | int dig_outs; |
| 73 | hda_nid_t dig_out_pins[2]; |
| 74 | hda_nid_t dig_in_pin; |
| 75 | hda_nid_t mono_out_pin; |
| 76 | int dig_out_type[2]; /* HDA_PCM_TYPE_XXX */ |
| 77 | int dig_in_type; /* HDA_PCM_TYPE_XXX */ |
| 78 | }; |
| 79 | |
| 80 | /* bit-flags for snd_hda_parse_pin_def_config() behavior */ |
| 81 | #define HDA_PINCFG_NO_HP_FIXUP (1 << 0) /* no HP-split */ |
| 82 | #define HDA_PINCFG_NO_LO_FIXUP (1 << 1) /* don't take other outs as LO */ |
| 83 | |
| 84 | int snd_hda_parse_pin_defcfg(struct hda_codec *codec, |
| 85 | struct auto_pin_cfg *cfg, |
| 86 | const hda_nid_t *ignore_nids, |
| 87 | unsigned int cond_flags); |
| 88 | |
| 89 | /* older function */ |
| 90 | #define snd_hda_parse_pin_def_config(codec, cfg, ignore) \ |
| 91 | snd_hda_parse_pin_defcfg(codec, cfg, ignore, 0) |
| 92 | |
Takashi Iwai | 23d30f2 | 2012-05-07 17:17:32 +0200 | [diff] [blame] | 93 | #endif /* __SOUND_HDA_AUTO_PARSER_H */ |