diff options
| author | John Bowler <jbowler@nslu2-linux.org> | 2005-11-14 06:29:32 +0000 |
|---|---|---|
| committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-11-14 06:29:32 +0000 |
| commit | 15b6993ce68956022af5df22d110898f8b61a252 (patch) | |
| tree | e9b379bbf85d4899847a615ddb67fa9f05451e13 /packages | |
| parent | b36999d27c8d713ae2421c130633a796f4e98f83 (diff) | |
nslu2-kernel: upgrade to 2.6.14.2
nslu2-kernel: add (only semi working) 2.6.15-rc1
Diffstat (limited to 'packages')
18 files changed, 3122 insertions, 3 deletions
diff --git a/packages/linux/nslu2-kernel/2.6.15/.mtn2git_empty b/packages/linux/nslu2-kernel/2.6.15/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/.mtn2git_empty diff --git a/packages/linux/nslu2-kernel/2.6.15/00-memory-h-page-shift.patch b/packages/linux/nslu2-kernel/2.6.15/00-memory-h-page-shift.patch new file mode 100644 index 0000000000..29b048e27a --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/00-memory-h-page-shift.patch @@ -0,0 +1,10 @@ +--- linux-2.6.15/include/asm-arm/arch-ixp4xx/memory.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/include/asm-arm/arch-ixp4xx/memory.h 1970-01-01 00:00:00.000000000 +0000 +@@ -8,6 +8,7 @@ + #define __ASM_ARCH_MEMORY_H + + #include <asm/sizes.h> ++#include <asm/page.h> + + /* + * Physical DRAM offset. diff --git a/packages/linux/nslu2-kernel/2.6.15/01-i2c-ixp4xx.patch b/packages/linux/nslu2-kernel/2.6.15/01-i2c-ixp4xx.patch new file mode 100644 index 0000000000..16426bdee6 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/01-i2c-ixp4xx.patch @@ -0,0 +1,29 @@ +--- linux-2.6.15/drivers/i2c/busses/i2c-ixp4xx.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/i2c/busses/i2c-ixp4xx.c 1970-01-01 00:00:00.000000000 +0000 +@@ -35,7 +35,7 @@ + + #include <asm/hardware.h> /* Pick up IXP4xx-specific bits */ + +-static struct device_driver ixp4xx_i2c_driver; ++static struct platform_driver ixp4xx_i2c_driver; + + static inline int ixp4xx_scl_pin(void *data) + { +@@ -128,7 +128,7 @@ static int ixp4xx_i2c_probe(struct platf + drv_data->algo_data.timeout = 100; + + drv_data->adapter.id = I2C_HW_B_IXP4XX; +- strlcpy(drv_data->adapter.name, ixp4xx_i2c_driver.name, ++ strlcpy(drv_data->adapter.name, ixp4xx_i2c_driver.driver.name, + I2C_NAME_SIZE); + drv_data->adapter.algo_data = &drv_data->algo_data; + +@@ -140,7 +140,7 @@ static int ixp4xx_i2c_probe(struct platf + gpio_line_set(gpio->sda_pin, 0); + + if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) { +- printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id); ++ printk(KERN_ERR "ERROR: Could not install %s\n", ixp4xx_i2c_driver.driver.name); + + kfree(drv_data); + return err; diff --git a/packages/linux/nslu2-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch b/packages/linux/nslu2-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch new file mode 100644 index 0000000000..edee083e3c --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch @@ -0,0 +1,44 @@ +On IXP4XX systems the FIS directory is big endian even with a little +endian kernel. This patch recognises the FIS directory on such a +system and byte swaps it to obtain a valid table based on the 'size' +field of the FIS directory (the size field is know to always match the +erase block size on such systems, and probably all systems.) + +--- linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000 +@@ -89,8 +89,34 @@ + i = numslots; + break; + } +- if (!memcmp(buf[i].name, "FIS directory", 14)) ++ if (!memcmp(buf[i].name, "FIS directory", 14)) { ++ /* This is apparently the FIS directory entry for the ++ * FIS directory itself. The FIS directory size is ++ * one erase block, if the buf[i].size field is ++ * swab32(erasesize) then we know we are looking at ++ * a byte swapped FIS directory - swap all the entries! ++ * (NOTE: this is 'size' not 'data_length', size is ++ * the full size of the entry.) ++ */ ++ if (swab32(buf[i].size) == master->erasesize) { ++ int j; ++ for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) { ++ /* The unsigned long fields were written with the ++ * wrong byte sex, name and pad have no byte sex. ++ */ ++# define do_swab32(x) (x) = swab32(x) ++ do_swab32(buf[j].flash_base); ++ do_swab32(buf[j].mem_base); ++ do_swab32(buf[j].size); ++ do_swab32(buf[j].entry_point); ++ do_swab32(buf[j].data_length); ++ do_swab32(buf[j].desc_cksum); ++ do_swab32(buf[j].file_cksum); ++# undef do_swab32 ++ } ++ } + break; ++ } + } + if (i == numslots) { + /* Didn't find it */ diff --git a/packages/linux/nslu2-kernel/2.6.15/19-jffs2-force-be.patch b/packages/linux/nslu2-kernel/2.6.15/19-jffs2-force-be.patch new file mode 100644 index 0000000000..09379031dd --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/19-jffs2-force-be.patch @@ -0,0 +1,13 @@ +--- linux-2.6.15/fs/jffs2/nodelist.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/fs/jffs2/nodelist.h 1970-01-01 00:00:00.000000000 +0000 +@@ -44,7 +44,9 @@ + #define D2(x) + #endif + +-#define JFFS2_NATIVE_ENDIAN ++#undef JFFS2_NATIVE_ENDIAN ++#define JFFS2_BIG_ENDIAN 1 ++#undef JFFS2_LITTLE_ENDIAN + + /* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from + whatever OS we're actually running on here too. */ diff --git a/packages/linux/nslu2-kernel/2.6.15/20-timer.patch b/packages/linux/nslu2-kernel/2.6.15/20-timer.patch new file mode 100644 index 0000000000..f829fc8db7 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/20-timer.patch @@ -0,0 +1,16 @@ +diff -urN linux-2.6.13.1/include/asm-arm/arch-ixp4xx/timex.h nslu2-2.6.13.1/include/asm-arm/arch-ixp4xx/timex.h +--- linux-2.6.15/include/asm-arm/arch-ixp4xx/timex.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/include/asm-arm/arch-ixp4xx/timex.h 1970-01-01 00:00:00.000000000 +0000 +@@ -9,7 +9,12 @@ + * We use IXP425 General purpose timer for our timer needs, it runs at + * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the + * timer register ignores the bottom 2 bits of the LATCH value. ++ * The NSLU2 has a 33.00MHz crystal, so a different FREQ is required. + */ ++#ifdef CONFIG_MACH_NSLU2 ++#define FREQ 66000000 ++#else + #define FREQ 66666666 ++#endif + #define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) + diff --git a/packages/linux/nslu2-kernel/2.6.15/55-rtc-x1205.patch b/packages/linux/nslu2-kernel/2.6.15/55-rtc-x1205.patch new file mode 100644 index 0000000000..70befe5fe4 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/55-rtc-x1205.patch @@ -0,0 +1,193 @@ + drivers/char/Kconfig | 4 + + drivers/char/Makefile | 1 + drivers/char/x1205-rtc.c | 162 +++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 167 insertions(+) + +--- linux-2.6.15/drivers/char/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/char/Kconfig 1970-01-01 00:00:00.000000000 +0000 +@@ -783,6 +783,10 @@ config RTC_VR41XX + tristate "NEC VR4100 series Real Time Clock Support" + depends on CPU_VR41XX + ++config RTC_X1205 ++ tristate "X1205 I2C RTC Support" ++ depends on I2C && RTC_X1205_I2C ++ + config COBALT_LCD + bool "Support for Cobalt LCD" + depends on MIPS_COBALT +--- linux-2.6.15/drivers/char/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/char/Makefile 1970-01-01 00:00:00.000000000 +0000 +@@ -65,6 +65,7 @@ obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o + obj-$(CONFIG_DS1302) += ds1302.o + obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o + obj-$(CONFIG_RTC_VR41XX) += vr41xx_rtc.o ++obj-$(CONFIG_RTC_X1205) += x1205-rtc.o + ifeq ($(CONFIG_GENERIC_NVRAM),y) + obj-$(CONFIG_NVRAM) += generic_nvram.o + else +--- linux-2.6.15/drivers/char/x1205-rtc.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/char/x1205-rtc.c 1970-01-01 00:00:00.000000000 +0000 +@@ -0,0 +1,162 @@ ++/* ++ * drivers/char/x1205-rtc.c ++ * ++ * NSLU2 RTC driver ++ * ++ * Copyright (C) 2005 Tower Technologies ++ * ++ * based on the original X1205 NSLU2 driver ++ * Copyright (C) 2004 Karen Spearel ++ * ++ * Author: Alessandro Zummo <a.zummo@towertech.it> ++ * Maintainers: http://www.nslu2-linux.org/ ++ * ++ * 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/module.h> ++#include <linux/device.h> ++#include <linux/time.h> ++#include <linux/rtc.h> ++#include <linux/init.h> ++#include <linux/platform_device.h> ++ ++#include <linux/i2c.h> ++#include <linux/x1205.h> ++ ++#include <asm/rtc.h> ++ ++#define DRV_VERSION "0.9" ++ ++extern int (*set_rtc)(void); ++ ++static int x1205_set_rtc(void) ++{ ++ int err; ++ ++ struct rtc_time new_tm, old_tm; ++ unsigned long cur_secs = xtime.tv_sec; ++ ++ if ((err = x1205_do_command(X1205_CMD_GETDATETIME, &old_tm) == 0)) ++ return err; ++ ++ /* FIXME xtime.tv_nsec = old_tm.tm_sec * 10000000; */ ++ new_tm.tm_sec = cur_secs % 60; ++ cur_secs /= 60; ++ new_tm.tm_min = cur_secs % 60; ++ cur_secs /= 60; ++ new_tm.tm_hour = cur_secs % 24; ++ ++ /* ++ * avoid writing when we're going to change the day ++ * of the month. We will retry in the next minute. ++ * This basically means that if the RTC must not drift ++ * by more than 1 minute in 11 minutes. ++ */ ++ if ((old_tm.tm_hour == 23 && old_tm.tm_min == 59) || ++ (new_tm.tm_hour == 23 && new_tm.tm_min == 59)) ++ return 1; ++ ++ return x1205_do_command(X1205_CMD_SETTIME, &new_tm); ++} ++ ++static int x1205_rtc_read_alarm(struct rtc_wkalrm *alrm) ++{ ++ return x1205_do_command(X1205_CMD_GETALARM, &alrm->time); ++} ++ ++static int x1205_rtc_set_alarm(struct rtc_wkalrm *alrm) ++{ ++ return x1205_do_command(X1205_CMD_SETALARM, &alrm->time); ++} ++ ++static int x1205_rtc_read_time(struct rtc_time *tm) ++{ ++ return x1205_do_command(X1205_CMD_GETDATETIME, tm); ++} ++ ++static int x1205_rtc_set_time(struct rtc_time *tm) ++{ ++ return x1205_do_command(X1205_CMD_SETDATETIME, tm); ++} ++ ++static int x1205_rtc_proc(char *buf) ++{ ++ int err, dtrim, atrim; ++ char *p = buf; ++ ++ p += sprintf(p, "24hr\t\t: yes\n"); ++ ++ err = x1205_do_command(X1205_CMD_GETDTRIM, &dtrim); ++ if (err == 0) ++ p += sprintf(p, "digital_trim\t: %d ppm\n", dtrim); ++ ++ err = x1205_do_command(X1205_CMD_GETATRIM, &atrim); ++ if (err == 0) ++ p += sprintf(p, "analog_trim\t: %d.%02d pF\n", ++ atrim / 1000, atrim % 1000); ++ ++ return p - buf; ++} ++ ++static struct rtc_ops x1205_rtc_ops = { ++ .owner = THIS_MODULE, ++ .proc = x1205_rtc_proc, ++ .read_time = x1205_rtc_read_time, ++ .set_time = x1205_rtc_set_time, ++ .read_alarm = x1205_rtc_read_alarm, ++ .set_alarm = x1205_rtc_set_alarm, ++}; ++ ++static int x1205_rtc_probe(struct device *dev) ++{ ++ int ret; ++ ++ if ((ret = register_rtc(&x1205_rtc_ops)) != 0) ++ return ret; ++ ++ set_rtc = x1205_set_rtc; ++ ++ printk(KERN_INFO "x1205-rtc: real time clock\n"); ++ ++ return 0; ++} ++ ++static int x1205_rtc_remove(struct device *dev) ++{ ++ set_rtc = NULL; ++ ++ unregister_rtc(&x1205_rtc_ops); ++ ++ return 0; ++} ++ ++static struct device_driver x1205_rtc_driver = { ++ .name = "x1205-rtc", ++ .bus = &platform_bus_type, ++ .probe = x1205_rtc_probe, ++ .remove = x1205_rtc_remove, ++}; ++ ++static int __init x1205_rtc_init(void) ++{ ++ return driver_register(&x1205_rtc_driver); ++} ++ ++static void __exit x1205_rtc_exit(void) ++{ ++ driver_unregister(&x1205_rtc_driver); ++} ++ ++module_init(x1205_rtc_init); ++module_exit(x1205_rtc_exit); ++ ++MODULE_AUTHOR( ++ "Karen Spearel <kas11@tampabay.rr.com>, " ++ "Alessandro Zummo <a.zummo@towertech.it>"); ++MODULE_DESCRIPTION("Xicor X1205 RTC platform driver"); ++MODULE_LICENSE("GPL"); ++MODULE_VERSION(DRV_VERSION); diff --git a/packages/linux/nslu2-kernel/2.6.15/60-nslu2-beeper.patch b/packages/linux/nslu2-kernel/2.6.15/60-nslu2-beeper.patch new file mode 100644 index 0000000000..12fdc4d96e --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/60-nslu2-beeper.patch @@ -0,0 +1,184 @@ + drivers/input/misc/Kconfig | 12 +++ + drivers/input/misc/Makefile | 1 + drivers/input/misc/nslu2spkr.c | 148 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 161 insertions(+) + +--- linux-2.6.15/drivers/input/misc/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/input/misc/Kconfig 1970-01-01 00:00:00.000000000 +0000 +@@ -40,6 +40,18 @@ config INPUT_M68K_BEEP + tristate "M68k Beeper support" + depends on M68K + ++config INPUT_NSLU2_BEEPER ++ tristate "NSLU2 Beeper support" ++ depends on MACH_NSLU2 ++ help ++ Say Y here if you want the embedded beeper on the LinkSys NSLU2 ++ to be used for bells and whistles. ++ ++ If unsure, say Y. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called nslu2spkr. ++ + config INPUT_UINPUT + tristate "User level driver support" + help +--- linux-2.6.15/drivers/input/misc/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/input/misc/Makefile 1970-01-01 00:00:00.000000000 +0000 +@@ -10,3 +10,4 @@ obj-$(CONFIG_INPUT_M68K_BEEP) += m68ksp + obj-$(CONFIG_INPUT_98SPKR) += 98spkr.o + obj-$(CONFIG_INPUT_UINPUT) += uinput.o + obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o ++obj-$(CONFIG_INPUT_NSLU2_BEEPER) += nslu2spkr.o +--- linux-2.6.15/drivers/input/misc/nslu2spkr.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/drivers/input/misc/nslu2spkr.c 1970-01-01 00:00:00.000000000 +0000 +@@ -0,0 +1,148 @@ ++/* ++ * drivers/input/misc/nslu2spkr.c ++ * ++ * NSLU2 Beeper driver ++ * ++ * Copyright (C) 2005 Tower Technologies ++ * ++ * based on nslu2-io.c ++ * Copyright (C) 2004 Karen Spearel ++ * ++ * Author: Alessandro Zummo <a.zummo@towertech.it> ++ * Maintainers: http://www.nslu2-linux.org/ ++ * ++ * 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/config.h> ++#include <linux/module.h> ++#include <linux/init.h> ++#include <linux/input.h> ++#include <linux/delay.h> ++ ++#include <asm/hardware.h> ++#include <asm/irq.h> ++#include <asm/mach-types.h> ++ ++static unsigned int beep_on_startup = 1; ++module_param(beep_on_startup, bool, 0); ++MODULE_PARM_DESC(beep_on_startup, "Play a beep on module startup"); ++ ++DEFINE_SPINLOCK(beep_lock); ++ ++static int nslu2_spkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) ++{ ++ unsigned int count = 0; ++ unsigned long flags; ++ ++ if (type != EV_SND) ++ return -1; ++ ++ switch (code) { ++ case SND_BELL: ++ if (value) value = 1000; ++ case SND_TONE: ++ break; ++ default: ++ return -1; ++ } ++ ++ if (value > 20 && value < 32767) ++ count = (NSLU2_FREQ / (value*4)) - 1; ++ ++ spin_lock_irqsave(&beep_lock, flags); ++ ++ if (count) { ++ ++ gpio_line_config(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_OUT); ++ gpio_line_set(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_LOW); ++ ++ *IXP4XX_OSRT2 = (count & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE; ++ ++ } else { ++ ++ gpio_line_config(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_IN); ++ gpio_line_set(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_HIGH); ++ ++ *IXP4XX_OSRT2 = 0; ++ } ++ ++ spin_unlock_irqrestore(&beep_lock, flags); ++ ++ return 0; ++} ++ ++static struct input_dev nslu2_spkr_dev = { ++ .phys = "ixp420/gpio4", ++ .name = "NSLU2 Beeper", ++ .evbit[0] = BIT(EV_SND), ++ .sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE), ++ .event = nslu2_spkr_event, ++ .id = { ++ .bustype = BUS_HOST, ++ .vendor = 0x001f, ++ .product = 0x0001, ++ .version = 0x0100 ++ } ++}; ++ ++static irqreturn_t nslu2_spkr_handler(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ /* clear interrupt */ ++ *IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND; ++ ++ /* flip the beeper output */ ++ *IXP4XX_GPIO_GPOUTR ^= NSLU2_BZ_BM; ++ ++ return IRQ_HANDLED; ++} ++ ++static int __init nslu2_spkr_init(void) ++{ ++ if (!(machine_is_nslu2())) ++ return -ENODEV; ++ ++ if (request_irq(IRQ_IXP4XX_TIMER2, &nslu2_spkr_handler, ++ SA_INTERRUPT | SA_TIMER, "nslu2-beeper", NULL < 0)) { ++ ++ printk(KERN_INFO "NSLU2 beeper: IRQ %d not available\n", ++ IRQ_IXP4XX_TIMER2); ++ ++ return -EIO; ++ } ++ ++ input_register_device(&nslu2_spkr_dev); ++ ++ /* do a little beep to tell the world we are alive */ ++ if (beep_on_startup) ++ { ++ nslu2_spkr_event(NULL, EV_SND, SND_TONE, 440); ++ msleep(120); ++ nslu2_spkr_event(NULL, EV_SND, SND_TONE, 0); ++ } ++ ++ printk(KERN_INFO "NSLU2: beeper\n"); ++ return 0; ++} ++ ++static void __exit nslu2_spkr_exit(void) ++{ ++ input_unregister_device(&nslu2_spkr_dev); ++ ++ disable_irq(IRQ_IXP4XX_TIMER2); ++ ++ /* turn it off */ ++ nslu2_spkr_event(NULL, EV_SND, SND_BELL, 0); ++ ++ free_irq(IRQ_IXP4XX_TIMER2, NULL); ++} ++ ++module_init(nslu2_spkr_init); ++module_exit(nslu2_spkr_exit); ++ ++MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); ++MODULE_DESCRIPTION("NSLU2 Beeper driver"); ++MODULE_LICENSE("GPL"); diff --git a/packages/linux/nslu2-kernel/2.6.15/60-nslu2-rtc.patch b/packages/linux/nslu2-kernel/2.6.15/60-nslu2-rtc.patch new file mode 100644 index 0000000000..9e390c6b7a --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/60-nslu2-rtc.patch @@ -0,0 +1,21 @@ + arch/arm/mach-ixp4xx/nslu2-setup.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000 +@@ -95,10 +95,15 @@ static struct platform_device nslu2_uart + .resource = nslu2_uart_resources, + }; + ++static struct platform_device nslu2_rtc = { ++ .name = "x1205-rtc", ++}; ++ + static struct platform_device *nslu2_devices[] __initdata = { + &nslu2_i2c_controller, + &nslu2_flash, + &nslu2_uart, ++ &nslu2_rtc, + }; + + static void nslu2_power_off(void) diff --git a/packages/linux/nslu2-kernel/2.6.15/75-nslu2-leds.patch b/packages/linux/nslu2-kernel/2.6.15/75-nslu2-leds.patch new file mode 100644 index 0000000000..7497409e77 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/75-nslu2-leds.patch @@ -0,0 +1,272 @@ + arch/arm/Kconfig | 8 - + arch/arm/mach-ixp4xx/Makefile | 4 + arch/arm/mach-ixp4xx/nslu2-leds.c | 223 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 232 insertions(+), 3 deletions(-) + +--- linux-2.6.15/arch/arm/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/Kconfig 1970-01-01 00:00:00.000000000 +0000 +@@ -418,7 +418,8 @@ config LEDS + ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \ + ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \ + ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \ +- ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE ++ ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \ ++ MACH_NSLU2 + help + If you say Y here, the LEDs on your machine will be used + to provide useful information about your current system status. +@@ -432,7 +433,7 @@ config LEDS + + config LEDS_TIMER + bool "Timer LED" if (!ARCH_CDB89712 && !ARCH_OMAP) || \ +- MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 ++ MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 || MACH_NSLU2 + depends on LEDS + default y if ARCH_EBSA110 + help +@@ -448,7 +449,8 @@ config LEDS_TIMER + + config LEDS_CPU + bool "CPU usage LED" if (!ARCH_CDB89712 && !ARCH_EBSA110 && \ +- !ARCH_OMAP) || MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 ++ !ARCH_OMAP) || MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 \ ++ || MACH_NSLU2 + depends on LEDS + help + If you say Y here, the red LED will be used to give a good real +--- linux-2.6.15/arch/arm/mach-ixp4xx/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/mach-ixp4xx/Makefile 1970-01-01 00:00:00.000000000 +0000 +@@ -10,3 +10,7 @@ obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote- + obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o + obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o + ++leds-$(CONFIG_MACH_NSLU2) += nslu2-leds.o ++obj-$(CONFIG_LEDS) += $(leds-y) ++ ++ +--- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-leds.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-leds.c 1970-01-01 00:00:00.000000000 +0000 +@@ -0,0 +1,223 @@ ++/* ++ * arch/arm/mach-ixp4xx/nslu2-leds.c ++ * ++ * NSLU2 LEDs driver ++ * ++ * Copyright (C) 2005 Tower Technologies ++ * ++ * based on nslu2-io.c ++ * Copyright (C) 2004 Karen Spearel ++ * and arch/arm/mach-footbridge/netwinder-leds.c ++ * Copyright (C) 1998-1999 Russell King ++ * ++ * Author: Alessandro Zummo <a.zummo@towertech.it> ++ * Maintainers: http://www.nslu2-linux.org/ ++ * ++ * 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/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/spinlock.h> ++#include <linux/notifier.h> ++ ++#include <asm/hardware.h> ++#include <asm/leds.h> ++#include <asm/mach-types.h> ++#include <asm/system.h> ++ ++#define LED_STATE_ENABLED 0x01 ++#define LED_STATE_CLAIMED 0x02 ++#define LED_STATE_IDLE 0x04 ++ ++static unsigned char led_state; ++static unsigned int hw_led_state; ++ ++#ifdef CONFIG_LEDS_TIMER ++static const unsigned long idle_seq[4] = { ++ NSLU2_LED_GRN_BM, 0, ++ NSLU2_LED_GRN_BM, 0, ++}; ++ ++static const unsigned long busy_seq[4] = { ++ NSLU2_LED_GRN_BM, 0, ++ NSLU2_LED_GRN_BM | NSLU2_LED_RED_BM, 0, ++}; ++#endif ++ ++static unsigned char led_count = 0; ++ ++static DEFINE_SPINLOCK(leds_lock); ++extern spinlock_t gpio_lock; ++ ++static void nslu2_leds_event(led_event_t evt) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&leds_lock, flags); ++ ++ switch (evt) { ++ case led_start: ++ /* Let's rock! Red led on, all others off. Remember ++ * that disk1/disk2 works inverted. ++ */ ++ led_state = LED_STATE_ENABLED; ++ hw_led_state = NSLU2_LED_DISK1_BM | NSLU2_LED_DISK2_BM ++ | NSLU2_LED_RED_BM; ++ break; ++ ++ case led_stop: ++ led_state &= ~LED_STATE_ENABLED; ++ break; ++ ++ case led_claim: ++ /* The user claimed the interface, red and green off */ ++ led_state |= LED_STATE_CLAIMED; ++ hw_led_state &= ~(NSLU2_LED_RED_BM | NSLU2_LED_GRN_BM); ++ break; ++ ++ case led_release: ++ /* The user released the interface, preserve the last ++ * status of the leds, except red/green. ++ */ ++ led_state &= ~LED_STATE_CLAIMED; ++ hw_led_state = *IXP4XX_GPIO_GPOUTR & 0x0000000C; ++ break; ++ ++#ifdef CONFIG_LEDS_TIMER ++ case led_timer: ++ /* Pulse green led */ ++ if (!(led_state & LED_STATE_CLAIMED)) ++ { ++ /* clear red and green bits */ ++ hw_led_state &= ~(NSLU2_LED_RED_BM | NSLU2_LED_GRN_BM); ++ ++ /* copy the right sequence in */ ++ if (led_state & LED_STATE_IDLE) ++ hw_led_state |= idle_seq[led_count % 4]; ++ else ++ hw_led_state |= busy_seq[led_count % 4]; ++ ++ led_count++; ++ } ++ break; ++#endif ++ ++#ifdef CONFIG_LEDS_CPU ++ case led_idle_start: ++ led_state |= LED_STATE_IDLE; ++#ifndef CONFIG_LEDS_TIMER ++ /* green on, red off */ ++ hw_led_state |= NSLU2_LED_GRN_BM; ++ hw_led_state &= ~NSLU2_LED_RED_BM; ++#endif ++ break; ++ ++ case led_idle_end: ++ led_state &= ~LED_STATE_IDLE; ++#ifndef CONFIG_LEDS_TIMER ++ /* green on, red on -> amber on */ ++ hw_led_state |= NSLU2_LED_GRN_BM | NSLU2_LED_RED_BM; ++#endif ++ break; ++#endif /* CONFIG_LEDS_CPU */ ++ ++ case led_halted: ++ if (!(led_state & LED_STATE_CLAIMED)) ++ hw_led_state |= NSLU2_LED_RED_BM; ++ break; ++ ++ /* leds */ ++ ++ case led_green_on: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state |= NSLU2_LED_GRN_BM; ++ break; ++ ++ case led_green_off: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state &= ~NSLU2_LED_GRN_BM; ++ break; ++ ++ case led_amber_on: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state |= (NSLU2_LED_RED_BM | NSLU2_LED_GRN_BM); ++ break; ++ ++ case led_amber_off: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state &= ~(NSLU2_LED_RED_BM | NSLU2_LED_GRN_BM); ++ break; ++ ++ case led_red_on: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state |= NSLU2_LED_RED_BM; ++ break; ++ ++ case led_red_off: ++ if (led_state & LED_STATE_CLAIMED) ++ hw_led_state &= ~NSLU2_LED_RED_BM; ++ break; ++ ++ default: ++ break; ++ } ++ ++ spin_unlock_irqrestore(&leds_lock, flags); ++ ++ if (led_state & LED_STATE_ENABLED) { ++ spin_lock_irqsave(&gpio_lock, flags); ++ *IXP4XX_GPIO_GPOUTR = (*IXP4XX_GPIO_GPOUTR & 0xFFFFFFF0) | hw_led_state; ++ spin_unlock_irqrestore(&gpio_lock, flags); ++ } ++} ++ ++static int nslu2_leds_panic_event(struct notifier_block *this, unsigned long event, ++ void *ptr) ++{ ++#ifdef CONFIG_LEDS_TIMER ++ leds_event(led_claim); ++#endif ++ leds_event(led_green_off); ++ leds_event(led_red_on); ++ ++ return NOTIFY_DONE; ++} ++ ++static struct notifier_block nslu2_leds_panic_block = { ++ .notifier_call = nslu2_leds_panic_event, ++}; ++ ++static int __init nslu2_leds_init(void) ++{ ++ if (!(machine_is_nslu2())) ++ return 0; ++ ++ printk(KERN_INFO "NSLU2: leds\n"); ++ ++ /* register panic notifier */ ++ notifier_chain_register(&panic_notifier_list, &nslu2_leds_panic_block); ++ ++ /* enable gpio 0-3 */ ++ gpio_line_config(NSLU2_LED_GRN, IXP4XX_GPIO_OUT); ++ gpio_line_config(NSLU2_LED_RED, IXP4XX_GPIO_OUT); ++ gpio_line_config(NSLU2_LED_DISK1, IXP4XX_GPIO_OUT); ++ gpio_line_config(NSLU2_LED_DISK2, IXP4XX_GPIO_OUT); ++ ++ leds_event = nslu2_leds_event; ++ ++ /* this will also initialize the leds to the ++ * default state. ++ */ ++ ++ leds_event(led_start); ++ ++ return 0; ++} ++ ++module_init(nslu2_leds_init); diff --git a/packages/linux/nslu2-kernel/2.6.15/80-nslu2-io.patch b/packages/linux/nslu2-kernel/2.6.15/80-nslu2-io.patch new file mode 100644 index 0000000000..0b90c486e3 --- /dev/null +++ b/packages/linux/nslu2-kernel/2.6.15/80-nslu2-io.patch @@ -0,0 +1,560 @@ +--- linux-2.6.15/arch/arm/mach-ixp4xx/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/mach-ixp4xx/Makefile 1970-01-01 00:00:00.000000000 +0000 +@@ -8,5 +8,5 @@ obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pc + obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o + obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o + obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o +-obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o ++obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o nslu2-io.o + +--- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-io.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-io.c 1970-01-01 00:00:00.000000000 +0000 +@@ -0,0 +1,548 @@ ++//============================================================================= ++// ++// n2-io.c version 0.1.7 ++// Author: Karen Spearel <kas11 at tampabay.rr.com> ++// please report problems/bugs directly to the address above ++// ++// Boilerplate to be added "real soon now"...it is and has always been GPL'ed per ++// MODULE_LICENSE but is offered without warrantee of any sort..use at your own risk ++// ++// NOTE: THIS IS INCOMPLETE. INCLUDED ONLY TO KEEP FROM BREAKING THE BUILD, ++// IT BEEPS AND SENDS A MESSAGE TO /proc/poweroff. EVENTUALLY IT ++// WILL TALK TO THE n2_pbd DAEMON. EVENTUALLY THE LED DRIVER ++// WILL TALK TO SOME USERLAND APP BUT ***NOT*** SET_LEDS. ++// ++//============================================================================= ++// GPIO Function State ++// 0 Red LED Status ++// 1 Green LED Ready = 1 ++// 2 Disk 2 LED On = 0 ++// 3 Disk 1 LED On = 0 ++// 4 Buzzer ++// 5 Power Button Pressed = 1 ++// 8 Power Down Output = 1 powers down NSLU2 ++// 12 Reset Pressed = 0 ++ ++#include <linux/config.h> ++#include <linux/version.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/proc_fs.h> ++#include <linux/device.h> ++#include <linux/reboot.h> ++ ++#include <asm/uaccess.h> ++#include <asm-arm/irq.h> ++#include <asm-arm/delay.h> ++ ++/* Set this to 1 to output lots of debug messages. */ ++#define NSLU2_IO_DEBUG 0 ++ ++#if NSLU2_IO_DEBUG ++#define nslu2_io_debug(args) printk args ++#else ++#define nslu2_io_debug(args) ((void)0) ++#endif ++ ++#define VERSION "0.1.7" ++ ++#define NSLU2BZ_MAJOR 62 //buzzer ++#define NSLU2LM_MAJOR 126 ++ ++ ++#define NSLU2_BEEP_DUR_LONG 2000 ++#define NSLU2_BEEP_DUR_MED 400 ++#define NSLU2_BEEP_DUR_SHORT 100 ++#define NSLU2_BEEP_PITCH_HIGH 250 ++#define NSLU2_BEEP_PITCH_MED 500 ++#define NSLU2_BEEP_PITCH_LOW 1000 ++#define NSLU2_LONG_DELAY 30000 ++ ++#define NSLU2_BZ_BM (1L << NSLU2_GPIO_BUZZ) ++ ++// ioctls -- 'M" is used for sound cards...we don't got one so it seems safe ++ ++#define NSLU2BZ_BEEP_STOP _IO('M',0) //stop multi-beep at end of audible ++#define NSLU2BZ_BEEP _IO('M',1) //one beep at current defaults ++#define NSLU2BZ_BEEPS _IOW('M',3,long) //param beeps at current defaults ++#define NSLU2BZ_TONESET _IOW('M',4,long) //set tone: range is high=250 to low=2000 ++#define NSLU2BZ_ONTIME |
