Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
asusfan
asusfan-0.1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File asusfan-0.1.patch of Package asusfan
--- asusfan-0.1/cmd/main.c +++ asusfan-0.1/cmd/main.c @@ -38,9 +38,12 @@ { "query", 0, 0, 'q' }, { "temp", 1, 0, 't' }, { "speeds", 1, 0, 'r' }, // Random short letter + { "debug", 0, 0, 'd' }, { 0, 0, 0, 0 } }; +int debug = 0; + int isnumber(const char* string) { char* temp; int i; @@ -54,19 +57,22 @@ int usage() { printf("AsusFan v%s (libasus v%s)\n\n", ASUSFAN_VERSION, LIBASUS_VERSION); - printf("Fan control for Asus V9999 series cards (and possibily other Asus Nvidia"); - printf(" cards).\n\n"); + printf("Fan control for Asus Nvidia-based graphics cards.\n\n"); printf("Usage ./asusfan --query\n"); - printf("Usage ./asusfan --mode=0 -speed=x\n"); + printf("Usage ./asusfan --mode=0 --speed=x\n"); printf("Usage ./asusfan --mode=1 [--temp=x:x:x:x] [--speeds=x:x:x:x:x]\n"); - printf("Usage ./asusfan --mode=2\n\n"); - printf("\t-m x, --mode=x\t0 for speed controlled, 2 for default speed\n"); - printf("\t-s x, --speed=x\tSpeed in RPM, only useful with --mode=0\n"); + printf("Usage ./asusfan --mode=2 --speed=x\n\n"); + printf("\t-m x, --mode=x\t0 for fan speed mode, 1 for temperature mode,\n" + "\t \t2 for manual mode\n"); + printf("\t-s x, --speed=x\tSpeed in RPM (mode 0) or percent (mode 2)\n"); + printf("\t \tWARNING: Turning the fan of your graphics\n"); + printf("\t \tcard off or running it at low speeds can\n"); + printf("\t \tcause permanent damage to your hardware.\n"); printf("\t-q, --query\tShow card vitals\n"); printf("\t-h, --help\tThis screen\n\n"); printf("\t-t x:x:x:x, --temp=x:x:x:x\n"); printf("\t\tFour temperature boundaries for temperature controlled mode\n"); - printf("\t-y x:x:x:x:, --speeds=x:x:x:x:x\n"); + printf("\t-r x:x:x:x:, --speeds=x:x:x:x:x\n"); printf("\t\tFive speed values, Fastest, Fast, Medium, Slow and Slowest.\n"); printf("\t\tGiven in RPM and in the above order.\n\n"); printf("Mode 1 defaults to:\n"); @@ -91,25 +97,13 @@ { 3500, 3000, 2500, 2000, 1500 } }; - int opt_speed = -1, opt_mode = -1; - - if (libasus_init(0) == false) { - printf("ERROR: Could not initialise NVidia card\n"); - return 1; - } - - if ((result = libasus_detect(&i2cdev)) == false) { - printf("ERROR: Could not detect a suitable monitoring chip\n"); - return 1; - } + int opt_speed = -1, opt_mode = -1, opt_query = 0; if (argc == 1) { return usage(); } - libasus_create_card(&card, i2cdev, result); - - while ((opt = getopt_long(argc, argv, "m:s:hq", long_options, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "m:s:hqtrd", long_options, NULL)) != -1) { switch (opt) { case 'm': if (isnumber(optarg)) { @@ -126,7 +120,7 @@ opt_speed = strtol(optarg, (char**)NULL, 10); break; case 'q': - return query(card); + opt_query = 1; break; case 'h': return usage(); @@ -154,11 +148,28 @@ return 1; } break; + case 'd': + debug = 1; + break; default: return 1; } } + if (libasus_init(debug) == false) { + printf("ERROR: Could not initialise NVidia card\n"); + return 1; + } + + if ((result = libasus_detect(&i2cdev)) == false) { + printf("ERROR: Could not detect a suitable monitoring chip\n"); + return 1; + } + + libasus_create_card(&card, i2cdev, result); + + if (opt_query) return query(card); + if ((opt_mode == 0) && (opt_speed > -1)) { libasus_set_gpu_fanspeed(card, opt_speed); libasus_set_gpu_fanmode(card, MODE_SPEED); @@ -167,7 +178,7 @@ libasus_set_gpu_fanmode(card, MODE_TEMP); } else if ((opt_mode == 2)) { libasus_set_gpu_fanmode(card, MODE_PWM); - libasus_set_gpu_pwmspeed(card, 0xff); + libasus_set_gpu_pwmspeed(card, opt_speed > -1 ? opt_speed : 100); } else { printf("Error: Illegal Parameter Values\n"); } @@ -186,10 +197,10 @@ switch (libasus_get_gpu_fanmode(card)>>4) { case 0: - printf("Speed (RPM) by specified value\n"); + printf("Fan Speed Mode\n"); break; case 1: - printf("Temperature Controlled\n\n"); + printf("Temperature Mode\n\n"); libasus_get_gpu_tempctl(card, &temp_fan); printf("Current Settings:\n"); printf("\tFastest: %dRPM\tBoundary 1:\t%dC\n", @@ -204,7 +215,8 @@ temp_fan.speed[4]); break; case 2: - printf("Default Speed\n"); + printf("Manual Mode\n\n"); + printf("Current Fan Speed: %d%%\n",libasus_get_gpu_pwmspeed(card)); break; } return 0; --- asusfan-0.1/configure +++ asusfan-0.1/configure @@ -6202,7 +6202,7 @@ exit 1 fi gentoo_lt_version="1.5.10" -gentoo_ltmain_version=`grep '^[:space:]*VERSION=' $ltmain | sed -e 's|^[:space:]*VERSION=||'` +gentoo_ltmain_version=`grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||'` if test "$gentoo_lt_version" != "$gentoo_ltmain_version"; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 --- asusfan-0.1/libasus/detect.c +++ asusfan-0.1/libasus/detect.c @@ -25,11 +25,13 @@ for (bus = 0; bus < 3; bus++) { for (dev = busses[bus]->FirstDev; dev; dev = dev->NextDev) { s = NULL; + dbg_printf("I2C device at address 0x%x\n",dev->SlaveAddr); switch (dev->SlaveAddr) { case 0x98: case 0x6e: case 0xa0: break; + case 0x5a: case 0x5c: if (f75375_detect(dev)) { *card = dev; @@ -65,6 +67,7 @@ card->get_gpu_tempctl = f75375_get_gpu_tempctl; card->set_gpu_tempctl = f75375_set_gpu_tempctl; card->set_gpu_pwmspeed = f75375_set_gpu_pwmspeed; + card->get_gpu_pwmspeed = f75375_get_gpu_pwmspeed; return true; break; default: --- asusfan-0.1/libasus/f75375.c +++ asusfan-0.1/libasus/f75375.c @@ -8,16 +8,18 @@ xf86I2CReadByte(dev, FINTEK_VENDOR1, &nvl); xf86I2CReadByte(dev, FINTEK_VENDOR2, &nvh); - if (MERGE_BYTE(nvh, nvl) != 0x3419) { + dbg_printf("f75375 vendor ID 0x%x\n",MERGE_BYTE(nvh,nvl)); + if (MERGE_BYTE(nvh, nvl) != 0x3419) /* Fintek */ return 0; - } xf86I2CReadByte(dev, ASUS_NV40_CHIPID_H, &nvh); xf86I2CReadByte(dev, ASUS_NV40_CHIPID_L, &nvl); - if (MERGE_BYTE(nvh, nvl) == 0x0306) { + dbg_printf("f75375 chip ID 0x%x\n",MERGE_BYTE(nvh,nvl)); + if (MERGE_BYTE(nvh, nvl) == 0x0306 || /* F75375 */ + MERGE_BYTE(nvh, nvl) == 0x0204) /* similar chip in Asus V9570TD */ return 1; - } + return 0; } @@ -115,7 +117,17 @@ return 0; } -int f75375_set_gpu_pwmspeed(I2CDevPtr dev, I2CByte speed) { +int f75375_set_gpu_pwmspeed(I2CDevPtr dev, int speed) { + speed = (speed << 8) / 100; + if (speed > 255) speed = 255; + xf86I2CWriteByte(dev, F75375S_FAN1_PWM, speed); return 0; } + +int f75375_get_gpu_pwmspeed(I2CDevPtr dev) { + I2CByte mode; + + xf86I2CReadByte(dev, F75375S_FAN1_PWM, &mode); + return (mode*100) >> 8; +} --- asusfan-0.1/libasus/f75375.h +++ asusfan-0.1/libasus/f75375.h @@ -8,9 +8,9 @@ #include "xf86i2c.h" #include "i2c.h" -int debug; +extern int debug; -#define dbg_printf(x) if (debug==1) printf(x) +#define dbg_printf(x...) if (debug==1) printf(x) #define MODE_SPEED 0x00 #define MODE_TEMP 0x10 @@ -25,7 +25,8 @@ int f75375_set_gpu_fanspeed(I2CDevPtr dev, int desired_rpm); int f75375_get_gpu_fanmode(I2CDevPtr dev); int f75375_set_gpu_fanmode(I2CDevPtr dev, I2CByte mode); -int f75375_set_gpu_pwmspeed(I2CDevPtr dev, I2CByte speed); +int f75375_set_gpu_pwmspeed(I2CDevPtr dev, int speed); +int f75375_get_gpu_pwmspeed(I2CDevPtr dev); int f75375_set_gpu_tempctl(I2CDevPtr dev, fan_vtemp speeds); int f75375_get_gpu_tempctl(I2CDevPtr dev, fan_vtemp *speeds); --- asusfan-0.1/libasus/i2c.h +++ asusfan-0.1/libasus/i2c.h @@ -1,3 +1,6 @@ #include "xf86i2c.h" extern I2CDevPtr gfxmon; + +I2CBusPtr I2cCreateBusPtr(char *name, int bus); + --- asusfan-0.1/libasus/libasus.c +++ asusfan-0.1/libasus/libasus.c @@ -6,8 +6,8 @@ /* WARNING: This function no longer detects cards for you */ - if (!init_nvclock()) return false; - if (!set_card(0)) return false; + if (!init_nvclock()) { printf("1\n"); return false; } + if (!set_card(0)) { printf("2\n"); return false; } NVLockUnlock(0); // Unlock the CRTC registers return true; @@ -37,10 +37,14 @@ return card.set_gpu_fanmode(card.card, mode); } -int libasus_set_gpu_pwmspeed(libasus_card card, I2CByte speed) { +int libasus_set_gpu_pwmspeed(libasus_card card, int speed) { return card.set_gpu_pwmspeed(card.card, speed); } +int libasus_get_gpu_pwmspeed(libasus_card card) { + return card.get_gpu_pwmspeed(card.card); +} + int libasus_set_gpu_tempctl(libasus_card card, fan_vtemp speeds) { return card.set_gpu_tempctl(card.card, speeds); } --- asusfan-0.1/libasus/libasus.h +++ asusfan-0.1/libasus/libasus.h @@ -8,9 +8,9 @@ #define true 1 #define false 0 -int debug; +extern int debug; -#define dbg_printf(x) if (debug==1) printf(x) +#define dbg_printf(x...) if (debug==1) printf(x) #define LIBASUS_DEVICE_F75375 0x01 @@ -37,7 +37,8 @@ int (*set_gpu_fanmode)(I2CDevPtr dev, I2CByte mode); int (*get_gpu_tempctl)(I2CDevPtr dev, fan_vtemp *speeds); int (*set_gpu_tempctl)(I2CDevPtr dev, fan_vtemp speeds); - int (*set_gpu_pwmspeed)(I2CDevPtr dev, I2CByte mode); + int (*set_gpu_pwmspeed)(I2CDevPtr dev, int speed); + int (*get_gpu_pwmspeed)(I2CDevPtr dev); } libasus_card; // Chip header files here @@ -49,7 +50,8 @@ int libasus_set_gpu_fanspeed(libasus_card card, int desired_rpm); int libasus_get_gpu_fanmode(libasus_card card); int libasus_set_gpu_fanmode(libasus_card card, I2CByte mode); -int libasus_set_gpu_pwmspeed(libasus_card card, I2CByte speed); +int libasus_set_gpu_pwmspeed(libasus_card card, int speed); +int libasus_get_gpu_pwmspeed(libasus_card card); int libasus_set_gpu_tempctl(libasus_card card, fan_vtemp speeds); int libasus_get_gpu_tempctl(libasus_card card, fan_vtemp *speeds); --- asusfan-0.1/libasus/libnvidia.c +++ asusfan-0.1/libasus/libnvidia.c @@ -70,7 +70,12 @@ dbg_printf("Found some NV40 (6800) based card!\n"); gfxcard.arch = NV40; break; + case 0x340: + dbg_printf("Found an NV30-based card\n"); + gfxcard.arch = NV30; + break; default: + dbg_printf("Found an unknown card (device ID 0x%x)\n",gfxcard.device_id); return 0; } gfxcard.number = 0;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor