#include <dt-bindings/i2c/i2c.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/of_device.h>
int of_i2c_get_board_info(struct device *dev, struct device_node *node,
struct i2c_board_info *info)
memset(info, 0, sizeof(*info));
if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) {
dev_err(dev, "of_i2c: modalias failure on %pOF\n", node);
ret = of_property_read_u32(node, "reg", &addr);
dev_err(dev, "of_i2c: invalid reg on %pOF\n", node);
if (addr & I2C_TEN_BIT_ADDRESS) {
addr &= ~I2C_TEN_BIT_ADDRESS;
info->flags |= I2C_CLIENT_TEN;
if (addr & I2C_OWN_SLAVE_ADDRESS) {
addr &= ~I2C_OWN_SLAVE_ADDRESS;
info->flags |= I2C_CLIENT_SLAVE;
if (of_property_read_bool(node, "host-notify"))
info->flags |= I2C_CLIENT_HOST_NOTIFY;
if (of_get_property(node, "wakeup-source", NULL))
info->flags |= I2C_CLIENT_WAKE;