diff --git a/lib/chips.c b/lib/chips.c index 8b4339e7..5fd0821a 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -1559,6 +1559,55 @@ static sensors_chip_feature thmc50_features[] = { 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_LM78_PREFIX, lm78_features }, @@ -1595,6 +1644,8 @@ sensors_chip_features sensors_chip_features_list[] = { SENSORS_THMC50_PREFIX, thmc50_features }, /* Cheat on ADM1022 for now - no separate #defines */ { SENSORS_ADM1022_PREFIX, thmc50_features }, + { SENSORS_DDCMON_PREFIX, ddcmon_features }, + { SENSORS_EEPROM_PREFIX, eeprom_features }, { 0 } }; diff --git a/lib/chips.h b/lib/chips.h index 83d2c38d..c5f488a9 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -724,4 +724,27 @@ #define SENSORS_THMC50_INTER_MASK 82 /* RW */ #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 */ diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 36528c36..661fa389 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -1432,6 +1432,113 @@ void print_maxilife(const sensors_chip_name *name) 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) { int a,b,valid; diff --git a/prog/sensors/chips.h b/prog/sensors/chips.h index e4566378..5b32604b 100644 --- a/prog/sensors/chips.h +++ b/prog/sensors/chips.h @@ -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_w83781d(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 */ diff --git a/prog/sensors/main.c b/prog/sensors/main.c index fa0a6084..a7b74218 100644 --- a/prog/sensors/main.c +++ b/prog/sensors/main.c @@ -276,6 +276,10 @@ void do_a_print(sensors_chip_name name) !strcmp(name.prefix,"maxilife-co") || !strcmp(name.prefix,"maxilife-as")) print_maxilife(&name); + else if (!strcmp(name.prefix,"ddcmon")) + print_ddcmon(&name); + else if (!strcmp(name.prefix,"eeprom")) + print_eeprom(&name); else print_unknown_chip(&name); printf("\n");