mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	i2c: Rename last mux driver to standard pattern
Update the MAINTAINERS entry and all other references accordingly. Based on an original patch by Wolfram Sang. Signed-off-by: Jean Delvare <khali@linux-fr.org> Acked-by: Peter Korsgaard <peter.korsgaard@barco.com> [wsa: fixed merge conflict due to rework in i2c_add_mux_adapter()] Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
This commit is contained in:
		
							parent
							
								
									353f56b5f3
								
							
						
					
					
						commit
						e7065e20d9
					
				
					 6 changed files with 39 additions and 40 deletions
				
			
		| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
Kernel driver gpio-i2cmux
 | 
			
		||||
Kernel driver i2c-gpio-mux
 | 
			
		||||
 | 
			
		||||
Author: Peter Korsgaard <peter.korsgaard@barco.com>
 | 
			
		||||
 | 
			
		||||
Description
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
gpio-i2cmux is an i2c mux driver providing access to I2C bus segments
 | 
			
		||||
i2c-gpio-mux is an i2c mux driver providing access to I2C bus segments
 | 
			
		||||
from a master I2C bus and a hardware MUX controlled through GPIO pins.
 | 
			
		||||
 | 
			
		||||
E.G.:
 | 
			
		||||
| 
						 | 
				
			
			@ -26,16 +26,16 @@ according to the settings of the GPIO pins 1..N.
 | 
			
		|||
Usage
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
gpio-i2cmux uses the platform bus, so you need to provide a struct
 | 
			
		||||
i2c-gpio-mux uses the platform bus, so you need to provide a struct
 | 
			
		||||
platform_device with the platform_data pointing to a struct
 | 
			
		||||
gpio_i2cmux_platform_data with the I2C adapter number of the master
 | 
			
		||||
bus, the number of bus segments to create and the GPIO pins used
 | 
			
		||||
to control it. See include/linux/gpio-i2cmux.h for details.
 | 
			
		||||
to control it. See include/linux/i2c-gpio-mux.h for details.
 | 
			
		||||
 | 
			
		||||
E.G. something like this for a MUX providing 4 bus segments
 | 
			
		||||
controlled through 3 GPIO pins:
 | 
			
		||||
 | 
			
		||||
#include <linux/gpio-i2cmux.h>
 | 
			
		||||
#include <linux/i2c-gpio-mux.h>
 | 
			
		||||
#include <linux/platform_device.h>
 | 
			
		||||
 | 
			
		||||
static const unsigned myboard_gpiomux_gpios[] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ static struct gpio_i2cmux_platform_data myboard_i2cmux_data = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
static struct platform_device myboard_i2cmux = {
 | 
			
		||||
	.name		= "gpio-i2cmux",
 | 
			
		||||
	.name		= "i2c-gpio-mux",
 | 
			
		||||
	.id		= 0,
 | 
			
		||||
	.dev		= {
 | 
			
		||||
		.platform_data	= &myboard_i2cmux_data,
 | 
			
		||||
| 
						 | 
				
			
			@ -2937,9 +2937,9 @@ GENERIC GPIO I2C MULTIPLEXER DRIVER
 | 
			
		|||
M:	Peter Korsgaard <peter.korsgaard@barco.com>
 | 
			
		||||
L:	linux-i2c@vger.kernel.org
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/i2c/muxes/gpio-i2cmux.c
 | 
			
		||||
F:	include/linux/gpio-i2cmux.h
 | 
			
		||||
F:	Documentation/i2c/muxes/gpio-i2cmux
 | 
			
		||||
F:	drivers/i2c/muxes/i2c-mux-gpio.c
 | 
			
		||||
F:	include/linux/i2c-mux-gpio.h
 | 
			
		||||
F:	Documentation/i2c/muxes/i2c-mux-gpio
 | 
			
		||||
 | 
			
		||||
GENERIC HDLC (WAN) DRIVERS
 | 
			
		||||
M:	Krzysztof Halasa <khc@pm.waw.pl>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ config I2C_MUX_GPIO
 | 
			
		|||
	  through GPIO pins.
 | 
			
		||||
 | 
			
		||||
	  This driver can also be built as a module.  If so, the module
 | 
			
		||||
	  will be called gpio-i2cmux.
 | 
			
		||||
	  will be called i2c-mux-gpio.
 | 
			
		||||
 | 
			
		||||
config I2C_MUX_PCA9541
 | 
			
		||||
	tristate "NXP PCA9541 I2C Master Selector"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#
 | 
			
		||||
# Makefile for multiplexer I2C chip drivers.
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_I2C_MUX_GPIO)	+= gpio-i2cmux.o
 | 
			
		||||
obj-$(CONFIG_I2C_MUX_GPIO)	+= i2c-mux-gpio.o
 | 
			
		||||
obj-$(CONFIG_I2C_MUX_PCA9541)	+= i2c-mux-pca9541.o
 | 
			
		||||
obj-$(CONFIG_I2C_MUX_PCA954x)	+= i2c-mux-pca954x.o
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
 | 
			
		||||
#include <linux/i2c.h>
 | 
			
		||||
#include <linux/i2c-mux.h>
 | 
			
		||||
#include <linux/gpio-i2cmux.h>
 | 
			
		||||
#include <linux/i2c-mux-gpio.h>
 | 
			
		||||
#include <linux/platform_device.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -20,10 +20,10 @@
 | 
			
		|||
struct gpiomux {
 | 
			
		||||
	struct i2c_adapter *parent;
 | 
			
		||||
	struct i2c_adapter **adap; /* child busses */
 | 
			
		||||
	struct gpio_i2cmux_platform_data data;
 | 
			
		||||
	struct i2c_mux_gpio_platform_data data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void gpiomux_set(const struct gpiomux *mux, unsigned val)
 | 
			
		||||
static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,28 +31,28 @@ static void gpiomux_set(const struct gpiomux *mux, unsigned val)
 | 
			
		|||
		gpio_set_value(mux->data.gpios[i], val & (1 << i));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int gpiomux_select(struct i2c_adapter *adap, void *data, u32 chan)
 | 
			
		||||
static int i2c_mux_gpio_select(struct i2c_adapter *adap, void *data, u32 chan)
 | 
			
		||||
{
 | 
			
		||||
	struct gpiomux *mux = data;
 | 
			
		||||
 | 
			
		||||
	gpiomux_set(mux, mux->data.values[chan]);
 | 
			
		||||
	i2c_mux_gpio_set(mux, mux->data.values[chan]);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int gpiomux_deselect(struct i2c_adapter *adap, void *data, u32 chan)
 | 
			
		||||
static int i2c_mux_gpio_deselect(struct i2c_adapter *adap, void *data, u32 chan)
 | 
			
		||||
{
 | 
			
		||||
	struct gpiomux *mux = data;
 | 
			
		||||
 | 
			
		||||
	gpiomux_set(mux, mux->data.idle);
 | 
			
		||||
	i2c_mux_gpio_set(mux, mux->data.idle);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __devinit gpiomux_probe(struct platform_device *pdev)
 | 
			
		||||
static int __devinit i2c_mux_gpio_probe(struct platform_device *pdev)
 | 
			
		||||
{
 | 
			
		||||
	struct gpiomux *mux;
 | 
			
		||||
	struct gpio_i2cmux_platform_data *pdata;
 | 
			
		||||
	struct i2c_mux_gpio_platform_data *pdata;
 | 
			
		||||
	struct i2c_adapter *parent;
 | 
			
		||||
	int (*deselect) (struct i2c_adapter *, void *, u32);
 | 
			
		||||
	unsigned initial_state;
 | 
			
		||||
| 
						 | 
				
			
			@ -86,16 +86,16 @@ static int __devinit gpiomux_probe(struct platform_device *pdev)
 | 
			
		|||
		goto alloc_failed2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (pdata->idle != GPIO_I2CMUX_NO_IDLE) {
 | 
			
		||||
	if (pdata->idle != I2C_MUX_GPIO_NO_IDLE) {
 | 
			
		||||
		initial_state = pdata->idle;
 | 
			
		||||
		deselect = gpiomux_deselect;
 | 
			
		||||
		deselect = i2c_mux_gpio_deselect;
 | 
			
		||||
	} else {
 | 
			
		||||
		initial_state = pdata->values[0];
 | 
			
		||||
		deselect = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < pdata->n_gpios; i++) {
 | 
			
		||||
		ret = gpio_request(pdata->gpios[i], "gpio-i2cmux");
 | 
			
		||||
		ret = gpio_request(pdata->gpios[i], "i2c-mux-gpio");
 | 
			
		||||
		if (ret)
 | 
			
		||||
			goto err_request_gpio;
 | 
			
		||||
		gpio_direction_output(pdata->gpios[i],
 | 
			
		||||
| 
						 | 
				
			
			@ -105,9 +105,8 @@ static int __devinit gpiomux_probe(struct platform_device *pdev)
 | 
			
		|||
	for (i = 0; i < pdata->n_values; i++) {
 | 
			
		||||
		u32 nr = pdata->base_nr ? (pdata->base_nr + i) : 0;
 | 
			
		||||
 | 
			
		||||
		mux->adap[i] = i2c_add_mux_adapter(parent, &pdev->dev, mux,
 | 
			
		||||
						   nr, i,
 | 
			
		||||
						   gpiomux_select, deselect);
 | 
			
		||||
		mux->adap[i] = i2c_add_mux_adapter(parent, &pdev->dev, mux, nr, i,
 | 
			
		||||
						   i2c_mux_gpio_select, deselect);
 | 
			
		||||
		if (!mux->adap[i]) {
 | 
			
		||||
			ret = -ENODEV;
 | 
			
		||||
			dev_err(&pdev->dev, "Failed to add adapter %d\n", i);
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +137,7 @@ static int __devinit gpiomux_probe(struct platform_device *pdev)
 | 
			
		|||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __devexit gpiomux_remove(struct platform_device *pdev)
 | 
			
		||||
static int __devexit i2c_mux_gpio_remove(struct platform_device *pdev)
 | 
			
		||||
{
 | 
			
		||||
	struct gpiomux *mux = platform_get_drvdata(pdev);
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -157,18 +156,18 @@ static int __devexit gpiomux_remove(struct platform_device *pdev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct platform_driver gpiomux_driver = {
 | 
			
		||||
	.probe	= gpiomux_probe,
 | 
			
		||||
	.remove	= __devexit_p(gpiomux_remove),
 | 
			
		||||
static struct platform_driver i2c_mux_gpio_driver = {
 | 
			
		||||
	.probe	= i2c_mux_gpio_probe,
 | 
			
		||||
	.remove	= __devexit_p(i2c_mux_gpio_remove),
 | 
			
		||||
	.driver	= {
 | 
			
		||||
		.owner	= THIS_MODULE,
 | 
			
		||||
		.name	= "gpio-i2cmux",
 | 
			
		||||
		.name	= "i2c-mux-gpio",
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module_platform_driver(gpiomux_driver);
 | 
			
		||||
module_platform_driver(i2c_mux_gpio_driver);
 | 
			
		||||
 | 
			
		||||
MODULE_DESCRIPTION("GPIO-based I2C multiplexer driver");
 | 
			
		||||
MODULE_AUTHOR("Peter Korsgaard <peter.korsgaard@barco.com>");
 | 
			
		||||
MODULE_LICENSE("GPL");
 | 
			
		||||
MODULE_ALIAS("platform:gpio-i2cmux");
 | 
			
		||||
MODULE_ALIAS("platform:i2c-mux-gpio");
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * gpio-i2cmux interface to platform code
 | 
			
		||||
 * i2c-mux-gpio interface to platform code
 | 
			
		||||
 *
 | 
			
		||||
 * Peter Korsgaard <peter.korsgaard@barco.com>
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -8,14 +8,14 @@
 | 
			
		|||
 * published by the Free Software Foundation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _LINUX_GPIO_I2CMUX_H
 | 
			
		||||
#define _LINUX_GPIO_I2CMUX_H
 | 
			
		||||
#ifndef _LINUX_I2C_MUX_GPIO_H
 | 
			
		||||
#define _LINUX_I2C_MUX_GPIO_H
 | 
			
		||||
 | 
			
		||||
/* MUX has no specific idle mode */
 | 
			
		||||
#define GPIO_I2CMUX_NO_IDLE	((unsigned)-1)
 | 
			
		||||
#define I2C_MUX_GPIO_NO_IDLE	((unsigned)-1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * struct gpio_i2cmux_platform_data - Platform-dependent data for gpio-i2cmux
 | 
			
		||||
 * struct i2c_mux_gpio_platform_data - Platform-dependent data for i2c-mux-gpio
 | 
			
		||||
 * @parent: Parent I2C bus adapter number
 | 
			
		||||
 * @base_nr: Base I2C bus number to number adapters from or zero for dynamic
 | 
			
		||||
 * @values: Array of bitmasks of GPIO settings (low/high) for each
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
 * @n_gpios: Number of GPIOs used to control MUX
 | 
			
		||||
 * @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used
 | 
			
		||||
 */
 | 
			
		||||
struct gpio_i2cmux_platform_data {
 | 
			
		||||
struct i2c_mux_gpio_platform_data {
 | 
			
		||||
	int parent;
 | 
			
		||||
	int base_nr;
 | 
			
		||||
	const unsigned *values;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,4 +35,4 @@ struct gpio_i2cmux_platform_data {
 | 
			
		|||
	unsigned idle;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _LINUX_GPIO_I2CMUX_H */
 | 
			
		||||
#endif /* _LINUX_I2C_MUX_GPIO_H */
 | 
			
		||||
		Loading…
	
		Reference in a new issue