All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Boot <bootc@bootc.net>
To: kernel list <linux-kernel@vger.kernel.org>
Cc: soekris-tech@lists.soekris.com
Subject: [RFC][PATCH] LED Class support for Soekris net48xx
Date: Sat, 08 Jul 2006 10:29:36 +0100	[thread overview]
Message-ID: <44AF7B00.9060108@bootc.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 517 bytes --]

Hi all,

After many years using Linux and hanging about on LKML without having done much 
actual kernel hacking, I've decided to have a go! The module below adds LED 
Class device support for the Soekris net48xx Error LED. Tested only on a 
net4801, but should work on a net4826 as well. I'd love to find a way of 
detecting a Soekris net48xx device but there is no DMI or any Soekris-specific 
PCI devices.

The patch is attached because Thunderbird kills tabs.

-- 
Chris Boot
bootc@bootc.net
http://www.bootc.net/

[-- Attachment #2: leds-net48xx.patch --]
[-- Type: text/x-patch, Size: 4118 bytes --]

diff --git a/MAINTAINERS b/MAINTAINERS
index 196a31c..c55f690 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2666,6 +2666,11 @@ M:	shemminger@osdl.org
 L:	netdev@vger.kernel.org
 S:	Maintained
 
+SOEKRIS NET48XX LED SUPPORT
+P:	Chris Boot
+M:	bootc@bootc.net
+S:	Maintained
+
 SPARC (sparc32):
 P:	William L. Irwin
 M:	wli@holomorphy.com
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 9650998..9c39b98 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -69,6 +69,13 @@ config LEDS_AMS_DELTA
 	help
 	  This option enables support for the LEDs on Amstrad Delta (E3).
 
+config LEDS_NET48XX
+	tristate "LED Support for Soekris net48xx series Error LED"
+	depends on LEDS_CLASS && SCx200_GPIO
+	help
+	  This option enables support for the Soekris net4801 and net4826 error
+	  LED.
+
 comment "LED Triggers"
 
 config LEDS_TRIGGERS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 88d3b6e..6aa2aed 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_LEDS_IXP4XX)		+= leds-ixp4x
 obj-$(CONFIG_LEDS_TOSA)			+= leds-tosa.o
 obj-$(CONFIG_LEDS_S3C24XX)		+= leds-s3c24xx.o
 obj-$(CONFIG_LEDS_AMS_DELTA)		+= leds-ams-delta.o
+obj-$(CONFIG_LEDS_NET48XX)		+= leds-net48xx.o
 
 # LED Triggers
 obj-$(CONFIG_LEDS_TRIGGER_TIMER)	+= ledtrig-timer.o
diff --git a/drivers/leds/leds-net48xx.c b/drivers/leds/leds-net48xx.c
new file mode 100644
index 0000000..157b561
--- /dev/null
+++ b/drivers/leds/leds-net48xx.c
@@ -0,0 +1,116 @@
+/*
+ * LEDs driver for Soekris net48xx
+ *
+ * Copyright (C) 2006 Chris Boot <bootc@bootc.net>
+ *
+ * Based on leds-ams-delta.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/leds.h>
+#include <linux/err.h>
+#include <asm/io.h>
+#include <linux/scx200_gpio.h>
+
+#define NET48XX_ERROR_LED_GPIO	20
+
+static struct platform_device *pdev;
+
+static void net48xx_error_led_set(struct led_classdev *led_cdev,
+		enum led_brightness value)
+{
+	if (value)
+		scx200_gpio_set_high(NET48XX_ERROR_LED_GPIO);
+	else
+		scx200_gpio_set_low(NET48XX_ERROR_LED_GPIO);
+}
+
+static struct led_classdev net48xx_error_led = {
+	.name		= "net48xx:error",
+	.brightness_set	= net48xx_error_led_set,
+};
+
+#ifdef CONFIG_PM
+static int net48xx_led_suspend(struct platform_device *dev,
+		pm_message_t state)
+{
+	return led_classdev_suspend(&net48xx_error_led);
+}
+
+static int net48xx_led_resume(struct platform_device *dev)
+{
+	return led_classdev_resume(&net48xx_error_led);
+}
+#else
+#define net48xx_led_suspend NULL
+#define net48xx_led_resume NULL
+#endif
+
+static int net48xx_led_probe(struct platform_device *pdev)
+{
+	if (!scx200_gpio_present())
+		return ENODEV;
+	
+	return led_classdev_register(&pdev->dev,
+		&net48xx_error_led);
+}
+
+static int net48xx_led_remove(struct platform_device *pdev)
+{
+	led_classdev_unregister(&net48xx_error_led);
+	return 0;
+}
+
+static struct platform_driver net48xx_led_driver = {
+	.probe		= net48xx_led_probe,
+	.remove		= net48xx_led_remove,
+	.suspend	= net48xx_led_suspend,
+	.resume		= net48xx_led_resume,
+	.driver		= {
+		.name = "net48xx-led",
+	},
+};
+
+static int __init net48xx_led_init(void)
+{
+	int ret;
+	
+	if (!scx200_gpio_present()) {
+		ret = ENODEV;
+		goto out;
+	}
+	
+	ret = platform_driver_register(&net48xx_led_driver);
+	if (ret < 0)
+		goto out;
+	
+	pdev = platform_device_register_simple("net48xx-led", -1, NULL, 0);
+	if (IS_ERR(pdev)) {
+		ret = PTR_ERR(pdev);
+		platform_driver_unregister(&net48xx_led_driver);
+		goto out;
+	}
+	
+out:
+	return ret;
+}
+
+static void __exit net48xx_led_exit(void)
+{
+	platform_device_unregister(pdev);
+	platform_driver_unregister(&net48xx_led_driver);
+}
+
+module_init(net48xx_led_init);
+module_exit(net48xx_led_exit);
+
+MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
+MODULE_DESCRIPTION("Soekris net48xx LED driver");
+MODULE_LICENSE("GPL");
+

             reply	other threads:[~2006-07-08  9:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-08  9:29 Chris Boot [this message]
2006-07-08 15:10 ` [Soekris] [RFC][PATCH] LED Class support for Soekris net48xx Jim Cromie
2006-07-08 15:48   ` Chris Boot
2006-07-09 10:21 ` Chris Boot
2006-07-23  3:21 ` Eric Lammerts
2006-07-23 13:46   ` Chris Boot
2006-07-26  1:34     ` Eric Lammerts

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44AF7B00.9060108@bootc.net \
    --to=bootc@bootc.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=soekris-tech@lists.soekris.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.