• Home
  • Raw
  • Download

Lines Matching +full:spi +full:- +full:cpol

2  * SPI master driver for ICP DAS LP-8841 RTC
10 * Copyright (C) 2003 - 2007 Paul Mundt
28 #include <linux/spi/spi.h>
39 * REVISIT If there is support for SPI_3WIRE and SPI_LSB_FIRST in SPI
40 * GPIO driver, this SPI driver can be replaced by a simple GPIO driver
53 data->state |= SPI_LP8841_RTC_CLK; in setsck()
55 data->state &= ~SPI_LP8841_RTC_CLK; in setsck()
56 writeb(data->state, data->iomem); in setsck()
63 data->state |= SPI_LP8841_RTC_MOSI; in setmosi()
65 data->state &= ~SPI_LP8841_RTC_MOSI; in setmosi()
66 writeb(data->state, data->iomem); in setmosi()
72 return ioread8(data->iomem) & SPI_LP8841_RTC_MISO; in getmiso()
77 unsigned usecs, unsigned cpol, unsigned flags, in bitbang_txrx_be_cpha0_lsb() argument
80 /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ in bitbang_txrx_be_cpha0_lsb()
82 u32 shift = 32 - bits; in bitbang_txrx_be_cpha0_lsb()
84 for (; likely(bits); bits--) { in bitbang_txrx_be_cpha0_lsb()
97 setsck(data, !cpol); in bitbang_txrx_be_cpha0_lsb()
100 setsck(data, cpol); in bitbang_txrx_be_cpha0_lsb()
109 struct spi_device *spi, in spi_lp8841_rtc_transfer_one() argument
113 unsigned count = t->len; in spi_lp8841_rtc_transfer_one()
114 const u8 *tx = t->tx_buf; in spi_lp8841_rtc_transfer_one()
115 u8 *rx = t->rx_buf; in spi_lp8841_rtc_transfer_one()
120 data->state &= ~SPI_LP8841_RTC_nWE; in spi_lp8841_rtc_transfer_one()
121 writeb(data->state, data->iomem); in spi_lp8841_rtc_transfer_one()
126 count--; in spi_lp8841_rtc_transfer_one()
129 data->state |= SPI_LP8841_RTC_nWE; in spi_lp8841_rtc_transfer_one()
130 writeb(data->state, data->iomem); in spi_lp8841_rtc_transfer_one()
135 count--; in spi_lp8841_rtc_transfer_one()
138 ret = -EINVAL; in spi_lp8841_rtc_transfer_one()
147 spi_lp8841_rtc_set_cs(struct spi_device *spi, bool enable) in spi_lp8841_rtc_set_cs() argument
149 struct spi_lp8841_rtc *data = spi_master_get_devdata(spi->master); in spi_lp8841_rtc_set_cs()
151 data->state = 0; in spi_lp8841_rtc_set_cs()
152 writeb(data->state, data->iomem); in spi_lp8841_rtc_set_cs()
155 data->state |= SPI_LP8841_RTC_CE; in spi_lp8841_rtc_set_cs()
156 writeb(data->state, data->iomem); in spi_lp8841_rtc_set_cs()
162 spi_lp8841_rtc_setup(struct spi_device *spi) in spi_lp8841_rtc_setup() argument
164 if ((spi->mode & SPI_CS_HIGH) == 0) { in spi_lp8841_rtc_setup()
165 dev_err(&spi->dev, "unsupported active low chip select\n"); in spi_lp8841_rtc_setup()
166 return -EINVAL; in spi_lp8841_rtc_setup()
169 if ((spi->mode & SPI_LSB_FIRST) == 0) { in spi_lp8841_rtc_setup()
170 dev_err(&spi->dev, "unsupported MSB first mode\n"); in spi_lp8841_rtc_setup()
171 return -EINVAL; in spi_lp8841_rtc_setup()
174 if ((spi->mode & SPI_3WIRE) == 0) { in spi_lp8841_rtc_setup()
175 dev_err(&spi->dev, "unsupported wiring. 3 wires required\n"); in spi_lp8841_rtc_setup()
176 return -EINVAL; in spi_lp8841_rtc_setup()
184 { .compatible = "icpdas,lp8841-spi-rtc" },
199 master = spi_alloc_master(&pdev->dev, sizeof(*data)); in spi_lp8841_rtc_probe()
201 return -ENOMEM; in spi_lp8841_rtc_probe()
204 master->flags = SPI_MASTER_HALF_DUPLEX; in spi_lp8841_rtc_probe()
205 master->mode_bits = SPI_CS_HIGH | SPI_3WIRE | SPI_LSB_FIRST; in spi_lp8841_rtc_probe()
207 master->bus_num = pdev->id; in spi_lp8841_rtc_probe()
208 master->num_chipselect = 1; in spi_lp8841_rtc_probe()
209 master->setup = spi_lp8841_rtc_setup; in spi_lp8841_rtc_probe()
210 master->set_cs = spi_lp8841_rtc_set_cs; in spi_lp8841_rtc_probe()
211 master->transfer_one = spi_lp8841_rtc_transfer_one; in spi_lp8841_rtc_probe()
212 master->bits_per_word_mask = SPI_BPW_MASK(8); in spi_lp8841_rtc_probe()
214 master->dev.of_node = pdev->dev.of_node; in spi_lp8841_rtc_probe()
220 data->iomem = devm_ioremap_resource(&pdev->dev, iomem); in spi_lp8841_rtc_probe()
221 ret = PTR_ERR_OR_ZERO(data->iomem); in spi_lp8841_rtc_probe()
223 dev_err(&pdev->dev, "failed to get IO address\n"); in spi_lp8841_rtc_probe()
227 /* register with the SPI framework */ in spi_lp8841_rtc_probe()
228 ret = devm_spi_register_master(&pdev->dev, master); in spi_lp8841_rtc_probe()
230 dev_err(&pdev->dev, "cannot register spi master\n"); in spi_lp8841_rtc_probe()
254 MODULE_DESCRIPTION("SPI master driver for ICP DAS LP-8841 RTC");