Ignore:
Timestamp:
Apr 3, 2017, 4:51:56 PM (8 years ago)
Author:
David Azarewicz
Message:

Merged/reintegrated v2 branch into trunk. Trunk is now v2

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/include/sound/soc-dapm.h

    r464 r598  
    1717#include <linux/types.h>
    1818#include <sound/control.h>
    19 #include <sound/soc.h>
    2019
    2120/* widget has no PM register bit */
     
    7372{       .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
    7473        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols}
     74#define SND_SOC_DAPM_OUT_DRV(wname, wreg, wshift, winvert,\
     75         wcontrols, wncontrols) \
     76{       .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \
     77        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols}
    7578#define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \
    7679         wcontrols, wncontrols)\
     
    9194{       .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \
    9295        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1}
     96#define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \
     97{       .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \
     98        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1}
    9399#define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \
    94100{       .id = snd_soc_dapm_value_mux, .name = wname, .reg = wreg, \
     
    96102        .num_kcontrols = 1}
    97103
     104/* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */
     105#define SOC_PGA_ARRAY(wname, wreg, wshift, winvert,\
     106         wcontrols) \
     107{       .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
     108        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
     109#define SOC_MIXER_ARRAY(wname, wreg, wshift, winvert, \
     110         wcontrols)\
     111{       .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
     112        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
     113#define SOC_MIXER_NAMED_CTL_ARRAY(wname, wreg, wshift, winvert, \
     114         wcontrols)\
     115{       .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \
     116        .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \
     117        .num_kcontrols = ARRAY_SIZE(wcontrols)}
     118
    98119/* path domain with event - event handler must return 0 for success */
    99120#define SND_SOC_DAPM_PGA_E(wname, wreg, wshift, winvert, wcontrols, \
    100121        wncontrols, wevent, wflags) \
    101122{       .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
     123        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \
     124        .event = wevent, .event_flags = wflags}
     125#define SND_SOC_DAPM_OUT_DRV_E(wname, wreg, wshift, winvert, wcontrols, \
     126        wncontrols, wevent, wflags) \
     127{       .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \
    102128        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \
    103129        .event = wevent, .event_flags = wflags}
     
    126152        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \
    127153        .event = wevent, .event_flags = wflags}
     154#define SND_SOC_DAPM_VIRT_MUX_E(wname, wreg, wshift, winvert, wcontrols, \
     155        wevent, wflags) \
     156{       .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \
     157        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \
     158        .event = wevent, .event_flags = wflags}
     159
     160/* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */
     161#define SOC_PGA_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \
     162        wevent, wflags) \
     163{       .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
     164        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
     165        .event = wevent, .event_flags = wflags}
     166#define SOC_MIXER_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \
     167        wevent, wflags) \
     168{       .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
     169        .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
     170        .event = wevent, .event_flags = wflags}
     171#define SOC_MIXER_NAMED_CTL_E_ARRAY(wname, wreg, wshift, winvert, \
     172        wcontrols, wevent, wflags) \
     173{       .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
     174        .invert = winvert, .kcontrols = wcontrols, \
     175        .num_kcontrols = ARRAY_SIZE(wcontrols), .event = wevent, .event_flags = wflags}
    128176
    129177/* events that are pre and post DAPM */
     
    141189{       .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
    142190        .reg = wreg, .shift = wshift, .invert = winvert }
     191#define SND_SOC_DAPM_AIF_IN_E(wname, stname, wslot, wreg, wshift, winvert, \
     192                              wevent, wflags)                           \
     193{       .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
     194        .reg = wreg, .shift = wshift, .invert = winvert, \
     195        .event = wevent, .event_flags = wflags }
    143196#define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \
    144197{       .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
    145198        .reg = wreg, .shift = wshift, .invert = winvert }
     199#define SND_SOC_DAPM_AIF_OUT_E(wname, stname, wslot, wreg, wshift, winvert, \
     200                             wevent, wflags)                            \
     201{       .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
     202        .reg = wreg, .shift = wshift, .invert = winvert, \
     203        .event = wevent, .event_flags = wflags }
    146204#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
    147205{       .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
     
    178236        .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
    179237        .private_value =  SOC_SINGLE_VALUE(reg, shift, max, invert) }
    180 #define SOC_DAPM_DOUBLE(xname, reg, shift_left, shift_right, max, invert, \
    181         power) \
    182 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
    183         .info = snd_soc_info_volsw, \
    184         .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
    185         .private_value = (reg) | ((shift_left) << 8) | ((shift_right) << 12) |\
    186                 ((max) << 16) | ((invert) << 24) }
    187238#define SOC_DAPM_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
    188239{       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
     
    192243        .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
    193244        .private_value =  SOC_SINGLE_VALUE(reg, shift, max, invert) }
    194 #define SOC_DAPM_DOUBLE_TLV(xname, reg, shift_left, shift_right, max, invert, \
    195         power, tlv_array) \
    196 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
    197         .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE,\
    198         .tlv.p = (tlv_array), \
    199         .info = snd_soc_info_volsw, \
    200         .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
    201         .private_value = (reg) | ((shift_left) << 8) | ((shift_right) << 12) |\
    202                 ((max) << 16) | ((invert) << 24) }
    203245#define SOC_DAPM_ENUM(xname, xenum) \
    204246{       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
     
    207249        .put = snd_soc_dapm_put_enum_double, \
    208250        .private_value = (unsigned long)&xenum }
     251#define SOC_DAPM_ENUM_VIRT(xname, xenum)                    \
     252{       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
     253        .info = snd_soc_info_enum_double, \
     254        .get = snd_soc_dapm_get_enum_virt, \
     255        .put = snd_soc_dapm_put_enum_virt, \
     256        .private_value = (unsigned long)&xenum }
    209257#define SOC_DAPM_VALUE_ENUM(xname, xenum) \
    210258{       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
     
    236284#define SND_SOC_DAPM_PRE_REG    0x10    /* before audio path setup */
    237285#define SND_SOC_DAPM_POST_REG   0x20    /* after audio path setup */
     286#define SND_SOC_DAPM_PRE_POST_PMD \
     287                                (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD)
    238288
    239289/* convenience event type detection */
     
    248298struct snd_soc_dapm_pin;
    249299struct snd_soc_dapm_route;
     300struct snd_soc_dapm_context;
    250301
    251302int dapm_reg_event(struct snd_soc_dapm_widget *w,
     
    260311        struct snd_ctl_elem_value *ucontrol);
    261312int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
     313        struct snd_ctl_elem_value *ucontrol);
     314int snd_soc_dapm_get_enum_virt(struct snd_kcontrol *kcontrol,
     315        struct snd_ctl_elem_value *ucontrol);
     316int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol,
    262317        struct snd_ctl_elem_value *ucontrol);
    263318int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol,
     
    271326int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
    272327        struct snd_ctl_elem_value *uncontrol);
    273 int snd_soc_dapm_new_control(struct snd_soc_codec *codec,
     328int snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
    274329        const struct snd_soc_dapm_widget *widget);
    275 int snd_soc_dapm_new_controls(struct snd_soc_codec *codec,
     330int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
    276331        const struct snd_soc_dapm_widget *widget,
    277332        int num);
    278333
    279334/* dapm path setup */
    280 int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec);
    281 void snd_soc_dapm_free(struct snd_soc_device *socdev);
    282 int snd_soc_dapm_add_routes(struct snd_soc_codec *codec,
     335int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm);
     336void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm);
     337int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
    283338                            const struct snd_soc_dapm_route *route, int num);
    284339
    285340/* dapm events */
    286 int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream,
    287         int event);
    288 void snd_soc_dapm_shutdown(struct snd_soc_device *socdev);
     341int snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd,
     342        const char *stream, int event);
     343void snd_soc_dapm_shutdown(struct snd_soc_card *card);
    289344
    290345/* dapm sys fs - used by the core */
    291346int snd_soc_dapm_sys_add(struct device *dev);
    292 void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec);
     347void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm);
    293348
    294349/* dapm audio pin control and status */
    295 int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin);
    296 int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, const char *pin);
    297 int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, const char *pin);
    298 int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, const char *pin);
    299 int snd_soc_dapm_sync(struct snd_soc_codec *codec);
     350int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm,
     351                            const char *pin);
     352int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm,
     353                             const char *pin);
     354int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin);
     355int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
     356                                const char *pin);
     357int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm);
     358int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
     359                                  const char *pin);
     360int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
     361                                const char *pin);
    300362
    301363/* dapm widget types */
     
    304366        snd_soc_dapm_output,            /* output pin */
    305367        snd_soc_dapm_mux,                       /* selects 1 analog signal from many inputs */
     368        snd_soc_dapm_virt_mux,                  /* virtual version of snd_soc_dapm_mux */
    306369        snd_soc_dapm_value_mux,                 /* selects 1 analog signal from many inputs */
    307370        snd_soc_dapm_mixer,                     /* mixes several analog signals together */
    308371        snd_soc_dapm_mixer_named_ctl,           /* mixer with named controls */
    309372        snd_soc_dapm_pga,                       /* programmable gain/attenuation (volume) */
     373        snd_soc_dapm_out_drv,                   /* output driver */
    310374        snd_soc_dapm_adc,                       /* analog to digital converter */
    311375        snd_soc_dapm_dac,                       /* digital to analog converter */
     
    334398        const char *control;
    335399        const char *source;
     400
     401        /* Note: currently only supported for links where source is a supply */
     402        int (*connected)(struct snd_soc_dapm_widget *source,
     403                         struct snd_soc_dapm_widget *sink);
    336404};
    337405
     
    349417        u32 connect:1;  /* source and sink widgets are connected */
    350418        u32 walked:1;   /* path has been walked */
     419
     420        int (*connected)(struct snd_soc_dapm_widget *source,
     421                         struct snd_soc_dapm_widget *sink);
    351422
    352423        struct list_head list_source;
     
    362433        struct snd_soc_codec *codec;
    363434        struct list_head list;
     435        struct snd_soc_dapm_context *dapm;
    364436
    365437        /* dapm control */
     
    377449        unsigned char new:1;                    /* cnew complete */
    378450        unsigned char ext:1;                    /* has external widgets */
    379         unsigned char muted:1;                  /* muted for pop reduction */
    380         unsigned char suspend:1;                /* was active before suspend */
    381         unsigned char pmdown:1;                 /* waiting for timeout */
     451        unsigned char force:1;                  /* force state */
     452        unsigned char ignore_suspend:1;         /* kept enabled over suspend */
    382453
    383454        int (*power_check)(struct snd_soc_dapm_widget *w);
     
    399470};
    400471
     472struct snd_soc_dapm_update {
     473        struct snd_soc_dapm_widget *widget;
     474        struct snd_kcontrol *kcontrol;
     475        int reg;
     476        int mask;
     477        int val;
     478};
     479
     480/* DAPM context */
     481struct snd_soc_dapm_context {
     482        int n_widgets; /* number of widgets in this context */
     483        enum snd_soc_bias_level bias_level;
     484        enum snd_soc_bias_level suspend_bias_level;
     485        struct delayed_work delayed_work;
     486        unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
     487
     488        struct snd_soc_dapm_update *update;
     489
     490        struct device *dev; /* from parent - for debug */
     491        struct snd_soc_codec *codec; /* parent codec */
     492        struct snd_soc_card *card; /* parent card */
     493
     494        /* used during DAPM updates */
     495        int dev_power;
     496        struct list_head list;
     497
     498#ifdef CONFIG_DEBUG_FS
     499        struct dentry *debugfs_dapm;
    401500#endif
     501};
     502
     503#endif
Note: See TracChangeset for help on using the changeset viewer.