mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-10 16:30:50 +00:00
Allow an alternate sysfs file name for chip features. This is
needed to provide backward compatibility when changes are made
to the sysfs interface (policy change or driver fix).
The first item for which this is needed is VID files. The name
we chose, in0_ref, is bad (because motherboard manufacturers can
use any input for VCore, regardless of the recommendations.
Thus, the new name cpu0_vid is better. Drivers will be updated
later.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2654 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
57320d467a
commit
a942af3cfc
2 files changed
+24
-11
No files matched your search
@@ -161,6 +161,7 @@ typedef struct sensors_chip_feature {
|
||||
int scaling;
|
||||
const char *sysname;
|
||||
int sysscaling;
|
||||
const char *altsysname;
|
||||
} sensors_chip_feature;
|
||||
|
||||
/* Internal data about all features of a type of chip */
|
||||
|
||||
+23
-11
@@ -71,7 +71,8 @@ char sysfsmount[NAME_MAX];
|
||||
&sensors_proc_bus_max,\
|
||||
sizeof(struct sensors_bus))
|
||||
|
||||
int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag);
|
||||
int getsysname(const sensors_chip_feature *feature, char *sysname,
|
||||
int *sysmag, char *altsysname);
|
||||
|
||||
/* This reads /proc/sys/dev/sensors/chips into memory */
|
||||
int sensors_read_proc_chips(void)
|
||||
@@ -304,8 +305,6 @@ int sensors_read_proc(sensors_chip_name name, int feature, double *value)
|
||||
const sensors_chip_feature *the_feature;
|
||||
int buflen = BUF_LEN;
|
||||
int mag, eepromoffset, fd, ret=0;
|
||||
char n[NAME_MAX];
|
||||
FILE *f;
|
||||
|
||||
if(!foundsysfs)
|
||||
if ((sysctl_name[2] = sensors_get_chip_id(name)) < 0)
|
||||
@@ -313,6 +312,8 @@ int sensors_read_proc(sensors_chip_name name, int feature, double *value)
|
||||
if (! (the_feature = sensors_lookup_feature_nr(name.prefix,feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if(foundsysfs) {
|
||||
char n[NAME_MAX], altn[NAME_MAX];
|
||||
FILE *f;
|
||||
strcpy(n, name.busname);
|
||||
strcat(n, "/");
|
||||
/* total hack for eeprom */
|
||||
@@ -335,9 +336,11 @@ int sensors_read_proc(sensors_chip_name name, int feature, double *value)
|
||||
} else
|
||||
return -SENSORS_ERR_PROC;
|
||||
} else {
|
||||
strcpy(altn, n);
|
||||
/* use rindex to append sysname to n */
|
||||
getsysname(the_feature, rindex(n, '\0'), &mag);
|
||||
if ((f = fopen(n, "r")) != NULL) {
|
||||
getsysname(the_feature, rindex(n, '\0'), &mag, rindex(altn, '\0'));
|
||||
if ((f = fopen(n, "r")) != NULL
|
||||
|| (f = fopen(altn, "r")) != NULL) {
|
||||
fscanf(f, "%lf", value);
|
||||
fclose(f);
|
||||
for (; mag > 0; mag --)
|
||||
@@ -368,8 +371,6 @@ int sensors_write_proc(sensors_chip_name name, int feature, double value)
|
||||
const sensors_chip_feature *the_feature;
|
||||
int buflen = BUF_LEN;
|
||||
int mag;
|
||||
char n[NAME_MAX];
|
||||
FILE *f;
|
||||
|
||||
if(!foundsysfs)
|
||||
if ((sysctl_name[2] = sensors_get_chip_id(name)) < 0)
|
||||
@@ -377,11 +378,15 @@ int sensors_write_proc(sensors_chip_name name, int feature, double value)
|
||||
if (! (the_feature = sensors_lookup_feature_nr(name.prefix,feature)))
|
||||
return -SENSORS_ERR_NO_ENTRY;
|
||||
if(foundsysfs) {
|
||||
char n[NAME_MAX], altn[NAME_MAX];
|
||||
FILE *f;
|
||||
strcpy(n, name.busname);
|
||||
strcat(n, "/");
|
||||
strcpy(altn, n);
|
||||
/* use rindex to append sysname to n */
|
||||
getsysname(the_feature, rindex(n, '\0'), &mag);
|
||||
if ((f = fopen(n, "w")) != NULL) {
|
||||
getsysname(the_feature, rindex(n, '\0'), &mag, rindex(altn, '\0'));
|
||||
if ((f = fopen(n, "w")) != NULL
|
||||
|| (f = fopen(altn, "w")) != NULL) {
|
||||
for (; mag > 0; mag --)
|
||||
value *= 10.0;
|
||||
fprintf(f, "%d", (int) value);
|
||||
@@ -454,7 +459,8 @@ int sensors_write_proc(sensors_chip_name name, int feature, double value)
|
||||
References: doc/developers/proc in the lm_sensors package;
|
||||
Documentation/i2c/sysfs_interface in the kernel
|
||||
*/
|
||||
int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag)
|
||||
int getsysname(const sensors_chip_feature *feature, char *sysname,
|
||||
int *sysmag, char *altsysname)
|
||||
{
|
||||
const char * name = feature->name;
|
||||
char last;
|
||||
@@ -464,6 +470,7 @@ int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag)
|
||||
struct match {
|
||||
const char * name, * sysname;
|
||||
const int sysmag;
|
||||
const char * altsysname;
|
||||
};
|
||||
|
||||
struct match *m;
|
||||
@@ -471,7 +478,7 @@ int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag)
|
||||
struct match matches[] = {
|
||||
{ "beeps", "beep_mask", 0 },
|
||||
{ "pwm", "fan1_pwm", 0 },
|
||||
{ "vid", "in0_ref", INMAG },
|
||||
{ "vid", "cpu0_vid", INMAG, "in0_ref" },
|
||||
{ "remote_temp", "temp2_input", TEMPMAG },
|
||||
{ "remote_temp_hyst", "temp2_max_hyst", TEMPMAG },
|
||||
{ "remote_temp_low", "temp2_min", TEMPMAG },
|
||||
@@ -484,6 +491,9 @@ int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag)
|
||||
};
|
||||
|
||||
|
||||
/* default to a non-existent alternate name (should rarely be tried) */
|
||||
strcpy(altsysname, "_");
|
||||
|
||||
/* use override in feature structure if present */
|
||||
if(feature->sysname != NULL) {
|
||||
strcpy(sysname, feature->sysname);
|
||||
@@ -498,6 +508,8 @@ int getsysname(const sensors_chip_feature *feature, char *sysname, int *sysmag)
|
||||
for(m = matches; m->name != NULL; m++) {
|
||||
if(!strcmp(m->name, name)) {
|
||||
strcpy(sysname, m->sysname);
|
||||
if (m->altsysname != NULL)
|
||||
strcpy(altsysname, m->altsysname);
|
||||
*sysmag = m->sysmag;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user