Skip to content

Commit

Permalink
trivial: doc: hpfall: accept disk device to unload as argument
Browse files Browse the repository at this point in the history
Allows users who use an IDE driver for their disk to use hpfall without
having to modify the source. By default /dev/sda is used.
Suggested by Christian Thaeter in http://lkml.org/lkml/2009/3/25/505.

While we're add it, improve error message if opening /dev/freefall fails.

Signed-off-by: Frans Pop <elendil@planet.nl>
Cc: Christian Thaeter <ct@pipapo.org>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Frans Pop authored and Jiri Kosina committed Sep 21, 2009
1 parent 2bace8b commit be3990b
Showing 1 changed file with 42 additions and 3 deletions.
45 changes: 42 additions & 3 deletions Documentation/hwmon/hpfall.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@
#include <sys/mman.h>
#include <sched.h>

char unload_heads_path[64];

int set_unload_heads_path(char *device)
{
char devname[64];

if (strlen(device) <= 5 || strncmp(device, "/dev/", 5) != 0)
return -EINVAL;
strncpy(devname, device + 5, sizeof(devname));

snprintf(unload_heads_path, sizeof(unload_heads_path),
"/sys/block/%s/device/unload_heads", devname);
return 0;
}
int valid_disk(void)
{
int fd = open(unload_heads_path, O_RDONLY);
if (fd < 0) {
perror(unload_heads_path);
return 0;
}

close(fd);
return 1;
}

void write_int(char *path, int i)
{
char buf[1024];
Expand All @@ -42,7 +68,7 @@ void set_led(int on)

void protect(int seconds)
{
write_int("/sys/block/sda/device/unload_heads", seconds*1000);
write_int(unload_heads_path, seconds*1000);
}

int on_ac(void)
Expand All @@ -61,14 +87,27 @@ void ignore_me(void)
set_led(0);
}

int main(int argc, char *argv[])
int main(int argc, char **argv)
{
int fd, ret;
struct sched_param param;

if (argc == 1)
ret = set_unload_heads_path("/dev/sda");
else if (argc == 2)
ret = set_unload_heads_path(argv[1]);
else
ret = -EINVAL;

if (ret || !valid_disk()) {
fprintf(stderr, "usage: %s <device> (default: /dev/sda)\n",
argv[0]);
exit(1);
}

fd = open("/dev/freefall", O_RDONLY);
if (fd < 0) {
perror("open");
perror("/dev/freefall");
return EXIT_FAILURE;
}

Expand Down

0 comments on commit be3990b

Please sign in to comment.