From 6ffbeff63c5cc4d843c1325e2acd7eab4d059be9 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Sat, 17 Nov 2007 13:30:34 +0000 Subject: linux-2.6.23: add LEDs driver for MPC8323E-RDB boards --- packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig | 16 ++- .../linux-2.6.23/mpc8323e-rdb/mpc832x-leds.patch | 150 +++++++++++++++++++++ packages/linux/linux_2.6.23.bb | 5 +- 3 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 packages/linux/linux-2.6.23/mpc8323e-rdb/mpc832x-leds.patch (limited to 'packages') diff --git a/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig index 407530a993..f1990e62cc 100644 --- a/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig +++ b/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig @@ -545,6 +545,7 @@ CONFIG_FIB_RULES=y CONFIG_CFG80211=y CONFIG_WIRELESS_EXT=y CONFIG_MAC80211=m +# CONFIG_MAC80211_LEDS is not set # CONFIG_MAC80211_DEBUG is not set CONFIG_IEEE80211=m # CONFIG_IEEE80211_DEBUG is not set @@ -1411,7 +1412,20 @@ CONFIG_MMC_BLOCK_BOUNCE=y # CONFIG_MMC_SDHCI is not set # CONFIG_MMC_WBSD is not set # CONFIG_MMC_TIFM_SD is not set -# CONFIG_NEW_LEDS is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_MPC832X=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m # CONFIG_INFINIBAND is not set # CONFIG_EDAC is not set # CONFIG_RTC_CLASS is not set diff --git a/packages/linux/linux-2.6.23/mpc8323e-rdb/mpc832x-leds.patch b/packages/linux/linux-2.6.23/mpc8323e-rdb/mpc832x-leds.patch new file mode 100644 index 0000000000..a4863b8daf --- /dev/null +++ b/packages/linux/linux-2.6.23/mpc8323e-rdb/mpc832x-leds.patch @@ -0,0 +1,150 @@ +diff -urN linux-2.6.23.orig/drivers/leds/Kconfig linux-2.6.23/drivers/leds/Kconfig +--- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/drivers/leds/Kconfig 2007-11-09 18:15:03.000000000 +0100 +@@ -101,6 +101,12 @@ + outputs. To be useful the particular board must have LEDs + and they must be connected to the GPIO lines. + ++config LEDS_MPC832X ++ tristate "LED Support for MPC832x LEDs" ++ depends on LEDS_CLASS && PPC_83xx ++ help ++ This option enables support for the LEDs on MPC832x boards. ++ + comment "LED Triggers" + + config LEDS_TRIGGERS +diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc832x.c linux-2.6.23/drivers/leds/leds-mpc832x.c +--- linux-2.6.23.orig/drivers/leds/leds-mpc832x.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.23/drivers/leds/leds-mpc832x.c 2007-11-09 18:15:19.000000000 +0100 +@@ -0,0 +1,119 @@ ++/* ++ * drivers/leds/leds-mpc832x.c ++ * Copyright (c) Jeremy Laine ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * MPC832x leds driver ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int par_io_config_pin(u8 port, u8 pin, int dir, int open_drain, ++ int assignment, int has_irq); ++int par_io_data_set(u8 port, u8 pin, u8 val); ++ ++static struct platform_dev *leds_pdev = NULL; ++ ++#define LED_PORT 3 ++#define GREEN_PIN 18 ++#define YELLOW_PIN 17 ++#define RED_PIN 16 ++ ++static void mpc832xleds_green_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ par_io_data_set(LED_PORT, GREEN_PIN, !value); ++} ++ ++static struct led_classdev mpc832x_green_led = { ++ .name = "mpc832x:green", ++ .brightness_set = mpc832xleds_green_set, ++}; ++ ++static void mpc832xleds_yellow_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ par_io_data_set(LED_PORT, YELLOW_PIN, !value); ++} ++ ++static struct led_classdev mpc832x_yellow_led = { ++ .name = "mpc832x:yellow", ++ .brightness_set = mpc832xleds_yellow_set, ++}; ++ ++static void mpc832xleds_red_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ par_io_data_set(LED_PORT, RED_PIN, !value); ++} ++ ++static struct led_classdev mpc832x_red_led = { ++ .name = "mpc832x:red", ++ .brightness_set = mpc832xleds_red_set, ++}; ++ ++static int mpc832xleds_probe(struct platform_device *pdev) ++{ ++ int ret; ++ ++ ret = led_classdev_register(&pdev->dev, &mpc832x_green_led); ++ if (ret < 0) ++ return ret; ++ par_io_config_pin(LED_PORT, GREEN_PIN, 1, 0, 0, 0); ++ ++ ret = led_classdev_register(&pdev->dev, &mpc832x_yellow_led); ++ if (ret < 0) ++ return ret; ++ par_io_config_pin(LED_PORT, YELLOW_PIN, 1, 0, 0, 0); ++ ++ ret = led_classdev_register(&pdev->dev, &mpc832x_red_led); ++ if (ret < 0) ++ return ret; ++ par_io_config_pin(LED_PORT, RED_PIN, 1, 0, 0, 0); ++ ++ return ret; ++} ++ ++static int mpc832xleds_remove(struct platform_device *pdev) ++{ ++ led_classdev_unregister(&mpc832x_green_led); ++ led_classdev_unregister(&mpc832x_yellow_led); ++ led_classdev_unregister(&mpc832x_red_led); ++ return 0; ++} ++ ++static struct platform_driver mpc832xleds_driver = { ++ .driver = { ++ .name = "mpc832x-leds", ++ .owner = THIS_MODULE, ++ }, ++ .probe = mpc832xleds_probe, ++ .remove = mpc832xleds_remove, ++}; ++ ++static int __init mpc832xleds_init(void) ++{ ++ leds_pdev = platform_device_register_simple("mpc832x-leds", -1, NULL, 0); ++ ++ return platform_driver_register(&mpc832xleds_driver); ++} ++ ++static void __exit mpc832xleds_exit(void) ++{ ++ platform_driver_unregister(&mpc832xleds_driver); ++ ++ platform_device_unregister(leds_pdev); ++} ++ ++module_init(mpc832xleds_init); ++module_exit(mpc832xleds_exit); ++ ++MODULE_AUTHOR("Jeremy Laine "); ++MODULE_DESCRIPTION("MPC832X GPIO LED driver"); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.23.orig/drivers/leds/Makefile linux-2.6.23/drivers/leds/Makefile +--- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/drivers/leds/Makefile 2007-11-09 18:15:03.000000000 +0100 +@@ -17,6 +17,7 @@ + obj-$(CONFIG_LEDS_H1940) += leds-h1940.o + obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o + obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o ++obj-$(CONFIG_LEDS_MPC832X) += leds-mpc832x.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index 5584b8a6d4..da7bede6cd 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -6,7 +6,7 @@ DEFAULT_PREFERENCE_cm-x270 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEFAULT_PREFERENCE_mpc8323e-rdb = "1" -PR = "r3" +PR = "r4" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ file://binutils-buildid-arm.patch;patch=1 \ @@ -23,6 +23,9 @@ SRC_URI_append_cm-x270 = "\ file://0007-mmcsd_large_cards-r0.patch;patch=1 \ file://0008-cm-x270-nand-simplify-name.patch;patch=1" +SRC_URI_append_mpc8323e-rdb = "\ + file://mpc832x-leds.patch;patch=1" + CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2" FILES_kernel-image_cm-x270 = "" -- cgit v1.2.3