diff options
author | Paul Sokolovsky <pmiscml@gmail.com> | 2007-12-07 21:19:08 +0000 |
---|---|---|
committer | Paul Sokolovsky <pmiscml@gmail.com> | 2007-12-07 21:19:08 +0000 |
commit | 8257f57494600b754b8cd03b5da5649b0aa87616 (patch) | |
tree | e49e8002045e67a43352034f51ccf85d3a58c8c2 /packages/linux | |
parent | 89ef004b64d632304d7c159968262387f449844b (diff) | |
parent | fa58164f44e4994d187acc6bd42584860dcb3463 (diff) |
merge of '387fe9ed0ed82ea68e96a75f8876fe0807a070cd'
and 'd3ec22c2f56bfe13ae582b6c4495224757d4a0c7'
Diffstat (limited to 'packages/linux')
-rw-r--r-- | packages/linux/linux-2.6.23/leds-cpu-activity-powerpc.patch | 46 | ||||
-rw-r--r-- | packages/linux/linux-2.6.23/leds-cpu-activity.patch | 554 | ||||
-rw-r--r-- | packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig | 3 | ||||
-rw-r--r-- | packages/linux/linux-efika-2.6.20/defconfig | 11 | ||||
-rw-r--r-- | packages/linux/linux-efika_2.6.20.20.bb | 2 | ||||
-rw-r--r-- | packages/linux/linux-rp-2.6.23/pxa2xx_udc_support_inverse_vbus.patch | 120 | ||||
-rw-r--r-- | packages/linux/linux-rp-2.6.23/tosa_udc_use_gpio_vbus.patch | 99 | ||||
-rw-r--r-- | packages/linux/linux-rp_2.6.23.bb | 4 |
8 files changed, 834 insertions, 5 deletions
diff --git a/packages/linux/linux-2.6.23/leds-cpu-activity-powerpc.patch b/packages/linux/linux-2.6.23/leds-cpu-activity-powerpc.patch new file mode 100644 index 0000000000..b377355815 --- /dev/null +++ b/packages/linux/linux-2.6.23/leds-cpu-activity-powerpc.patch @@ -0,0 +1,46 @@ +Index: linux-2.6.23/arch/powerpc/kernel/idle.c +=================================================================== +--- linux-2.6.23.orig/arch/powerpc/kernel/idle.c 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/arch/powerpc/kernel/idle.c 2007-12-05 11:34:39.000000000 +0100 +@@ -19,6 +19,7 @@ + * 2 of the License, or (at your option) any later version. + */ + ++#include <linux/leds.h> + #include <linux/sched.h> + #include <linux/kernel.h> + #include <linux/smp.h> +@@ -50,6 +51,12 @@ + __setup("powersave=off", powersave_off); + + /* ++ * CPU activity indicator. ++ */ ++void (*leds_idle)(int is_idle); ++EXPORT_SYMBOL(leds_idle); ++ ++/* + * The body of the idle task. + */ + void cpu_idle(void) +@@ -59,6 +66,8 @@ + + set_thread_flag(TIF_POLLING_NRFLAG); + while (1) { ++ if (leds_idle) ++ leds_idle(1); + while (!need_resched() && !cpu_should_die()) { + ppc64_runlatch_off(); + +@@ -92,8 +101,11 @@ + ppc64_runlatch_on(); + if (cpu_should_die()) + cpu_die(); ++ if (leds_idle) ++ leds_idle(0); + preempt_enable_no_resched(); + schedule(); ++ + preempt_disable(); + } + } diff --git a/packages/linux/linux-2.6.23/leds-cpu-activity.patch b/packages/linux/linux-2.6.23/leds-cpu-activity.patch new file mode 100644 index 0000000000..ebdf1abd81 --- /dev/null +++ b/packages/linux/linux-2.6.23/leds-cpu-activity.patch @@ -0,0 +1,554 @@ +Index: linux-2.6.23/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/leds/Kconfig 2007-12-05 12:00:28.000000000 +0100 ++++ linux-2.6.23/drivers/leds/Kconfig 2007-12-05 13:46:39.000000000 +0100 +@@ -123,6 +123,15 @@ + This allows LEDs to be controlled by a programmable timer + via sysfs. If unsure, say Y. + ++config LEDS_TRIGGER_CPU_ACTIVITY ++ tristate "LED CPU Activity Trigger" ++ depends on LEDS_TRIGGERS ++ help ++ This allows LEDs to be set to show cpu activity via sysfs. ++ The LED will blink when the cpu is active and stay steady ++ (on or off according to the trigger selected) when idle. ++ Platform support is needed for this to work. If unsure, say Y. ++ + config LEDS_TRIGGER_IDE_DISK + bool "LED IDE Disk Trigger" + depends on LEDS_TRIGGERS && BLK_DEV_IDEDISK +Index: linux-2.6.23/drivers/leds/ledtrig-cpu.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/leds/ledtrig-cpu.c 2007-12-05 12:00:28.000000000 +0100 +@@ -0,0 +1,502 @@ ++/* ++ * LEDs CPU activity trigger ++ * ++ * Author: John Bowler <jbowler@acm.org> ++ * ++ * Copyright (c) 2006 John Bowler ++ * ++ * Permission is hereby granted, free of charge, to any ++ * person obtaining a copy of this software and associated ++ * documentation files (the "Software"), to deal in the ++ * Software without restriction, including without ++ * limitation the rights to use, copy, modify, merge, ++ * publish, distribute, sublicense, and/or sell copies of ++ * the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the ++ * following conditions: ++ * ++ * The above copyright notice and this permission notice ++ * shall be included in all copies or substantial portions ++ * of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ++ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED ++ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A ++ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT ++ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ++ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ */ ++ ++#include <linux/ctype.h> ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/init.h> ++#include <linux/spinlock.h> ++#include <linux/timer.h> ++#include <linux/device.h> ++ ++#include <linux/leds.h> ++#include "leds.h" ++ ++//#include <linux/list.h> ++//#include <linux/sysdev.h> ++ ++ ++/* ++ * To simplify this the LED state is given for each case of ++ * CPU state - idle or active. The LED can be: ++ * ++ * off ++ * flash - slow for idle, fast (flicker) for active ++ * on ++ * ++ * This gives two useless states - off/off and on/on ++ */ ++typedef enum cpu_trigger_led_state { ++ cpu_led_off, ++ cpu_led_flash, ++ cpu_led_on, ++ cpu_led_invalid ++} cpu_trigger_led_state; ++ ++static const char *const cpu_trigger_names[] = { ++ "off", ++ "flash", ++ "on", ++ "invalid" ++}; ++ ++/* Forward declaration - this is called back when an LED property ++ * is changed. ++ */ ++static void leds_cpu_trigger_state_change(void); ++ ++/* ++ * These constants define the actual mark/space of the flashing ++ * in jiffies. msecs_to_jiffies rounds up and is compile time ++ * evaluable for constant arguments. Writing the ?: stuff below ++ * this way ensures the compiler doesn't think it needs to ++ * compile in the math of msecs_to_jiffies. ++ * ++ * These values have been determined by experiment to work well ++ * for the ready/status LED on a LinkSys NSLU2 (light piped) and ++ * for the user LED on a Loft (Gateway Avila variant) board where ++ * the LED was directly visible. Light Output Varies Everywhere. ++ */ ++#define LEDS_CPU_ACTIVE_MARK msecs_to_jiffies(40) ++#define LEDS_CPU_IDLE_MARK msecs_to_jiffies(800) ++#define LEDS_CPU_ACTIVE_SPACE msecs_to_jiffies(60) ++#define LEDS_CPU_IDLE_SPACE msecs_to_jiffies(800) ++ ++ ++/* ++ * Individual LEDs ------------------------------------------------------------ ++ */ ++struct cpu_trigger_data { ++ cpu_trigger_led_state active; /* Behaviour when the CPU is active. */ ++ cpu_trigger_led_state idle; /* Behaviour when the CPU is idle. */ ++}; ++ ++/* ++ * LED state change - called when the state of a single LED might ++ * have changed. Returns true if the LED is blinking. The argument ++ * is the blink state - the brightness of the blinking LED. ++ */ ++static int leds_cpu_trigger_led_state_change(struct led_classdev *led, ++ int is_active, enum led_brightness brightness) ++{ ++ int is_blinking = 0; ++ ++ struct cpu_trigger_data *data = led->trigger_data; ++ ++ /* Find the new brightness for the LED, if the LED is ++ * set to flash then the brightness passed in is the ++ * required value. ++ */ ++ if (likely(data != 0)) ++ switch (is_active ? data->active : data->idle) { ++ case cpu_led_off: brightness = LED_OFF; break; ++ case cpu_led_flash: is_blinking = 1; break; ++ case cpu_led_on: brightness = LED_FULL; break; ++ } ++ else ++ brightness = is_active ? LED_FULL : LED_OFF; ++ ++ led_set_brightness(led, brightness); ++ ++ return is_blinking; ++} ++ ++/* ++ * sysfs properties, the property is output at an list of the ++ * values with the current setting enclosed in [] ++ */ ++static ssize_t leds_cpu_trigger_show_prop(struct device *dev, ++ struct device_attribute *attr, char *buf, size_t where) ++{ ++ struct led_classdev *led = dev_get_drvdata(dev); ++ cpu_trigger_led_state item = cpu_led_invalid, i; ++ char *next; ++ ++ if (likely(led->trigger_data != 0)) ++ item = *(const cpu_trigger_led_state*)( ++ led->trigger_data + where); ++ ++ for (i=0, next=buf; i<cpu_led_invalid; ++i) { ++ const char *name = cpu_trigger_names[i]; ++ size_t len = strlen(name); ++ ++ if (i == item) ++ *next++ = '['; ++ memcpy(next, name, len); ++ next += len; ++ if (i == item) ++ *next++ = ']'; ++ *next++ = ' '; ++ } ++ ++ next[-1] = '\n'; ++ *next++ = 0; ++ ++ return next - buf; ++} ++ ++static ssize_t leds_cpu_trigger_show_active(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ return leds_cpu_trigger_show_prop(dev, attr, buf, ++ offsetof(struct cpu_trigger_data, active)); ++} ++ ++static ssize_t leds_cpu_trigger_show_idle(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ return leds_cpu_trigger_show_prop(dev, attr, buf, ++ offsetof(struct cpu_trigger_data, idle)); ++} ++ ++/* ++ * Any matching leading substring selects a property - so "onoffonoff" ++ * sets the property to off. ++ */ ++static ssize_t leds_cpu_trigger_store_prop(struct device *dev, ++ struct device_attribute *attr, const char *buf, ++ size_t size, size_t where) ++{ ++ size_t rc = 0; ++ cpu_trigger_led_state value = 0/*sic*/; ++ struct led_classdev *led; ++ ++ /* ignore space characters before the value. */ ++ while (rc < size && isspace(buf[rc])) ++ ++rc; ++ if (rc >= size) ++ return rc; ++ ++ /* look for a simple match against the trigger name, case ++ * sensitive. ++ */ ++ do { ++ const char *name = cpu_trigger_names[value]; ++ size_t len = strlen(name); ++ if (len <= size && memcmp(buf+rc, name, len) == 0) { ++ rc = len; ++ break; ++ } ++ if (++value >= cpu_led_invalid) ++ return -EINVAL; ++ } while (1); ++ ++ led = dev_get_drvdata(dev); ++ if (likely(led->trigger_data != 0)) ++ *(cpu_trigger_led_state*)( ++ led->trigger_data + where) = value; ++ ++ return rc; ++} ++ ++static ssize_t leds_cpu_trigger_store_active(struct device *dev, ++ struct device_attribute *attr, const char *buf, size_t size) ++{ ++ ssize_t rc = leds_cpu_trigger_store_prop(dev, attr, buf, size, ++ offsetof(struct cpu_trigger_data, active)); ++ /* ++ * At least one CPU must be active (otherwise who is doing this?) ++ * Call down into the global state below to cause an update ++ * to happen now. ++ */ ++ leds_cpu_trigger_state_change(); ++ return rc; ++} ++ ++static ssize_t leds_cpu_trigger_store_idle(struct device *dev, ++ struct device_attribute *attr, const char *buf, size_t size) ++{ ++ return leds_cpu_trigger_store_prop(dev, attr, buf, size, ++ offsetof(struct cpu_trigger_data, idle)); ++} ++ ++static DEVICE_ATTR(active, 0644, leds_cpu_trigger_show_active, ++ leds_cpu_trigger_store_active); ++ ++static DEVICE_ATTR(idle, 0644, leds_cpu_trigger_show_idle, ++ leds_cpu_trigger_store_idle); ++ ++/* ++ * Activate and deactivate are called on individual LEDs when the ++ * LED trigger property is changed. ++ */ ++static void leds_cpu_trigger_activate(struct led_classdev *led) ++{ ++ /* ++ * The initial setting of the trigger is simple CPU activity ++ * with the LED off for idle and on for active. Consequently ++ * there is no need to mess with the global state initially, ++ * we know the CPU is active at this moment! ++ */ ++ int rc; ++ struct cpu_trigger_data *data = kmalloc(sizeof *data, GFP_KERNEL); ++ if (unlikely(data == 0)) ++ return; ++ ++ data->active = cpu_led_on; ++ data->idle = cpu_led_off; ++ led->trigger_data = data; ++ ++ rc = device_create_file(led->dev, &dev_attr_active); ++ if (rc) ++ goto err_out; ++ rc = device_create_file(led->dev, &dev_attr_idle); ++ if (rc) ++ goto err_out_active; ++ ++ led_set_brightness(led, LED_FULL); ++ return; ++ ++err_out_active: ++ device_remove_file(led->dev, &dev_attr_active); ++err_out: ++ led->trigger_data = NULL; ++ kfree(data); ++} ++ ++static void leds_cpu_trigger_deactivate(struct led_classdev *led) ++{ ++ struct cpu_trigger_data *data = led->trigger_data; ++ if (likely(data != 0)) { ++ led_set_brightness(led, LED_OFF); ++ ++ device_remove_file(led->dev, &dev_attr_idle); ++ device_remove_file(led->dev, &dev_attr_active); ++ ++ led->trigger_data = 0; ++ kfree(data); ++ } ++} ++ ++ ++/* ++ * Global state -------------------------------------------------------------- ++ * ++ * This is global because the CPU state is global and we only need one timer to ++ * do this stuff. ++ */ ++typedef struct leds_cpu_trigger_data { ++ struct led_trigger trigger; /* the lock in here protects everything */ ++ struct timer_list timer; ++ unsigned long last_active_time; /* record of last jiffies */ ++ unsigned long last_idle_time; /* record of last jiffies */ ++ int count_active; /* number of active CPUs */ ++} leds_cpu_trigger_data; ++ ++/* ++ * Mark state - uses the current time (jiffies) to work out ++ * whether this is a mark or space. ++ */ ++static int leds_cpu_trigger_mark(struct leds_cpu_trigger_data *data, ++ unsigned long now) { ++ if (data->count_active > 0) { ++ unsigned long elapsed = now - data->last_active_time; ++ elapsed %= LEDS_CPU_ACTIVE_SPACE + LEDS_CPU_ACTIVE_MARK; ++ data->last_active_time = now - elapsed; ++ return elapsed > LEDS_CPU_ACTIVE_SPACE; ++ } else { ++ unsigned long elapsed = now - data->last_idle_time; ++ elapsed %= LEDS_CPU_IDLE_SPACE + LEDS_CPU_IDLE_MARK; ++ data->last_idle_time = now - elapsed; ++ return elapsed > LEDS_CPU_IDLE_SPACE; ++ } ++} ++ ++ ++/* ++ * State change - given information about the nature of the ++ * (possible) state change call up to each LED to adjust its ++ * state. Returns true if any LED is blinking. The lock ++ * must be held (a read lock is adequate). ++ */ ++static int leds_cpu_trigger_scan_leds(struct leds_cpu_trigger_data *data, ++ unsigned long now) ++{ ++ int blinking = 0; ++ const int active = data->count_active > 0; ++ const enum led_brightness brightness = ++ leds_cpu_trigger_mark(data, now) ? LED_FULL : LED_OFF; ++ struct list_head *entry; ++ ++ list_for_each(entry, &data->trigger.led_cdevs) { ++ struct led_classdev *led = ++ list_entry(entry, struct led_classdev, trig_list); ++ ++ blinking |= leds_cpu_trigger_led_state_change(led, ++ active, brightness); ++ } ++ ++ return blinking; ++} ++ ++/* ++ * Set the timer correctly according to the current state, the lock ++ * must be held for write. ++ */ ++static void leds_cpu_trigger_set_timer(struct leds_cpu_trigger_data *state, ++ unsigned long now) ++{ ++ unsigned long next; ++ if (state->count_active > 0) { ++ next = state->last_active_time; ++ if (now - next > LEDS_CPU_ACTIVE_SPACE) ++ next += LEDS_CPU_ACTIVE_MARK; ++ next += LEDS_CPU_ACTIVE_SPACE; ++ } else { ++ next = state->last_idle_time; ++ if (now - next > LEDS_CPU_IDLE_SPACE) ++ next += LEDS_CPU_IDLE_MARK; ++ next += LEDS_CPU_IDLE_SPACE; ++ } ++ mod_timer(&state->timer, next); ++} ++ ++/* ++ * The timer callback if the LED is currently flashing, the callback ++ * calls the state change function and, if that returns true, meaning ++ * that at least one LED is still blinking, the timer is restarted ++ * with the correct timeout. ++ */ ++static void leds_cpu_trigger_timer_callback(unsigned long data) ++{ ++ struct leds_cpu_trigger_data *state = ++ (struct leds_cpu_trigger_data *)data; ++ ++ write_lock(&state->trigger.leddev_list_lock); ++ { ++ unsigned long now = jiffies; ++ ++ /* If at least one LED is set to flash; set the timer ++ * again (this won't reset the timer set within the ++ * idle loop). ++ */ ++ if (leds_cpu_trigger_scan_leds(state, now)) ++ leds_cpu_trigger_set_timer(state, now); ++ } ++ write_unlock(&state->trigger.leddev_list_lock); ++} ++ ++ ++/* ++ * There is one global control structure, one timer and one set ++ * of state for active CPUs shared across all the LEDs. Individual ++ * LEDs say how this state to be handled. It is currently *not* ++ * possible to show per-cpu activity on individual LEDs, the code ++ * maintains a count of active CPUs and the state is only 'idle' ++ * if all CPUs are idle. ++ */ ++static struct leds_cpu_trigger_data leds_cpu_trigger = { ++ .trigger = { ++ .name = "cpu", ++ .activate = leds_cpu_trigger_activate, ++ .deactivate = leds_cpu_trigger_deactivate, ++ } , ++ .timer = TIMER_INITIALIZER(leds_cpu_trigger_timer_callback, 0, ++ (unsigned long)&leds_cpu_trigger), ++ .last_active_time = 0, ++ .last_idle_time = 0, ++ .count_active = 0, ++}; ++ ++/* ++ * State change - callback from an individual LED on a property change which ++ * might require a redisplay. ++ */ ++static void leds_cpu_trigger_state_change() { ++ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock); ++ { ++ unsigned long now = jiffies; ++ ++ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now) && ++ !timer_pending(&leds_cpu_trigger.timer)) ++ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now); ++ } ++ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock); ++} ++ ++/* ++ * Called from every CPU at the start and end of the idle loop. ++ * The active count is initially 0, even though CPUs are running, ++ * so the code below must check for the resultant underflow. ++ * ++ * If the idle behaviour is 'flash' then when the timer times out ++ * it will take the CPU out of idle, set the active state (which ++ * may also be flash), drop back into idle and reset the timer to ++ * the idle timeout... ++ */ ++static void leds_cpu_trigger_idle(int is_idle) ++{ ++ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock); ++ if ((is_idle && leds_cpu_trigger.count_active > 0 && ++ --leds_cpu_trigger.count_active == 0) || ++ (!is_idle && leds_cpu_trigger.count_active < num_online_cpus() && ++ ++leds_cpu_trigger.count_active == 1)) { ++ unsigned long now = jiffies; ++ ++ /* State change - the system just became idle or active, ++ * call the del_timer first in an attempt to minimise ++ * getting a timer interrupt which will take us unnecessarily ++ * out of idle (this doesn't matter). ++ */ ++ del_timer(&leds_cpu_trigger.timer); ++ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now)) ++ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now); ++ } ++ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock); ++} ++ ++/* ++ * Module init and exit - register the trigger, then store ++ * the idle callback in the arch-specific global. For this ++ * module to link (into the kernel) or load (into a running ++ * kernel) the architecture must define the leds_idle global. ++ */ ++static int __init leds_cpu_trigger_init(void) ++{ ++ int rc = led_trigger_register(&leds_cpu_trigger.trigger); ++ leds_idle = leds_cpu_trigger_idle; ++ return rc; ++} ++module_init(leds_cpu_trigger_init); ++ ++static void __exit leds_cpu_trigger_exit(void) ++{ ++ leds_idle = 0; ++ del_timer_sync(&leds_cpu_trigger.timer); ++ led_trigger_unregister(&leds_cpu_trigger.trigger); ++} ++module_exit(leds_cpu_trigger_exit); ++ ++MODULE_AUTHOR("John Bowler <jbowler@acm.org>"); ++MODULE_DESCRIPTION("CPU activity LED trigger"); ++MODULE_LICENSE("Dual MIT/GPL"); +Index: linux-2.6.23/drivers/leds/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/leds/Makefile 2007-12-05 12:00:28.000000000 +0100 ++++ linux-2.6.23/drivers/leds/Makefile 2007-12-05 12:00:28.000000000 +0100 +@@ -23,3 +23,4 @@ + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o + obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o + obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o ++obj-$(CONFIG_LEDS_TRIGGER_CPU_ACTIVITY) += ledtrig-cpu.o +Index: linux-2.6.23/include/linux/leds.h +=================================================================== +--- linux-2.6.23.orig/include/linux/leds.h 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/include/linux/leds.h 2007-12-05 12:00:28.000000000 +0100 +@@ -123,4 +123,13 @@ + }; + + ++/* ++ * CPU activity indication. ++ */ ++/* Idle callback - call with is_idle==1 at the start of the idle loop ++ * and with is_idle==0 at the end. This symbol must be defined by ++ * the arch core to be able to use LEDS_TRIGGER_CPU_ACTIVITY ++ */ ++extern void (*leds_idle)(int is_idle); ++ + #endif /* __LINUX_LEDS_H_INCLUDED */ diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig index 6ac9151be6..2cd1cb3b1a 100644 --- a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.23 -# Wed Nov 28 23:32:31 2007 +# Wed Dec 5 10:34:37 2007 # # CONFIG_PPC64 is not set @@ -1467,6 +1467,7 @@ CONFIG_LEDS_MPC8313E_RDB=m CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=m # CONFIG_INFINIBAND is not set # CONFIG_EDAC is not set CONFIG_RTC_LIB=y diff --git a/packages/linux/linux-efika-2.6.20/defconfig b/packages/linux/linux-efika-2.6.20/defconfig index c77a8d4048..2f532c122f 100644 --- a/packages/linux/linux-efika-2.6.20/defconfig +++ b/packages/linux/linux-efika-2.6.20/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.20.20-cfs-v22 -# Wed Nov 28 22:31:42 2007 +# Fri Dec 7 20:14:16 2007 # # CONFIG_PPC64 is not set CONFIG_PPC32=y @@ -1008,7 +1008,14 @@ CONFIG_GEN_RTC=y # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set CONFIG_AGP=m -# CONFIG_DRM is not set +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m +CONFIG_DRM_VIA=m +CONFIG_DRM_SAVAGE=m # CONFIG_RAW_DRIVER is not set # diff --git a/packages/linux/linux-efika_2.6.20.20.bb b/packages/linux/linux-efika_2.6.20.20.bb index c59508cdf3..630e5a6274 100644 --- a/packages/linux/linux-efika_2.6.20.20.bb +++ b/packages/linux/linux-efika_2.6.20.20.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Linux Kernel for the EFIKA dev platform" SECTION = "kernel" LICENSE = "GPL" -PR = "r1" +PR = "r2" COMPATIBLE_MACHINE = "efika" diff --git a/packages/linux/linux-rp-2.6.23/pxa2xx_udc_support_inverse_vbus.patch b/packages/linux/linux-rp-2.6.23/pxa2xx_udc_support_inverse_vbus.patch new file mode 100644 index 0000000000..72211aace2 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/pxa2xx_udc_support_inverse_vbus.patch @@ -0,0 +1,120 @@ +From dbaryshkov@gmail.com Fri Dec 7 00:05:32 2007 +Return-Path: <SRS0=7TBh+psr=Q5=lists.arm.linux.org.uk=linux-arm-kernel-bounces+openembedded=haerwu.biz@haerwu.biz> +X-Spam-Checker-Version: SpamAssassin 3.1.7 (2006-10-05) on 3080.s.tld.pl +X-Spam-Level: +X-Spam-Status: No, score=1.0 required=5.0 tests=BAYES_40,SPF_FAIL + autolearn=disabled version=3.1.7 +Delivered-To: haerwu.biz-marcin@haerwu.biz +Received: (qmail 3062 invoked by uid 813007); 6 Dec 2007 23:44:39 -0000 +Delivered-To: haerwu.biz-openembedded@haerwu.biz +Received: (qmail 3048 invoked by uid 813007); 6 Dec 2007 23:44:39 -0000 +X-clamdmail: clamdmail 0.18a +Received: from zeniv.linux.org.uk (195.92.253.2) + by smtp.host4.kei.pl with SMTP; 6 Dec 2007 23:44:38 -0000 +Received: from [2002:4e20:1eda:1:201:3dff:fe00:156] (helo=lists.arm.linux.org.uk) + by ZenIV.linux.org.uk with esmtpsa (Exim 4.63 #1 (Red Hat Linux)) + id 1J0Pts-0004dN-KF; Thu, 06 Dec 2007 23:13:03 +0000 +Received: from localhost ([127.0.0.1] helo=lists.arm.linux.org.uk) + by lists.arm.linux.org.uk with esmtp (Exim 4.50) + id 1J0Pr7-0000cF-OJ; Thu, 06 Dec 2007 23:10:10 +0000 +Received: from mu-out-0910.google.com ([209.85.134.185]) + by lists.arm.linux.org.uk with esmtp (Exim 4.50) id 1J0Pn3-0000bt-0E + for linux-arm-kernel@lists.arm.linux.org.uk; + Thu, 06 Dec 2007 23:06:40 +0000 +Received: by mu-out-0910.google.com with SMTP id i2so13552mue + for <linux-arm-kernel@lists.arm.linux.org.uk>; + Thu, 06 Dec 2007 15:05:40 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; + h=domainkey-signature:received:received:date:to:subject:message-id:mime-version:content-type:content-disposition:user-agent:from; + bh=cfa4MUFsOjAsSKDax5Yk97Hu762FByFSAfUQi5KP2cc=; + b=aA5uLmMsFBL6uxIQjxwtR4vD/2zBfGHiN/xepdZSggrNmYu0DJ75Q8JsSqzU/z7Vh9hALIiHjCR3WeqlJqZKCBMSrANzpFN4KVunUajamxn85btZMYysQ3YuZI+DUTYPovoZhuPjmT+SUT7RFpOhwKXbs7z9J8DCgodOVS+YwEY= +DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; + h=date:to:subject:message-id:mime-version:content-type:content-disposition:user-agent:from; + b=oWC1DMK+88t4jXf/5sY2gvSAjKuYypZhUflAHvCNbKYn2iFzpEFoFfjcUgV+lArS06OuT/R4v4Cp87JGK1NLA/uei3fhFZwNsoHcqWkgdsOqp5dSWMZFWCCrO4ODJahoFlnsxoS6OiceJM6EKX8u3RTELEVZEnVl3H2HWM4JJh4= +Received: by 10.82.107.15 with SMTP id f15mr9802870buc.1196982339522; + Thu, 06 Dec 2007 15:05:39 -0800 (PST) +Received: from doriath.ww600.siemens.net ( [91.122.9.34]) + by mx.google.com with ESMTPS id 5sm15474nfv.2007.12.06.15.05.37 + (version=SSLv3 cipher=OTHER); Thu, 06 Dec 2007 15:05:38 -0800 (PST) +Date: Fri, 7 Dec 2007 02:05:32 +0300 +To: linux-arm-kernel@lists.arm.linux.org.uk +Message-ID: <20071206230532.GA13332@doriath.ww600.siemens.net> +MIME-Version: 1.0 +Content-Type: text/plain; + charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.5.17 (2007-11-01) +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Subject: [PATCH 1/2] pxa2xx_udc_support_inverse_vbus.patch +X-BeenThere: linux-arm-kernel@lists.arm.linux.org.uk +X-Mailman-Version: 2.1.5 +Precedence: list +List-Id: ARM Linux kernel discussions <linux-arm-kernel.lists.arm.linux.org.uk> +List-Unsubscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>, + <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=unsubscribe> +List-Archive: <http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel> +List-Post: <mailto:linux-arm-kernel@lists.arm.linux.org.uk> +List-Help: <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=help> +List-Subscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>, + <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=subscribe> +Sender: linux-arm-kernel-bounces@lists.arm.linux.org.uk +Errors-To: linux-arm-kernel-bounces+openembedded=haerwu.biz+openembedded=haerwu.biz@lists.arm.linux.org.uk +X-Length: 5827 +Status: R +X-Status: NC +X-KMail-EncryptionState: +X-KMail-SignatureState: +X-KMail-MDN-Sent: + +Some pxa-based boards (like e.g. tosa) have the VBUS-detection gpio pin +inverted. I.e. it's low when VBUS is connected and high when +disconnected. Allow specifiing whether gpio_vbus value is inverted. + +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> + +Index: linux-test/drivers/usb/gadget/pxa2xx_udc.c +=================================================================== +--- linux-test.orig/drivers/usb/gadget/pxa2xx_udc.c 2007-12-06 12:41:25.784337009 +0300 ++++ linux-test/drivers/usb/gadget/pxa2xx_udc.c 2007-12-06 13:39:33.504345084 +0300 +@@ -125,8 +125,12 @@ static int is_vbus_present(void) + { + struct pxa2xx_udc_mach_info *mach = the_controller->mach; + +- if (mach->gpio_vbus) +- return gpio_get_value(mach->gpio_vbus); ++ if (mach->gpio_vbus) { ++ int value = gpio_get_value(mach->gpio_vbus); ++ return mach->gpio_vbus_inverted ? ++ !value : ++ value; ++ } + if (mach->udc_is_connected) + return mach->udc_is_connected(); + return 1; +@@ -1396,6 +1400,9 @@ static irqreturn_t udc_vbus_irq(int irq, + struct pxa2xx_udc *dev = _dev; + int vbus = gpio_get_value(dev->mach->gpio_vbus); + ++ if (dev->mach->gpio_vbus_inverted) ++ vbus = !vbus; ++ + pxa2xx_udc_vbus_session(&dev->gadget, vbus); + return IRQ_HANDLED; + } +Index: linux-test/include/asm-arm/mach/udc_pxa2xx.h +=================================================================== +--- linux-test.orig/include/asm-arm/mach/udc_pxa2xx.h 2007-12-06 12:38:49.872349393 +0300 ++++ linux-test/include/asm-arm/mach/udc_pxa2xx.h 2007-12-06 12:41:03.594903549 +0300 +@@ -22,5 +22,6 @@ struct pxa2xx_udc_mach_info { + */ + u16 gpio_vbus; /* high == vbus present */ + u16 gpio_pullup; /* high == pullup activated */ ++ unsigned char gpio_vbus_inverted:1; + }; + + +------------------------------------------------------------------- +List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel +FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php +Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php + diff --git a/packages/linux/linux-rp-2.6.23/tosa_udc_use_gpio_vbus.patch b/packages/linux/linux-rp-2.6.23/tosa_udc_use_gpio_vbus.patch new file mode 100644 index 0000000000..12ef2e4f39 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/tosa_udc_use_gpio_vbus.patch @@ -0,0 +1,99 @@ +From dbaryshkov@gmail.com Fri Dec 7 00:07:07 2007 +Return-Path: <SRS0=x/UTRF0x=Q6=lists.arm.linux.org.uk=linux-arm-kernel-bounces+openembedded=haerwu.biz@haerwu.biz> +X-Spam-Checker-Version: SpamAssassin 3.1.7 (2006-10-05) on 3073.s.tld.pl +X-Spam-Level: +X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,SPF_FAIL + autolearn=disabled version=3.1.7 +Delivered-To: haerwu.biz-marcin@haerwu.biz +Received: (qmail 27813 invoked by uid 813007); 7 Dec 2007 00:02:29 -0000 +Delivered-To: haerwu.biz-openembedded@haerwu.biz +Received: (qmail 27803 invoked by uid 813007); 7 Dec 2007 00:02:28 -0000 +X-clamdmail: clamdmail 0.18a +Received: from zeniv.linux.org.uk (195.92.253.2) + by smtp.host4.kei.pl with SMTP; 7 Dec 2007 00:02:28 -0000 +Received: from [2002:4e20:1eda:1:201:3dff:fe00:156] (helo=lists.arm.linux.org.uk) + by ZenIV.linux.org.uk with esmtpsa (Exim 4.63 #1 (Red Hat Linux)) + id 1J0Q9g-0005Vf-7a; Thu, 06 Dec 2007 23:29:23 +0000 +Received: from localhost ([127.0.0.1] helo=lists.arm.linux.org.uk) + by lists.arm.linux.org.uk with esmtp (Exim 4.50) + id 1J0Pvo-0000d6-NY; Thu, 06 Dec 2007 23:15:02 +0000 +Received: from ug-out-1314.google.com ([66.249.92.171]) + by lists.arm.linux.org.uk with esmtp (Exim 4.50) id 1J0PoR-0000bz-SM + for linux-arm-kernel@lists.arm.linux.org.uk; + Thu, 06 Dec 2007 23:10:07 +0000 +Received: by ug-out-1314.google.com with SMTP id 29so955850ugc + for <linux-arm-kernel@lists.arm.linux.org.uk>; + Thu, 06 Dec 2007 15:07:14 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; + h=domainkey-signature:received:received:date:to:subject:message-id:mime-version:content-type:content-disposition:user-agent:from; + bh=kjQKYxTmbZXtFO0UaAnYmPE6Fk1iyXNHPNOw6H2kP6U=; + b=vpDrUZqfbWhRrhxvozaHlI9ZC2UwfZvkqIrEeyX5rmqM9rXJTkm1fQQUJvaw43KzvEmxqPXYvpvHQ663HaRRVtN08xB0t2NcDpTm20QUwznzUbze+c4FPTP+86FQbsfhCck86qmrvfBUoDVD1xS2eVR+MxwI63D3rapCtUNpvvo= +DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; + h=date:to:subject:message-id:mime-version:content-type:content-disposition:user-agent:from; + b=D4Cx347bDXn3mf7g77jwn0W3XSXIZh+CiEev1FGhlTeKRZhnM7x1ht4Z+57AiD/dMCrCq8lHqE8Gy0Rv7x7krF2bmUJaiO7HXfxmLWY+msGF2nTymkr1NKsqipQRIVCcEf0ZBKcIrT0dK94QhuP4Ea4Sb/YOfb2YwrJPyNWsISo= +Received: by 10.78.165.16 with SMTP id n16mr3075565hue.1196982433587; + Thu, 06 Dec 2007 15:07:13 -0800 (PST) +Received: from doriath.ww600.siemens.net ( [91.122.9.34]) + by mx.google.com with ESMTPS id k5sm5631nfh.2007.12.06.15.07.12 + (version=SSLv3 cipher=OTHER); Thu, 06 Dec 2007 15:07:12 -0800 (PST) +Date: Fri, 7 Dec 2007 02:07:07 +0300 +To: linux-arm-kernel@lists.arm.linux.org.uk +Message-ID: <20071206230707.GA13639@doriath.ww600.siemens.net> +MIME-Version: 1.0 +Content-Type: text/plain; + charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.5.17 (2007-11-01) +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Subject: [PATCH 2/2] tosa_udc_use_gpio_vbus.patch +X-BeenThere: linux-arm-kernel@lists.arm.linux.org.uk +X-Mailman-Version: 2.1.5 +Precedence: list +List-Id: ARM Linux kernel discussions <linux-arm-kernel.lists.arm.linux.org.uk> +List-Unsubscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>, + <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=unsubscribe> +List-Archive: <http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel> +List-Post: <mailto:linux-arm-kernel@lists.arm.linux.org.uk> +List-Help: <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=help> +List-Subscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>, + <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=subscribe> +Sender: linux-arm-kernel-bounces@lists.arm.linux.org.uk +Errors-To: linux-arm-kernel-bounces+openembedded=haerwu.biz+openembedded=haerwu.biz@lists.arm.linux.org.uk +X-Length: 4865 +Status: R +X-Status: NC +X-KMail-EncryptionState: +X-KMail-SignatureState: +X-KMail-MDN-Sent: + +Use gpio_vbus instead of udc_is_connected for udc on tosa. + +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> + +Index: linux-test/arch/arm/mach-pxa/tosa.c +=================================================================== +--- linux-test.orig/arch/arm/mach-pxa/tosa.c 2007-12-06 12:43:04.301350179 +0300 ++++ linux-test/arch/arm/mach-pxa/tosa.c 2007-12-06 12:47:50.881381650 +0300 +@@ -165,14 +165,10 @@ static void tosa_udc_command(int cmd) + } + } + +-static int tosa_udc_is_connected(void) +-{ +- return ((GPLR(TOSA_GPIO_USB_IN) & GPIO_bit(TOSA_GPIO_USB_IN)) == 0); +-} +- + static struct pxa2xx_udc_mach_info udc_info __initdata = { + .udc_command = tosa_udc_command, +- .udc_is_connected = tosa_udc_is_connected, ++ .gpio_vbus = TOSA_GPIO_USB_IN, ++ .gpio_vbus_inverted = 1, + }; + + /* + +------------------------------------------------------------------- +List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel +FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php +Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php + diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index 9d84cffb69..53625791a7 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -123,7 +123,9 @@ SRC_URI_append_tosa = "\ file://arm-dma-coherent.patch;patch=1 \ file://usb-ohci-hooks-r3.patch;patch=1 \ file://tmio-ohci-r9.patch;patch=1 \ - " + file://pxa2xx_udc_support_inverse_vbus.patch;patch=1 \ + file://tosa_udc_use_gpio_vbus.patch;patch=1 \ + " # ${DOSRC}/tosa-asoc-r1.patch;patch=1 " SRC_URI_append_htcuniversal ="\ |