diff options
Diffstat (limited to 'packages/linux/nslu2-kernel/2.6.14')
-rw-r--r-- | packages/linux/nslu2-kernel/2.6.14/10-ixp4xx-copy-from.patch | 64 | ||||
-rw-r--r-- | packages/linux/nslu2-kernel/2.6.14/30-i2c-x1205.patch | 148 | ||||
-rw-r--r-- | packages/linux/nslu2-kernel/2.6.14/50-nslu2-general.patch | 439 | ||||
-rw-r--r-- | packages/linux/nslu2-kernel/2.6.14/60-nslu2-beeper.patch (renamed from packages/linux/nslu2-kernel/2.6.14/50-nslu2-beeper.patch) | 90 | ||||
-rw-r--r-- | packages/linux/nslu2-kernel/2.6.14/defconfig | 346 |
5 files changed, 931 insertions, 156 deletions
diff --git a/packages/linux/nslu2-kernel/2.6.14/10-ixp4xx-copy-from.patch b/packages/linux/nslu2-kernel/2.6.14/10-ixp4xx-copy-from.patch index 03d94d282c..51d7e0113f 100644 --- a/packages/linux/nslu2-kernel/2.6.14/10-ixp4xx-copy-from.patch +++ b/packages/linux/nslu2-kernel/2.6.14/10-ixp4xx-copy-from.patch @@ -1,9 +1,37 @@ -# This patch fixes ixp4xx_copy_from for cases where the 'from' -# pointer is odd - that would cause all the accesses to be -# misaligned in the old code. ---- linux-2.6.12.2/.pc/ixp4xx_copy_from.patch/drivers/mtd/maps/ixp4xx.c 2005-09-21 22:35:38.761014739 -0700 -+++ linux-2.6.12.2/drivers/mtd/maps/ixp4xx.c 2005-09-23 01:27:54.696223365 -0700 -@@ -54,19 +54,23 @@ +--- linux-2.6.14-rc3/drivers/mtd/maps/ixp4xx.c 2005-10-05 20:35:42.916786530 -0700 ++++ linux-2.6.14-rc3/drivers/mtd/maps/ixp4xx.c 2005-10-05 22:42:25.811206514 -0700 +@@ -30,18 +30,29 @@ + + #include <linux/reboot.h> + ++/* On a little-endian IXP4XX system (tested on NSLU2) contrary to the ++ * Intel documentation LDRH/STRH appears to XOR the address with 10b. ++ * This causes the cfi commands (sent to the command address, 0xAA for ++ * 16 bit flash) to fail. This is fixed here by XOR'ing the address ++ * before use with 10b. The cost of this is that the flash layout ends ++ * up consistently big-endian, however this is not a problem as the ++ * access code consistently only accesses half words - so the endianness ++ * is not determinable. ++ */ + #ifndef __ARMEB__ + #define BYTE0(h) ((h) & 0xFF) + #define BYTE1(h) (((h) >> 8) & 0xFF) ++#define FLASHW(a) (*(__u16*)((u32)(a) ^ 2)) + #else + #define BYTE0(h) (((h) >> 8) & 0xFF) + #define BYTE1(h) ((h) & 0xFF) ++#define FLASHW(a) (*(__u16*)(a)) + #endif + + static map_word ixp4xx_read16(struct map_info *map, unsigned long ofs) + { + map_word val; +- val.x[0] = *(__u16 *) (map->map_priv_1 + ofs); ++ val.x[0] = FLASHW(map->map_priv_1 + ofs); + return val; + } + +@@ -53,19 +64,23 @@ static void ixp4xx_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) { @@ -21,10 +49,10 @@ + u8 *dest = (u8 *) to; + u8 *src = (u8 *) (map->map_priv_1 + from); + if (from & 1) -+ *dest++ = BYTE1(*(u16 *)(src-1)), ++src, --len; ++ *dest++ = BYTE1(FLASHW(src-1)), ++src, --len; + + while (len >= 2) { -+ u16 data = *(u16 *)src; src += 2; ++ u16 data = FLASHW(src); src += 2; + *dest++ = BYTE0(data); + *dest++ = BYTE1(data); + len -= 2; @@ -33,7 +61,25 @@ - if (len & 1) - dest[len - 1] = BYTE0(src[i]); + if (len > 0) -+ *dest++ = BYTE0(*(u16 *)src); ++ *dest++ = BYTE0(FLASHW(src)); } /* +@@ -75,7 +90,7 @@ + static void ixp4xx_probe_write16(struct map_info *map, map_word d, unsigned long adr) + { + if (!(adr & 1)) +- *(__u16 *) (map->map_priv_1 + adr) = d.x[0]; ++ FLASHW(map->map_priv_1 + adr) = d.x[0]; + } + + /* +@@ -83,7 +98,7 @@ + */ + static void ixp4xx_write16(struct map_info *map, map_word d, unsigned long adr) + { +- *(__u16 *) (map->map_priv_1 + adr) = d.x[0]; ++ FLASHW(map->map_priv_1 + adr) = d.x[0]; + } + + struct ixp4xx_flash_info { diff --git a/packages/linux/nslu2-kernel/2.6.14/30-i2c-x1205.patch b/packages/linux/nslu2-kernel/2.6.14/30-i2c-x1205.patch index c212238941..1e775ba8b8 100644 --- a/packages/linux/nslu2-kernel/2.6.14/30-i2c-x1205.patch +++ b/packages/linux/nslu2-kernel/2.6.14/30-i2c-x1205.patch @@ -1,13 +1,13 @@ ---- linux-2.6.14-rc2/drivers/i2c/chips/Kconfig 2005-09-24 13:17:13.000000000 +0200 -+++ test3/drivers/i2c/chips/Kconfig 2005-09-24 16:09:51.000000000 +0200 -@@ -126,4 +126,14 @@ +diff -urN linux-2.6.14-rc3/drivers/i2c/chips/Kconfig test9/drivers/i2c/chips/Kconfig +--- linux-2.6.14-rc3/drivers/i2c/chips/Kconfig 2005-10-01 13:46:50.000000000 +0200 ++++ test9/drivers/i2c/chips/Kconfig 2005-10-03 16:10:22.000000000 +0200 +@@ -126,4 +126,13 @@ This driver can also be built as a module. If so, the module will be called max6875. +config SENSORS_X1205 + tristate "Xicor X1205 RTC chip" + depends on I2C -+ select I2C_SENSOR + help + If you say yes here you get support for the Xicor X1205 RTC chip. + @@ -15,8 +15,9 @@ + will be called x1205 + endmenu ---- linux-2.6.14-rc2/drivers/i2c/chips/Makefile 2005-09-17 12:42:33.000000000 +0200 -+++ test3/drivers/i2c/chips/Makefile 2005-09-24 16:49:34.000000000 +0200 +diff -urN linux-2.6.14-rc3/drivers/i2c/chips/Makefile test9/drivers/i2c/chips/Makefile +--- linux-2.6.14-rc3/drivers/i2c/chips/Makefile 2005-09-17 12:42:33.000000000 +0200 ++++ test9/drivers/i2c/chips/Makefile 2005-10-01 15:30:06.000000000 +0200 @@ -13,6 +13,7 @@ obj-$(CONFIG_SENSORS_RTC8564) += rtc8564.o obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o @@ -25,10 +26,10 @@ ifeq ($(CONFIG_I2C_DEBUG_CHIP),y) EXTRA_CFLAGS += -DDEBUG -diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x1205.c ---- linux-2.6.14-rc2/drivers/i2c/chips/x1205.c 1970-01-01 01:00:00.000000000 +0100 -+++ test3/drivers/i2c/chips/x1205.c 2005-09-24 16:11:16.000000000 +0200 -@@ -0,0 +1,522 @@ +diff -urN linux-2.6.14-rc3/drivers/i2c/chips/x1205.c test9/drivers/i2c/chips/x1205.c +--- linux-2.6.14-rc3/drivers/i2c/chips/x1205.c 1970-01-01 01:00:00.000000000 +0100 ++++ test9/drivers/i2c/chips/x1205.c 2005-10-03 16:02:57.000000000 +0200 +@@ -0,0 +1,612 @@ +/* + * linux/drivers/i2c/chips/x1205.c + * @@ -62,7 +63,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 +#define EPOCH_1900 1900 +#define EPOCH_1970 1970 + -+#define DRIVER_VERSION "0.9.5" ++#define DRIVER_VERSION "0.9.6" +#define DRIVER_NAME (x1205_driver.name) + + @@ -140,20 +141,36 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 +static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm, + u8 reg_base) +{ -+ static unsigned char addr[2] = { 0, }; -+ unsigned char buf[8]; ++ static unsigned char dt_addr[] = { 0, }; ++ static unsigned char sr_addr[] = { 0, }; + -+ struct i2c_msg msgs[2] = { -+ { client->addr, 0, 2, addr }, /* random read */ ++ unsigned char buf[8], sr; ++ ++ struct i2c_msg msgs[] = { ++ { client->addr, 0, 2, sr_addr }, /* random read */ ++ { client->addr, I2C_M_RD, 1, &sr }, ++ { client->addr, 0, 2, dt_addr }, /* random read */ + { client->addr, I2C_M_RD, 8, buf }, + }; + + struct x1205_data *xdata = i2c_get_clientdata(client); + -+ addr[1] = reg_base; ++ dt_addr[1] = reg_base; ++ sr_addr[1] = X1205_REG_SR; ++ ++ if ((i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs))) == ++ ARRAY_SIZE(msgs)) { ++ /* did we read the correct number of messages? */ + -+ if ((i2c_transfer(client->adapter, msgs, 2)) == 2) { -+ /* did we read 2 messages? */ ++ /* check for battery failure */ ++ if (sr & X1205_SR_RTCF) ++ { ++ dev_info(&client->adapter->dev, ++ "%s: Clock had a power failure, you must set the date.\n", ++ DRIVER_NAME); ++ ++ return -EINVAL; ++ } + + dev_dbg(&client->dev, + "%s: raw read data - sec-%02x min-%02x hr-%02x" @@ -318,6 +335,14 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + return 0; +} + ++struct x1205_limit ++{ ++ unsigned char reg; ++ unsigned char mask; ++ unsigned char min; ++ unsigned char max; ++}; ++ +static int x1205_validate_client(struct i2c_client *client) +{ + int i, xfer; @@ -326,7 +351,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + * address and check if the given bits are zero. + */ + -+ const unsigned char probe_pattern[] = { ++ const unsigned char probe_zero_pattern[] = { + + X1205_REG_SR, 0x18, + X1205_REG_Y2K, 0xC6, @@ -337,7 +362,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + X1205_REG_MN, 0x80, + X1205_REG_SC, 0x80, + X1205_REG_DTR, 0xF8, -+ X1205_REG_ATR, 0x18, ++ X1205_REG_ATR, 0xC0, + X1205_REG_INT, 0x18, + X1205_REG_0, 0xFF, + X1205_REG_Y2K1, 0xC6, @@ -352,7 +377,35 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + X1205_REG_HRA0, 0x40, + }; + -+ for (i = 0; i < sizeof(probe_pattern); i += 2) ++ const struct x1205_limit probe_limits_pattern[] = { ++ /* register, mask, min, max */ ++ { X1205_REG_Y2K, 0xFF, 19, 20 }, ++ { X1205_REG_DW, 0xFF, 0, 6 }, ++ { X1205_REG_YR, 0xFF, 0, 99 }, ++ { X1205_REG_MO, 0xFF, 0, 12 }, ++ { X1205_REG_DT, 0xFF, 0, 31 }, ++ { X1205_REG_HR, 0x7F, 0, 23 }, ++ { X1205_REG_MN, 0xFF, 0, 59 }, ++ { X1205_REG_SC, 0xFF, 0, 59 }, ++ { X1205_REG_Y2K1, 0xFF, 19, 20 }, ++ { X1205_REG_DWA1, 0x7F, 0, 6 }, ++ { X1205_REG_MOA1, 0x7F, 0, 12 }, ++ { X1205_REG_DTA1, 0x7F, 0, 31 }, ++ { X1205_REG_HRA1, 0x7F, 0, 23 }, ++ { X1205_REG_MNA1, 0x7F, 0, 59 }, ++ { X1205_REG_SCA1, 0x7F, 0, 59 }, ++ { X1205_REG_Y2K0, 0xFF, 19, 20 }, ++ { X1205_REG_DWA0, 0x7F, 0, 6 }, ++ { X1205_REG_MOA0, 0x7F, 0, 12 }, ++ { X1205_REG_DTA0, 0x7F, 0, 31 }, ++ { X1205_REG_HRA0, 0x7F, 0, 23 }, ++ { X1205_REG_MNA0, 0x7F, 0, 59 }, ++ { X1205_REG_SCA0, 0x7F, 0, 59 }, ++ }; ++ ++ /* check that registers have bits a 0 where expected */ ++ ++ for (i = 0; i < ARRAY_SIZE(probe_zero_pattern); i += 2) + { + unsigned char buf; + @@ -364,7 +417,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + }; + + addr[0] = 0x00; -+ addr[1] = probe_pattern[i]; ++ addr[1] = probe_zero_pattern[i]; + + xfer = i2c_transfer(client->adapter, msgs, 2); + @@ -376,15 +429,53 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + return -EIO; + } + -+ if ((buf & probe_pattern[i+1]) != 0) { ++ if ((buf & probe_zero_pattern[i+1]) != 0) { + dev_dbg(&client->adapter->dev, -+ "%s: register %x, pattern %d: %x\n", ++ "%s: register %x, zero pattern %d: %x\n", + __FUNCTION__, addr[1], i, buf); + + return -ENODEV; + } + } + ++ /* check limits */ ++ ++ for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) ++ { ++ unsigned char buf, val; ++ ++ static unsigned char addr[2]; ++ ++ struct i2c_msg msgs[2] = { ++ { client->addr, 0, 2, addr }, /* random read */ ++ { client->addr, I2C_M_RD, 1, &buf }, ++ }; ++ ++ addr[0] = 0x00; ++ addr[1] = probe_limits_pattern[i].reg; ++ ++ xfer = i2c_transfer(client->adapter, msgs, 2); ++ ++ if (xfer != 2) { ++ dev_dbg(&client->adapter->dev, ++ "%s: could not read register %x\n", ++ __FUNCTION__, addr[1]); ++ ++ return -EIO; ++ } ++ ++ val = BCD2BIN(buf & probe_limits_pattern[i].mask); ++ ++ if (val > probe_limits_pattern[i].max || ++ val < probe_limits_pattern[i].min) { ++ dev_dbg(&client->adapter->dev, ++ "%s: register %x, lim pattern %d: %d\n", ++ __FUNCTION__, addr[1], i, val); ++ ++ return -ENODEV; ++ } ++ } ++ + return 0; +} + @@ -444,7 +535,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + + list_add(&xdata->list, &x1205_clients); + -+ dev_info(&adapter->dev, "%s: chip found, driver " DRIVER_VERSION "\n", ++ dev_info(&adapter->dev, "%s: Chip found, driver " DRIVER_VERSION "\n", + DRIVER_NAME); + + /* If requested, se the system time */ @@ -551,9 +642,9 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 + +module_init(x1205_init); +module_exit(x1205_exit); ---- linux-2.6.14-rc2/include/linux/x1205.h 1970-01-01 01:00:00.000000000 +0100 -+++ test3/include/linux/x1205.h 2005-09-24 16:59:28.000000000 +0200 -@@ -0,0 +1,66 @@ +--- linux-2.6.14-rc3/include/linux/x1205.h 1970-01-01 01:00:00.000000000 +0100 ++++ test9/include/linux/x1205.h 2005-10-03 15:38:21.000000000 +0200 +@@ -0,0 +1,67 @@ + +/* commands */ + @@ -613,6 +704,7 @@ diff -urN linux-2.6.14-rc2/drivers/i2c/chips/x1205.c test3/drivers/i2c/chips/x12 +#define X1205_CCR_BASE 0x30 /* Base address of CCR */ +#define X1205_ALM0_BASE 0x00 /* Base address of ALARM0 */ + ++#define X1205_SR_RTCF 0x01 +#define X1205_SR_WEL 0x02 /* Write Enable Latch bit */ +#define X1205_SR_RWEL 0x04 /* Register Write Enable Bit */ + diff --git a/packages/linux/nslu2-kernel/2.6.14/50-nslu2-general.patch b/packages/linux/nslu2-kernel/2.6.14/50-nslu2-general.patch index c5b513c5e1..c0c8d51731 100644 --- a/packages/linux/nslu2-kernel/2.6.14/50-nslu2-general.patch +++ b/packages/linux/nslu2-kernel/2.6.14/50-nslu2-general.patch @@ -1,15 +1,18 @@ ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/Makefile 2005-09-17 12:42:02.000000000 +0200 -+++ test6/arch/arm/mach-ixp4xx/Makefile 2005-09-28 21:58:36.000000000 +0200 -@@ -8,4 +8,6 @@ +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/Makefile 2005-09-17 12:42:02.000000000 +0200 ++++ test14/arch/arm/mach-ixp4xx/Makefile 2005-10-06 21:29:53.000000000 +0200 +@@ -8,4 +8,9 @@ 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 nslu2-rtc.o nslu2-io.o + ++leds-$(CONFIG_MACH_NSLU2) += nslu2-leds.o ++obj-$(CONFIG_LEDS) += $(leds-y) ++ ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/nslu2-rtc.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/arch/arm/mach-ixp4xx/nslu2-rtc.c 2005-09-28 03:02:42.000000000 +0200 -@@ -0,0 +1,108 @@ +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/nslu2-rtc.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-rtc.c 2005-10-06 21:29:53.000000000 +0200 +@@ -0,0 +1,113 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-rtc.c + * @@ -37,7 +40,7 @@ +#include <linux/x1205.h> + +#include <asm/rtc.h> -+ ++#include <asm/mach-types.h> + +extern int (*set_rtc)(void); + @@ -99,9 +102,14 @@ + +static int __init nslu2_rtc_init(void) +{ -+ int ret = register_rtc(&rtc_ops); ++ int ret; + -+ if (ret) ++ if (!(machine_is_nslu2())) ++ return 0; ++ ++ printk(KERN_INFO "NSLU2: rtc\n"); ++ ++ if ((ret = register_rtc(&rtc_ops)) != 0) + return ret; + + set_rtc = nslu2_set_rtc; @@ -118,9 +126,9 @@ + +module_init(nslu2_rtc_init); +module_exit(nslu2_rtc_exit); ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/nslu2-io.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/arch/arm/mach-ixp4xx/nslu2-io.c 2005-09-28 22:02:12.000000000 +0200 -@@ -0,0 +1,540 @@ +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/nslu2-io.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-io.c 2005-10-06 21:29:53.000000000 +0200 +@@ -0,0 +1,548 @@ +//============================================================================= +// +// n2-io.c version 0.1.7 @@ -172,6 +180,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 @@ -180,7 +189,7 @@ +#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 + @@ -241,7 +250,6 @@ +#define LED_DISK2 3 +#define LED_ALL 4 + -+static unsigned long init_jiffy = 0; /* jiffies at init time */ +static unsigned long ontime = 50; +static unsigned long offtime = 450; +static unsigned long bz_repeatcnt = 10; @@ -264,6 +272,7 @@ +// +//================================================================================================== +// this blinks rs green or green/yellow if rs red is on ++#ifndef CONFIG_LEDS +static void n2lm_rsg_handler(unsigned long data) +{ + *IXP4XX_GPIO_GPOUTR ^= RS_GRN_TGL; //flip the led @@ -475,6 +484,7 @@ + .owner = THIS_MODULE, + .ioctl = n2lm_ioctl, +}; ++#endif +//================================================================================================== +// We can't do anything fancy here since the system tick rate is far below that required to +// generate a desirable tone. Therefore we haven't much choice but to use a busy loop until @@ -577,29 +587,34 @@ + +static void n2iom_initarch(void) +{ -+ printk(KERN_DEBUG "setup_interrupts - jiffies=%ld init_jiffy=%ld\n", jiffies, init_jiffy); -+ ++#ifndef CONFIG_LEDS + init_timer(&n2lm_rsg_timer); + init_timer(&n2lm_rsr_timer); + init_timer(&n2lm_d1_timer); + init_timer(&n2lm_d2_timer); -+ init_timer(&n2bz_timer); + + n2lm_rsr_timer.function = n2lm_rsr_handler; + n2lm_rsg_timer.function = n2lm_rsg_handler; + n2lm_d2_timer.function = n2lm_d2_handler; + n2lm_d1_timer.function = n2lm_d1_handler; ++#endif ++ ++ init_timer(&n2bz_timer); + n2bz_timer.function = n2bz_handler; ++ + n2lm_rsr_timer.data = n2lm_rsg_timer.data = n2lm_d1_timer.data = n2lm_d2_timer.data = n2bz_timer.data = 0; + ++#ifndef CONFIG_LEDS + *IXP4XX_GPIO_GPOER &= 0xfffffff0; //enable gpio 0-3 + *IXP4XX_GPIO_GPOUTR |= 0x00000003; //turn off the leds + *IXP4XX_GPIO_GPOUTR &= 0xfffffffc; + n2lm_ledon(LED_ALL); + n2_buzz(NSLU2_BEEP_PITCH_MED, NSLU2_BEEP_DUR_SHORT); + n2lm_ledoff(LED_ALL); -+// Default the Ready/Status to Red during kernel boot, Turn Green at the end of sysvinit ++ ++ // Default the Ready/Status to Red during kernel boot, Turn Green at the end of sysvinit + n2lm_ledon(LED_RS_RED); ++#endif + + return; +} @@ -608,14 +623,13 @@ + +static int __init n2iom_init(void) +{ -+ printk(KERN_INFO "NSLU2 I/O driver %s\n", VERSION); ++ printk(KERN_INFO "NSLU2: i/o, %s\n", VERSION); + -+ init_jiffy = jiffies; -+ printk(KERN_DEBUG "init_jiffy=%ld\n",init_jiffy); + n2iom_initarch(); + + n2lm_class = class_create(THIS_MODULE, "nslu2"); + ++#ifndef CONFIG_LEDS + if (register_chrdev(NSLU2LM_MAJOR, "n2_ledm", &n2lm_fops) < 0) { + printk(KERN_DEBUG "Led Manager Major %d not available\n", NSLU2LM_MAJOR); + return -EBUSY; @@ -623,6 +637,8 @@ + else { + class_device_create(n2lm_class, MKDEV(NSLU2LM_MAJOR, 0), NULL, "leds"); + } ++#endif ++ + if (register_chrdev(NSLU2BZ_MAJOR, "n2_bzm", &n2bz_fops) < 0) { + printk(KERN_DEBUG "Buzzer Major %d not available\n", NSLU2BZ_MAJOR); + return -EBUSY; @@ -638,6 +654,8 @@ + +static void __exit n2iom_exit(void) +{ ++ ++#ifndef CONFIG_LEDS + del_timer(&n2lm_rsg_timer); + del_timer(&n2lm_rsr_timer); + del_timer(&n2lm_d1_timer); @@ -645,6 +663,7 @@ + + unregister_chrdev(NSLU2LM_MAJOR, "n2lm" ); + class_device_destroy(n2lm_class, MKDEV(NSLU2LM_MAJOR, 0)); ++#endif + + unregister_chrdev(NSLU2BZ_MAJOR, "n2bz"); + class_device_destroy(n2lm_class, MKDEV(NSLU2BZ_MAJOR, 0)); @@ -652,18 +671,15 @@ + class_destroy(n2lm_class); +} + -+module_init (n2iom_init); -+module_exit (n2iom_exit); ++module_init(n2iom_init); ++module_exit(n2iom_exit); + +MODULE_AUTHOR("Karen Spearel <kas11@tampabay.rr.com>"); +MODULE_DESCRIPTION("NSLU2 I/O driver"); +MODULE_LICENSE("GPL"); -+static int debug = 7; -+module_param(debug, int, 0644); -+MODULE_PARM_DESC(debug, "Debugging enabled = 8"); ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/arch/arm/mach-ixp4xx/nslu2-setup.c 2005-09-27 20:19:14.000000000 +0200 -@@ -0,0 +1,131 @@ +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-setup.c 2005-10-06 21:29:53.000000000 +0200 +@@ -0,0 +1,134 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-setup.c + * @@ -771,8 +787,11 @@ +{ + /* This causes the box to drop the power and go dead. */ + -+ *IXP4XX_GPIO_GPOER &= ~NSLU2_PO_BM; /* enable the pwr cntl gpio */ -+ *IXP4XX_GPIO_GPOUTR |= NSLU2_PO_BM; /* do the deed */ ++ /* enable the pwr cntl gpio */ ++ gpio_line_config(NSLU2_PO_GPIO, IXP4XX_GPIO_OUT); ++ ++ /* do the deed */ ++ gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); +} + +static void __init nslu2_init(void) @@ -795,8 +814,8 @@ + .timer = &ixp4xx_timer, + .init_machine = nslu2_init, +MACHINE_END ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/nslu2-pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/arch/arm/mach-ixp4xx/nslu2-pci.c 2005-09-27 20:19:14.000000000 +0200 +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/nslu2-pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-pci.c 2005-10-06 21:29:53.000000000 +0200 @@ -0,0 +1,78 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-pci.c @@ -876,9 +895,9 @@ +} + +subsys_initcall(nslu2_pci_init); ---- linux-2.6.14-rc2/arch/arm/mach-ixp4xx/nslu2-power.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/arch/arm/mach-ixp4xx/nslu2-power.c 2005-09-28 03:03:11.000000000 +0200 -@@ -0,0 +1,98 @@ +--- linux-2.6.14-rc3/arch/arm/mach-ixp4xx/nslu2-power.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-power.c 2005-10-06 21:39:43.000000000 +0200 +@@ -0,0 +1,92 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-power.c + * @@ -902,17 +921,12 @@ +#include <linux/reboot.h> +#include <linux/interrupt.h> + -+static int nslu2_shutdown_in_progress = 0; ++#include <asm/mach-types.h> + +static irqreturn_t nslu2_power_handler(int irq, void *dev_id, struct pt_regs *regs) +{ -+ /* FIXME init will start a shutdown but the machine -+ * will actually reboot at the end -+ */ -+ -+ if (!nslu2_shutdown_in_progress++) { -+ kill_proc(1, SIGINT, 1); /* Signal init to shut down */ -+ } ++ /* Signal init to do the ctrlaltdel action */ ++ kill_proc(1, SIGINT, 1); + + return IRQ_HANDLED; +} @@ -930,7 +944,10 @@ + +static int __init nslu2_power_init(void) +{ -+ printk(KERN_INFO "NSLU2 Power/Reset\n"); ++ if (!(machine_is_nslu2())) ++ return 0; ++ ++ printk(KERN_INFO "NSLU2: power/reset\n"); + + *IXP4XX_GPIO_GPISR = 0x20400000; /* read the 2 irqs to clr */ + @@ -940,9 +957,8 @@ + gpio_line_isr_clear(NSLU2_RB_GPIO); + gpio_line_isr_clear(NSLU2_PB_GPIO); + -+ + if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler, -+ SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) { ++ SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) { + + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", + NSLU2_RB_IRQ); @@ -951,16 +967,13 @@ + } + + if (request_irq(NSLU2_PB_IRQ, &nslu2_power_handler, -+ SA_INTERRUPT, "NSLU2 power button", NULL) < 0) { ++ SA_INTERRUPT, "NSLU2 power button", NULL) < 0) { + + printk(KERN_DEBUG "Power Button IRQ %d not available\n", + NSLU2_PB_IRQ); + + return -EIO; + } -+ -+ enable_irq(NSLU2_PB_IRQ); -+ enable_irq(NSLU2_RB_IRQ); + + return 0; +} @@ -971,15 +984,15 @@ + free_irq(NSLU2_PB_IRQ, NULL); +} + -+module_init (nslu2_power_init); -+module_exit (nslu2_power_exit); ++module_init(nslu2_power_init); ++module_exit(nslu2_power_exit); + +MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); +MODULE_DESCRIPTION("NSLU2 Power/Reset driver"); +MODULE_LICENSE("GPL"); ---- linux-2.6.14-rc2/include/asm-arm/arch-ixp4xx/nslu2.h 1970-01-01 01:00:00.000000000 +0100 -+++ test6/include/asm-arm/arch-ixp4xx/nslu2.h 2005-09-27 20:39:35.000000000 +0200 -@@ -0,0 +1,59 @@ +--- linux-2.6.14-rc3/include/asm-arm/arch-ixp4xx/nslu2.h 1970-01-01 01:00:00.000000000 +0100 ++++ test14/include/asm-arm/arch-ixp4xx/nslu2.h 2005-10-06 21:29:53.000000000 +0200 +@@ -0,0 +1,96 @@ +/* + * include/asm-arm/arch-ixp4xx/nslu2.h + * @@ -1027,15 +1040,309 @@ + +/* GPIO */ + -+#define NSLU2_BZ_GPIO 4 -+#define NSLU2_PB_GPIO 5 -+#define NSLU2_PO_GPIO 8 /* power off */ -+#define NSLU2_RB_GPIO 12 ++#define NSLU2_GPIO0 0 ++#define NSLU2_GPIO1 1 ++#define NSLU2_GPIO2 2 ++#define NSLU2_GPIO3 3 ++#define NSLU2_GPIO4 4 ++#define NSLU2_GPIO5 5 ++#define NSLU2_GPIO6 6 ++#define NSLU2_GPIO7 7 ++#define NSLU2_GPIO8 8 ++#define NSLU2_GPIO9 9 ++#define NSLU2_GPIO10 10 ++#define NSLU2_GPIO11 11 ++#define NSLU2_GPIO12 12 ++#define NSLU2_GPIO13 13 ++#define NSLU2_GPIO14 14 ++#define NSLU2_GPIO15 15 ++ ++/* Buttons */ ++ ++#define NSLU2_PB_GPIO NSLU2_GPIO5 ++#define NSLU2_PO_GPIO NSLU2_GPIO8 /* power off */ ++#define NSLU2_RB_GPIO NSLU2_GPIO12 ++ ++#define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5 ++#define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12 ++ ++#define NSLU2_PB_BM (1L << NSLU2_PB_GPIO) ++#define NSLU2_PO_BM (1L << NSLU2_PO_GPIO) ++#define NSLU2_RB_BM (1L << NSLU2_RB_GPIO) ++ ++/* Buzzer */ ++ ++#define NSLU2_GPIO_BUZZ 4 ++#define NSLU2_BZ_BM (1L << NSLU2_GPIO_BUZZ) ++/* LEDs */ ++ ++#define NSLU2_LED_RED NSLU2_GPIO0 ++#define NSLU2_LED_GRN NSLU2_GPIO1 ++ ++#define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED) ++#define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN) ++ ++#define NSLU2_LED_DISK1 NSLU2_GPIO2 ++#define NSLU2_LED_DISK2 NSLU2_GPIO3 ++ ++#define NSLU2_LED_DISK1_BM (1L << NSLU2_GPIO2) ++#define NSLU2_LED_DISK2_BM (1L << NSLU2_GPIO3) ++ ++ +--- linux-2.6.14-rc3/arch/arm/Kconfig 2005-10-01 13:46:47.000000000 +0200 ++++ test14/arch/arm/Kconfig 2005-10-06 21:29:53.000000000 +0200 +@@ -389,7 +389,8 @@ + 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. +@@ -403,7 +404,7 @@ + + 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 +@@ -419,7 +420,8 @@ + + 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.14-rc3/arch/arm/mach-ixp4xx/nslu2-leds.c 1970-01-01 01:00:00.000000000 +0100 ++++ test14/arch/arm/mach-ixp4xx/nslu2-leds.c 2005-10-06 21:29:53.000000000 +0200 +@@ -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; ++ ++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, ++}; ++ ++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. On the NSLU2, the ++ * interface starts in a claimed state. XXX ++ */ ++ led_state = LED_STATE_ENABLED | LED_STATE_CLAIMED; ++ 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 ++ ++ 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) ++{ ++ 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; ++} + -+#define NSLU2_PB_IRQ 22 /* gpio5 */ -+#define NSLU2_RB_IRQ 29 /* gpio12 */ ++module_init(nslu2_leds_init); + -+#define NSLU2_BZ_BM 0x0010 /* b0000 0000 0001 0000 */ -+#define NSLU2_PB_BM 0x0020 /* b0000 0000 0010 0000 */ -+#define NSLU2_PO_BM 0x0100 /* b0000 0001 0000 0000 */ -+#define NSLU2_RB_BM 0x1000 /* b0001 0000 0000 0000 */ diff --git a/packages/linux/nslu2-kernel/2.6.14/50-nslu2-beeper.patch b/packages/linux/nslu2-kernel/2.6.14/60-nslu2-beeper.patch index cf2de14c68..1ef9b6bb37 100644 --- a/packages/linux/nslu2-kernel/2.6.14/50-nslu2-beeper.patch +++ b/packages/linux/nslu2-kernel/2.6.14/60-nslu2-beeper.patch @@ -1,6 +1,6 @@ -diff -urN linux-2.6.14-rc2/drivers/input/misc/Kconfig test6/drivers/input/misc/Kconfig ---- linux-2.6.14-rc2/drivers/input/misc/Kconfig 2005-09-17 12:42:09.000000000 +0200 -+++ test6/drivers/input/misc/Kconfig 2005-09-28 19:24:52.000000000 +0200 +diff -urN -X linux-2.6.14-rc3/Documentation/dontdiff linux-2.6.14-rc3/drivers/input/misc/Kconfig test12/drivers/input/misc/Kconfig +--- linux-2.6.14-rc3/drivers/input/misc/Kconfig 2005-09-17 12:42:09.000000000 +0200 ++++ test12/drivers/input/misc/Kconfig 2005-10-03 23:26:15.000000000 +0200 @@ -40,6 +40,18 @@ tristate "M68k Beeper support" depends on M68K @@ -20,18 +20,18 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/Kconfig test6/drivers/input/misc/K config INPUT_UINPUT tristate "User level driver support" help -diff -urN linux-2.6.14-rc2/drivers/input/misc/Makefile test6/drivers/input/misc/Makefile ---- linux-2.6.14-rc2/drivers/input/misc/Makefile 2005-09-17 12:42:09.000000000 +0200 -+++ test6/drivers/input/misc/Makefile 2005-09-28 17:01:19.000000000 +0200 +diff -urN -X linux-2.6.14-rc3/Documentation/dontdiff linux-2.6.14-rc3/drivers/input/misc/Makefile test12/drivers/input/misc/Makefile +--- linux-2.6.14-rc3/drivers/input/misc/Makefile 2005-09-17 12:42:09.000000000 +0200 ++++ test12/drivers/input/misc/Makefile 2005-10-03 23:26:15.000000000 +0200 @@ -10,3 +10,4 @@ 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 -diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/misc/nslu2spkr.c ---- linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c 1970-01-01 01:00:00.000000000 +0100 -+++ test6/drivers/input/misc/nslu2spkr.c 2005-09-28 19:23:34.000000000 +0200 -@@ -0,0 +1,110 @@ +diff -urN -X linux-2.6.14-rc3/Documentation/dontdiff linux-2.6.14-rc3/drivers/input/misc/nslu2spkr.c test12/drivers/input/misc/nslu2spkr.c +--- linux-2.6.14-rc3/drivers/input/misc/nslu2spkr.c 1970-01-01 01:00:00.000000000 +0100 ++++ test12/drivers/input/misc/nslu2spkr.c 2005-10-05 03:06:20.000000000 +0200 +@@ -0,0 +1,144 @@ +/* + * drivers/input/misc/nslu2spkr.c + * @@ -52,13 +52,17 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi + */ + +#include <linux/config.h> -+#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/init.h> +#include <linux/input.h> ++#include <linux/delay.h> + -+#include <asm/arch/nslu2.h> -+#include <asm-arm/delay.h> ++#include <asm/hardware.h> ++#include <asm/irq.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); + @@ -72,7 +76,7 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi + + switch (code) { + case SND_BELL: -+ if (value) value = 5000; ++ if (value) value = 1000; + case SND_TONE: + break; + default: @@ -80,23 +84,24 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi + } + + if (value > 20 && value < 32767) -+ count = 1193182 / value; ++ count = (NSLU2_FREQ / (value*4)) - 1; + + spin_lock_irqsave(&beep_lock, flags); + -+ *IXP4XX_GPIO_GPOER &= ~NSLU2_BZ_BM; ++ if (count) { + -+ while (count) { -+ *IXP4XX_GPIO_GPOUTR &= ~NSLU2_BZ_BM; -+ udelay(500); ++ gpio_line_config(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_OUT); ++ gpio_line_set(NSLU2_GPIO_BUZZ, IXP4XX_GPIO_LOW); + -+ *IXP4XX_GPIO_GPOUTR |= NSLU2_BZ_BM; -+ udelay(500); ++ *IXP4XX_OSRT2 = (count & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE; + -+ count--; -+ } ++ } else { + -+ *IXP4XX_GPIO_GPOER |= NSLU2_BZ_BM; ++ 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); + @@ -104,10 +109,10 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi +} + +static struct input_dev nslu2_spkr_dev = { -+ .phys = "nslu2/gpio4", ++ .phys = "ixp420/gpio4", + .name = "NSLU2 Beeper", + .evbit[0] = BIT(EV_SND), -+ .sndbit[0] = BIT(SND_BELL), ++ .sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE), + .event = nslu2_spkr_event, + .id = { + .bustype = BUS_HOST, @@ -117,14 +122,39 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi + } +}; + ++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 (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); + -+ nslu2_spkr_event(NULL, EV_SND, SND_BELL, 1); ++ /* 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 "input: %s\n", nslu2_spkr_dev.name); ++ printk(KERN_INFO "NSLU2: beeper\n"); + return 0; +} + @@ -132,8 +162,12 @@ diff -urN linux-2.6.14-rc2/drivers/input/misc/nslu2spkr.c test6/drivers/input/mi +{ + 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); diff --git a/packages/linux/nslu2-kernel/2.6.14/defconfig b/packages/linux/nslu2-kernel/2.6.14/defconfig index 553eb6c48e..7b1dd207a5 100644 --- a/packages/linux/nslu2-kernel/2.6.14/defconfig +++ b/packages/linux/nslu2-kernel/2.6.14/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.14-rc2 -# Sat Sep 24 16:05:23 2005 +# Linux kernel version: 2.6.14-rc3 +# Wed Oct 5 20:33:54 2005 # CONFIG_ARM=y CONFIG_MMU=y @@ -121,7 +121,7 @@ CONFIG_CPU_TLB_V4WBI=y # Processor Features # CONFIG_ARM_THUMB=y -CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CPU_BIG_ENDIAN is not set CONFIG_XSCALE_PMU=y CONFIG_DMABOUNCE=y @@ -168,6 +168,7 @@ CONFIG_CMDLINE="root=/dev/mtdblock4 rw rootfstype=jffs2 mem=32M@0x00000000 init= # At least one emulation must be selected # CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set # @@ -214,8 +215,103 @@ CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_BIC=y -# CONFIG_IPV6 is not set -# CONFIG_NETFILTER is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_IPV6_TUNNEL=m +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y +# CONFIG_NETFILTER_NETLINK is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +# CONFIG_IP_NF_CT_ACCT is not set +# CONFIG_IP_NF_CONNTRACK_MARK is not set +# CONFIG_IP_NF_CONNTRACK_EVENTS is not set +CONFIG_IP_NF_CT_PROTO_SCTP=m +CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m +# CONFIG_IP_NF_NETBIOS_NS is not set +CONFIG_IP_NF_TFTP=m +CONFIG_IP_NF_AMANDA=m +# CONFIG_IP_NF_PPTP is not set +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_MAC=m +CONFIG_IP_NF_MATCH_PKTTYPE=m +CONFIG_IP_NF_MATCH_MARK=m +CONFIG_IP_NF_MATCH_MULTIPORT=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_DSCP=m +CONFIG_IP_NF_MATCH_AH_ESP=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_TCPMSS=m +CONFIG_IP_NF_MATCH_HELPER=m +CONFIG_IP_NF_MATCH_STATE=m +CONFIG_IP_NF_MATCH_CONNTRACK=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_PHYSDEV=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_REALM=m +# CONFIG_IP_NF_MATCH_SCTP is not set +# CONFIG_IP_NF_MATCH_DCCP is not set +CONFIG_IP_NF_MATCH_COMMENT=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_STRING is not set +CONFIG_IP_NF_FILTER=m +# CONFIG_IP_NF_TARGET_REJECT is not set +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_TARGET_TCPMSS=m +# CONFIG_IP_NF_TARGET_NFQUEUE is not set +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m +CONFIG_IP_NF_NAT_FTP=m +CONFIG_IP_NF_NAT_TFTP=m +CONFIG_IP_NF_NAT_AMANDA=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_DSCP=m +CONFIG_IP_NF_TARGET_MARK=m +CONFIG_IP_NF_TARGET_CLASSIFY=m +# CONFIG_IP_NF_TARGET_TTL is not set +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP6_NF_TARGET_NFQUEUE is not set + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set # # DCCP Configuration (EXPERIMENTAL) @@ -227,7 +323,7 @@ CONFIG_TCP_CONG_BIC=y # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set -# CONFIG_BRIDGE is not set +CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m # CONFIG_DECNET is not set CONFIG_LLC=m @@ -245,7 +341,7 @@ CONFIG_IPDDP_DECAP=y # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_SCHED is not set -# CONFIG_NET_CLS_ROUTE is not set +CONFIG_NET_CLS_ROUTE=y # # Network testing @@ -269,7 +365,7 @@ CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HCIUSB=m CONFIG_BT_HCIUSB_SCO=y # CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set +CONFIG_BT_HCIBCM203X=m # CONFIG_BT_HCIBPA10X is not set # CONFIG_BT_HCIBFUSB is not set # CONFIG_BT_HCIVHCI is not set @@ -284,7 +380,7 @@ CONFIG_BT_HCIUSB_SCO=y # CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y -# CONFIG_FW_LOADER is not set +CONFIG_FW_LOADER=m # # Memory Technology Devices (MTD) @@ -297,7 +393,7 @@ CONFIG_MTD_REDBOOT_PARTS=y CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 # CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_CMDLINE_PARTS is not set # CONFIG_MTD_AFS_PARTS is not set # @@ -315,10 +411,14 @@ CONFIG_MTD_BLOCK=y CONFIG_MTD_CFI=y # CONFIG_MTD_JEDECPROBE is not set CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set @@ -326,6 +426,7 @@ CONFIG_MTD_CFI_I1=y CONFIG_MTD_CFI_I2=y # CONFIG_MTD_CFI_I4 is not set # CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set CONFIG_MTD_CFI_INTELEXT=y # CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_CFI_STAA is not set @@ -432,7 +533,7 @@ CONFIG_BLK_DEV_SD=y # # Some SCSI devices (e.g. CD jukebox) support multiple LUNs # -# CONFIG_SCSI_MULTI_LUN is not set +CONFIG_SCSI_MULTI_LUN=y # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set @@ -486,7 +587,22 @@ CONFIG_SCSI_QLA2XXX=y # # Multi-device support (RAID and LVM) # -# CONFIG_MD is not set +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID5=m +CONFIG_MD_RAID6=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_CRYPT is not set +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set # # Fusion MPT device support @@ -494,6 +610,7 @@ CONFIG_SCSI_QLA2XXX=y # CONFIG_FUSION is not set # CONFIG_FUSION_SPI is not set # CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set # # IEEE 1394 (FireWire) support @@ -531,6 +648,7 @@ CONFIG_NET_ETHERNET=y CONFIG_MII=y # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_SMC91X is not set # CONFIG_DM9000 is not set @@ -618,7 +736,14 @@ CONFIG_NET_WIRELESS=y # CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -# CONFIG_PPP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set # CONFIG_SLIP is not set # CONFIG_NET_FC is not set # CONFIG_SHAPER is not set @@ -636,7 +761,25 @@ CONFIG_NET_POLL_CONTROLLER=y # # Input device support # -# CONFIG_INPUT is not set +CONFIG_INPUT=m + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set # # Hardware I/O ports @@ -821,12 +964,56 @@ CONFIG_HWMON=y # # Multimedia devices # -# CONFIG_VIDEO_DEV is not set +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# + +# +# Video Adapters +# +CONFIG_VIDEO_BT848=m +# CONFIG_VIDEO_SAA6588 is not set +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA_USB=m +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +CONFIG_TUNER_3036=m +CONFIG_VIDEO_STRADIS=m +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_DPC=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_OVCAMCHIP=m + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set # # Digital Video Broadcasting Devices # # CONFIG_DVB is not set +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_VIDEOBUF=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_BUF=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_TVEEPROM=m # # Graphics support @@ -836,7 +1023,90 @@ CONFIG_HWMON=y # # Sound # -# CONFIG_SOUND is not set +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +# CONFIG_SND_RTCTIMER is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_HDA_INTEL is not set + +# +# ALSA ARM devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set # # USB support @@ -870,11 +1140,12 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # # USB Device Class drivers # +# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set # # USB Bluetooth TTY can only be used with disabled Bluetooth subsystem # -# CONFIG_USB_ACM is not set +CONFIG_USB_ACM=m CONFIG_USB_PRINTER=m # @@ -889,15 +1160,34 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_SDDR09 is not set # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set # # USB Input Devices # -# CONFIG_USB_HID is not set +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y # # USB HID Boot Protocol drivers # +CONFIG_USB_KBD=m +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set +# CONFIG_USB_ITMTOUCH is not set +# CONFIG_USB_EGALAX is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set # # USB Imaging devices @@ -909,10 +1199,16 @@ CONFIG_USB_STORAGE=y # USB Multimedia devices # # CONFIG_USB_DABUSB is not set - -# -# Video4Linux support is needed for USB Multimedia device support -# +# CONFIG_USB_VICAM is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_STV680 is not set +# CONFIG_USB_W9968CF is not set +# CONFIG_USB_PWC is not set # # USB Network Adapters |