mirror of
https://github.com/lm-sensors/lm-sensors
synced 2025-09-05 00:35:35 +00:00
(mds) added simple eeprom and ddcmon support to sensors and libsensors.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@716 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
51
lib/chips.c
51
lib/chips.c
@@ -1559,6 +1559,55 @@ static sensors_chip_feature thmc50_features[] =
|
|||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static sensors_chip_feature ddcmon_features[] =
|
||||||
|
{
|
||||||
|
{ SENSORS_DDCMON_ID, "Monitor ID",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_ID, VALUE(1), 0 },
|
||||||
|
{ SENSORS_DDCMON_VERSIZE, "Monitor Size (cm)",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SIZE, VALUE(1), 0 },
|
||||||
|
{ SENSORS_DDCMON_HORSIZE, "hsize",
|
||||||
|
SENSORS_DDCMON_VERSIZE, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SIZE, VALUE(2), 0 },
|
||||||
|
{ SENSORS_DDCMON_VERSYNCMIN, "Vertical Sync (Hz)",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SYNC, VALUE(1), 0 },
|
||||||
|
{ SENSORS_DDCMON_VERSYNCMAX, "v_sync_max",
|
||||||
|
SENSORS_DDCMON_VERSYNCMIN, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SYNC, VALUE(2), 0 },
|
||||||
|
{ SENSORS_DDCMON_HORSYNCMIN, "Horizontal Sync (KHz)",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SYNC, VALUE(3), 0 },
|
||||||
|
{ SENSORS_DDCMON_HORSYNCMAX, "h_sync_max",
|
||||||
|
SENSORS_DDCMON_HORSYNCMIN, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SYNC, VALUE(4), 0 },
|
||||||
|
{ SENSORS_DDCMON_TIMINGS, "timings",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_TIMINGS, VALUE(1), 0 },
|
||||||
|
{ SENSORS_DDCMON_SERIAL, "Serial number",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, DDCMON_SYSCTL_SERIAL, VALUE(1), 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
static sensors_chip_feature eeprom_features[] =
|
||||||
|
{
|
||||||
|
{ SENSORS_EEPROM_TYPE, "Memory type",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, EEPROM_SYSCTL1, VALUE(3), 0 },
|
||||||
|
{ SENSORS_EEPROM_ROWADDR, "SDRAM Size (MB)",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, EEPROM_SYSCTL1, VALUE(4), 0 },
|
||||||
|
{ SENSORS_EEPROM_COLADDR, "col",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, EEPROM_SYSCTL1, VALUE(5), 0 },
|
||||||
|
{ SENSORS_EEPROM_NUMROWS, "num rows",
|
||||||
|
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||||
|
SENSORS_MODE_R, EEPROM_SYSCTL1, VALUE(6), 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
|
||||||
sensors_chip_features sensors_chip_features_list[] =
|
sensors_chip_features sensors_chip_features_list[] =
|
||||||
{
|
{
|
||||||
{ SENSORS_LM78_PREFIX, lm78_features },
|
{ SENSORS_LM78_PREFIX, lm78_features },
|
||||||
@@ -1595,6 +1644,8 @@ sensors_chip_features sensors_chip_features_list[] =
|
|||||||
{ SENSORS_THMC50_PREFIX, thmc50_features },
|
{ SENSORS_THMC50_PREFIX, thmc50_features },
|
||||||
/* Cheat on ADM1022 for now - no separate #defines */
|
/* Cheat on ADM1022 for now - no separate #defines */
|
||||||
{ SENSORS_ADM1022_PREFIX, thmc50_features },
|
{ SENSORS_ADM1022_PREFIX, thmc50_features },
|
||||||
|
{ SENSORS_DDCMON_PREFIX, ddcmon_features },
|
||||||
|
{ SENSORS_EEPROM_PREFIX, eeprom_features },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
23
lib/chips.h
23
lib/chips.h
@@ -724,4 +724,27 @@
|
|||||||
#define SENSORS_THMC50_INTER_MASK 82 /* RW */
|
#define SENSORS_THMC50_INTER_MASK 82 /* RW */
|
||||||
#define SENSORS_THMC50_DIE_CODE 90 /* R */
|
#define SENSORS_THMC50_DIE_CODE 90 /* R */
|
||||||
|
|
||||||
|
/* DDC Monitor */
|
||||||
|
|
||||||
|
#define SENSORS_DDCMON_PREFIX "ddcmon"
|
||||||
|
|
||||||
|
#define SENSORS_DDCMON_ID 10
|
||||||
|
#define SENSORS_DDCMON_HORSIZE 21
|
||||||
|
#define SENSORS_DDCMON_VERSIZE 22
|
||||||
|
#define SENSORS_DDCMON_HORSYNCMIN 31
|
||||||
|
#define SENSORS_DDCMON_HORSYNCMAX 32
|
||||||
|
#define SENSORS_DDCMON_VERSYNCMIN 33
|
||||||
|
#define SENSORS_DDCMON_VERSYNCMAX 34
|
||||||
|
#define SENSORS_DDCMON_SERIAL 40
|
||||||
|
#define SENSORS_DDCMON_TIMINGS 50
|
||||||
|
|
||||||
|
/* EEPROM (SDRAM DIMM) */
|
||||||
|
|
||||||
|
#define SENSORS_EEPROM_PREFIX "eeprom"
|
||||||
|
|
||||||
|
#define SENSORS_EEPROM_TYPE 10
|
||||||
|
#define SENSORS_EEPROM_ROWADDR 12
|
||||||
|
#define SENSORS_EEPROM_COLADDR 13
|
||||||
|
#define SENSORS_EEPROM_NUMROWS 14
|
||||||
|
|
||||||
#endif /* def LIB_SENSORS_CHIPS_H */
|
#endif /* def LIB_SENSORS_CHIPS_H */
|
||||||
|
@@ -1432,6 +1432,113 @@ void print_maxilife(const sensors_chip_name *name)
|
|||||||
free_the_label(&label);
|
free_the_label(&label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_ddcmon(const sensors_chip_name *name)
|
||||||
|
{
|
||||||
|
char *label = NULL;
|
||||||
|
double a, b;
|
||||||
|
int valid, i;
|
||||||
|
char s[8];
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_DDCMON_ID, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_ID, &a)) {
|
||||||
|
if (valid) {
|
||||||
|
i = (int) a;
|
||||||
|
s[0] = ((i >> 10) & 0x1f) | 0x40;
|
||||||
|
s[1] = ((i >> 5) & 0x1f) | 0x40;
|
||||||
|
s[2] = (i & 0x1f) | 0x40;
|
||||||
|
s[3] = ((i >> 20) & 0x0f) + '0';
|
||||||
|
s[4] = ((i >> 16) & 0x0f) + '0';
|
||||||
|
s[5] = ((i >> 28) & 0x0f) + '0';
|
||||||
|
s[6] = ((i >> 24) & 0x0f) + '0';
|
||||||
|
s[7] = 0;
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("%s\n", s);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 1\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_DDCMON_SERIAL, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_SERIAL, &a)) {
|
||||||
|
if (valid) {
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("%d\n", (int) a);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 2\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_DDCMON_VERSIZE, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_VERSIZE, &a) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_HORSIZE, &b)) {
|
||||||
|
if (valid) {
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("%dx%d\n", (int) a, (int) b);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 3\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_DDCMON_VERSYNCMIN, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_VERSYNCMIN, &a) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_VERSYNCMAX, &b)) {
|
||||||
|
if (valid) {
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("%d-%d\n", (int) a, (int) b);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 4\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_DDCMON_HORSYNCMIN, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_HORSYNCMIN, &a) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_DDCMON_HORSYNCMAX, &b)) {
|
||||||
|
if (valid) {
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("%d-%d\n", (int) a, (int) b);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 5\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_eeprom(const sensors_chip_name *name)
|
||||||
|
{
|
||||||
|
char *label = NULL;
|
||||||
|
double a, b, c;
|
||||||
|
int valid, i;
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_EEPROM_TYPE, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_EEPROM_TYPE, &a)) {
|
||||||
|
if (valid) {
|
||||||
|
if(((int) a) != 4)
|
||||||
|
return;
|
||||||
|
print_label(label, 24);
|
||||||
|
printf("SDRAM DIMM SPD\n");
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 1\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
if (!sensors_get_label_and_valid(*name, SENSORS_EEPROM_ROWADDR, &label,&valid) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_EEPROM_ROWADDR, &a) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_EEPROM_COLADDR, &b) &&
|
||||||
|
!sensors_get_feature(*name, SENSORS_EEPROM_NUMROWS, &c)) {
|
||||||
|
if (valid) {
|
||||||
|
print_label(label, 24);
|
||||||
|
i = (((int) a) & 0x0f) + (((int) b) & 0x0f) + ((int) c) - 16;
|
||||||
|
if(i > 0 && i <= 10)
|
||||||
|
printf("%d\n", 1 << i);
|
||||||
|
else
|
||||||
|
printf("invalid\n");
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf("ERROR: data 2\n");
|
||||||
|
free_the_label(&label);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void print_unknown_chip(const sensors_chip_name *name)
|
void print_unknown_chip(const sensors_chip_name *name)
|
||||||
{
|
{
|
||||||
int a,b,valid;
|
int a,b,valid;
|
||||||
|
@@ -33,5 +33,7 @@ extern void print_gl518(const sensors_chip_name *name);
|
|||||||
extern void print_lm80(const sensors_chip_name *name);
|
extern void print_lm80(const sensors_chip_name *name);
|
||||||
extern void print_w83781d(const sensors_chip_name *name);
|
extern void print_w83781d(const sensors_chip_name *name);
|
||||||
extern void print_maxilife(const sensors_chip_name *name);
|
extern void print_maxilife(const sensors_chip_name *name);
|
||||||
|
extern void print_ddcmon(const sensors_chip_name *name);
|
||||||
|
extern void print_eeprom(const sensors_chip_name *name);
|
||||||
|
|
||||||
#endif /* def PROG_SENSORS_CHIPS_H */
|
#endif /* def PROG_SENSORS_CHIPS_H */
|
||||||
|
@@ -276,6 +276,10 @@ void do_a_print(sensors_chip_name name)
|
|||||||
!strcmp(name.prefix,"maxilife-co") ||
|
!strcmp(name.prefix,"maxilife-co") ||
|
||||||
!strcmp(name.prefix,"maxilife-as"))
|
!strcmp(name.prefix,"maxilife-as"))
|
||||||
print_maxilife(&name);
|
print_maxilife(&name);
|
||||||
|
else if (!strcmp(name.prefix,"ddcmon"))
|
||||||
|
print_ddcmon(&name);
|
||||||
|
else if (!strcmp(name.prefix,"eeprom"))
|
||||||
|
print_eeprom(&name);
|
||||||
else
|
else
|
||||||
print_unknown_chip(&name);
|
print_unknown_chip(&name);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
Reference in New Issue
Block a user