On 04/12/2023 06:56, baneric926@xxxxxxxxx wrote: > From: Ban Feng <kcfeng0@xxxxxxxxxxx> > > NCT736X is an I2C based hardware monitoring chip from Nuvoton. > > Signed-off-by: Ban Feng <kcfeng0@xxxxxxxxxxx> > --- > + > +static const struct i2c_device_id nct736x_id[] = { > + {"nct7362", nct7362}, > + {"nct7363", nct7363}, > + {} > +}; > +MODULE_DEVICE_TABLE(i2c, nct736x_id); > + All ID tables are next to each other. Move it down. Why does it not match of_device_id? ... > + > +static int nct736x_probe(struct i2c_client *client) > +{ > + struct device *dev = &client->dev; > + struct nct736x_data *data; > + struct device *hwmon_dev; > + u32 pwm_mask, fanin_mask, val, wdt_cfg; > + int ret; > + > + data = devm_kzalloc(dev, sizeof(struct nct736x_data), GFP_KERNEL); sizeof(*) > + if (!data) > + return -ENOMEM; > + > + i2c_set_clientdata(client, data); > + mutex_init(&data->update_lock); > + > + data->client = client; > + > + if (of_property_read_u32(dev->of_node, "nuvoton,pwm-mask", &pwm_mask)) > + pwm_mask = 0; > + if (of_property_read_u32(dev->of_node, > + "nuvoton,fanin-mask", &fanin_mask)) > + fanin_mask = 0; > + if (of_property_read_u32(dev->of_node, "nuvoton,wdt-timeout", &val)) > + wdt_cfg = 0xff; > + else > + wdt_cfg = WDT_CFG(val) | EN_WDT; > + > + /* Initialize the chip */ > + ret = nct736x_init_chip(client, pwm_mask, fanin_mask, wdt_cfg); > + if (ret) > + return ret; > + > + data->fan_mask = (u16)fanin_mask; > + data->pwm_mask = (u16)pwm_mask; > + > + data = nct736x_update_device(dev); > + > + data->groups[0] = &nct736x_group_fan; > + data->groups[1] = &nct736x_group_pwm; > + data->groups[2] = NULL; > + > + hwmon_dev = devm_hwmon_device_register_with_groups(dev, > + client->name, > + data, data->groups); > + return PTR_ERR_OR_ZERO(hwmon_dev); > +} > + > +static const struct of_device_id nct736x_of_match[] = { > + { .compatible = "nuvoton,nct7362" }, > + { .compatible = "nuvoton,nct7363" }, This means your devices are compatible. Express compatibility in your bindings (specific compatible followed by fallback). But then your i2c_device_id is not matching this one here... confusing and clearly wrong. Best regards, Krzysztof