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; |
David Henningsson | a385d97 | 2013-03-21 12:16:29 +0100 | [diff] [blame] | 39 | unsigned int is_headset_mic:1; |
David Henningsson | cb420b1 | 2013-04-11 11:30:28 +0200 | [diff] [blame^] | 40 | unsigned int is_headphone_mic:1; /* Mic-only in headphone jack */ |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 41 | }; |
| 42 | |
| 43 | struct auto_pin_cfg; |
| 44 | const char *hda_get_autocfg_input_label(struct hda_codec *codec, |
| 45 | const struct auto_pin_cfg *cfg, |
| 46 | int input); |
| 47 | int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, |
| 48 | const struct auto_pin_cfg *cfg, |
| 49 | char *label, int maxlen, int *indexp); |
| 50 | |
| 51 | enum { |
| 52 | INPUT_PIN_ATTR_UNUSED, /* pin not connected */ |
| 53 | INPUT_PIN_ATTR_INT, /* internal mic/line-in */ |
| 54 | INPUT_PIN_ATTR_DOCK, /* docking mic/line-in */ |
| 55 | INPUT_PIN_ATTR_NORMAL, /* mic/line-in jack */ |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 56 | INPUT_PIN_ATTR_REAR, /* mic/line-in jack in rear */ |
Takashi Iwai | 5ec16d1 | 2012-11-28 18:11:59 +0100 | [diff] [blame] | 57 | INPUT_PIN_ATTR_FRONT, /* mic/line-in jack in front */ |
| 58 | INPUT_PIN_ATTR_LAST = INPUT_PIN_ATTR_FRONT, |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 59 | }; |
| 60 | |
| 61 | int snd_hda_get_input_pin_attr(unsigned int def_conf); |
| 62 | |
| 63 | struct auto_pin_cfg { |
| 64 | int line_outs; |
| 65 | /* sorted in the order of Front/Surr/CLFE/Side */ |
| 66 | hda_nid_t line_out_pins[AUTO_CFG_MAX_OUTS]; |
| 67 | int speaker_outs; |
| 68 | hda_nid_t speaker_pins[AUTO_CFG_MAX_OUTS]; |
| 69 | int hp_outs; |
| 70 | int line_out_type; /* AUTO_PIN_XXX_OUT */ |
| 71 | hda_nid_t hp_pins[AUTO_CFG_MAX_OUTS]; |
| 72 | int num_inputs; |
| 73 | struct auto_pin_cfg_item inputs[AUTO_CFG_MAX_INS]; |
| 74 | int dig_outs; |
| 75 | hda_nid_t dig_out_pins[2]; |
| 76 | hda_nid_t dig_in_pin; |
| 77 | hda_nid_t mono_out_pin; |
| 78 | int dig_out_type[2]; /* HDA_PCM_TYPE_XXX */ |
| 79 | int dig_in_type; /* HDA_PCM_TYPE_XXX */ |
| 80 | }; |
| 81 | |
| 82 | /* bit-flags for snd_hda_parse_pin_def_config() behavior */ |
David Henningsson | cb420b1 | 2013-04-11 11:30:28 +0200 | [diff] [blame^] | 83 | #define HDA_PINCFG_NO_HP_FIXUP (1 << 0) /* no HP-split */ |
| 84 | #define HDA_PINCFG_NO_LO_FIXUP (1 << 1) /* don't take other outs as LO */ |
| 85 | #define HDA_PINCFG_HEADSET_MIC (1 << 2) /* Try to find headset mic; mark seq number as 0xc to trigger */ |
| 86 | #define HDA_PINCFG_HEADPHONE_MIC (1 << 3) /* Try to find headphone mic; mark seq number as 0xd to trigger */ |
Takashi Iwai | 128bc4b | 2012-05-07 17:42:31 +0200 | [diff] [blame] | 87 | |
| 88 | int snd_hda_parse_pin_defcfg(struct hda_codec *codec, |
| 89 | struct auto_pin_cfg *cfg, |
| 90 | const hda_nid_t *ignore_nids, |
| 91 | unsigned int cond_flags); |
| 92 | |
| 93 | /* older function */ |
| 94 | #define snd_hda_parse_pin_def_config(codec, cfg, ignore) \ |
| 95 | snd_hda_parse_pin_defcfg(codec, cfg, ignore, 0) |
| 96 | |
Takashi Iwai | 23d30f2 | 2012-05-07 17:17:32 +0200 | [diff] [blame] | 97 | #endif /* __SOUND_HDA_AUTO_PARSER_H */ |