Поиск функции в репозитории проекта занимает 5 минут
static inline int i2c_reg_update_byte(struct device *dev, uint8_t dev_addr,
uint8_t reg_addr, uint8_t mask,
uint8_t value)
{
uint8_t old_value, new_value;
int rc;
rc = i2c_reg_read_byte(dev, dev_addr, reg_addr, &old_value);
if (rc != 0) {
return rc;
}
new_value = (old_value & ~mask) | (value & mask);
if (new_value == old_value) {
return 0;
}
return i2c_reg_write_byte(dev, dev_addr, reg_addr, new_value);
}
new_value = (old_value & ~mask) | (value & mask);
:
old_value & ~mask
- очищает маскированные биты
value & mask
очищает все остальные биты, кроме маски.
|
устанавливает очищенные биты в old_value
с битами, оставшимися в value
Вам нужно больше объяснений? Если да, то самое время изучить побитовые операции.