Lines Matching defs:hs

161 static int hisi_spi_debugfs_init(struct hisi_spi *hs)
167 host = container_of(hs->dev, struct spi_controller, dev);
169 hs->debugfs = debugfs_create_dir(name, NULL);
170 if (IS_ERR(hs->debugfs))
173 hs->regset.regs = hisi_spi_regs;
174 hs->regset.nregs = ARRAY_SIZE(hisi_spi_regs);
175 hs->regset.base = hs->regs;
176 debugfs_create_regset32("registers", 0400, hs->debugfs, &hs->regset);
181 static u32 hisi_spi_busy(struct hisi_spi *hs)
183 return readl(hs->regs + HISI_SPI_SR) & SR_BUSY;
186 static u32 hisi_spi_rx_not_empty(struct hisi_spi *hs)
188 return readl(hs->regs + HISI_SPI_SR) & SR_RXNE;
191 static u32 hisi_spi_tx_not_full(struct hisi_spi *hs)
193 return readl(hs->regs + HISI_SPI_SR) & SR_TXNF;
196 static void hisi_spi_flush_fifo(struct hisi_spi *hs)
201 while (hisi_spi_rx_not_empty(hs))
202 readl(hs->regs + HISI_SPI_DOUT);
203 } while (hisi_spi_busy(hs) && limit--);
207 static void hisi_spi_disable(struct hisi_spi *hs)
209 writel(0, hs->regs + HISI_SPI_ENR);
210 writel(IMR_MASK, hs->regs + HISI_SPI_IMR);
211 writel(ICR_MASK, hs->regs + HISI_SPI_ICR);
224 static void hisi_spi_reader(struct hisi_spi *hs)
226 u32 max = min_t(u32, hs->rx_len, hs->fifo_len);
229 while (hisi_spi_rx_not_empty(hs) && max--) {
230 rxw = readl(hs->regs + HISI_SPI_DOUT);
232 if (hs->rx) {
233 switch (hs->n_bytes) {
235 *(u8 *)(hs->rx) = rxw;
238 *(u16 *)(hs->rx) = rxw;
241 *(u32 *)(hs->rx) = rxw;
244 hs->rx += hs->n_bytes;
246 --hs->rx_len;
250 static void hisi_spi_writer(struct hisi_spi *hs)
252 u32 max = min_t(u32, hs->tx_len, hs->fifo_len);
255 while (hisi_spi_tx_not_full(hs) && max--) {
257 if (hs->tx) {
258 switch (hs->n_bytes) {
260 txw = *(u8 *)(hs->tx);
263 txw = *(u16 *)(hs->tx);
266 txw = *(u32 *)(hs->tx);
269 hs->tx += hs->n_bytes;
271 writel(txw, hs->regs + HISI_SPI_DIN);
272 --hs->tx_len;
323 static void hisi_spi_hw_init(struct hisi_spi *hs)
325 hisi_spi_disable(hs);
330 hs->regs + HISI_SPI_FIFOC);
332 hs->fifo_len = 256;
338 struct hisi_spi *hs = spi_controller_get_devdata(host);
339 u32 irq_status = readl(hs->regs + HISI_SPI_ISR) & ISR_MASK;
349 dev_err(hs->dev, "interrupt_transfer: fifo overflow\n");
358 hisi_spi_reader(hs);
359 if (!hs->rx_len)
364 hisi_spi_writer(hs);
369 hisi_spi_disable(hs);
377 struct hisi_spi *hs = spi_controller_get_devdata(host);
387 writel(cr, hs->regs + HISI_SPI_CR);
389 hisi_spi_flush_fifo(hs);
391 hs->n_bytes = hisi_spi_n_bytes(transfer);
392 hs->tx = transfer->tx_buf;
393 hs->tx_len = transfer->len / hs->n_bytes;
394 hs->rx = transfer->rx_buf;
395 hs->rx_len = hs->tx_len;
404 writel(~(u32)IMR_MASK, hs->regs + HISI_SPI_IMR);
405 writel(1, hs->regs + HISI_SPI_ENR);
413 struct hisi_spi *hs = spi_controller_get_devdata(host);
415 hisi_spi_disable(hs);
454 struct hisi_spi *hs;
461 host = devm_spi_alloc_host(dev, sizeof(*hs));
467 hs = spi_controller_get_devdata(host);
468 hs->dev = dev;
469 hs->irq = irq;
471 hs->regs = devm_platform_ioremap_resource(pdev, 0);
472 if (IS_ERR(hs->regs))
473 return PTR_ERR(hs->regs);
499 hisi_spi_hw_init(hs);
501 ret = devm_request_irq(dev, hs->irq, hisi_spi_irq, 0, dev_name(dev),
504 dev_err(dev, "failed to get IRQ=%d, ret=%d\n", hs->irq, ret);
514 if (hisi_spi_debugfs_init(hs))
518 readl(hs->regs + HISI_SPI_VERSION),
527 struct hisi_spi *hs = spi_controller_get_devdata(host);
529 debugfs_remove_recursive(hs->debugfs);