0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef DRIVERS_FSI_MASTER_H
0010 #define DRIVERS_FSI_MASTER_H
0011
0012 #include <linux/device.h>
0013 #include <linux/mutex.h>
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #define FSI_MMODE 0x0
0024 #define FSI_MDLYR 0x4
0025 #define FSI_MCRSP 0x8
0026 #define FSI_MENP0 0x10
0027 #define FSI_MLEVP0 0x18
0028 #define FSI_MSENP0 0x18
0029 #define FSI_MCENP0 0x20
0030 #define FSI_MAEB 0x70
0031 #define FSI_MVER 0x74
0032 #define FSI_MSTAP0 0xd0
0033 #define FSI_MRESP0 0xd0
0034 #define FSI_MESRB0 0x1d0
0035 #define FSI_MRESB0 0x1d0
0036 #define FSI_MSCSB0 0x1d4
0037 #define FSI_MATRB0 0x1d8
0038 #define FSI_MDTRB0 0x1dc
0039 #define FSI_MECTRL 0x2e0
0040
0041
0042 #define FSI_MMODE_EIP 0x80000000
0043 #define FSI_MMODE_ECRC 0x40000000
0044 #define FSI_MMODE_RELA 0x20000000
0045 #define FSI_MMODE_EPC 0x10000000
0046 #define FSI_MMODE_P8_TO_LSB 0x00000010
0047
0048
0049 #define FSI_MMODE_CRS0SHFT 18
0050 #define FSI_MMODE_CRS0MASK 0x3ff
0051 #define FSI_MMODE_CRS1SHFT 8
0052 #define FSI_MMODE_CRS1MASK 0x3ff
0053
0054
0055 #define FSI_MRESB_RST_GEN 0x80000000
0056 #define FSI_MRESB_RST_ERR 0x40000000
0057
0058
0059 #define FSI_MRESP_RST_ALL_MASTER 0x20000000
0060 #define FSI_MRESP_RST_ALL_LINK 0x10000000
0061 #define FSI_MRESP_RST_MCR 0x08000000
0062 #define FSI_MRESP_RST_PYE 0x04000000
0063 #define FSI_MRESP_RST_ALL 0xfc000000
0064
0065
0066 #define FSI_MECTRL_EOAE 0x8000
0067
0068 #define FSI_MECTRL_P8_AUTO_TERM 0x4000
0069
0070 #define FSI_HUB_LINK_OFFSET 0x80000
0071 #define FSI_HUB_LINK_SIZE 0x80000
0072 #define FSI_HUB_MASTER_MAX_LINKS 8
0073
0074
0075
0076
0077
0078
0079
0080
0081 #define FSI_ECHO_DELAY_CLOCKS 16
0082 #define FSI_SEND_DELAY_CLOCKS 16
0083 #define FSI_PRE_BREAK_CLOCKS 50
0084 #define FSI_BREAK_CLOCKS 256
0085 #define FSI_POST_BREAK_CLOCKS 16000
0086 #define FSI_INIT_CLOCKS 5000
0087 #define FSI_MASTER_DPOLL_CLOCKS 50
0088 #define FSI_MASTER_EPOLL_CLOCKS 50
0089
0090
0091 #define FSI_CRC_ERR_RETRIES 10
0092 #define FSI_MASTER_MAX_BUSY 200
0093 #define FSI_MASTER_MTOE_COUNT 1000
0094
0095
0096 #define FSI_CMD_DPOLL 0x2
0097 #define FSI_CMD_EPOLL 0x3
0098 #define FSI_CMD_TERM 0x3f
0099 #define FSI_CMD_ABS_AR 0x4
0100 #define FSI_CMD_REL_AR 0x5
0101 #define FSI_CMD_SAME_AR 0x3
0102
0103
0104 #define FSI_RESP_ACK 0
0105 #define FSI_RESP_BUSY 1
0106 #define FSI_RESP_ERRA 2
0107 #define FSI_RESP_ERRC 3
0108
0109
0110 #define FSI_CRC_SIZE 4
0111
0112
0113 #define FSI_MASTER_FLAG_SWCLOCK 0x1
0114
0115
0116
0117
0118
0119
0120
0121 struct fsi_master {
0122 struct device dev;
0123 int idx;
0124 int n_links;
0125 int flags;
0126 struct mutex scan_lock;
0127 int (*read)(struct fsi_master *, int link, uint8_t id,
0128 uint32_t addr, void *val, size_t size);
0129 int (*write)(struct fsi_master *, int link, uint8_t id,
0130 uint32_t addr, const void *val, size_t size);
0131 int (*term)(struct fsi_master *, int link, uint8_t id);
0132 int (*send_break)(struct fsi_master *, int link);
0133 int (*link_enable)(struct fsi_master *, int link,
0134 bool enable);
0135 int (*link_config)(struct fsi_master *, int link,
0136 u8 t_send_delay, u8 t_echo_delay);
0137 };
0138
0139 #define dev_to_fsi_master(d) container_of(d, struct fsi_master, dev)
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156 extern int fsi_master_register(struct fsi_master *master);
0157 extern void fsi_master_unregister(struct fsi_master *master);
0158
0159 extern int fsi_master_rescan(struct fsi_master *master);
0160
0161 #endif