ALSA project - the C library reference
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
topology.h
1 /*
2  *
3  * This library is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU Lesser General Public License as
5  * published by the Free Software Foundation; either version 2.1 of
6  * the License, or (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Copyright (C) 2015 Intel Corporation
18  *
19  */
20 
21 #ifndef __ALSA_TOPOLOGY_H
22 #define __ALSA_TOPOLOGY_H
23 
24 #include <stdint.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
743 #define SND_TPLG_MAX_CHAN 8
744 
746 typedef struct snd_tplg snd_tplg_t;
747 
769 };
770 
772 #define SND_TPLG_INDEX_ALL 0
773 
778 snd_tplg_t *snd_tplg_new(void);
779 
784 void snd_tplg_free(snd_tplg_t *tplg);
785 
793 int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
794  const char *outfile);
795 
801 void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
802 
807  int type;
808 };
809 
815  int min;
816  int step;
817  int mute;
818 };
819 
824  int size;
825  int reg;
826  int shift;
827  int id;
828 };
829 
836 };
837 
842  unsigned int length;
843  const void *data;
844 };
845 
850  int get;
851  int put;
852  int info;
853 };
854 
859  int type;
860  const char *name;
861  int access;
864 };
865 
872  int min;
873  int max;
875  int invert;
876  struct snd_soc_tplg_private *priv;
877 };
878 
885  int items;
886  int mask;
887  const char **texts;
888  const int **values;
889  struct snd_soc_tplg_private *priv;
890 };
891 
897  int max;
898  int mask;
899  int base;
900  int num_regs;
902  struct snd_soc_tplg_private *priv;
903 };
904 
909  const char *src;
910  const char *ctl;
911  const char *sink;
912 };
913 
918  int count;
920 };
921 
926  int id;
927  const char *name;
928  const char *sname;
929  int reg;
930  int shift;
931  int mask;
932  int subseq;
933  unsigned int invert;
934  unsigned int ignore_suspend;
935  unsigned short event_flags;
936  unsigned short event_type;
937  struct snd_soc_tplg_private *priv;
938  int num_ctls;
940 };
941 
946  const char *name;
947  int format;
948  int rate;
951  int channels;
952 };
953 
958  const char *name;
959  uint64_t formats;
960  unsigned int rates;
961  unsigned int rate_min;
962  unsigned int rate_max;
963  unsigned int channels_min;
964  unsigned int channels_max;
965  unsigned int periods_min;
966  unsigned int periods_max;
967  unsigned int period_size_min;
968  unsigned int period_size_max;
969  unsigned int buffer_size_min;
970  unsigned int buffer_size_max;
971  unsigned int sig_bits;
972 };
973 
978  const char *pcm_name;
979  const char *dai_name;
980  unsigned int pcm_id;
981  unsigned int dai_id;
982  unsigned int playback;
983  unsigned int capture;
984  unsigned int compress;
986  unsigned int flag_mask;
987  unsigned int flags;
988  struct snd_soc_tplg_private *priv;
991 };
992 
998  int id; /* unique ID - - used to match */
999  unsigned int fmt; /* SND_SOC_DAI_FORMAT_ format value */
1000  unsigned char clock_gated; /* 1 if clock can be gated to save power */
1001  unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
1002  unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
1003  unsigned char bclk_master; /* 1 for master of BCLK, 0 for slave */
1004  unsigned char fsync_master; /* 1 for master of FSYNC, 0 for slave */
1005  unsigned char mclk_direction; /* 0 for input, 1 for output */
1006  unsigned short reserved; /* for 32bit alignment */
1007  unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
1008  unsigned int bclk_rate; /* BCLK freqency in Hz */
1009  unsigned int fsync_rate; /* frame clock in Hz */
1010  unsigned int tdm_slots; /* number of TDM slots in use */
1011  unsigned int tdm_slot_width; /* width in bits for each slot */
1012  unsigned int tx_slots; /* bit mask for active Tx slots */
1013  unsigned int rx_slots; /* bit mask for active Rx slots */
1014  unsigned int tx_channels; /* number of Tx channels */
1015  unsigned int *tx_chanmap; /* array of slot number */
1016  unsigned int rx_channels; /* number of Rx channels */
1017  unsigned int *rx_chanmap; /* array of slot number */
1018 };
1019 
1025  const char *dai_name;
1026  unsigned int dai_id;
1027  unsigned int playback;
1028  unsigned int capture;
1030  unsigned int flag_mask;
1031  unsigned int flags;
1032  struct snd_soc_tplg_private *priv;
1034 };
1035 
1040  const char *name;
1041  int id;
1042  const char *stream_name;
1048  int num_hw_configs; /* number of hw configs */
1049  int default_hw_config_id; /* default hw config ID for init */
1050 
1051  unsigned int flag_mask; /* bitmask of flags to configure */
1052  unsigned int flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
1053  struct snd_soc_tplg_private *priv;
1054 };
1055 
1059 typedef struct snd_tplg_obj_template {
1061  int index;
1062  int version;
1064  union {
1073  };
1075 
1083 
1090 int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
1091 
1099 int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
1100 
1107 int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
1108 
1109 /* \} */
1110 
1111 #ifdef __cplusplus
1112 }
1113 #endif
1114 
1115 #endif /* __ALSA_TOPOLOGY_H */