Linux设备驱动剖析之IIC(三)
eeprom_write_byte( eeprom *(e->type ==] = { mem_addr & (e->type ==] =>> ) & , mem_addr & -
i2c_write_2b( eeprom *e, __u8 buf[
r = i2c_smbus_write_byte_data(e->fd, buf[], buf[(r <
inline __s32 i2c_smbus_write_byte_data( =&
inline __s32 i2c_smbus_access( file, size, union i2c_smbus_data *==== ioctl(file,I2C_SMBUS,&
i2cdev_ioctl( file *file, unsigned cmd, unsigned i2c_client *client = file-> unsigned
dev_dbg(&client->adapter->dev,
((arg > ) ||
(((client->flags & I2C_M_TEN) == ) && arg > - (cmd == I2C_SLAVE && i2cdev_check_addr(client-> -
client->addr = client->flags |=
client->flags &= ~ client->flags |=
client->flags &= ~ funcs = i2c_get_functionality(client-> put_user(funcs, (unsigned __user *
client->adapter->retries =
client->adapter->timeout = msecs_to_jiffies(arg *
- }
noinline i2cdev_ioctl_smbus( i2c_client * unsigned
(copy_from_user(& ( i2c_smbus_ioctl_data __user * ( - ((data_arg.size != I2C_SMBUS_BYTE) &&
(data_arg.size != I2C_SMBUS_QUICK) &&
(data_arg.size != I2C_SMBUS_BYTE_DATA) &&
(data_arg.size != I2C_SMBUS_WORD_DATA) &&
(data_arg.size != I2C_SMBUS_PROC_CALL) &&
(data_arg.size != I2C_SMBUS_BLOCK_DATA) &&
(data_arg.size != I2C_SMBUS_I2C_BLOCK_BROKEN) &&
(data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA) &&
(data_arg.size != dev_dbg(&client->adapter-> -
((data_arg.read_write != I2C_SMBUS_READ) &&
(data_arg.read_write != dev_dbg(&client->adapter-> -
((data_arg.size == I2C_SMBUS_QUICK) ||
((data_arg.size == I2C_SMBUS_BYTE) &&
(data_arg.read_write ==
i2c_smbus_xfer(client->adapter, client-> client->
(data_arg.data == dev_dbg(&client->adapter-> -
((data_arg.size == I2C_SMBUS_BYTE_DATA) ||
(data_arg.size == datasize = (data_arg.data-> ((data_arg.size == I2C_SMBUS_WORD_DATA) ||
(data_arg.size == datasize = (data_arg.data->
datasize = (data_arg.data->
((data_arg.size == I2C_SMBUS_PROC_CALL) ||
(data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
(data_arg.size == I2C_SMBUS_I2C_BLOCK_DATA) ||
(data_arg.read_write == (copy_from_user(& - (data_arg.size ==
data_arg.size = (data_arg.read_write == temp.block[] = res = i2c_smbus_xfer(client->adapter, client->addr, client-> data_arg.read_write, data_arg.command, data_arg.size, & (!res && ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
(data_arg.size == I2C_SMBUS_BLOCK_PROC_CALL) ||
(data_arg.read_write == (copy_to_user(data_arg.data, & - }
s32 i2c_smbus_xfer( i2c_adapter *adapter, u16 addr, unsigned read_write, u8 command, union i2c_smbus_data * unsigned
flags &= I2C_M_TEN |
(adapter->algo->
orig_jiffies = (res = , = ; <= adapter->retries; ++ res = adapter->algo-> (res != - orig_jiffies + adapter-> }
res =
}
s32 i2c_smbus_xfer_emulated( i2c_adapter * unsigned read_write, u8 command, union i2c_smbus_data *
unsigned msgbuf0[I2C_SMBUS_BLOCK_MAX+ unsigned msgbuf1[I2C_SMBUS_BLOCK_MAX+ num = read_write == I2C_SMBUS_READ ? : i2c_msg msg[] = { { addr, flags, { addr, flags | I2C_M_RD, u8 partial_pec =
msgbuf0[] = msg[].len =
msg[].flags = flags | (read_write == I2C_SMBUS_READ ?
I2C_M_RD : num = (read_write ==
msg[].flags = I2C_M_RD | num = (read_write == msg[].len = msg[].len = msgbuf0[] = data-> (read_write == msg[].len = msg[].len = msgbuf0[] = data->word & msgbuf0[] = data->word >> num = ;
read_write = msg[].len = msg[].len = msgbuf0[] = data->word & msgbuf0[] = data->word >> (read_write == msg[].flags |= msg[].len = ;
} msg[].len = data->block[] + (msg[].len > I2C_SMBUS_BLOCK_MAX + dev_err(&adapter-> data->block[ - (i = ; i < msg[].len; i++ msgbuf0[i] = data->block[i- num = ;