• Home
  • Raw
  • Download

Lines Matching refs:priv

122 static void omap3_spi_write_chconf(struct omap3_spi_priv *priv, int val)  in omap3_spi_write_chconf()  argument
124 writel(val, &priv->regs->channel[priv->cs].chconf); in omap3_spi_write_chconf()
126 readl(&priv->regs->channel[priv->cs].chconf); in omap3_spi_write_chconf()
129 static void omap3_spi_set_enable(struct omap3_spi_priv *priv, int enable) in omap3_spi_set_enable() argument
131 writel(enable, &priv->regs->channel[priv->cs].chctrl); in omap3_spi_set_enable()
133 readl(&priv->regs->channel[priv->cs].chctrl); in omap3_spi_set_enable()
136 static int omap3_spi_write(struct omap3_spi_priv *priv, unsigned int len, in omap3_spi_write() argument
142 chconf = readl(&priv->regs->channel[priv->cs].chconf); in omap3_spi_write()
145 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_EN); in omap3_spi_write()
148 chconf |= (priv->wordlen - 1) << 7; in omap3_spi_write()
151 omap3_spi_write_chconf(priv, chconf); in omap3_spi_write()
156 while (!(readl(&priv->regs->channel[priv->cs].chstat) & in omap3_spi_write()
160 readl(&priv->regs->channel[priv->cs].chstat)); in omap3_spi_write()
165 unsigned int *tx = &priv->regs->channel[priv->cs].tx; in omap3_spi_write()
166 if (priv->wordlen > 16) in omap3_spi_write()
168 else if (priv->wordlen > 8) in omap3_spi_write()
175 while ((readl(&priv->regs->channel[priv->cs].chstat) & in omap3_spi_write()
181 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_DIS); in omap3_spi_write()
186 omap3_spi_write_chconf(priv, chconf); in omap3_spi_write()
191 static int omap3_spi_read(struct omap3_spi_priv *priv, unsigned int len, in omap3_spi_read() argument
197 chconf = readl(&priv->regs->channel[priv->cs].chconf); in omap3_spi_read()
200 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_EN); in omap3_spi_read()
203 chconf |= (priv->wordlen - 1) << 7; in omap3_spi_read()
206 omap3_spi_write_chconf(priv, chconf); in omap3_spi_read()
208 writel(0, &priv->regs->channel[priv->cs].tx); in omap3_spi_read()
213 while (!(readl(&priv->regs->channel[priv->cs].chstat) & in omap3_spi_read()
217 readl(&priv->regs->channel[priv->cs].chstat)); in omap3_spi_read()
224 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_DIS); in omap3_spi_read()
227 unsigned int *rx = &priv->regs->channel[priv->cs].rx; in omap3_spi_read()
228 if (priv->wordlen > 16) in omap3_spi_read()
230 else if (priv->wordlen > 8) in omap3_spi_read()
238 omap3_spi_write_chconf(priv, chconf); in omap3_spi_read()
245 static int omap3_spi_txrx(struct omap3_spi_priv *priv, unsigned int len, in omap3_spi_txrx() argument
251 chconf = readl(&priv->regs->channel[priv->cs].chconf); in omap3_spi_txrx()
254 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_EN); in omap3_spi_txrx()
258 chconf |= (priv->wordlen - 1) << 7; in omap3_spi_txrx()
260 omap3_spi_write_chconf(priv, chconf); in omap3_spi_txrx()
266 while (!(readl(&priv->regs->channel[priv->cs].chstat) & in omap3_spi_txrx()
270 readl(&priv->regs->channel[priv->cs].chstat)); in omap3_spi_txrx()
275 unsigned int *tx = &priv->regs->channel[priv->cs].tx; in omap3_spi_txrx()
276 if (priv->wordlen > 16) in omap3_spi_txrx()
278 else if (priv->wordlen > 8) in omap3_spi_txrx()
285 while (!(readl(&priv->regs->channel[priv->cs].chstat) & in omap3_spi_txrx()
289 readl(&priv->regs->channel[priv->cs].chstat)); in omap3_spi_txrx()
294 unsigned int *rx = &priv->regs->channel[priv->cs].rx; in omap3_spi_txrx()
295 if (priv->wordlen > 16) in omap3_spi_txrx()
297 else if (priv->wordlen > 8) in omap3_spi_txrx()
303 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_DIS); in omap3_spi_txrx()
308 omap3_spi_write_chconf(priv, chconf); in omap3_spi_txrx()
314 static int _spi_xfer(struct omap3_spi_priv *priv, unsigned int bitlen, in _spi_xfer() argument
320 if (priv->wordlen < 4 || priv->wordlen > 32) { in _spi_xfer()
321 printf("omap3_spi: invalid wordlen %d\n", priv->wordlen); in _spi_xfer()
325 if (bitlen % priv->wordlen) in _spi_xfer()
328 len = bitlen / priv->wordlen; in _spi_xfer()
331 int chconf = readl(&priv->regs->channel[priv->cs].chconf); in _spi_xfer()
334 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_EN); in _spi_xfer()
336 omap3_spi_write_chconf(priv, chconf); in _spi_xfer()
340 omap3_spi_write_chconf(priv, chconf); in _spi_xfer()
341 omap3_spi_set_enable(priv, OMAP3_MCSPI_CHCTRL_DIS); in _spi_xfer()
346 ret = omap3_spi_txrx(priv, len, dout, din, flags); in _spi_xfer()
348 ret = omap3_spi_write(priv, len, dout, flags); in _spi_xfer()
350 ret = omap3_spi_read(priv, len, din, flags); in _spi_xfer()
355 static void _omap3_spi_set_speed(struct omap3_spi_priv *priv) in _omap3_spi_set_speed() argument
359 confr = readl(&priv->regs->channel[priv->cs].chconf); in _omap3_spi_set_speed()
362 if (priv->freq) { in _omap3_spi_set_speed()
364 > priv->freq) in _omap3_spi_set_speed()
374 omap3_spi_write_chconf(priv, confr); in _omap3_spi_set_speed()
377 static void _omap3_spi_set_mode(struct omap3_spi_priv *priv) in _omap3_spi_set_mode() argument
381 confr = readl(&priv->regs->channel[priv->cs].chconf); in _omap3_spi_set_mode()
386 if (priv->pin_dir == MCSPI_PINDIR_D0_IN_D1_OUT) { in _omap3_spi_set_mode()
396 if (priv->mode & SPI_CPHA) in _omap3_spi_set_mode()
398 if (priv->mode & SPI_CPOL) in _omap3_spi_set_mode()
402 if (!(priv->mode & SPI_CS_HIGH)) in _omap3_spi_set_mode()
410 omap3_spi_write_chconf(priv, confr); in _omap3_spi_set_mode()
413 static void _omap3_spi_set_wordlen(struct omap3_spi_priv *priv) in _omap3_spi_set_wordlen() argument
418 confr = readl(&priv->regs->channel[priv->wordlen].chconf); in _omap3_spi_set_wordlen()
422 confr |= (priv->wordlen - 1) << 7; in _omap3_spi_set_wordlen()
424 omap3_spi_write_chconf(priv, confr); in _omap3_spi_set_wordlen()
443 static void _omap3_spi_claim_bus(struct omap3_spi_priv *priv) in _omap3_spi_claim_bus() argument
450 conf = readl(&priv->regs->modulctrl); in _omap3_spi_claim_bus()
454 writel(conf, &priv->regs->modulctrl); in _omap3_spi_claim_bus()
471 struct omap3_spi_priv *priv = to_omap3_spi(slave); in spi_free_slave() local
473 free(priv); in spi_free_slave()
478 struct omap3_spi_priv *priv = to_omap3_spi(slave); in spi_claim_bus() local
480 spi_reset(priv->regs); in spi_claim_bus()
482 _omap3_spi_claim_bus(priv); in spi_claim_bus()
483 _omap3_spi_set_wordlen(priv); in spi_claim_bus()
484 _omap3_spi_set_mode(priv); in spi_claim_bus()
485 _omap3_spi_set_speed(priv); in spi_claim_bus()
492 struct omap3_spi_priv *priv = to_omap3_spi(slave); in spi_release_bus() local
494 writel(OMAP3_MCSPI_MODULCTRL_MS, &priv->regs->modulctrl); in spi_release_bus()
500 struct omap3_spi_priv *priv; in spi_setup_slave() local
555 priv = spi_alloc_slave(struct omap3_spi_priv, bus, cs); in spi_setup_slave()
556 if (!priv) { in spi_setup_slave()
561 priv->regs = regs; in spi_setup_slave()
562 priv->cs = cs; in spi_setup_slave()
563 priv->freq = max_hz; in spi_setup_slave()
564 priv->mode = mode; in spi_setup_slave()
565 priv->wordlen = priv->slave.wordlen; in spi_setup_slave()
568 priv->pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN; in spi_setup_slave()
571 return &priv->slave; in spi_setup_slave()
577 struct omap3_spi_priv *priv = to_omap3_spi(slave); in spi_xfer() local
579 return _spi_xfer(priv, bitlen, dout, din, flags); in spi_xfer()
587 struct omap3_spi_priv *priv = dev_get_priv(bus); in omap3_spi_claim_bus() local
590 priv->cs = slave_plat->cs; in omap3_spi_claim_bus()
591 priv->freq = slave_plat->max_hz; in omap3_spi_claim_bus()
593 _omap3_spi_claim_bus(priv); in omap3_spi_claim_bus()
601 struct omap3_spi_priv *priv = dev_get_priv(bus); in omap3_spi_release_bus() local
603 writel(OMAP3_MCSPI_MODULCTRL_MS, &priv->regs->modulctrl); in omap3_spi_release_bus()
611 struct omap3_spi_priv *priv = dev_get_priv(bus); in omap3_spi_set_wordlen() local
614 priv->cs = slave_plat->cs; in omap3_spi_set_wordlen()
615 priv->wordlen = wordlen; in omap3_spi_set_wordlen()
616 _omap3_spi_set_wordlen(priv); in omap3_spi_set_wordlen()
623 struct omap3_spi_priv *priv = dev_get_priv(dev); in omap3_spi_probe() local
630 priv->regs = (struct mcspi *)(devfdt_get_addr(dev) + data->regs_offset); in omap3_spi_probe()
632 priv->pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN; in omap3_spi_probe()
634 priv->pin_dir = MCSPI_PINDIR_D0_IN_D1_OUT; in omap3_spi_probe()
635 priv->wordlen = SPI_DEFAULT_WORDLEN; in omap3_spi_probe()
637 spi_reset(priv->regs); in omap3_spi_probe()
646 struct omap3_spi_priv *priv = dev_get_priv(bus); in omap3_spi_xfer() local
648 return _spi_xfer(priv, bitlen, dout, din, flags); in omap3_spi_xfer()
654 struct omap3_spi_priv *priv = dev_get_priv(dev); in omap3_spi_set_speed() local
656 priv->freq = speed; in omap3_spi_set_speed()
657 _omap3_spi_set_speed(priv); in omap3_spi_set_speed()
664 struct omap3_spi_priv *priv = dev_get_priv(dev); in omap3_spi_set_mode() local
666 priv->mode = mode; in omap3_spi_set_mode()
668 _omap3_spi_set_mode(priv); in omap3_spi_set_mode()