1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * i2c-algo-bit.h: i2c driver algorithms for bit-shift adapters 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 1995-99 Simon G. Vogl 6*4882a593Smuzhiyun * With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even 7*4882a593Smuzhiyun * Frodo Looijaard <frodol@dds.nl> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef _LINUX_I2C_ALGO_BIT_H 11*4882a593Smuzhiyun #define _LINUX_I2C_ALGO_BIT_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/i2c.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* --- Defines for bit-adapters --------------------------------------- */ 16*4882a593Smuzhiyun /* 17*4882a593Smuzhiyun * This struct contains the hw-dependent functions of bit-style adapters to 18*4882a593Smuzhiyun * manipulate the line states, and to init any hw-specific features. This is 19*4882a593Smuzhiyun * only used if you have more than one hw-type of adapter running. 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun struct i2c_algo_bit_data { 22*4882a593Smuzhiyun void *data; /* private data for lowlevel routines */ 23*4882a593Smuzhiyun void (*setsda) (void *data, int state); 24*4882a593Smuzhiyun void (*setscl) (void *data, int state); 25*4882a593Smuzhiyun int (*getsda) (void *data); 26*4882a593Smuzhiyun int (*getscl) (void *data); 27*4882a593Smuzhiyun int (*pre_xfer) (struct i2c_adapter *); 28*4882a593Smuzhiyun void (*post_xfer) (struct i2c_adapter *); 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* local settings */ 31*4882a593Smuzhiyun int udelay; /* half clock cycle time in us, 32*4882a593Smuzhiyun minimum 2 us for fast-mode I2C, 33*4882a593Smuzhiyun minimum 5 us for standard-mode I2C and SMBus, 34*4882a593Smuzhiyun maximum 50 us for SMBus */ 35*4882a593Smuzhiyun int timeout; /* in jiffies */ 36*4882a593Smuzhiyun bool can_do_atomic; /* callbacks don't sleep, we can be atomic */ 37*4882a593Smuzhiyun }; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun int i2c_bit_add_bus(struct i2c_adapter *); 40*4882a593Smuzhiyun int i2c_bit_add_numbered_bus(struct i2c_adapter *); 41*4882a593Smuzhiyun extern const struct i2c_algorithm i2c_bit_algo; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #endif /* _LINUX_I2C_ALGO_BIT_H */ 44