Re: Hard Drive light
According to Benjamin Herrenschmidt, on Mon, 20 Dec 2004 07:59:49 +0100,
>> You mean in /sys/bus/macio/drivers/ide-pmac ?
>That's the driver entry, but the devices themselves have entries as
>well, I'd rather put a per-device switch in them (either through the
>actual device path, either PCI or macio, or the ide interface proper).
>> The main reason is that I could not find how to add my sysfs in this directory since it
>is> not created in the ide-pmac.c file (still a lot to learn :)). So I convinced myself
>that a> platform device was not so irrelevant.
>It's totally irrelevant actually :)
Ok I believe you. It is now attached to the macio device
Is this what you suggested?
I chose macio since I had the struct device pointer easily accessible in pmac.c.
>> Other thing strange to me is that I have to use the saved command line to know if there
>> is a boot time argument. According to the comments around MODULE_PARM, a module
>parameter> should be enough. I tried that, but the boot parameter never had any influence
>on the > parameter.
>You must have typed it wrong ... One problem with ide-pmac though is
>that the module name is confusing since the file name itself is just
>"pmac". I'm not too familiar with the module params thing tho, it may be
>possible to "override" the module name.
I don't think so. Module parameters do not depend of the module name (as far as I
understand from the doc). What I guess is that ide-pmac module is initialized too early to
have correct boot parameters. For instance, I tried to had a dummy module_init function,
and it is called much later than ide_pmac_setup_device (where blinking is initialized).
Anybody can confirm or infirm this guess ?
Furthermore I've looked at the way framebuffers manage boot params, and these module seems
to be parsing the comand line themselves too.
--- pmac.c.old 2004-12-05 23:58:25.000000000 +1100
+++ pmac.c 2004-12-20 21:40:43.976967000 +1100
@@ -35,6 +35,11 @@
@@ -381,9 +386,9 @@
static spinlock_t pmu_blink_lock;
static unsigned long pmu_blink_stoptime;
static int pmu_blink_ledstate;
+static int blinking_led = 0;
static struct timer_list pmu_blink_timer;
-static int pmu_ide_blink_enabled;
+static int pmu_ide_blink_enabled = 0;
pmu_hd_blink_timeout(unsigned long data)
@@ -413,6 +418,8 @@
pmu_hd_kick_blink(void *data, int rw)
unsigned long flags;
+ if (!blinking_led)
pmu_blink_stoptime = jiffies + PMU_HD_BLINK_TIME;
@@ -428,9 +435,30 @@
+static ssize_t show_blinkingled_activity(struct device *dev, char *buf)\
+ return sprintf(buf, "%c\n", blinking_led?'1':'0');
+static ssize_t set_blinkingled_activity(struct device *dev,
+ const char *buf, size_t count)
+ int blink;
+ if (sscanf (buf, "%d", &blink) != 1)
+ return -EINVAL;
+ blinking_led = (blink != 0);
+ printk (KERN_INFO "pmac blinking led has been %sactivated\n",
+ return count;
+static DEVICE_ATTR (blinking_led, S_IRUGO | S_IWUSR,
+ show_blinkingled_activity, set_blinkingled_activity);
+pmu_hd_blink_init(struct device * dev)
+ extern char saved_command_line;
struct device_node *dt;
const char *model;
@@ -458,6 +486,12 @@
pmu_blink_timer.function = pmu_hd_blink_timeout;
+ device_create_file (dev, &dev_attr_blinking_led);
+ blinking_led = (strstr(saved_command_line,"blinking_led") != NULL);
+ printk(KERN_INFO "pmac blinking led initialized (blink %sactivated)\n",
@@ -1230,7 +1264,7 @@
hwif->speedproc = pmac_ide_tune_chipset;
- pmu_ide_blink_enabled = pmu_hd_blink_init();
+ pmu_ide_blink_enabled = pmu_hd_blink_init(&(pmif->mdev->ofdev.dev));
hwif->led_act = pmu_hd_kick_blink;