Lines Matching +full:spi +full:- +full:slave

2  * Marvell NFC-over-SPI driver: SPI interface related functions
11 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
13 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
28 #include <linux/spi/spi.h>
35 struct spi_device *spi; member
50 if (test_and_clear_bit(SPI_WAIT_HANDSHAKE, &drv_data->flags)) { in nfcmrvl_spi_int_irq_thread_fn()
51 complete(&drv_data->handshake_completion); in nfcmrvl_spi_int_irq_thread_fn()
55 /* Normal case, SPI_INT deasserted by slave to trigger a master read */ in nfcmrvl_spi_int_irq_thread_fn()
57 skb = nci_spi_read(drv_data->nci_spi); in nfcmrvl_spi_int_irq_thread_fn()
59 nfc_err(&drv_data->spi->dev, "failed to read spi packet"); in nfcmrvl_spi_int_irq_thread_fn()
63 if (nfcmrvl_nci_recv_frame(drv_data->priv, skb) < 0) in nfcmrvl_spi_int_irq_thread_fn()
64 nfc_err(&drv_data->spi->dev, "corrupted RX packet"); in nfcmrvl_spi_int_irq_thread_fn()
82 struct nfcmrvl_spi_drv_data *drv_data = priv->drv_data; in nfcmrvl_spi_nci_send()
85 /* Reinit completion for slave handshake */ in nfcmrvl_spi_nci_send()
86 reinit_completion(&drv_data->handshake_completion); in nfcmrvl_spi_nci_send()
87 set_bit(SPI_WAIT_HANDSHAKE, &drv_data->flags); in nfcmrvl_spi_nci_send()
90 * Append a dummy byte at the end of SPI frame. This is due to a in nfcmrvl_spi_nci_send()
95 /* Send the SPI packet */ in nfcmrvl_spi_nci_send()
96 err = nci_spi_send(drv_data->nci_spi, &drv_data->handshake_completion, in nfcmrvl_spi_nci_send()
99 nfc_err(priv->dev, "spi_send failed %d", err); in nfcmrvl_spi_nci_send()
107 struct nfcmrvl_spi_drv_data *drv_data = priv->drv_data; in nfcmrvl_spi_nci_update_config()
110 drv_data->nci_spi->xfer_speed_hz = config->clk; in nfcmrvl_spi_nci_update_config()
136 pdata->irq = ret; in nfcmrvl_spi_parse_dt()
141 static int nfcmrvl_spi_probe(struct spi_device *spi) in nfcmrvl_spi_probe() argument
148 drv_data = devm_kzalloc(&spi->dev, sizeof(*drv_data), GFP_KERNEL); in nfcmrvl_spi_probe()
150 return -ENOMEM; in nfcmrvl_spi_probe()
152 drv_data->spi = spi; in nfcmrvl_spi_probe()
153 drv_data->priv = NULL; in nfcmrvl_spi_probe()
154 spi_set_drvdata(spi, drv_data); in nfcmrvl_spi_probe()
156 pdata = spi->dev.platform_data; in nfcmrvl_spi_probe()
158 if (!pdata && spi->dev.of_node) in nfcmrvl_spi_probe()
159 if (nfcmrvl_spi_parse_dt(spi->dev.of_node, &config) == 0) in nfcmrvl_spi_probe()
163 return -EINVAL; in nfcmrvl_spi_probe()
165 ret = devm_request_threaded_irq(&drv_data->spi->dev, pdata->irq, in nfcmrvl_spi_probe()
170 nfc_err(&drv_data->spi->dev, "Unable to register IRQ handler"); in nfcmrvl_spi_probe()
171 return -ENODEV; in nfcmrvl_spi_probe()
174 drv_data->priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_SPI, in nfcmrvl_spi_probe()
176 &drv_data->spi->dev, in nfcmrvl_spi_probe()
178 if (IS_ERR(drv_data->priv)) in nfcmrvl_spi_probe()
179 return PTR_ERR(drv_data->priv); in nfcmrvl_spi_probe()
181 drv_data->priv->support_fw_dnld = true; in nfcmrvl_spi_probe()
183 drv_data->nci_spi = nci_spi_allocate_spi(drv_data->spi, 0, 10, in nfcmrvl_spi_probe()
184 drv_data->priv->ndev); in nfcmrvl_spi_probe()
186 /* Init completion for slave handshake */ in nfcmrvl_spi_probe()
187 init_completion(&drv_data->handshake_completion); in nfcmrvl_spi_probe()
191 static int nfcmrvl_spi_remove(struct spi_device *spi) in nfcmrvl_spi_remove() argument
193 struct nfcmrvl_spi_drv_data *drv_data = spi_get_drvdata(spi); in nfcmrvl_spi_remove()
195 nfcmrvl_nci_unregister_dev(drv_data->priv); in nfcmrvl_spi_remove()
200 { .compatible = "marvell,nfc-spi", },
209 MODULE_DEVICE_TABLE(spi, nfcmrvl_spi_id_table);
225 MODULE_DESCRIPTION("Marvell NFC-over-SPI driver");