Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / sound / pci / hda / hda_codec.h
index c9e9dc9..40520e9 100644 (file)
@@ -75,7 +75,12 @@ enum {
 #define AC_VERB_GET_DIGI_CONVERT               0x0f0d
 #define AC_VERB_GET_VOLUME_KNOB_CONTROL                0x0f0f
 /* f10-f1a: GPIO */
+#define AC_VERB_GET_GPIO_DATA                  0x0f15
+#define AC_VERB_GET_GPIO_MASK                  0x0f16
+#define AC_VERB_GET_GPIO_DIRECTION             0x0f17
 #define AC_VERB_GET_CONFIG_DEFAULT             0x0f1c
+/* f20: AFG/MFG */
+#define AC_VERB_GET_SUBSYSTEM_ID               0x0f20
 
 /*
  * SET verbs
@@ -93,10 +98,13 @@ enum {
 #define AC_VERB_SET_UNSOLICITED_ENABLE         0x708
 #define AC_VERB_SET_PIN_SENSE                  0x709
 #define AC_VERB_SET_BEEP_CONTROL               0x70a
-#define AC_VERB_SET_EAPD_BTLENALBE             0x70c
+#define AC_VERB_SET_EAPD_BTLENABLE             0x70c
 #define AC_VERB_SET_DIGI_CONVERT_1             0x70d
 #define AC_VERB_SET_DIGI_CONVERT_2             0x70e
 #define AC_VERB_SET_VOLUME_KNOB_CONTROL                0x70f
+#define AC_VERB_SET_GPIO_DATA                  0x715
+#define AC_VERB_SET_GPIO_MASK                  0x716
+#define AC_VERB_SET_GPIO_DIRECTION             0x717
 #define AC_VERB_SET_CONFIG_DEFAULT_BYTES_0     0x71c
 #define AC_VERB_SET_CONFIG_DEFAULT_BYTES_1     0x71d
 #define AC_VERB_SET_CONFIG_DEFAULT_BYTES_2     0x71e
@@ -176,16 +184,15 @@ enum {
 #define AC_PINCAP_OUT                  (1<<4)  /* output capable */
 #define AC_PINCAP_IN                   (1<<5)  /* input capable */
 #define AC_PINCAP_BALANCE              (1<<6)  /* balanced I/O capable */
-#define AC_PINCAP_VREF                 (7<<8)
+#define AC_PINCAP_VREF                 (0x37<<8)
 #define AC_PINCAP_VREF_SHIFT           8
 #define AC_PINCAP_EAPD                 (1<<16) /* EAPD capable */
-/* Vref status (used in pin cap and pin ctl) */
-#define AC_PIN_VREF_HIZ                        (1<<0)  /* Hi-Z */
-#define AC_PIN_VREF_50                 (1<<1)  /* 50% */
-#define AC_PIN_VREF_GRD                        (1<<2)  /* ground */
-#define AC_PIN_VREF_80                 (1<<4)  /* 80% */
-#define AC_PIN_VREF_100                        (1<<5)  /* 100% */
-
+/* Vref status (used in pin cap) */
+#define AC_PINCAP_VREF_HIZ             (1<<0)  /* Hi-Z */
+#define AC_PINCAP_VREF_50              (1<<1)  /* 50% */
+#define AC_PINCAP_VREF_GRD             (1<<2)  /* ground */
+#define AC_PINCAP_VREF_80              (1<<4)  /* 80% */
+#define AC_PINCAP_VREF_100             (1<<5)  /* 100% */
 
 /* Amplifier capabilities */
 #define AC_AMPCAP_OFFSET               (0x7f<<0)  /* 0dB offset */
@@ -207,6 +214,12 @@ enum {
 #define AC_PWRST_D2SUP                 (1<<2)
 #define AC_PWRST_D3SUP                 (1<<3)
 
+/* Power state values */
+#define AC_PWRST_D0                    0x00
+#define AC_PWRST_D1                    0x01
+#define AC_PWRST_D2                    0x02
+#define AC_PWRST_D3                    0x03
+
 /* Processing capabilies */
 #define AC_PCAP_BENIGN                 (1<<0)
 #define AC_PCAP_NUM_COEF               (0xff<<8)
@@ -248,14 +261,24 @@ enum {
 
 /* Pin widget control - 8bit */
 #define AC_PINCTL_VREFEN               (0x7<<0)
+#define AC_PINCTL_VREF_HIZ             0       /* Hi-Z */
+#define AC_PINCTL_VREF_50              1       /* 50% */
+#define AC_PINCTL_VREF_GRD             2       /* ground */
+#define AC_PINCTL_VREF_80              4       /* 80% */
+#define AC_PINCTL_VREF_100             5       /* 100% */
 #define AC_PINCTL_IN_EN                        (1<<5)
 #define AC_PINCTL_OUT_EN               (1<<6)
 #define AC_PINCTL_HP_EN                        (1<<7)
 
+/* Unsolicited response - 8bit */
+#define AC_USRSP_EN                    (1<<7)
+
 /* configuration default - 32bit */
 #define AC_DEFCFG_SEQUENCE             (0xf<<0)
 #define AC_DEFCFG_DEF_ASSOC            (0xf<<4)
+#define AC_DEFCFG_ASSOC_SHIFT          4
 #define AC_DEFCFG_MISC                 (0xf<<8)
+#define AC_DEFCFG_MISC_SHIFT           8
 #define AC_DEFCFG_COLOR                        (0xf<<12)
 #define AC_DEFCFG_COLOR_SHIFT          12
 #define AC_DEFCFG_CONN_TYPE            (0xf<<16)
@@ -359,7 +382,7 @@ enum {
 };
 
 /* max. connections to a widget */
-#define HDA_MAX_CONNECTIONS    16
+#define HDA_MAX_CONNECTIONS    32
 
 /* max. codec address */
 #define HDA_MAX_CODEC_ADDRESS  0x0f
@@ -403,7 +426,7 @@ struct hda_bus_template {
  * A hda_bus contains several codecs in the list codec_list.
  */
 struct hda_bus {
-       snd_card_t *card;
+       struct snd_card *card;
 
        /* copied from template */
        void *private_data;
@@ -413,14 +436,14 @@ struct hda_bus {
 
        /* codec linked list */
        struct list_head codec_list;
-       struct hda_codec *caddr_tbl[HDA_MAX_CODEC_ADDRESS]; /* caddr -> codec */
+       struct hda_codec *caddr_tbl[HDA_MAX_CODEC_ADDRESS + 1]; /* caddr -> codec */
 
-       struct semaphore cmd_mutex;
+       struct mutex cmd_mutex;
 
        /* unsolicited event queue */
        struct hda_bus_unsolicited *unsol;
 
-       snd_info_entry_t *proc;
+       struct snd_info_entry *proc;
 };
 
 /*
@@ -464,14 +487,14 @@ struct hda_amp_info {
 /* PCM callbacks */
 struct hda_pcm_ops {
        int (*open)(struct hda_pcm_stream *info, struct hda_codec *codec,
-                   snd_pcm_substream_t *substream);
+                   struct snd_pcm_substream *substream);
        int (*close)(struct hda_pcm_stream *info, struct hda_codec *codec,
-                    snd_pcm_substream_t *substream);
+                    struct snd_pcm_substream *substream);
        int (*prepare)(struct hda_pcm_stream *info, struct hda_codec *codec,
                       unsigned int stream_tag, unsigned int format,
-                      snd_pcm_substream_t *substream);
+                      struct snd_pcm_substream *substream);
        int (*cleanup)(struct hda_pcm_stream *info, struct hda_codec *codec,
-                      snd_pcm_substream_t *substream);
+                      struct snd_pcm_substream *substream);
 };
 
 /* PCM information for each substream */
@@ -490,6 +513,7 @@ struct hda_pcm_stream {
 struct hda_pcm {
        char *name;
        struct hda_pcm_stream stream[2];
+       unsigned int is_modem;  /* modem codec? */
 };
 
 /* codec information */
@@ -499,6 +523,7 @@ struct hda_codec {
        struct list_head list;  /* list point */
 
        hda_nid_t afg;  /* AFG node id */
+       hda_nid_t mfg;  /* MFG node id */
 
        /* ids */
        u32 vendor_id;
@@ -523,12 +548,18 @@ struct hda_codec {
        /* codec specific info */
        void *spec;
 
+       /* widget capabilities cache */
+       unsigned int num_nodes;
+       hda_nid_t start_nid;
+       u32 *wcaps;
+
        /* hash for amp access */
        u16 amp_hash[32];
        int num_amp_entries;
-       struct hda_amp_info amp_info[128]; /* big enough? */
+       int amp_info_size;
+       struct hda_amp_info *amp_info;
 
-       struct semaphore spdif_mutex;
+       struct mutex spdif_mutex;
        unsigned int spdif_status;      /* IEC958 status bits */
        unsigned short spdif_ctls;      /* SPDIF control bits */
        unsigned int spdif_in_enable;   /* SPDIF input enable? */
@@ -543,7 +574,7 @@ enum {
 /*
  * constructors
  */
-int snd_hda_bus_new(snd_card_t *card, const struct hda_bus_template *temp,
+int snd_hda_bus_new(struct snd_card *card, const struct hda_bus_template *temp,
                    struct hda_bus **busp);
 int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
                      struct hda_codec **codecp);