Lines Matching +full:spi +full:- +full:gpio

2  * MC33880 high-side/low-side switch GPIO driver
20 * Freescale MC33880 high-side/low-side switch
25 #include <linux/spi/spi.h>
26 #include <linux/spi/mc33880.h>
27 #include <linux/gpio.h>
52 struct spi_device *spi; member
57 return spi_write(mc->spi, &mc->port_config, sizeof(mc->port_config)); in mc33880_write_config()
64 mc->port_config |= 1 << offset; in __mc33880_set()
66 mc->port_config &= ~(1 << offset); in __mc33880_set()
76 mutex_lock(&mc->lock); in mc33880_set()
80 mutex_unlock(&mc->lock); in mc33880_set()
83 static int __devinit mc33880_probe(struct spi_device *spi) in mc33880_probe() argument
89 pdata = spi->dev.platform_data; in mc33880_probe()
90 if (!pdata || !pdata->base) { in mc33880_probe()
91 dev_dbg(&spi->dev, "incorrect or missing platform data\n"); in mc33880_probe()
92 return -EINVAL; in mc33880_probe()
98 spi->bits_per_word = 8; in mc33880_probe()
100 ret = spi_setup(spi); in mc33880_probe()
106 return -ENOMEM; in mc33880_probe()
108 mutex_init(&mc->lock); in mc33880_probe()
110 dev_set_drvdata(&spi->dev, mc); in mc33880_probe()
112 mc->spi = spi; in mc33880_probe()
114 mc->chip.label = DRIVER_NAME, in mc33880_probe()
115 mc->chip.set = mc33880_set; in mc33880_probe()
116 mc->chip.base = pdata->base; in mc33880_probe()
117 mc->chip.ngpio = PIN_NUMBER; in mc33880_probe()
118 mc->chip.can_sleep = 1; in mc33880_probe()
119 mc->chip.dev = &spi->dev; in mc33880_probe()
120 mc->chip.owner = THIS_MODULE; in mc33880_probe()
122 mc->port_config = 0x00; in mc33880_probe()
124 * is just for testing SPI communication, and the second is the in mc33880_probe()
128 mc->port_config = 0x00; in mc33880_probe()
137 ret = gpiochip_add(&mc->chip); in mc33880_probe()
144 dev_set_drvdata(&spi->dev, NULL); in mc33880_probe()
145 mutex_destroy(&mc->lock); in mc33880_probe()
150 static int __devexit mc33880_remove(struct spi_device *spi) in mc33880_remove() argument
155 mc = dev_get_drvdata(&spi->dev); in mc33880_remove()
157 return -ENODEV; in mc33880_remove()
159 dev_set_drvdata(&spi->dev, NULL); in mc33880_remove()
161 ret = gpiochip_remove(&mc->chip); in mc33880_remove()
163 mutex_destroy(&mc->lock); in mc33880_remove()
166 dev_err(&spi->dev, "Failed to remove the GPIO controller: %d\n", in mc33880_remove()
185 /* register after spi postcore initcall and before
196 MODULE_AUTHOR("Mocean Laboratories <info@mocean-labs.com>");