summaryrefslogtreecommitdiff
path: root/packages/linux
diff options
context:
space:
mode:
authorPaul Sokolovsky <pmiscml@gmail.com>2007-12-07 21:19:08 +0000
committerPaul Sokolovsky <pmiscml@gmail.com>2007-12-07 21:19:08 +0000
commit8257f57494600b754b8cd03b5da5649b0aa87616 (patch)
treee49e8002045e67a43352034f51ccf85d3a58c8c2 /packages/linux
parent89ef004b64d632304d7c159968262387f449844b (diff)
parentfa58164f44e4994d187acc6bd42584860dcb3463 (diff)
merge of '387fe9ed0ed82ea68e96a75f8876fe0807a070cd'
and 'd3ec22c2f56bfe13ae582b6c4495224757d4a0c7'
Diffstat (limited to 'packages/linux')
-rw-r--r--packages/linux/linux-2.6.23/leds-cpu-activity-powerpc.patch46
-rw-r--r--packages/linux/linux-2.6.23/leds-cpu-activity.patch554
-rw-r--r--packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig3
-rw-r--r--packages/linux/linux-efika-2.6.20/defconfig11
-rw-r--r--packages/linux/linux-efika_2.6.20.20.bb2
-rw-r--r--packages/linux/linux-rp-2.6.23/pxa2xx_udc_support_inverse_vbus.patch120
-rw-r--r--packages/linux/linux-rp-2.6.23/tosa_udc_use_gpio_vbus.patch99
-rw-r--r--packages/linux/linux-rp_2.6.23.bb4
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 ="\