spi_st
count = spi_st->words_remaining;
word = readl_relaxed(spi_st->base + SSC_RBUF);
if (spi_st->rx_ptr) {
if (spi_st->bytes_per_word == 1) {
*spi_st->rx_ptr++ = (uint8_t)word;
*spi_st->rx_ptr++ = (word >> 8);
*spi_st->rx_ptr++ = word & 0xff;
spi_st->words_remaining -= count;
struct spi_st *spi_st = spi_controller_get_devdata(host);
spi_st->tx_ptr = t->tx_buf;
spi_st->rx_ptr = t->rx_buf;
spi_st->bytes_per_word = 2;
spi_st->words_remaining = t->len / 2;
spi_st->bytes_per_word = 2;
spi_st->words_remaining = t->len / 2;
ctl = readl_relaxed(spi_st->base + SSC_CTL);
writel_relaxed((ctl | 0xf), spi_st->base + SSC_CTL);
readl_relaxed(spi_st->base + SSC_RBUF);
spi_st->bytes_per_word = 1;
spi_st->words_remaining = t->len;
reinit_completion(&spi_st->done);
ssc_write_tx_fifo(spi_st);
writel_relaxed(SSC_IEN_TEEN, spi_st->base + SSC_IEN);
wait_for_completion(&spi_st->done);
writel_relaxed(ctl, spi_st->base + SSC_CTL);
struct spi_st *spi_st = spi_controller_get_devdata(spi->controller);
spi_st_clk = clk_get_rate(spi_st->clk);
spi_st->baud = spi_st_clk / (2 * sscbrg);
writel_relaxed(sscbrg, spi_st->base + SSC_BRG);
hz, spi_st->baud, sscbrg);
var = readl_relaxed(spi_st->base + SSC_CTL);
writel_relaxed(var, spi_st->base + SSC_CTL);
readl_relaxed(spi_st->base + SSC_RBUF);
struct spi_st *spi_st = (struct spi_st *)dev_id;
ssc_read_rx_fifo(spi_st);
if (spi_st->words_remaining) {
ssc_write_tx_fifo(spi_st);
writel_relaxed(0x0, spi_st->base + SSC_IEN);
readl(spi_st->base + SSC_IEN);
complete(&spi_st->done);
struct spi_st *spi_st;
host = spi_alloc_host(&pdev->dev, sizeof(*spi_st));
spi_st = spi_controller_get_devdata(host);
spi_st->clk = devm_clk_get(&pdev->dev, "ssc");
if (IS_ERR(spi_st->clk)) {
ret = PTR_ERR(spi_st->clk);
ret = clk_prepare_enable(spi_st->clk);
init_completion(&spi_st->done);
spi_st->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(spi_st->base)) {
ret = PTR_ERR(spi_st->base);
writel_relaxed(0x0, spi_st->base + SSC_I2C);
var = readw_relaxed(spi_st->base + SSC_CTL);
writel_relaxed(var, spi_st->base + SSC_CTL);
var = readl_relaxed(spi_st->base + SSC_CTL);
writel_relaxed(var, spi_st->base + SSC_CTL);
var = readl_relaxed(spi_st->base + SSC_CTL);
writel_relaxed(var, spi_st->base + SSC_CTL);
pdev->name, spi_st);
clk_disable_unprepare(spi_st->clk);
struct spi_st *spi_st = spi_controller_get_devdata(host);
clk_disable_unprepare(spi_st->clk);
struct spi_st *spi_st = spi_controller_get_devdata(host);
writel_relaxed(0, spi_st->base + SSC_IEN);
clk_disable_unprepare(spi_st->clk);
struct spi_st *spi_st = spi_controller_get_devdata(host);
ret = clk_prepare_enable(spi_st->clk);
static void ssc_write_tx_fifo(struct spi_st *spi_st)
if (spi_st->words_remaining > FIFO_SIZE)
count = spi_st->words_remaining;
if (spi_st->tx_ptr) {
if (spi_st->bytes_per_word == 1) {
word = *spi_st->tx_ptr++;
word = *spi_st->tx_ptr++;
word = *spi_st->tx_ptr++ | (word << 8);
writel_relaxed(word, spi_st->base + SSC_TBUF);
static void ssc_read_rx_fifo(struct spi_st *spi_st)
if (spi_st->words_remaining > FIFO_SIZE)