Lines Matching +full:spi +full:- +full:slave
2 * SPI slave handler controlling system state
4 * This SPI slave handler allows remote control of system reboot, power off,
7 * Copyright (C) 2016-2017 Glider bvba
13 * Usage (assuming /dev/spidev2.0 corresponds to the SPI master on the remote
20 * # spidev_test -D /dev/spidev2.0 -p $suspend # or $reboot, $poweroff, $halt
27 #include <linux/spi/spi.h>
30 * The numbers are chosen to display something human-readable on two 7-segment
39 struct spi_device *spi; member
55 if (priv->msg.status) in spi_slave_system_control_complete()
58 cmd = be16_to_cpu(priv->cmd); in spi_slave_system_control_complete()
61 dev_info(&priv->spi->dev, "Rebooting system...\n"); in spi_slave_system_control_complete()
66 dev_info(&priv->spi->dev, "Powering off system...\n"); in spi_slave_system_control_complete()
71 dev_info(&priv->spi->dev, "Halting system...\n"); in spi_slave_system_control_complete()
76 dev_info(&priv->spi->dev, "Suspending system...\n"); in spi_slave_system_control_complete()
81 dev_warn(&priv->spi->dev, "Unknown command 0x%x\n", cmd); in spi_slave_system_control_complete()
92 dev_info(&priv->spi->dev, "Terminating\n"); in spi_slave_system_control_complete()
93 complete(&priv->finished); in spi_slave_system_control_complete()
101 spi_message_init_with_transfers(&priv->msg, &priv->xfer, 1); in spi_slave_system_control_submit()
103 priv->msg.complete = spi_slave_system_control_complete; in spi_slave_system_control_submit()
104 priv->msg.context = priv; in spi_slave_system_control_submit()
106 ret = spi_async(priv->spi, &priv->msg); in spi_slave_system_control_submit()
108 dev_err(&priv->spi->dev, "spi_async() failed %d\n", ret); in spi_slave_system_control_submit()
113 static int spi_slave_system_control_probe(struct spi_device *spi) in spi_slave_system_control_probe() argument
118 priv = devm_kzalloc(&spi->dev, sizeof(*priv), GFP_KERNEL); in spi_slave_system_control_probe()
120 return -ENOMEM; in spi_slave_system_control_probe()
122 priv->spi = spi; in spi_slave_system_control_probe()
123 init_completion(&priv->finished); in spi_slave_system_control_probe()
124 priv->xfer.rx_buf = &priv->cmd; in spi_slave_system_control_probe()
125 priv->xfer.len = sizeof(priv->cmd); in spi_slave_system_control_probe()
131 spi_set_drvdata(spi, priv); in spi_slave_system_control_probe()
135 static void spi_slave_system_control_remove(struct spi_device *spi) in spi_slave_system_control_remove() argument
137 struct spi_slave_system_control_priv *priv = spi_get_drvdata(spi); in spi_slave_system_control_remove()
139 spi_target_abort(spi); in spi_slave_system_control_remove()
140 wait_for_completion(&priv->finished); in spi_slave_system_control_remove()
145 .name = "spi-slave-system-control",
153 MODULE_DESCRIPTION("SPI slave handler controlling system state");