写一个16位寄存器8位数据的操作:
static int hm5065_i2c_txdata(u16 saddr,u8 *txdata,int length)
{
struct i2c_msg msg[] = {
{
.addr = saddr, //设备地址
.flags = 0, //写的标志位
.len = length, //长度是3
.buf = txdata, //前2个buff,是寄存器的地址,后一个buff是要写的data
},
};
if (i2c_transfer(hm5065_client->adapter, msg, 1) < 0) //这里的数据时按msgs的长度定的
return -EIO;
else
return 0;
}
读一个16位寄存器8位数据的操作:
static int hm5065_i2c_rxdata(unsigned short saddr,
unsigned char *rxdata,
int length)
{
struct i2c_msg msgs[] = {
{
.addr = saddr, //设备地址
.flags = 0, //写的标志位
.len = 2, //应为地址是16位的,所以要写2次
.buf = rxdata, //2个buff,2个8位的,高8位,低8位是一个完整的寄存器地址
},
{
.addr = saddr,
.flags = I2C_M_RD, //读的标志位
.len = length, //1个长度
.buf = rxdata, //返回一个8位的data
},
};
if (i2c_transfer(hm5065_client->adapter, msgs, 2) < 0) { //这里的数据时按msgs的长度定的
CDBG("hm5065_i2c_rxdata failed!
");
return -EIO;
}
return 0;
}