mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-09 16:21:51 +00:00
report i2c-dev bus numbers rather than i2c-adapter numbers,
which may be different. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2097 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
7d16642a33
commit
5bfcb08e18
1 file changed
+47
-7
+47
-7
@@ -33,8 +33,8 @@ void print_i2c_busses()
|
||||
{
|
||||
FILE *fptr;
|
||||
char s[100];
|
||||
struct dirent *de;
|
||||
DIR *dir;
|
||||
struct dirent *de, *dde, *ddde;
|
||||
DIR *dir, *ddir, *dddir;
|
||||
FILE *f;
|
||||
char *border;
|
||||
char dev[NAME_MAX], fstype[NAME_MAX], sysfs[NAME_MAX], n[NAME_MAX];
|
||||
@@ -70,19 +70,57 @@ void print_i2c_busses()
|
||||
if (! foundsysfs) {
|
||||
goto done;
|
||||
}
|
||||
strcat(sysfs, "/class/i2c-adapter");
|
||||
dir = opendir(sysfs);
|
||||
if (! dir)
|
||||
|
||||
/* Bus numbers in i2c-adapter don't necessarily match those in
|
||||
i2c-dev and what we really care about are the i2c-dev numbers.
|
||||
Unfortunately the names are harder to get in i2c-dev */
|
||||
strcat(sysfs, "/class/i2c-dev");
|
||||
if(!(dir = opendir(sysfs)))
|
||||
goto done;
|
||||
/* go through the busses */
|
||||
while ((de = readdir(dir)) != NULL) {
|
||||
if (!strcmp(de->d_name, "."))
|
||||
continue;
|
||||
if (!strcmp(de->d_name, ".."))
|
||||
continue;
|
||||
|
||||
/* this seems to work for ISA */
|
||||
sprintf(n, "%s/%s/device/name", sysfs, de->d_name);
|
||||
f = fopen(n, "r");
|
||||
if(f == NULL) {
|
||||
/* non-ISA is much harder */
|
||||
sprintf(n, "%s/%s/driver", sysfs, de->d_name);
|
||||
if(!(ddir = opendir(n)))
|
||||
continue;
|
||||
while ((dde = readdir(ddir)) != NULL) {
|
||||
if (!strcmp(dde->d_name, "."))
|
||||
continue;
|
||||
if (!strcmp(dde->d_name, ".."))
|
||||
continue;
|
||||
/* hope it's a link to a PCI device */
|
||||
if(index(dde->d_name, ':')) {
|
||||
sprintf(n, "%s/%s/driver/%s",
|
||||
sysfs, de->d_name, dde->d_name);
|
||||
if(!(dddir = opendir(n)))
|
||||
continue;
|
||||
while ((ddde = readdir(dddir)) != NULL) {
|
||||
if (!strcmp(ddde->d_name, "."))
|
||||
continue;
|
||||
if (!strcmp(ddde->d_name, ".."))
|
||||
continue;
|
||||
if ((!strncmp(ddde->d_name, "i2c-", 4))) {
|
||||
sprintf(n, "%s/%s/driver/%s/%s/name",
|
||||
sysfs, de->d_name, dde->d_name, ddde->d_name);
|
||||
if((f = fopen(n, "r")))
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((f = fopen(n, "r")) != NULL) {
|
||||
found:
|
||||
if (f != NULL) {
|
||||
char x[120];
|
||||
|
||||
fgets(x, 120, f);
|
||||
@@ -107,5 +145,7 @@ void print_i2c_busses()
|
||||
|
||||
done:
|
||||
if(count == 0)
|
||||
fprintf(stderr,"Error: No I2C busses found!\n");
|
||||
fprintf(stderr,"Error: No I2C busses found!\n"
|
||||
"Be sure you have done 'modprobe i2c-dev'\n"
|
||||
"and also modprobed your i2c bus drivers\n");
|
||||
}
|
||||
Reference in new issue
Block a user