Lines Matching +full:spi +full:- +full:mux
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * ADGS1408/ADGS1409 SPI MUX driver
11 #include <linux/mux/driver.h>
13 #include <linux/spi/spi.h>
25 static int adgs1408_spi_reg_write(struct spi_device *spi, in adgs1408_spi_reg_write() argument
33 return spi_write_then_read(spi, tx_buf, sizeof(tx_buf), NULL, 0); in adgs1408_spi_reg_write()
36 static int adgs1408_set(struct mux_control *mux, int state) in adgs1408_set() argument
38 struct spi_device *spi = to_spi_device(mux->chip->dev.parent); in adgs1408_set() local
46 return adgs1408_spi_reg_write(spi, ADGS1408_SW_DATA, reg); in adgs1408_set()
53 static int adgs1408_probe(struct spi_device *spi) in adgs1408_probe() argument
55 struct device *dev = &spi->dev; in adgs1408_probe()
58 struct mux_control *mux; in adgs1408_probe() local
62 chip_id = (kernel_ulong_t)spi_get_device_match_data(spi); in adgs1408_probe()
68 mux_chip->ops = &adgs1408_ops; in adgs1408_probe()
70 ret = adgs1408_spi_reg_write(spi, ADGS1408_SW_DATA, ADGS1408_DISABLE); in adgs1408_probe()
74 ret = device_property_read_u32(dev, "idle-state", (u32 *)&idle_state); in adgs1408_probe()
78 mux = mux_chip->mux; in adgs1408_probe()
81 mux->states = 8; in adgs1408_probe()
83 mux->states = 4; in adgs1408_probe()
90 if (idle_state < mux->states) { in adgs1408_probe()
91 mux->idle_state = idle_state; in adgs1408_probe()
96 dev_err(dev, "invalid idle-state %d\n", idle_state); in adgs1408_probe()
97 return -EINVAL; in adgs1408_probe()
108 MODULE_DEVICE_TABLE(spi, adgs1408_spi_id);
128 MODULE_DESCRIPTION("Analog Devices ADGS1408 MUX driver");