1621633323
Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option [no]_[pad]_[ctrl] any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 176 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Jilayne Lovejoy <opensource@jilayne.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190519154040.652910950@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
*
|
|
* i2c-mux.h - functions for the i2c-bus mux support
|
|
*
|
|
* Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
|
|
* Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
|
|
* Michael Lawnick <michael.lawnick.ext@nsn.com>
|
|
*/
|
|
|
|
#ifndef _LINUX_I2C_MUX_H
|
|
#define _LINUX_I2C_MUX_H
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/bitops.h>
|
|
|
|
struct i2c_mux_core {
|
|
struct i2c_adapter *parent;
|
|
struct device *dev;
|
|
unsigned int mux_locked:1;
|
|
unsigned int arbitrator:1;
|
|
unsigned int gate:1;
|
|
|
|
void *priv;
|
|
|
|
int (*select)(struct i2c_mux_core *, u32 chan_id);
|
|
int (*deselect)(struct i2c_mux_core *, u32 chan_id);
|
|
|
|
int num_adapters;
|
|
int max_adapters;
|
|
struct i2c_adapter *adapter[0];
|
|
};
|
|
|
|
struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent,
|
|
struct device *dev, int max_adapters,
|
|
int sizeof_priv, u32 flags,
|
|
int (*select)(struct i2c_mux_core *, u32),
|
|
int (*deselect)(struct i2c_mux_core *, u32));
|
|
|
|
/* flags for i2c_mux_alloc */
|
|
#define I2C_MUX_LOCKED BIT(0)
|
|
#define I2C_MUX_ARBITRATOR BIT(1)
|
|
#define I2C_MUX_GATE BIT(2)
|
|
|
|
static inline void *i2c_mux_priv(struct i2c_mux_core *muxc)
|
|
{
|
|
return muxc->priv;
|
|
}
|
|
|
|
struct i2c_adapter *i2c_root_adapter(struct device *dev);
|
|
|
|
/*
|
|
* Called to create an i2c bus on a multiplexed bus segment.
|
|
* The chan_id parameter is passed to the select and deselect
|
|
* callback functions to perform hardware-specific mux control.
|
|
*/
|
|
int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
|
|
u32 force_nr, u32 chan_id,
|
|
unsigned int class);
|
|
|
|
void i2c_mux_del_adapters(struct i2c_mux_core *muxc);
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif /* _LINUX_I2C_MUX_H */
|