00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __ALSA_TOPOLOGY_H
00022 #define __ALSA_TOPOLOGY_H
00023
00024 #include <stdint.h>
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00742 #define SND_TPLG_MAX_CHAN 8
00743
00745 typedef struct snd_tplg snd_tplg_t;
00746
00748 enum snd_tplg_type {
00749 SND_TPLG_TYPE_TLV = 0,
00750 SND_TPLG_TYPE_MIXER,
00751 SND_TPLG_TYPE_ENUM,
00752 SND_TPLG_TYPE_TEXT,
00753 SND_TPLG_TYPE_DATA,
00754 SND_TPLG_TYPE_BYTES,
00755 SND_TPLG_TYPE_STREAM_CONFIG,
00756 SND_TPLG_TYPE_STREAM_CAPS,
00757 SND_TPLG_TYPE_PCM,
00758 SND_TPLG_TYPE_DAPM_WIDGET,
00759 SND_TPLG_TYPE_DAPM_GRAPH,
00760 SND_TPLG_TYPE_BE,
00761 SND_TPLG_TYPE_CC,
00762 SND_TPLG_TYPE_MANIFEST,
00763 SND_TPLG_TYPE_TOKEN,
00764 SND_TPLG_TYPE_TUPLE,
00765 SND_TPLG_TYPE_LINK,
00766 SND_TPLG_TYPE_HW_CONFIG,
00767 SND_TPLG_TYPE_DAI,
00768 };
00769
00771 #define SND_TPLG_INDEX_ALL 0
00772
00777 snd_tplg_t *snd_tplg_new(void);
00778
00783 void snd_tplg_free(snd_tplg_t *tplg);
00784
00792 int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
00793 const char *outfile);
00794
00800 void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
00801
00805 struct snd_tplg_tlv_template {
00806 int type;
00807 };
00808
00812 struct snd_tplg_tlv_dbscale_template {
00813 struct snd_tplg_tlv_template hdr;
00814 int min;
00815 int step;
00816 int mute;
00817 };
00818
00822 struct snd_tplg_channel_elem {
00823 int size;
00824 int reg;
00825 int shift;
00826 int id;
00827 };
00828
00832 struct snd_tplg_channel_map_template {
00833 int num_channels;
00834 struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN];
00835 };
00836
00840 struct snd_tplg_pdata_template {
00841 unsigned int length;
00842 const void *data;
00843 };
00844
00848 struct snd_tplg_io_ops_template {
00849 int get;
00850 int put;
00851 int info;
00852 };
00853
00857 struct snd_tplg_ctl_template {
00858 int type;
00859 const char *name;
00860 int access;
00861 struct snd_tplg_io_ops_template ops;
00862 struct snd_tplg_tlv_template *tlv;
00863 };
00864
00868 struct snd_tplg_mixer_template {
00869 struct snd_tplg_ctl_template hdr;
00870 struct snd_tplg_channel_map_template *map;
00871 int min;
00872 int max;
00873 int platform_max;
00874 int invert;
00875 struct snd_soc_tplg_private *priv;
00876 };
00877
00881 struct snd_tplg_enum_template {
00882 struct snd_tplg_ctl_template hdr;
00883 struct snd_tplg_channel_map_template *map;
00884 int items;
00885 int mask;
00886 const char **texts;
00887 const int **values;
00888 struct snd_soc_tplg_private *priv;
00889 };
00890
00894 struct snd_tplg_bytes_template {
00895 struct snd_tplg_ctl_template hdr;
00896 int max;
00897 int mask;
00898 int base;
00899 int num_regs;
00900 struct snd_tplg_io_ops_template ext_ops;
00901 struct snd_soc_tplg_private *priv;
00902 };
00903
00907 struct snd_tplg_graph_elem {
00908 const char *src;
00909 const char *ctl;
00910 const char *sink;
00911 };
00912
00916 struct snd_tplg_graph_template {
00917 int count;
00918 struct snd_tplg_graph_elem elem[0];
00919 };
00920
00924 struct snd_tplg_widget_template {
00925 int id;
00926 const char *name;
00927 const char *sname;
00928 int reg;
00929 int shift;
00930 int mask;
00931 int subseq;
00932 unsigned int invert;
00933 unsigned int ignore_suspend;
00934 unsigned short event_flags;
00935 unsigned short event_type;
00936 struct snd_soc_tplg_private *priv;
00937 int num_ctls;
00938 struct snd_tplg_ctl_template *ctl[0];
00939 };
00940
00944 struct snd_tplg_stream_template {
00945 const char *name;
00946 int format;
00947 int rate;
00948 int period_bytes;
00949 int buffer_bytes;
00950 int channels;
00951 };
00952
00956 struct snd_tplg_stream_caps_template {
00957 const char *name;
00958 uint64_t formats;
00959 unsigned int rates;
00960 unsigned int rate_min;
00961 unsigned int rate_max;
00962 unsigned int channels_min;
00963 unsigned int channels_max;
00964 unsigned int periods_min;
00965 unsigned int periods_max;
00966 unsigned int period_size_min;
00967 unsigned int period_size_max;
00968 unsigned int buffer_size_min;
00969 unsigned int buffer_size_max;
00970 unsigned int sig_bits;
00971 };
00972
00976 struct snd_tplg_pcm_template {
00977 const char *pcm_name;
00978 const char *dai_name;
00979 unsigned int pcm_id;
00980 unsigned int dai_id;
00981 unsigned int playback;
00982 unsigned int capture;
00983 unsigned int compress;
00984 struct snd_tplg_stream_caps_template *caps[2];
00985 unsigned int flag_mask;
00986 unsigned int flags;
00987 struct snd_soc_tplg_private *priv;
00988 int num_streams;
00989 struct snd_tplg_stream_template stream[0];
00990 };
00991
00996 struct snd_tplg_hw_config_template {
00997 int id;
00998 unsigned int fmt;
00999 unsigned char clock_gated;
01000 unsigned char invert_bclk;
01001 unsigned char invert_fsync;
01002 unsigned char bclk_master;
01003 unsigned char fsync_master;
01004 unsigned char mclk_direction;
01005 unsigned short reserved;
01006 unsigned int mclk_rate;
01007 unsigned int bclk_rate;
01008 unsigned int fsync_rate;
01009 unsigned int tdm_slots;
01010 unsigned int tdm_slot_width;
01011 unsigned int tx_slots;
01012 unsigned int rx_slots;
01013 unsigned int tx_channels;
01014 unsigned int *tx_chanmap;
01015 unsigned int rx_channels;
01016 unsigned int *rx_chanmap;
01017 };
01018
01023 struct snd_tplg_dai_template {
01024 const char *dai_name;
01025 unsigned int dai_id;
01026 unsigned int playback;
01027 unsigned int capture;
01028 struct snd_tplg_stream_caps_template *caps[2];
01029 unsigned int flag_mask;
01030 unsigned int flags;
01031 struct snd_soc_tplg_private *priv;
01033 };
01034
01038 struct snd_tplg_link_template {
01039 const char *name;
01040 int id;
01041 const char *stream_name;
01043 int num_streams;
01044 struct snd_tplg_stream_template *stream;
01046 struct snd_tplg_hw_config_template *hw_config;
01047 int num_hw_configs;
01048 int default_hw_config_id;
01049
01050 unsigned int flag_mask;
01051 unsigned int flags;
01052 struct snd_soc_tplg_private *priv;
01053 };
01054
01058 typedef struct snd_tplg_obj_template {
01059 enum snd_tplg_type type;
01060 int index;
01061 int version;
01062 int vendor_type;
01063 union {
01064 struct snd_tplg_widget_template *widget;
01065 struct snd_tplg_mixer_template *mixer;
01066 struct snd_tplg_bytes_template *bytes_ctl;
01067 struct snd_tplg_enum_template *enum_ctl;
01068 struct snd_tplg_graph_template *graph;
01069 struct snd_tplg_pcm_template *pcm;
01070 struct snd_tplg_link_template *link;
01071 struct snd_tplg_dai_template *dai;
01072 };
01073 } snd_tplg_obj_template_t;
01074
01081 int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
01082
01089 int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
01090
01098 int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
01099
01106 int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
01107
01108
01109
01110 #ifdef __cplusplus
01111 }
01112 #endif
01113
01114 #endif