diff options
| author | Michael Lawnick <ml.lawnick@gmx.de> | 2010-08-11 12:21:02 -0400 |
|---|---|---|
| committer | Jean Delvare <khali@linux-fr.org> | 2010-08-11 12:21:02 -0400 |
| commit | 0826374bff57411d239f2fcb15da3c35af0a93cd (patch) | |
| tree | 514d4361cfc9cc546306612de3464def7fe8a7cd /include/linux | |
| parent | dafc50d141c27959dbd3a1cfe9857a86d23402a7 (diff) | |
i2c: Multiplexed I2C bus core support
Add multiplexed bus core support. I2C multiplexer and switches
like pca954x get instantiated as new adapters per port.
Signed-off-by: Michael Lawnick <ml.lawnick@gmx.de>
Acked-by: Rodolfo Giometti <giometti@linux.it>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/i2c-mux.h | 46 | ||||
| -rw-r--r-- | include/linux/i2c.h | 8 |
2 files changed, 54 insertions, 0 deletions
diff --git a/include/linux/i2c-mux.h b/include/linux/i2c-mux.h new file mode 100644 index 000000000000..34536effd652 --- /dev/null +++ b/include/linux/i2c-mux.h | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * i2c-mux.h - functions for the i2c-bus mux support | ||
| 4 | * | ||
| 5 | * Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it> | ||
| 6 | * Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it> | ||
| 7 | * Michael Lawnick <michael.lawnick.ext@nsn.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef _LINUX_I2C_MUX_H | ||
| 25 | #define _LINUX_I2C_MUX_H | ||
| 26 | |||
| 27 | #ifdef __KERNEL__ | ||
| 28 | |||
| 29 | /* | ||
| 30 | * Called to create a i2c bus on a multiplexed bus segment. | ||
| 31 | * The mux_dev and chan_id parameters are passed to the select | ||
| 32 | * and deselect callback functions to perform hardware-specific | ||
| 33 | * mux control. | ||
| 34 | */ | ||
| 35 | struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, | ||
| 36 | void *mux_dev, u32 force_nr, u32 chan_id, | ||
| 37 | int (*select) (struct i2c_adapter *, | ||
| 38 | void *mux_dev, u32 chan_id), | ||
| 39 | int (*deselect) (struct i2c_adapter *, | ||
| 40 | void *mux_dev, u32 chan_id)); | ||
| 41 | |||
| 42 | int i2c_del_mux_adapter(struct i2c_adapter *adap); | ||
| 43 | |||
| 44 | #endif /* __KERNEL__ */ | ||
| 45 | |||
| 46 | #endif /* _LINUX_I2C_MUX_H */ | ||
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 798bad8741e4..4bae0b72ed3c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/of.h> /* for struct device_node */ | 37 | #include <linux/of.h> /* for struct device_node */ |
| 38 | 38 | ||
| 39 | extern struct bus_type i2c_bus_type; | 39 | extern struct bus_type i2c_bus_type; |
| 40 | extern struct device_type i2c_adapter_type; | ||
| 40 | 41 | ||
| 41 | /* --- General options ------------------------------------------------ */ | 42 | /* --- General options ------------------------------------------------ */ |
| 42 | 43 | ||
| @@ -383,6 +384,13 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data) | |||
| 383 | dev_set_drvdata(&dev->dev, data); | 384 | dev_set_drvdata(&dev->dev, data); |
| 384 | } | 385 | } |
| 385 | 386 | ||
| 387 | static inline int i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter) | ||
| 388 | { | ||
| 389 | return adapter->dev.parent != NULL | ||
| 390 | && adapter->dev.parent->bus == &i2c_bus_type | ||
| 391 | && adapter->dev.parent->type == &i2c_adapter_type; | ||
| 392 | } | ||
| 393 | |||
| 386 | /* Adapter locking functions, exported for shared pin cases */ | 394 | /* Adapter locking functions, exported for shared pin cases */ |
| 387 | void i2c_lock_adapter(struct i2c_adapter *); | 395 | void i2c_lock_adapter(struct i2c_adapter *); |
| 388 | void i2c_unlock_adapter(struct i2c_adapter *); | 396 | void i2c_unlock_adapter(struct i2c_adapter *); |
