Lines Matching refs:spi
10 #include <linux/spi/spi.h>
27 * @spi: pointer to the device struct attached to the parent
28 * spi controller
36 * downstream spi devices
39 struct spi_device *spi;
49 static int spi_mux_select(struct spi_device *spi)
51 struct spi_mux_priv *priv = spi_controller_get_devdata(spi->controller);
54 ret = mux_control_select(priv->mux, spi_get_chipselect(spi, 0));
58 if (priv->current_cs == spi_get_chipselect(spi, 0))
61 dev_dbg(&priv->spi->dev, "setting up the mux for cs %d\n",
62 spi_get_chipselect(spi, 0));
65 priv->spi->max_speed_hz = spi->max_speed_hz;
66 priv->spi->mode = spi->mode;
67 priv->spi->bits_per_word = spi->bits_per_word;
69 priv->current_cs = spi_get_chipselect(spi, 0);
74 static int spi_mux_setup(struct spi_device *spi)
76 struct spi_mux_priv *priv = spi_controller_get_devdata(spi->controller);
83 return spi_setup(priv->spi);
89 struct spi_controller *ctlr = spi_get_drvdata(priv->spi);
94 m->spi = priv->child_msg_dev;
103 struct spi_device *spi = m->spi;
106 ret = spi_mux_select(spi);
116 priv->child_msg_dev = m->spi;
120 m->spi = priv->spi;
123 return spi_async(priv->spi, m);
126 static int spi_mux_probe(struct spi_device *spi)
132 ctlr = spi_alloc_master(&spi->dev, sizeof(*priv));
136 spi_set_drvdata(spi, ctlr);
138 priv->spi = spi;
147 priv->mux = devm_mux_control_get(&spi->dev, NULL);
149 ret = dev_err_probe(&spi->dev, PTR_ERR(priv->mux),
157 ctlr->mode_bits = spi->controller->mode_bits;
158 ctlr->flags = spi->controller->flags;
163 ctlr->dev.of_node = spi->dev.of_node;
166 ret = devm_spi_register_controller(&spi->dev, ctlr);
179 { "spi-mux" },
182 MODULE_DEVICE_TABLE(spi, spi_mux_id);
185 { .compatible = "spi-mux" },
193 .name = "spi-mux",