Lines Matching +full:cs +full:- +full:out
1 // SPDX-License-Identifier: GPL-2.0+
37 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, in spi_setup_slave() argument
45 if (!spi_cs_is_valid(bus, cs)) in spi_setup_slave()
72 scbr = (get_spi_clk_rate(bus) + max_hz - 1) / max_hz; in spi_setup_slave()
86 as = spi_alloc_slave(struct atmel_spi_slave, bus, cs); in spi_setup_slave()
90 as->regs = regs; in spi_setup_slave()
91 as->mr = ATMEL_SPI_MR_MSTR | ATMEL_SPI_MR_MODFDIS in spi_setup_slave()
92 | ATMEL_SPI_MR_PCS(~(1 << cs) & 0xf); in spi_setup_slave()
94 as->mr |= ATMEL_SPI_MR_WDRBT; in spi_setup_slave()
96 spi_writel(as, CSR(cs), csrx); in spi_setup_slave()
98 return &as->slave; in spi_setup_slave()
119 spi_writel(as, MR, as->mr); in spi_claim_bus()
146 goto out; in spi_xfer()
149 * TODO: The controller can do non-multiple-of-8 bit in spi_xfer()
159 goto out; in spi_xfer()
165 * The controller can do automatic CS control, but it is in spi_xfer()
167 * in the context of U-Boot. in spi_xfer()
185 return -1; in spi_xfer()
203 out: in spi_xfer()
207 * we deactivate CS. in spi_xfer()
242 struct at91_spi *reg_base = bus_plat->regs; in atmel_spi_claim_bus()
243 u32 cs = slave_plat->cs; in atmel_spi_claim_bus() local
244 u32 freq = priv->freq; in atmel_spi_claim_bus()
247 scbr = (priv->bus_clk_rate + freq - 1) / freq; in atmel_spi_claim_bus()
249 return -EINVAL; in atmel_spi_claim_bus()
257 if (!(priv->mode & SPI_CPHA)) in atmel_spi_claim_bus()
259 if (priv->mode & SPI_CPOL) in atmel_spi_claim_bus()
262 writel(csrx, ®_base->csr[cs]); in atmel_spi_claim_bus()
267 ATMEL_SPI_MR_PCS(~(1 << cs)); in atmel_spi_claim_bus()
269 writel(mode, ®_base->mr); in atmel_spi_claim_bus()
271 writel(ATMEL_SPI_CR_SPIEN, ®_base->cr); in atmel_spi_claim_bus()
281 writel(ATMEL_SPI_CR_SPIDIS, &bus_plat->regs->cr); in atmel_spi_release_bus()
292 u32 cs = slave_plat->cs; in atmel_spi_cs_activate() local
294 if (!dm_gpio_is_valid(&priv->cs_gpios[cs])) in atmel_spi_cs_activate()
297 dm_gpio_set_value(&priv->cs_gpios[cs], 0); in atmel_spi_cs_activate()
307 u32 cs = slave_plat->cs; in atmel_spi_cs_deactivate() local
309 if (!dm_gpio_is_valid(&priv->cs_gpios[cs])) in atmel_spi_cs_deactivate()
312 dm_gpio_set_value(&priv->cs_gpios[cs], 1); in atmel_spi_cs_deactivate()
321 struct at91_spi *reg_base = bus_plat->regs; in atmel_spi_xfer()
330 goto out; in atmel_spi_xfer()
333 * The controller can do non-multiple-of-8 bit in atmel_spi_xfer()
343 goto out; in atmel_spi_xfer()
349 * The controller can do automatic CS control, but it is in atmel_spi_xfer()
351 * in the context of U-Boot. in atmel_spi_xfer()
363 readl(®_base->rdr); in atmel_spi_xfer()
367 status = readl(®_base->sr); in atmel_spi_xfer()
370 return -1; in atmel_spi_xfer()
377 writel(value, ®_base->tdr); in atmel_spi_xfer()
382 value = readl(®_base->rdr); in atmel_spi_xfer()
389 out: in atmel_spi_xfer()
393 * we deactivate CS. in atmel_spi_xfer()
395 wait_for_bit_le32(®_base->sr, in atmel_spi_xfer()
408 priv->freq = speed; in atmel_spi_set_speed()
417 priv->mode = mode; in atmel_spi_set_mode()
443 return -EINVAL; in atmel_spi_enable_clk()
451 return -EINVAL; in atmel_spi_enable_clk()
453 priv->bus_clk_rate = clk_rate; in atmel_spi_enable_clk()
469 bus_plat->regs = (struct at91_spi *)devfdt_get_addr(bus); in atmel_spi_probe()
475 ret = gpio_request_list_by_name(bus, "cs-gpios", priv->cs_gpios, in atmel_spi_probe()
476 ARRAY_SIZE(priv->cs_gpios), 0); in atmel_spi_probe()
478 pr_err("Can't get %s gpios! Error: %d", bus->name, ret); in atmel_spi_probe()
482 for(i = 0; i < ARRAY_SIZE(priv->cs_gpios); i++) { in atmel_spi_probe()
483 if (!dm_gpio_is_valid(&priv->cs_gpios[i])) in atmel_spi_probe()
486 dm_gpio_set_dir_flags(&priv->cs_gpios[i], in atmel_spi_probe()
491 writel(ATMEL_SPI_CR_SWRST, &bus_plat->regs->cr); in atmel_spi_probe()
497 { .compatible = "atmel,at91rm9200-spi" },