Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Internal header file for QE TDM mode routines.
0004  *
0005  * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
0006  *
0007  * Authors: Zhao Qiang <qiang.zhao@nxp.com>
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 /* SI RAM entries */
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 /* SIxMR fields */
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;       /* port for this tdm:TDMA,TDMB */
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;       /* the number of timeslots in this tdm frame */
0085     u32 tx_ts_mask;     /* tx time slot mask */
0086     u32 rx_ts_mask;     /* rx time slot 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