static int max31790_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct i2c_adapter *adapter = client->adapter; struct device *dev = &client->dev; struct max31790_data *data; struct device *hwmon_dev; int err; if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA)) return -ENODEV; data = devm_kzalloc(dev, sizeof(struct max31790_data), GFP_KERNEL); if (!data) return -ENOMEM; data->client = client; mutex_init(&data->update_lock); /* * Initialize the max31790 chip */ err = max31790_init_client(client, data); if (err) return err; hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data, &max31790_chip_info, NULL); return PTR_ERR_OR_ZERO(hwmon_dev); }
static void ds3232_hwmon_register(struct device *dev, const char *name) { struct ds3232 *ds3232 = dev_get_drvdata(dev); struct device *hwmon_dev; if (!IS_ENABLED(CONFIG_RTC_DRV_DS3232_HWMON)) return; hwmon_dev = devm_hwmon_device_register_with_info(dev, name, ds3232, &ds3232_hwmon_chip_info, NULL); if (IS_ERR(hwmon_dev)) { dev_err(dev, "unable to register hwmon device %ld\n", PTR_ERR(hwmon_dev)); } }
int aq_drvinfo_init(struct net_device *ndev) { struct aq_nic_s *aq_nic = netdev_priv(ndev); struct device *dev = &aq_nic->pdev->dev; struct device *hwmon_dev; int err = 0; hwmon_dev = devm_hwmon_device_register_with_info(dev, ndev->name, aq_nic, &aq_hwmon_chip_info, NULL); if (IS_ERR(hwmon_dev)) err = PTR_ERR(hwmon_dev); return err; }
static int tmp421_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; struct device *hwmon_dev; struct tmp421_data *data; int i, err; data = devm_kzalloc(dev, sizeof(struct tmp421_data), GFP_KERNEL); if (!data) return -ENOMEM; mutex_init(&data->update_lock); data->channels = id->driver_data; data->client = client; err = tmp421_init_client(client); if (err) return err; for (i = 0; i < data->channels; i++) data->temp_config[i] = HWMON_T_INPUT | HWMON_T_FAULT; data->chip.ops = &tmp421_ops; data->chip.info = data->info; data->info[0] = &data->temp_info; data->temp_info.type = hwmon_temp; data->temp_info.config = data->temp_config; hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data, &data->chip, NULL); return PTR_ERR_OR_ZERO(hwmon_dev); }
static int tmp102_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; struct device *hwmon_dev; struct tmp102 *tmp102; unsigned int regval; int err; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) { dev_err(dev, "adapter doesn't support SMBus word transactions\n"); return -ENODEV; } tmp102 = devm_kzalloc(dev, sizeof(*tmp102), GFP_KERNEL); if (!tmp102) return -ENOMEM; i2c_set_clientdata(client, tmp102); tmp102->regmap = devm_regmap_init_i2c(client, &tmp102_regmap_config); if (IS_ERR(tmp102->regmap)) return PTR_ERR(tmp102->regmap); err = regmap_read(tmp102->regmap, TMP102_CONF_REG, ®val); if (err < 0) { dev_err(dev, "error reading config register\n"); return err; } if ((regval & ~TMP102_CONFREG_MASK) != (TMP102_CONF_R0 | TMP102_CONF_R1)) { dev_err(dev, "unexpected config register value\n"); return -ENODEV; } tmp102->config_orig = regval; err = devm_add_action_or_reset(dev, tmp102_restore_config, tmp102); if (err) return err; regval &= ~TMP102_CONFIG_CLEAR; regval |= TMP102_CONFIG_SET; err = regmap_write(tmp102->regmap, TMP102_CONF_REG, regval); if (err < 0) { dev_err(dev, "error writing config register\n"); return err; } /* * Mark that we are not ready with data until the first * conversion is complete */ tmp102->ready_time = jiffies + msecs_to_jiffies(CONVERSION_TIME_MS); hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, tmp102, &tmp102_chip_info, NULL); if (IS_ERR(hwmon_dev)) { dev_dbg(dev, "unable to register hwmon device\n"); return PTR_ERR(hwmon_dev); } dev_info(dev, "initialized\n"); return 0; }
static int tmp108_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; struct device *hwmon_dev; struct tmp108 *tmp108; int err; u32 config; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) { dev_err(dev, "adapter doesn't support SMBus word transactions\n"); return -ENODEV; } tmp108 = devm_kzalloc(dev, sizeof(*tmp108), GFP_KERNEL); if (!tmp108) return -ENOMEM; dev_set_drvdata(dev, tmp108); tmp108->regmap = devm_regmap_init_i2c(client, &tmp108_regmap_config); if (IS_ERR(tmp108->regmap)) { err = PTR_ERR(tmp108->regmap); dev_err(dev, "regmap init failed: %d", err); return err; } err = regmap_read(tmp108->regmap, TMP108_REG_CONF, &config); if (err < 0) { dev_err(dev, "error reading config register: %d", err); return err; } tmp108->orig_config = config; /* Only continuous mode is supported. */ config &= ~TMP108_CONF_MODE_MASK; config |= TMP108_MODE_CONTINUOUS; /* Only comparator mode is supported. */ config &= ~TMP108_CONF_TM; err = regmap_write(tmp108->regmap, TMP108_REG_CONF, config); if (err < 0) { dev_err(dev, "error writing config register: %d", err); return err; } tmp108->ready_time = jiffies; if ((tmp108->orig_config & TMP108_CONF_MODE_MASK) == TMP108_MODE_SHUTDOWN) tmp108->ready_time += msecs_to_jiffies(TMP108_CONVERSION_TIME_MS); err = devm_add_action_or_reset(dev, tmp108_restore_config, tmp108); if (err) { dev_err(dev, "add action or reset failed: %d", err); return err; } hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, tmp108, &tmp108_chip_info, NULL); return PTR_ERR_OR_ZERO(hwmon_dev); }