1bdab7f26SFrançois Tigeot /* 2*83b4b9b9SFrançois Tigeot * Copyright (c) 2013-2018 François Tigeot <ftigeot@wolfpond.org> 3bdab7f26SFrançois Tigeot * All rights reserved. 4bdab7f26SFrançois Tigeot * 5bdab7f26SFrançois Tigeot * Redistribution and use in source and binary forms, with or without 6bdab7f26SFrançois Tigeot * modification, are permitted provided that the following conditions 7bdab7f26SFrançois Tigeot * are met: 8bdab7f26SFrançois Tigeot * 1. Redistributions of source code must retain the above copyright 9bdab7f26SFrançois Tigeot * notice unmodified, this list of conditions, and the following 10bdab7f26SFrançois Tigeot * disclaimer. 11bdab7f26SFrançois Tigeot * 2. Redistributions in binary form must reproduce the above copyright 12bdab7f26SFrançois Tigeot * notice, this list of conditions and the following disclaimer in the 13bdab7f26SFrançois Tigeot * documentation and/or other materials provided with the distribution. 14bdab7f26SFrançois Tigeot * 15bdab7f26SFrançois Tigeot * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16bdab7f26SFrançois Tigeot * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17bdab7f26SFrançois Tigeot * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18bdab7f26SFrançois Tigeot * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19bdab7f26SFrançois Tigeot * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20bdab7f26SFrançois Tigeot * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21bdab7f26SFrançois Tigeot * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22bdab7f26SFrançois Tigeot * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23bdab7f26SFrançois Tigeot * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24bdab7f26SFrançois Tigeot * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25bdab7f26SFrançois Tigeot */ 26bdab7f26SFrançois Tigeot 27bdab7f26SFrançois Tigeot #ifndef _LINUX_I2C_H_ 28bdab7f26SFrançois Tigeot #define _LINUX_I2C_H_ 29bdab7f26SFrançois Tigeot 30fb572d17SFrançois Tigeot #include <linux/mod_devicetable.h> 31fb572d17SFrançois Tigeot #include <linux/device.h> /* for struct device */ 32fb572d17SFrançois Tigeot #include <linux/sched.h> /* for completion */ 33fb572d17SFrançois Tigeot #include <linux/mutex.h> 34*83b4b9b9SFrançois Tigeot #include <uapi/linux/i2c.h> 358c49d0deSFrançois Tigeot 36ba55f2f5SFrançois Tigeot #include <bus/iicbus/iic.h> 37ba55f2f5SFrançois Tigeot 386e29dde8SFrançois Tigeot #define I2C_M_RD IIC_M_RD 39ba55f2f5SFrançois Tigeot #define I2C_M_NOSTART IIC_M_NOSTART 40ba55f2f5SFrançois Tigeot 419f4ca867SFrançois Tigeot struct i2c_adapter { 429f4ca867SFrançois Tigeot const struct i2c_algorithm *algo; 439f4ca867SFrançois Tigeot void *algo_data; 449f4ca867SFrançois Tigeot 459f4ca867SFrançois Tigeot int timeout; 469f4ca867SFrançois Tigeot int retries; 479f4ca867SFrançois Tigeot struct device dev; 48d182fd93SFrançois Tigeot void *private_data; 499f4ca867SFrançois Tigeot 509f4ca867SFrançois Tigeot char name[48]; 519f4ca867SFrançois Tigeot }; 529f4ca867SFrançois Tigeot 539f4ca867SFrançois Tigeot extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, 549f4ca867SFrançois Tigeot int num); 559f4ca867SFrançois Tigeot 569f4ca867SFrançois Tigeot struct i2c_algorithm { 579f4ca867SFrançois Tigeot int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs, 589f4ca867SFrançois Tigeot int num); 599f4ca867SFrançois Tigeot 609f4ca867SFrançois Tigeot u32 (*functionality) (struct i2c_adapter *); 619f4ca867SFrançois Tigeot }; 629f4ca867SFrançois Tigeot 639f4ca867SFrançois Tigeot extern int i2c_add_adapter(struct i2c_adapter *); 649f4ca867SFrançois Tigeot extern void i2c_del_adapter(struct i2c_adapter *); 656e29dde8SFrançois Tigeot 66d182fd93SFrançois Tigeot static inline void 67d182fd93SFrançois Tigeot i2c_set_adapdata(struct i2c_adapter *dev, void *data) 68d182fd93SFrançois Tigeot { 69d182fd93SFrançois Tigeot dev->private_data = data; 70d182fd93SFrançois Tigeot } 71d182fd93SFrançois Tigeot 72d182fd93SFrançois Tigeot static inline void * 73d182fd93SFrançois Tigeot i2c_get_adapdata(const struct i2c_adapter *dev) 74d182fd93SFrançois Tigeot { 75d182fd93SFrançois Tigeot return dev->private_data; 76d182fd93SFrançois Tigeot } 77d182fd93SFrançois Tigeot 78bdab7f26SFrançois Tigeot #endif /* _LINUX_I2C_H_ */ 79