From 748e4f3d702def1a4bff191e0cf93b6a05340f01 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 07:41:34 +0000 Subject: [PATCH] add gpio led uart --- kernel/drivers/hwmon/tmp401.c | 159 ++++++++++++++++++++++++----------------------------- 1 files changed, 72 insertions(+), 87 deletions(-) diff --git a/kernel/drivers/hwmon/tmp401.c b/kernel/drivers/hwmon/tmp401.c index 1f2d13d..48466b0 100644 --- a/kernel/drivers/hwmon/tmp401.c +++ b/kernel/drivers/hwmon/tmp401.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* tmp401.c * * Copyright (C) 2007,2008 Hans de Goede <hdegoede@redhat.com> @@ -7,20 +8,6 @@ * * Cleanup and support for TMP431 and TMP432 by Guenter Roeck * Copyright (c) 2013 Guenter Roeck <linux@roeck-us.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* @@ -288,8 +275,8 @@ return ret; } -static ssize_t show_temp(struct device *dev, - struct device_attribute *devattr, char *buf) +static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, + char *buf) { int nr = to_sensor_dev_attr_2(devattr)->nr; int index = to_sensor_dev_attr_2(devattr)->index; @@ -302,8 +289,9 @@ tmp401_register_to_temp(data->temp[nr][index], data->config)); } -static ssize_t show_temp_crit_hyst(struct device *dev, - struct device_attribute *devattr, char *buf) +static ssize_t temp_crit_hyst_show(struct device *dev, + struct device_attribute *devattr, + char *buf) { int temp, index = to_sensor_dev_attr(devattr)->index; struct tmp401_data *data = tmp401_update_device(dev); @@ -319,8 +307,8 @@ return sprintf(buf, "%d\n", temp); } -static ssize_t show_status(struct device *dev, - struct device_attribute *devattr, char *buf) +static ssize_t status_show(struct device *dev, + struct device_attribute *devattr, char *buf) { int nr = to_sensor_dev_attr_2(devattr)->nr; int mask = to_sensor_dev_attr_2(devattr)->index; @@ -332,8 +320,9 @@ return sprintf(buf, "%d\n", !!(data->status[nr] & mask)); } -static ssize_t store_temp(struct device *dev, struct device_attribute *devattr, - const char *buf, size_t count) +static ssize_t temp_store(struct device *dev, + struct device_attribute *devattr, const char *buf, + size_t count) { int nr = to_sensor_dev_attr_2(devattr)->nr; int index = to_sensor_dev_attr_2(devattr)->index; @@ -365,8 +354,9 @@ return count; } -static ssize_t store_temp_crit_hyst(struct device *dev, struct device_attribute - *devattr, const char *buf, size_t count) +static ssize_t temp_crit_hyst_store(struct device *dev, + struct device_attribute *devattr, + const char *buf, size_t count) { int temp, index = to_sensor_dev_attr(devattr)->index; struct tmp401_data *data = tmp401_update_device(dev); @@ -404,8 +394,9 @@ * This is done by writing any value to any of the minimum/maximum registers * (0x30-0x37). */ -static ssize_t reset_temp_history(struct device *dev, - struct device_attribute *devattr, const char *buf, size_t count) +static ssize_t reset_temp_history_store(struct device *dev, + struct device_attribute *devattr, + const char *buf, size_t count) { struct tmp401_data *data = dev_get_drvdata(dev); struct i2c_client *client = data->client; @@ -467,38 +458,29 @@ return count; } -static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, 0, 0); -static SENSOR_DEVICE_ATTR_2(temp1_min, S_IWUSR | S_IRUGO, show_temp, - store_temp, 1, 0); -static SENSOR_DEVICE_ATTR_2(temp1_max, S_IWUSR | S_IRUGO, show_temp, - store_temp, 2, 0); -static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IWUSR | S_IRUGO, show_temp, - store_temp, 3, 0); -static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, - show_temp_crit_hyst, store_temp_crit_hyst, 0); -static SENSOR_DEVICE_ATTR_2(temp1_min_alarm, S_IRUGO, show_status, NULL, - 1, TMP432_STATUS_LOCAL); -static SENSOR_DEVICE_ATTR_2(temp1_max_alarm, S_IRUGO, show_status, NULL, - 2, TMP432_STATUS_LOCAL); -static SENSOR_DEVICE_ATTR_2(temp1_crit_alarm, S_IRUGO, show_status, NULL, - 3, TMP432_STATUS_LOCAL); -static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, 0, 1); -static SENSOR_DEVICE_ATTR_2(temp2_min, S_IWUSR | S_IRUGO, show_temp, - store_temp, 1, 1); -static SENSOR_DEVICE_ATTR_2(temp2_max, S_IWUSR | S_IRUGO, show_temp, - store_temp, 2, 1); -static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IWUSR | S_IRUGO, show_temp, - store_temp, 3, 1); -static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temp_crit_hyst, - NULL, 1); -static SENSOR_DEVICE_ATTR_2(temp2_fault, S_IRUGO, show_status, NULL, - 0, TMP432_STATUS_REMOTE1); -static SENSOR_DEVICE_ATTR_2(temp2_min_alarm, S_IRUGO, show_status, NULL, - 1, TMP432_STATUS_REMOTE1); -static SENSOR_DEVICE_ATTR_2(temp2_max_alarm, S_IRUGO, show_status, NULL, - 2, TMP432_STATUS_REMOTE1); -static SENSOR_DEVICE_ATTR_2(temp2_crit_alarm, S_IRUGO, show_status, NULL, - 3, TMP432_STATUS_REMOTE1); +static SENSOR_DEVICE_ATTR_2_RO(temp1_input, temp, 0, 0); +static SENSOR_DEVICE_ATTR_2_RW(temp1_min, temp, 1, 0); +static SENSOR_DEVICE_ATTR_2_RW(temp1_max, temp, 2, 0); +static SENSOR_DEVICE_ATTR_2_RW(temp1_crit, temp, 3, 0); +static SENSOR_DEVICE_ATTR_RW(temp1_crit_hyst, temp_crit_hyst, 0); +static SENSOR_DEVICE_ATTR_2_RO(temp1_min_alarm, status, 1, + TMP432_STATUS_LOCAL); +static SENSOR_DEVICE_ATTR_2_RO(temp1_max_alarm, status, 2, + TMP432_STATUS_LOCAL); +static SENSOR_DEVICE_ATTR_2_RO(temp1_crit_alarm, status, 3, + TMP432_STATUS_LOCAL); +static SENSOR_DEVICE_ATTR_2_RO(temp2_input, temp, 0, 1); +static SENSOR_DEVICE_ATTR_2_RW(temp2_min, temp, 1, 1); +static SENSOR_DEVICE_ATTR_2_RW(temp2_max, temp, 2, 1); +static SENSOR_DEVICE_ATTR_2_RW(temp2_crit, temp, 3, 1); +static SENSOR_DEVICE_ATTR_RO(temp2_crit_hyst, temp_crit_hyst, 1); +static SENSOR_DEVICE_ATTR_2_RO(temp2_fault, status, 0, TMP432_STATUS_REMOTE1); +static SENSOR_DEVICE_ATTR_2_RO(temp2_min_alarm, status, 1, + TMP432_STATUS_REMOTE1); +static SENSOR_DEVICE_ATTR_2_RO(temp2_max_alarm, status, 2, + TMP432_STATUS_REMOTE1); +static SENSOR_DEVICE_ATTR_2_RO(temp2_crit_alarm, status, 3, + TMP432_STATUS_REMOTE1); static DEVICE_ATTR_RW(update_interval); @@ -538,12 +520,11 @@ * minimum and maximum register reset for both the local * and remote channels. */ -static SENSOR_DEVICE_ATTR_2(temp1_lowest, S_IRUGO, show_temp, NULL, 4, 0); -static SENSOR_DEVICE_ATTR_2(temp1_highest, S_IRUGO, show_temp, NULL, 5, 0); -static SENSOR_DEVICE_ATTR_2(temp2_lowest, S_IRUGO, show_temp, NULL, 4, 1); -static SENSOR_DEVICE_ATTR_2(temp2_highest, S_IRUGO, show_temp, NULL, 5, 1); -static SENSOR_DEVICE_ATTR(temp_reset_history, S_IWUSR, NULL, reset_temp_history, - 0); +static SENSOR_DEVICE_ATTR_2_RO(temp1_lowest, temp, 4, 0); +static SENSOR_DEVICE_ATTR_2_RO(temp1_highest, temp, 5, 0); +static SENSOR_DEVICE_ATTR_2_RO(temp2_lowest, temp, 4, 1); +static SENSOR_DEVICE_ATTR_2_RO(temp2_highest, temp, 5, 1); +static SENSOR_DEVICE_ATTR_WO(temp_reset_history, reset_temp_history, 0); static struct attribute *tmp411_attributes[] = { &sensor_dev_attr_temp1_highest.dev_attr.attr, @@ -558,23 +539,18 @@ .attrs = tmp411_attributes, }; -static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, 0, 2); -static SENSOR_DEVICE_ATTR_2(temp3_min, S_IWUSR | S_IRUGO, show_temp, - store_temp, 1, 2); -static SENSOR_DEVICE_ATTR_2(temp3_max, S_IWUSR | S_IRUGO, show_temp, - store_temp, 2, 2); -static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IWUSR | S_IRUGO, show_temp, - store_temp, 3, 2); -static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, show_temp_crit_hyst, - NULL, 2); -static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_status, NULL, - 0, TMP432_STATUS_REMOTE2); -static SENSOR_DEVICE_ATTR_2(temp3_min_alarm, S_IRUGO, show_status, NULL, - 1, TMP432_STATUS_REMOTE2); -static SENSOR_DEVICE_ATTR_2(temp3_max_alarm, S_IRUGO, show_status, NULL, - 2, TMP432_STATUS_REMOTE2); -static SENSOR_DEVICE_ATTR_2(temp3_crit_alarm, S_IRUGO, show_status, NULL, - 3, TMP432_STATUS_REMOTE2); +static SENSOR_DEVICE_ATTR_2_RO(temp3_input, temp, 0, 2); +static SENSOR_DEVICE_ATTR_2_RW(temp3_min, temp, 1, 2); +static SENSOR_DEVICE_ATTR_2_RW(temp3_max, temp, 2, 2); +static SENSOR_DEVICE_ATTR_2_RW(temp3_crit, temp, 3, 2); +static SENSOR_DEVICE_ATTR_RO(temp3_crit_hyst, temp_crit_hyst, 2); +static SENSOR_DEVICE_ATTR_2_RO(temp3_fault, status, 0, TMP432_STATUS_REMOTE2); +static SENSOR_DEVICE_ATTR_2_RO(temp3_min_alarm, status, 1, + TMP432_STATUS_REMOTE2); +static SENSOR_DEVICE_ATTR_2_RO(temp3_max_alarm, status, 2, + TMP432_STATUS_REMOTE2); +static SENSOR_DEVICE_ATTR_2_RO(temp3_crit_alarm, status, 3, + TMP432_STATUS_REMOTE2); static struct attribute *tmp432_attributes[] = { &sensor_dev_attr_temp3_input.dev_attr.attr, @@ -598,8 +574,7 @@ * Additional features of the TMP461 chip. * The TMP461 temperature offset for the remote channel. */ -static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IWUSR | S_IRUGO, show_temp, - store_temp, 6, 1); +static SENSOR_DEVICE_ATTR_2_RW(temp2_offset, temp, 6, 1); static struct attribute *tmp461_attributes[] = { &sensor_dev_attr_temp2_offset.dev_attr.attr, @@ -708,8 +683,7 @@ return 0; } -static int tmp401_probe(struct i2c_client *client, - const struct i2c_device_id *id) +static int tmp401_probe(struct i2c_client *client) { static const char * const names[] = { "TMP401", "TMP411", "TMP431", "TMP432", "TMP435", "TMP461" @@ -725,7 +699,7 @@ data->client = client; mutex_init(&data->update_lock); - data->kind = id->driver_data; + data->kind = i2c_match_id(tmp401_id, client)->driver_data; /* Initialize the TMP401 chip */ status = tmp401_init_client(data, client); @@ -756,12 +730,23 @@ return 0; } +static const struct of_device_id __maybe_unused tmp4xx_of_match[] = { + { .compatible = "ti,tmp401", }, + { .compatible = "ti,tmp411", }, + { .compatible = "ti,tmp431", }, + { .compatible = "ti,tmp432", }, + { .compatible = "ti,tmp435", }, + { }, +}; +MODULE_DEVICE_TABLE(of, tmp4xx_of_match); + static struct i2c_driver tmp401_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "tmp401", + .of_match_table = of_match_ptr(tmp4xx_of_match), }, - .probe = tmp401_probe, + .probe_new = tmp401_probe, .id_table = tmp401_id, .detect = tmp401_detect, .address_list = normal_i2c, -- Gitblit v1.6.2