Lines Matching full:ns

94 static int __atcspi200_spi_set_speed(struct nds_spi_slave *ns)  in __atcspi200_spi_set_speed()  argument
98 tm = ns->regs->timing; in __atcspi200_spi_set_speed()
101 if(ns->freq >= ns->clock) in __atcspi200_spi_set_speed()
105 if (ns->freq >= ns->clock / (2 * (div + 1))) in __atcspi200_spi_set_speed()
111 ns->regs->timing = tm; in __atcspi200_spi_set_speed()
117 static int __atcspi200_spi_claim_bus(struct nds_spi_slave *ns) in __atcspi200_spi_claim_bus() argument
120 ns->regs->ctrl |= (TXFRST|RXFRST|SPIRST); in __atcspi200_spi_claim_bus()
121 while((ns->regs->ctrl &(TXFRST|RXFRST|SPIRST))&&(ns->to--)) in __atcspi200_spi_claim_bus()
122 if(!ns->to) in __atcspi200_spi_claim_bus()
125 ns->cmd_len = 0; in __atcspi200_spi_claim_bus()
126 format = ns->mode|DATA_LENGTH(8); in __atcspi200_spi_claim_bus()
127 ns->regs->format = format; in __atcspi200_spi_claim_bus()
128 __atcspi200_spi_set_speed(ns); in __atcspi200_spi_claim_bus()
133 static int __atcspi200_spi_release_bus(struct nds_spi_slave *ns) in __atcspi200_spi_release_bus() argument
139 static int __atcspi200_spi_start(struct nds_spi_slave *ns) in __atcspi200_spi_start() argument
142 int tc = ns->regs->tctrl; in __atcspi200_spi_start()
145 if ((ns->din)&&(ns->cmd_len)) in __atcspi200_spi_start()
147 else if (ns->din) in __atcspi200_spi_start()
152 if(ns->dout) in __atcspi200_spi_start()
153 olen = ns->tran_len; in __atcspi200_spi_start()
154 tc |= (ns->cmd_len+olen-1) << WCNT_OFFSET; in __atcspi200_spi_start()
156 if(ns->din) in __atcspi200_spi_start()
157 tc |= (ns->tran_len-1) << RCNT_OFFSET; in __atcspi200_spi_start()
159 ns->regs->tctrl = tc; in __atcspi200_spi_start()
160 ns->regs->cmd = 1; in __atcspi200_spi_start()
162 for (i=0;i<ns->cmd_len;i++) in __atcspi200_spi_start()
163 ns->regs->data = ns->cmd_buf[i]; in __atcspi200_spi_start()
168 static int __atcspi200_spi_stop(struct nds_spi_slave *ns) in __atcspi200_spi_stop() argument
170 ns->regs->timing = ns->mtiming; in __atcspi200_spi_stop()
171 while ((ns->regs->status & SPIBSY)&&(ns->to--)) in __atcspi200_spi_stop()
172 if (!ns->to) in __atcspi200_spi_stop()
178 static void __nspi_espi_tx(struct nds_spi_slave *ns, const void *dout) in __nspi_espi_tx() argument
180 ns->regs->data = *(u8 *)dout; in __nspi_espi_tx()
183 static int __nspi_espi_rx(struct nds_spi_slave *ns, void *din, unsigned int bytes) in __nspi_espi_rx() argument
185 *(u8 *)din = ns->regs->data; in __nspi_espi_rx()
190 static int __atcspi200_spi_xfer(struct nds_spi_slave *ns, in __atcspi200_spi_xfer() argument
199 u8 *cmd_buf = ns->cmd_buf; in __atcspi200_spi_xfer()
200 size_t cmd_len = ns->cmd_len; in __atcspi200_spi_xfer()
205 max_tran_len = ns->max_transfer_length; in __atcspi200_spi_xfer()
208 cmd_len = ns->cmd_len = data_len; in __atcspi200_spi_xfer()
217 ns->data_len = data_len; in __atcspi200_spi_xfer()
218 ns->din = (u8 *)data_in; in __atcspi200_spi_xfer()
219 ns->dout = (u8 *)data_out; in __atcspi200_spi_xfer()
223 ns->data_len = 0; in __atcspi200_spi_xfer()
224 ns->din = 0; in __atcspi200_spi_xfer()
225 ns->dout = 0; in __atcspi200_spi_xfer()
226 cmd_len = ns->cmd_len = data_len; in __atcspi200_spi_xfer()
230 __atcspi200_spi_start(ns); in __atcspi200_spi_xfer()
240 ns->tran_len = tran_len; in __atcspi200_spi_xfer()
245 __atcspi200_spi_start(ns); in __atcspi200_spi_xfer()
248 event = in_le32(&ns->regs->status); in __atcspi200_spi_xfer()
250 __nspi_espi_tx(ns, dout); in __atcspi200_spi_xfer()
264 if (__nspi_espi_rx(ns, din, rx_bytes) == rx_bytes) { in __atcspi200_spi_xfer()
274 ns->cmd_buf[1] += ((tran_len>>16)&0xff); in __atcspi200_spi_xfer()
275 ns->cmd_buf[2] += ((tran_len>>8)&0xff); in __atcspi200_spi_xfer()
276 ns->cmd_buf[3] += ((tran_len)&0xff); in __atcspi200_spi_xfer()
277 ns->data_len = data_len; in __atcspi200_spi_xfer()
279 ret = __atcspi200_spi_stop(ns); in __atcspi200_spi_xfer()
281 ret = __atcspi200_spi_stop(ns); in __atcspi200_spi_xfer()
288 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_set_speed() local
292 ns->freq = max_hz; in atcspi200_spi_set_speed()
293 __atcspi200_spi_set_speed(ns); in atcspi200_spi_set_speed()
300 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_set_mode() local
303 ns->mode = mode; in atcspi200_spi_set_mode()
313 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_claim_bus() local
315 if (slave_plat->cs >= ns->num_cs) { in atcspi200_spi_claim_bus()
320 return __atcspi200_spi_claim_bus(ns); in atcspi200_spi_claim_bus()
325 struct nds_spi_slave *ns = dev_get_priv(dev->parent); in atcspi200_spi_release_bus() local
327 return __atcspi200_spi_release_bus(ns); in atcspi200_spi_release_bus()
335 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_xfer() local
337 return __atcspi200_spi_xfer(ns, bitlen, dout, din, flags); in atcspi200_spi_xfer()
342 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_get_clk() local
355 ns->clock = clk_rate; in atcspi200_spi_get_clk()
363 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_spi_probe() local
365 ns->to = SPI_TIMEOUT; in atcspi200_spi_probe()
366 ns->max_transfer_length = MAX_TRANSFER_LEN; in atcspi200_spi_probe()
367 ns->mtiming = ns->regs->timing; in atcspi200_spi_probe()
375 struct nds_spi_slave *ns = dev_get_priv(bus); in atcspi200_ofdata_to_platadata() local
379 ns->regs = map_physmem(devfdt_get_addr(bus), in atcspi200_ofdata_to_platadata()
382 if (!ns->regs) { in atcspi200_ofdata_to_platadata()
386 ns->num_cs = fdtdec_get_int(blob, node, "num-cs", 4); in atcspi200_ofdata_to_platadata()