Lines Matching defs:spi_st

53 struct spi_st {
69 static void ssc_write_tx_fifo(struct spi_st *spi_st)
74 if (spi_st->words_remaining > FIFO_SIZE)
77 count = spi_st->words_remaining;
80 if (spi_st->tx_ptr) {
81 if (spi_st->bytes_per_word == 1) {
82 word = *spi_st->tx_ptr++;
84 word = *spi_st->tx_ptr++;
85 word = *spi_st->tx_ptr++ | (word << 8);
88 writel_relaxed(word, spi_st->base + SSC_TBUF);
93 static void ssc_read_rx_fifo(struct spi_st *spi_st)
98 if (spi_st->words_remaining > FIFO_SIZE)
101 count = spi_st->words_remaining;
104 word = readl_relaxed(spi_st->base + SSC_RBUF);
106 if (spi_st->rx_ptr) {
107 if (spi_st->bytes_per_word == 1) {
108 *spi_st->rx_ptr++ = (uint8_t)word;
110 *spi_st->rx_ptr++ = (word >> 8);
111 *spi_st->rx_ptr++ = word & 0xff;
115 spi_st->words_remaining -= count;
121 struct spi_st *spi_st = spi_master_get_devdata(master);
125 spi_st->tx_ptr = t->tx_buf;
126 spi_st->rx_ptr = t->rx_buf;
133 spi_st->bytes_per_word = 2;
134 spi_st->words_remaining = t->len / 2;
141 spi_st->bytes_per_word = 2;
142 spi_st->words_remaining = t->len / 2;
145 ctl = readl_relaxed(spi_st->base + SSC_CTL);
146 writel_relaxed((ctl | 0xf), spi_st->base + SSC_CTL);
148 readl_relaxed(spi_st->base + SSC_RBUF);
151 spi_st->bytes_per_word = 1;
152 spi_st->words_remaining = t->len;
155 reinit_completion(&spi_st->done);
158 ssc_write_tx_fifo(spi_st);
159 writel_relaxed(SSC_IEN_TEEN, spi_st->base + SSC_IEN);
162 wait_for_completion(&spi_st->done);
166 writel_relaxed(ctl, spi_st->base + SSC_CTL);
177 struct spi_st *spi_st = spi_master_get_devdata(spi->master);
191 spi_st_clk = clk_get_rate(spi_st->clk);
201 spi_st->baud = spi_st_clk / (2 * sscbrg);
205 writel_relaxed(sscbrg, spi_st->base + SSC_BRG);
209 hz, spi_st->baud, sscbrg);
212 var = readl_relaxed(spi_st->base + SSC_CTL);
241 writel_relaxed(var, spi_st->base + SSC_CTL);
244 readl_relaxed(spi_st->base + SSC_RBUF);
252 struct spi_st *spi_st = (struct spi_st *)dev_id;
255 ssc_read_rx_fifo(spi_st);
258 if (spi_st->words_remaining) {
259 ssc_write_tx_fifo(spi_st);
262 writel_relaxed(0x0, spi_st->base + SSC_IEN);
267 readl(spi_st->base + SSC_IEN);
268 complete(&spi_st->done);
278 struct spi_st *spi_st;
282 master = spi_alloc_master(&pdev->dev, sizeof(*spi_st));
294 spi_st = spi_master_get_devdata(master);
296 spi_st->clk = devm_clk_get(&pdev->dev, "ssc");
297 if (IS_ERR(spi_st->clk)) {
299 ret = PTR_ERR(spi_st->clk);
303 ret = clk_prepare_enable(spi_st->clk);
307 init_completion(&spi_st->done);
310 spi_st->base = devm_platform_ioremap_resource(pdev, 0);
311 if (IS_ERR(spi_st->base)) {
312 ret = PTR_ERR(spi_st->base);
317 writel_relaxed(0x0, spi_st->base + SSC_I2C);
318 var = readw_relaxed(spi_st->base + SSC_CTL);
320 writel_relaxed(var, spi_st->base + SSC_CTL);
323 var = readl_relaxed(spi_st->base + SSC_CTL);
325 writel_relaxed(var, spi_st->base + SSC_CTL);
328 var = readl_relaxed(spi_st->base + SSC_CTL);
330 writel_relaxed(var, spi_st->base + SSC_CTL);
340 pdev->name, spi_st);
363 clk_disable_unprepare(spi_st->clk);
372 struct spi_st *spi_st = spi_master_get_devdata(master);
376 clk_disable_unprepare(spi_st->clk);
385 struct spi_st *spi_st = spi_master_get_devdata(master);
387 writel_relaxed(0, spi_st->base + SSC_IEN);
390 clk_disable_unprepare(spi_st->clk);
398 struct spi_st *spi_st = spi_master_get_devdata(master);
401 ret = clk_prepare_enable(spi_st->clk);