Loading Documentation/hwmon/max6650 +8 −4 Original line number Diff line number Diff line Loading @@ -2,10 +2,14 @@ Kernel driver max6650 ===================== Supported chips: * Maxim 6650 / 6651 * Maxim MAX6650 Prefix: 'max6650' Addresses scanned: none Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf * Maxim MAX6651 Prefix: 'max6651' Addresses scanned: none Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf Authors: Hans J. Koch <hjk@hansjkoch.de> Loading @@ -15,10 +19,10 @@ Authors: Description ----------- This driver implements support for the Maxim 6650/6651 This driver implements support for the Maxim MAX6650 and MAX6651. The 2 devices are very similar, but the Maxim 6550 has a reduced feature set, e.g. only one fan-input, instead of 4 for the 6651. The 2 devices are very similar, but the MAX6550 has a reduced feature set, e.g. only one fan-input, instead of 4 for the MAX6651. The driver is not able to distinguish between the 2 devices. Loading drivers/hwmon/max6650.c +28 −6 Original line number Diff line number Diff line Loading @@ -116,7 +116,8 @@ static struct max6650_data *max6650_update_device(struct device *dev); */ static const struct i2c_device_id max6650_id[] = { { "max6650", 0 }, { "max6650", 1 }, { "max6651", 4 }, { } }; MODULE_DEVICE_TABLE(i2c, max6650_id); Loading @@ -138,6 +139,7 @@ struct max6650_data { struct device *hwmon_dev; struct mutex update_lock; int nr_fans; char valid; /* zero until following fields are valid */ unsigned long last_updated; /* in jiffies */ Loading Loading @@ -489,9 +491,6 @@ static mode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a, static struct attribute *max6650_attrs[] = { &sensor_dev_attr_fan1_input.dev_attr.attr, &sensor_dev_attr_fan2_input.dev_attr.attr, &sensor_dev_attr_fan3_input.dev_attr.attr, &sensor_dev_attr_fan4_input.dev_attr.attr, &dev_attr_fan1_target.attr, &dev_attr_fan1_div.attr, &dev_attr_pwm1_enable.attr, Loading @@ -509,6 +508,17 @@ static struct attribute_group max6650_attr_grp = { .is_visible = max6650_attrs_visible, }; static struct attribute *max6651_attrs[] = { &sensor_dev_attr_fan2_input.dev_attr.attr, &sensor_dev_attr_fan3_input.dev_attr.attr, &sensor_dev_attr_fan4_input.dev_attr.attr, NULL }; static const struct attribute_group max6651_attr_grp = { .attrs = max6651_attrs, }; /* * Real code */ Loading @@ -526,6 +536,7 @@ static int max6650_probe(struct i2c_client *client, i2c_set_clientdata(client, data); mutex_init(&data->update_lock); data->nr_fans = id->driver_data; /* * Initialize the max6650 chip Loading @@ -537,6 +548,12 @@ static int max6650_probe(struct i2c_client *client, err = sysfs_create_group(&client->dev.kobj, &max6650_attr_grp); if (err) goto err_free; /* 3 additional fan inputs for the MAX6651 */ if (data->nr_fans == 4) { err = sysfs_create_group(&client->dev.kobj, &max6651_attr_grp); if (err) goto err_remove; } data->hwmon_dev = hwmon_device_register(&client->dev); if (!IS_ERR(data->hwmon_dev)) Loading @@ -544,6 +561,9 @@ static int max6650_probe(struct i2c_client *client, err = PTR_ERR(data->hwmon_dev); dev_err(&client->dev, "error registering hwmon device.\n"); if (data->nr_fans == 4) sysfs_remove_group(&client->dev.kobj, &max6651_attr_grp); err_remove: sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); err_free: kfree(data); Loading @@ -554,8 +574,10 @@ static int max6650_remove(struct i2c_client *client) { struct max6650_data *data = i2c_get_clientdata(client); sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); hwmon_device_unregister(data->hwmon_dev); if (data->nr_fans == 4) sysfs_remove_group(&client->dev.kobj, &max6651_attr_grp); sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); kfree(data); return 0; } Loading Loading @@ -668,7 +690,7 @@ static struct max6650_data *max6650_update_device(struct device *dev) MAX6650_REG_SPEED); data->config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG); for (i = 0; i < 4; i++) { for (i = 0; i < data->nr_fans; i++) { data->tach[i] = i2c_smbus_read_byte_data(client, tach_reg[i]); } Loading Loading
Documentation/hwmon/max6650 +8 −4 Original line number Diff line number Diff line Loading @@ -2,10 +2,14 @@ Kernel driver max6650 ===================== Supported chips: * Maxim 6650 / 6651 * Maxim MAX6650 Prefix: 'max6650' Addresses scanned: none Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf * Maxim MAX6651 Prefix: 'max6651' Addresses scanned: none Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf Authors: Hans J. Koch <hjk@hansjkoch.de> Loading @@ -15,10 +19,10 @@ Authors: Description ----------- This driver implements support for the Maxim 6650/6651 This driver implements support for the Maxim MAX6650 and MAX6651. The 2 devices are very similar, but the Maxim 6550 has a reduced feature set, e.g. only one fan-input, instead of 4 for the 6651. The 2 devices are very similar, but the MAX6550 has a reduced feature set, e.g. only one fan-input, instead of 4 for the MAX6651. The driver is not able to distinguish between the 2 devices. Loading
drivers/hwmon/max6650.c +28 −6 Original line number Diff line number Diff line Loading @@ -116,7 +116,8 @@ static struct max6650_data *max6650_update_device(struct device *dev); */ static const struct i2c_device_id max6650_id[] = { { "max6650", 0 }, { "max6650", 1 }, { "max6651", 4 }, { } }; MODULE_DEVICE_TABLE(i2c, max6650_id); Loading @@ -138,6 +139,7 @@ struct max6650_data { struct device *hwmon_dev; struct mutex update_lock; int nr_fans; char valid; /* zero until following fields are valid */ unsigned long last_updated; /* in jiffies */ Loading Loading @@ -489,9 +491,6 @@ static mode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a, static struct attribute *max6650_attrs[] = { &sensor_dev_attr_fan1_input.dev_attr.attr, &sensor_dev_attr_fan2_input.dev_attr.attr, &sensor_dev_attr_fan3_input.dev_attr.attr, &sensor_dev_attr_fan4_input.dev_attr.attr, &dev_attr_fan1_target.attr, &dev_attr_fan1_div.attr, &dev_attr_pwm1_enable.attr, Loading @@ -509,6 +508,17 @@ static struct attribute_group max6650_attr_grp = { .is_visible = max6650_attrs_visible, }; static struct attribute *max6651_attrs[] = { &sensor_dev_attr_fan2_input.dev_attr.attr, &sensor_dev_attr_fan3_input.dev_attr.attr, &sensor_dev_attr_fan4_input.dev_attr.attr, NULL }; static const struct attribute_group max6651_attr_grp = { .attrs = max6651_attrs, }; /* * Real code */ Loading @@ -526,6 +536,7 @@ static int max6650_probe(struct i2c_client *client, i2c_set_clientdata(client, data); mutex_init(&data->update_lock); data->nr_fans = id->driver_data; /* * Initialize the max6650 chip Loading @@ -537,6 +548,12 @@ static int max6650_probe(struct i2c_client *client, err = sysfs_create_group(&client->dev.kobj, &max6650_attr_grp); if (err) goto err_free; /* 3 additional fan inputs for the MAX6651 */ if (data->nr_fans == 4) { err = sysfs_create_group(&client->dev.kobj, &max6651_attr_grp); if (err) goto err_remove; } data->hwmon_dev = hwmon_device_register(&client->dev); if (!IS_ERR(data->hwmon_dev)) Loading @@ -544,6 +561,9 @@ static int max6650_probe(struct i2c_client *client, err = PTR_ERR(data->hwmon_dev); dev_err(&client->dev, "error registering hwmon device.\n"); if (data->nr_fans == 4) sysfs_remove_group(&client->dev.kobj, &max6651_attr_grp); err_remove: sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); err_free: kfree(data); Loading @@ -554,8 +574,10 @@ static int max6650_remove(struct i2c_client *client) { struct max6650_data *data = i2c_get_clientdata(client); sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); hwmon_device_unregister(data->hwmon_dev); if (data->nr_fans == 4) sysfs_remove_group(&client->dev.kobj, &max6651_attr_grp); sysfs_remove_group(&client->dev.kobj, &max6650_attr_grp); kfree(data); return 0; } Loading Loading @@ -668,7 +690,7 @@ static struct max6650_data *max6650_update_device(struct device *dev) MAX6650_REG_SPEED); data->config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG); for (i = 0; i < 4; i++) { for (i = 0; i < data->nr_fans; i++) { data->tach[i] = i2c_smbus_read_byte_data(client, tach_reg[i]); } Loading