
From: Dominik Brodowski <linux@dominikbrodowski.de>

Allow to modify the per-socket irq_mask via sysfs.  Note that you can only
clear bits from the mask, but not re-add bits.

Signed-off-by: Dominik Brodowski <linux@brodo.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/pcmcia/socket_sysfs.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+)

diff -puN drivers/pcmcia/socket_sysfs.c~pcmcia-modify-irq_mask-via-sysfs drivers/pcmcia/socket_sysfs.c
--- 25/drivers/pcmcia/socket_sysfs.c~pcmcia-modify-irq_mask-via-sysfs	Tue Jan 11 14:13:39 2005
+++ 25-akpm/drivers/pcmcia/socket_sysfs.c	Tue Jan 11 14:13:39 2005
@@ -122,6 +122,33 @@ static ssize_t pccard_store_eject(struct
 static CLASS_DEVICE_ATTR(card_eject, 0200, NULL, pccard_store_eject);
 
 
+static ssize_t pccard_show_irq_mask(struct class_device *dev, char *buf)
+{
+	struct pcmcia_socket *s = to_socket(dev);
+	return sprintf(buf, "0x%04x\n", s->irq_mask);
+}
+
+static ssize_t pccard_store_irq_mask(struct class_device *dev, const char *buf, size_t count)
+{
+	ssize_t ret;
+	struct pcmcia_socket *s = to_socket(dev);
+	u32 mask;
+
+	if (!count)
+		return -EINVAL;
+
+	ret = sscanf (buf, "0x%x\n", &mask);
+
+	if (ret == 1) {
+		s->irq_mask &= mask;
+		ret = 0;
+	}
+
+	return ret ? ret : count;
+}
+static CLASS_DEVICE_ATTR(card_irq_mask, 0600, pccard_show_irq_mask, pccard_store_irq_mask);
+
+
 static struct class_device_attribute *pccard_socket_attributes[] = {
 	&class_device_attr_card_type,
 	&class_device_attr_card_voltage,
@@ -129,6 +156,7 @@ static struct class_device_attribute *pc
 	&class_device_attr_card_vcc,
 	&class_device_attr_card_insert,
 	&class_device_attr_card_eject,
+	&class_device_attr_card_irq_mask,
 	NULL,
 };
 
_
