一段奇怪的I2C读取寄存器代码,小弟不才,求解释!!
最近太在做一个FM的驱动,参考了内核中一个FM驱动代码(radio-si470x-i2c.c),碰到下面一段代码就迷糊了,小弟能力有限,请各位大牛指点。
/* * si470x_get_register - read register */int si470x_get_register(struct si470x_device *radio, int regnr){ u16 buf[READ_REG_NUM]; struct i2c_msg msgs[1] = { { radio->client->addr, I2C_M_RD, sizeof(u16) * READ_REG_NUM, (void *)buf }, }; if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) return -EIO; radio->registers[regnr] = __be16_to_cpu(buf[READ_INDEX(regnr)]); return 0;}/* * si470x_set_register - write register */int si470x_set_register(struct si470x_device *radio, int regnr){ int i; u16 buf[WRITE_REG_NUM]; struct i2c_msg msgs[1] = { { radio->client->addr, 0, sizeof(u16) * WRITE_REG_NUM, (void *)buf }, }; for (i = 0; i < WRITE_REG_NUM; i++) buf[i] = __cpu_to_be16(radio->registers[WRITE_INDEX(i)]); if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) return -EIO; return 0;}