ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2014年7月10日 星期四

struct snd_kcontrol_new {
  snd_ctl_elem_iface_t iface; /* interface identifier */
  unsigned int device;  /* device/client number */
  unsigned int subdevice;  /* subdevice (substream) number */
  unsigned char *name;  /* ASCII name of item */
  unsigned int index;  /* index of item */
  unsigned int access;  /* access rights */
  unsigned int count;  /* count of same elements */
  snd_kcontrol_info_t *info;
  snd_kcontrol_get_t *get;
  snd_kcontrol_put_t *put;
  union {
  snd_kcontrol_tlv_rw_t *c;
  const unsigned int *p;
  } tlv;
  unsigned long private_value;
};

struct soc_mixer_control {
 int min, max, platform_max;
 unsigned int reg, rreg, shift, rshift, invert;
}

static const struct snd_kcontrol_new rt5625_snd_controls[] = {
        ...
 SOC_DOUBLE("Headphone Playback Switch", RT5625_HP_OUT_VOL,
   RT5625_L_MUTE_SFT, RT5625_R_MUTE_SFT, 1, 1),
        ...
};

#define SOC_DOUBLE(xname, xreg, shift_left, shift_right, xmax, xinvert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
 .put = snd_soc_put_volsw, \
 .private_value = (unsigned long)&(struct soc_mixer_control) \
                 {
                   .reg = xreg, .shift = shift_left, .rshift = shift_right, \
                   .max = xmax, .platform_max = xmax, .invert = xinvert    \
                 }                                                         \
}

/*
 * DAPM audio route definition.
 *
 * Defines an audio route originating at source via control and finishing
 * at sink.
 */
struct snd_soc_dapm_route {
 const char *sink;
 const char *control;
 const char *source;

 /* Note: currently only supported for links where source is a supply */
 int (*connected)(struct snd_soc_dapm_widget *source,
    struct snd_soc_dapm_widget *sink);
};

沒有留言:

標籤

網誌存檔