0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _QE_TDM_H_
0011 #define _QE_TDM_H_
0012
0013 #include <linux/list.h>
0014 #include <linux/types.h>
0015
0016 #include <soc/fsl/qe/immap_qe.h>
0017 #include <soc/fsl/qe/qe.h>
0018
0019 #include <soc/fsl/qe/ucc.h>
0020 #include <soc/fsl/qe/ucc_fast.h>
0021
0022 struct device_node;
0023
0024
0025 #define SIR_LAST 0x0001
0026 #define SIR_BYTE 0x0002
0027 #define SIR_CNT(x) ((x) << 2)
0028 #define SIR_CSEL(x) ((x) << 5)
0029 #define SIR_SGS 0x0200
0030 #define SIR_SWTR 0x4000
0031 #define SIR_MCC 0x8000
0032 #define SIR_IDLE 0
0033
0034
0035 #define SIMR_SAD(x) ((x) << 12)
0036 #define SIMR_SDM_NORMAL 0x0000
0037 #define SIMR_SDM_INTERNAL_LOOPBACK 0x0800
0038 #define SIMR_SDM_MASK 0x0c00
0039 #define SIMR_CRT 0x0040
0040 #define SIMR_SL 0x0020
0041 #define SIMR_CE 0x0010
0042 #define SIMR_FE 0x0008
0043 #define SIMR_GM 0x0004
0044 #define SIMR_TFSD(n) (n)
0045 #define SIMR_RFSD(n) ((n) << 8)
0046
0047 enum tdm_ts_t {
0048 TDM_TX_TS,
0049 TDM_RX_TS
0050 };
0051
0052 enum tdm_framer_t {
0053 TDM_FRAMER_T1,
0054 TDM_FRAMER_E1
0055 };
0056
0057 enum tdm_mode_t {
0058 TDM_INTERNAL_LOOPBACK,
0059 TDM_NORMAL
0060 };
0061
0062 struct si_mode_info {
0063 u8 simr_rfsd;
0064 u8 simr_tfsd;
0065 u8 simr_crt;
0066 u8 simr_sl;
0067 u8 simr_ce;
0068 u8 simr_fe;
0069 u8 simr_gm;
0070 };
0071
0072 struct ucc_tdm_info {
0073 struct ucc_fast_info uf_info;
0074 struct si_mode_info si_info;
0075 };
0076
0077 struct ucc_tdm {
0078 u16 tdm_port;
0079 u32 siram_entry_id;
0080 u16 __iomem *siram;
0081 struct si1 __iomem *si_regs;
0082 enum tdm_framer_t tdm_framer_type;
0083 enum tdm_mode_t tdm_mode;
0084 u8 num_of_ts;
0085 u32 tx_ts_mask;
0086 u32 rx_ts_mask;
0087 };
0088
0089 int ucc_of_parse_tdm(struct device_node *np, struct ucc_tdm *utdm,
0090 struct ucc_tdm_info *ut_info);
0091 void ucc_tdm_init(struct ucc_tdm *utdm, struct ucc_tdm_info *ut_info);
0092 #endif