Lines Matching +full:3 +full:ns
29 u32 reserve1[3];
40 #define TRAMODE_WR (3<<TRAMODE_OFFSET)
58 #define RXDMAEN (1<<3)
93 static int __atcspi200_spi_set_speed(struct nds_spi_slave *ns) in __atcspi200_spi_set_speed() argument
97 tm = ns->regs->timing; in __atcspi200_spi_set_speed()
100 if(ns->freq >= ns->clock) in __atcspi200_spi_set_speed()
104 if (ns->freq >= ns->clock / (2 * (div + 1))) in __atcspi200_spi_set_speed()
110 ns->regs->timing = tm; in __atcspi200_spi_set_speed()
116 static int __atcspi200_spi_claim_bus(struct nds_spi_slave *ns) in __atcspi200_spi_claim_bus() argument
119 ns->regs->ctrl |= (TXFRST|RXFRST|SPIRST); in __atcspi200_spi_claim_bus()
120 while((ns->regs->ctrl &(TXFRST|RXFRST|SPIRST))&&(ns->to--)) in __atcspi200_spi_claim_bus()
121 if(!ns->to) in __atcspi200_spi_claim_bus()
124 ns->cmd_len = 0; in __atcspi200_spi_claim_bus()
125 format = ns->mode|DATA_LENGTH(8); in __atcspi200_spi_claim_bus()
126 ns->regs->format = format; in __atcspi200_spi_claim_bus()
127 __atcspi200_spi_set_speed(ns); in __atcspi200_spi_claim_bus()
132 static int __atcspi200_spi_release_bus(struct nds_spi_slave *ns) in __atcspi200_spi_release_bus() argument
138 static int __atcspi200_spi_start(struct nds_spi_slave *ns) in __atcspi200_spi_start() argument
141 int tc = ns->regs->tctrl; in __atcspi200_spi_start()
144 if ((ns->din)&&(ns->cmd_len)) in __atcspi200_spi_start()
146 else if (ns->din) in __atcspi200_spi_start()
151 if(ns->dout) in __atcspi200_spi_start()
152 olen = ns->tran_len; in __atcspi200_spi_start()
153 tc |= (ns->cmd_len+olen-1) << WCNT_OFFSET; in __atcspi200_spi_start()
155 if(ns->din) in __atcspi200_spi_start()
156 tc |= (ns->tran_len-1) << RCNT_OFFSET; in __atcspi200_spi_start()
158 ns->regs->tctrl = tc; in __atcspi200_spi_start()
159 ns->regs->cmd = 1; in __atcspi200_spi_start()
161 for (i=0;i<ns->cmd_len;i++) in __atcspi200_spi_start()
162 ns->regs->data = ns->cmd_buf[i]; in __atcspi200_spi_start()
167 static int __atcspi200_spi_stop(struct nds_spi_slave *ns) in __atcspi200_spi_stop() argument
169 ns->regs->timing = ns->mtiming; in __atcspi200_spi_stop()
170 while ((ns->regs->status & SPIBSY)&&(ns->to--)) in __atcspi200_spi_stop()
171 if (!ns->to) in __atcspi200_spi_stop()
177 static void __nspi_espi_tx(struct nds_spi_slave *ns, const void *dout) in __nspi_espi_tx() argument
179 ns->regs->data = *(u8 *)dout; in __nspi_espi_tx()
182 static int __nspi_espi_rx(struct nds_spi_slave *ns, void *din, unsigned int bytes) in __nspi_espi_rx() argument
184 *(u8 *)din = ns->regs->data; in __nspi_espi_rx()
189 static int __atcspi200_spi_xfer(struct nds_spi_slave *ns, in __atcspi200_spi_xfer() argument
198 u8 *cmd_buf = ns->cmd_buf; in __atcspi200_spi_xfer()
199 size_t cmd_len = ns->cmd_len; in __atcspi200_spi_xfer()
204 max_tran_len = ns->max_transfer_length; in __atcspi200_spi_xfer()
207 cmd_len = ns->cmd_len = data_len; in __atcspi200_spi_xfer()
216 ns->data_len = data_len; in __atcspi200_spi_xfer()
217 ns->din = (u8 *)data_in; in __atcspi200_spi_xfer()
218 ns->dout = (u8 *)data_out; in __atcspi200_spi_xfer()
222 ns->data_len = 0; in __atcspi200_spi_xfer()
223 ns->din = 0; in __atcspi200_spi_xfer()
224 ns->dout = 0; in __atcspi200_spi_xfer()
225 cmd_len = ns->cmd_len = data_len; in __atcspi200_spi_xfer()
229 __atcspi200_spi_start(ns); in __atcspi200_spi_xfer()
241 ns->tran_len = tran_len; in __atcspi200_spi_xfer()
246 __atcspi200_spi_start(ns); in __atcspi200_spi_xfer()
249 event = in_le32(&ns->regs->status); in __atcspi200_spi_xfer()
251 __nspi_espi_tx(ns, dout); in __atcspi200_spi_xfer()
265 if (__nspi_espi_rx(ns, din, rx_bytes) == rx_bytes) { in __atcspi200_spi_xfer()
275 ns->cmd_buf[1] += ((tran_len>>16)&0xff); in __atcspi200_spi_xfer()
276 ns->cmd_buf[2] += ((tran_len>>8)&0xff); in __atcspi200_spi_xfer()
277 ns->cmd_buf[3] += ((tran_len)&0xff); in __atcspi200_spi_xfer()
278 ns->data_len = data_len; in __atcspi200_spi_xfer()
280 ret = __atcspi200_spi_stop(ns); in __atcspi200_spi_xfer()
282 ret = __atcspi200_spi_stop(ns); in __atcspi200_spi_xfer()
289 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_set_speed() local
293 ns->freq = max_hz; in atcspi200_spi_set_speed()
294 __atcspi200_spi_set_speed(ns); in atcspi200_spi_set_speed()
301 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_set_mode() local
304 ns->mode = mode; in atcspi200_spi_set_mode()
314 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_claim_bus() local
316 if (slave_plat->cs >= ns->num_cs) { in atcspi200_spi_claim_bus()
321 return __atcspi200_spi_claim_bus(ns); in atcspi200_spi_claim_bus()
326 struct nds_spi_slave *ns = dev_get_priv(dev->parent); in atcspi200_spi_release_bus() local
328 return __atcspi200_spi_release_bus(ns); in atcspi200_spi_release_bus()
336 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_xfer() local
338 return __atcspi200_spi_xfer(ns, bitlen, dout, din, flags); in atcspi200_spi_xfer()
343 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_get_clk() local
356 ns->clock = clk_rate; in atcspi200_spi_get_clk()
364 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_probe() local
366 ns->to = SPI_TIMEOUT; in atcspi200_spi_probe()
367 ns->max_transfer_length = MAX_TRANSFER_LEN; in atcspi200_spi_probe()
368 ns->mtiming = ns->regs->timing; in atcspi200_spi_probe()
376 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_ofdata_to_platadata() local
380 ns->regs = map_physmem(devfdt_get_addr(bus), in atcspi200_ofdata_to_platadata()
383 if (!ns->regs) { in atcspi200_ofdata_to_platadata()
387 ns->num_cs = fdtdec_get_int(blob, node, "num-cs", 4); in atcspi200_ofdata_to_platadata()