linux-rp: Add 2.6.25+2.6.26-rc4, make default for qemuarm, qemux86 and spitz

git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4574 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
Richard Purdie 2008-06-02 08:52:27 +00:00
parent 2ef11ee954
commit 24101843b6
29 changed files with 68983 additions and 0 deletions

View File

@ -0,0 +1,16 @@
---
arch/arm/kernel/vmlinux.lds.S | 1 +
1 file changed, 1 insertion(+)
Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S
===================================================================
--- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200
+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200
@@ -94,6 +94,7 @@
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
+ *(.note.*)
#ifdef CONFIG_MMU
*(.fixup)
#endif

View File

@ -0,0 +1,17 @@
Index: linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c
===================================================================
--- linux-2.6.21.orig/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:45:39.000000000 +0100
+++ linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:47:30.000000000 +0100
@@ -2666,6 +2666,12 @@
iface = netdev_priv(dev);
local = iface->local;
+ if(dev->base_addr == 0)
+ {
+ printk(KERN_DEBUG "%s: IRQ before base_addr set\n", dev->name);
+ return IRQ_HANDLED;
+ }
+
prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
if (local->func->card_present && !local->func->card_present(local)) {

View File

@ -0,0 +1,12 @@
Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
===================================================================
--- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
@@ -488,7 +488,6 @@
PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
PCMCIA_DEVICE_NULL,
};
MODULE_DEVICE_TABLE(pcmcia, ide_ids);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,209 @@
This is a patch that I've been maintaining for a few years, and I'd
really like to see it added to the mainstream zaurus kernel so I can
finally stop distributing my own.
This patch only effects the card while in monitor mode, and does not
cause any known stability issues.
http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
Rick Farina (Zero_Chaos)
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
@@ -69,6 +69,9 @@
iface = netdev_priv(dev);
local = iface->local;
+ if (local->iw_mode == IW_MODE_MONITOR)
+ goto xmit;
+
if (skb->len < ETH_HLEN) {
printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
"(len=%d)\n", dev->name, skb->len);
@@ -234,6 +237,7 @@
memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
}
+xmit:
iface->stats.tx_packets++;
iface->stats.tx_bytes += skb->len;
@@ -404,8 +408,6 @@
}
if (skb->len < 24) {
- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
- "(len=%d)\n", dev->name, skb->len);
ret = 0;
iface->stats.tx_dropped++;
goto fail;
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
@@ -1005,6 +1005,35 @@
return fid;
}
+static int prism2_monitor_enable(struct net_device *dev)
+{
+ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
+ printk(KERN_DEBUG "Port type setting for monitor mode "
+ "failed\n");
+ return -EOPNOTSUPP;
+ }
+
+ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
+ 0, NULL, NULL)) {
+ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
+ return -EOPNOTSUPP;
+ }
+
+ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
+ HFA384X_WEPFLAGS_PRIVACYINVOKED |
+ HFA384X_WEPFLAGS_HOSTENCRYPT |
+ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
+ printk(KERN_DEBUG "WEP flags setting failed\n");
+ return -EOPNOTSUPP;
+ }
+
+ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
+ printk(KERN_DEBUG "Could not set promiscuous mode\n");
+ return -EOPNOTSUPP;
+ }
+
+ return 0;
+}
static int prism2_reset_port(struct net_device *dev)
{
@@ -1031,6 +1060,10 @@
"port\n", dev->name);
}
+ if (local->iw_mode == IW_MODE_MONITOR)
+ /* force mode 0x0a after port 0 reset */
+ return prism2_monitor_enable(dev);
+
/* It looks like at least some STA firmware versions reset
* fragmentation threshold back to 2346 after enable command. Restore
* the configured value, if it differs from this default. */
@@ -1466,6 +1499,10 @@
return 1;
}
+ if (local->iw_mode == IW_MODE_MONITOR)
+ /* force mode 0x0a after port 0 reset */
+ prism2_monitor_enable(dev);
+
local->hw_ready = 1;
local->hw_reset_tries = 0;
local->hw_resetting = 0;
@@ -3156,6 +3193,7 @@
local->func->hw_config = prism2_hw_config;
local->func->hw_reset = prism2_hw_reset;
local->func->hw_shutdown = prism2_hw_shutdown;
+ local->func->monitor_enable = prism2_monitor_enable;
local->func->reset_port = prism2_reset_port;
local->func->schedule_reset = prism2_schedule_reset;
#ifdef PRISM2_DOWNLOAD_SUPPORT
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
@@ -1104,33 +1104,7 @@
printk(KERN_DEBUG "Enabling monitor mode\n");
hostap_monitor_set_type(local);
-
- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
- printk(KERN_DEBUG "Port type setting for monitor mode "
- "failed\n");
- return -EOPNOTSUPP;
- }
-
- /* Host decrypt is needed to get the IV and ICV fields;
- * however, monitor mode seems to remove WEP flag from frame
- * control field */
- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
- HFA384X_WEPFLAGS_HOSTENCRYPT |
- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
- printk(KERN_DEBUG "WEP flags setting failed\n");
- return -EOPNOTSUPP;
- }
-
- if (local->func->reset_port(dev) ||
- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
- (HFA384X_TEST_MONITOR << 8),
- 0, NULL, NULL)) {
- printk(KERN_DEBUG "Setting monitor mode failed\n");
- return -EOPNOTSUPP;
- }
-
- return 0;
+ return local->func->reset_port(dev);
}
@@ -1199,7 +1173,7 @@
local->iw_mode = *mode;
if (local->iw_mode == IW_MODE_MONITOR)
- hostap_monitor_mode_enable(local);
+ return hostap_monitor_mode_enable(local);
else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
!local->fw_encrypt_ok) {
printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
@@ -331,7 +331,7 @@
if (local->iw_mode == IW_MODE_REPEAT)
return HFA384X_PORTTYPE_WDS;
if (local->iw_mode == IW_MODE_MONITOR)
- return HFA384X_PORTTYPE_PSEUDO_IBSS;
+ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
return HFA384X_PORTTYPE_HOSTAP;
}
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
@@ -48,6 +48,8 @@
{ 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
/* Samsung MagicLAN SWL-2210P */
{ 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
+ /* NETGEAR MA311 */
+ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
{ 0 }
};
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
@@ -101,6 +101,7 @@
{ 0xc250, 0x0002 } /* EMTAC A2424i */,
{ 0xd601, 0x0002 } /* Z-Com XI300 */,
{ 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
+ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
{ 0, 0}
};
Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
@@ -575,6 +575,7 @@
int (*hw_config)(struct net_device *dev, int initial);
void (*hw_reset)(struct net_device *dev);
void (*hw_shutdown)(struct net_device *dev, int no_disable);
+ int (*monitor_enable)(struct net_device *dev);
int (*reset_port)(struct net_device *dev);
void (*schedule_reset)(local_info_t *local);
int (*download)(local_info_t *local,

View File

@ -0,0 +1,34 @@
From: Marcin Juszkiewicz <openembedded@haerwu.biz>
Card reported by Ångström user:
http://bugs.openembedded.net/show_bug.cgi?id=3236
Socket 1:
product info: "Wireless LAN", "11Mbps PC Card", "Version 01.02", ""
manfid: 0x0156, 0x0002
function: 6 (network)
Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz>
Acked-by: Pavel Roskin <proski@gnu.org>
---
drivers/net/wireless/hostap/hostap_cs.c | 3 +++
1 file changed, 3 insertions(+)
--- linux-2.6.24.orig/drivers/net/wireless/hostap/hostap_cs.c
+++ linux-2.6.24/drivers/net/wireless/hostap/hostap_cs.c
@@ -892,10 +892,13 @@ static struct pcmcia_device_id hostap_cs
0xa21501a, 0x59868926, 0xc9049a39),
PCMCIA_DEVICE_PROD_ID1234(
"The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P",
"RevA",
0xa5f472c2, 0x9c05598d, 0xc9049a39, 0x57a66194),
+ PCMCIA_DEVICE_PROD_ID123(
+ "Wireless LAN" , "11Mbps PC Card", "Version 01.02",
+ 0x4b8870ff, 0x70e946d1, 0x4b74baa0),
PCMCIA_DEVICE_NULL
};
MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
---
drivers/serial/8250.c | 5 +++++
drivers/serial/serial_core.c | 1 +
drivers/serial/serial_cs.c | 12 +++++++++---
include/linux/serial_core.h | 1 +
4 files changed, 16 insertions(+), 3 deletions(-)
Index: linux-2.6.20/drivers/serial/8250.c
===================================================================
--- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
+++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
@@ -2429,7 +2429,12 @@
.driver_name = "serial",
.dev_name = "ttyS",
.major = TTY_MAJOR,
+#ifdef CONFIG_SERIAL_PXA
+ .minor = 64 + 4,
+ .name_base = 4,
+#else
.minor = 64,
+#endif
.nr = UART_NR,
.cons = SERIAL8250_CONSOLE,
};
Index: linux-2.6.20/drivers/serial/serial_core.c
===================================================================
--- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
+++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
@@ -2068,7 +2068,8 @@
printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
port->dev ? port->dev->bus_id : "",
port->dev ? ": " : "",
- drv->dev_name, port->line, address, port->irq, uart_type(port));
+ drv->dev_name, port->line + drv->name_base, address, port->irq,
+ uart_type(port));
}
static void
@@ -2183,6 +2184,7 @@
normal->owner = drv->owner;
normal->driver_name = drv->driver_name;
normal->name = drv->dev_name;
+ normal->name_base = drv->name_base;
normal->major = drv->major;
normal->minor_start = drv->minor;
normal->type = TTY_DRIVER_TYPE_SERIAL;
Index: linux-2.6.20/include/linux/serial_core.h
===================================================================
--- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
+++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
@@ -341,6 +341,7 @@
struct module *owner;
const char *driver_name;
const char *dev_name;
+ int name_base;
int major;
int minor;
int nr;
Index: linux-2.6.20/drivers/serial/serial_cs.c
===================================================================
--- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
+++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
@@ -390,7 +390,7 @@
kio_addr_t iobase, int irq)
{
struct uart_port port;
- int line;
+ int line, linestart;
memset(&port, 0, sizeof (struct uart_port));
port.iobase = iobase;
@@ -411,10 +411,16 @@
return -EINVAL;
}
+#if CONFIG_SERIAL_PXA
+ linestart = 4;
+#else
+ linestart = 0;
+#endif
+
info->line[info->ndev] = line;
- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
info->node[info->ndev].major = TTY_MAJOR;
- info->node[info->ndev].minor = 0x40 + line;
+ info->node[info->ndev].minor = 0x40 + line + linestart;
if (info->ndev > 0)
info->node[info->ndev - 1].next = &info->node[info->ndev];
info->ndev++;

View File

@ -0,0 +1,26 @@
---
drivers/video/pxafb.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: linux-2.6.22/drivers/video/pxafb.h
===================================================================
--- linux-2.6.22.orig/drivers/video/pxafb.h 2007-09-25 15:44:42.000000000 +0200
+++ linux-2.6.22/drivers/video/pxafb.h 2007-09-25 15:45:07.000000000 +0200
@@ -36,7 +36,7 @@
struct fb_bitfield transp;
};
-#ifdef CONFIG_PXA27x
+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
/* PXA Overlay Framebuffer Support */
struct overlayfb_info
{
@@ -142,7 +142,7 @@
wait_queue_head_t ctrlr_wait;
struct work_struct task;
-#ifdef CONFIG_PXA27x
+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
/* PXA Overlay Framebuffer Support */
struct overlayfb_info *overlay1fb;
struct overlayfb_info *overlay2fb;

View File

@ -0,0 +1,155 @@
From: Petr Vandrovec <vandrove@vc.cvut.cz>
Patch below adds support for using different prescaler than 16 for 16c950
chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
card, which comes (apparently) with 806kHz clocks, and so you have to
program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
To get card properly running you also have to add lines below to
/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
specifying baud_rate in serial_cs, I assume that specifying it in
serial.opts is right way to do this type of things.
Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
baud rate passed to uart code was uartclk / 16 while correct value for
these devices (and for 16c950) is uartclk / 4.
Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
devices exist, but we should not ignore spd_cust, user probably knows why
he asked for spd_cust.
serial.opts:
case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
'0279,950b-2-GPRS Modem---')
SERIAL_OPTS="baud_base 50400"
;;
esac
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---
drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 64 insertions(+), 18 deletions(-)
Index: linux-2.6.21/drivers/serial/8250.c
===================================================================
--- linux-2.6.21.orig/drivers/serial/8250.c 2007-07-01 16:59:52.000000000 +0100
+++ linux-2.6.21/drivers/serial/8250.c 2007-07-01 17:01:21.000000000 +0100
@@ -1964,24 +1964,58 @@ static void serial8250_shutdown(struct u
serial_unlink_irq_chain(up);
}
-static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
+ unsigned int *prescaler)
{
- unsigned int quot;
-
- /*
- * Handle magic divisors for baud rates above baud_base on
- * SMSC SuperIO chips.
+ /*
+ * Use special handling only if user did not supply its own divider.
+ * spd_cust is defined in terms of baud_base, so always use default
+ * prescaler when spd_cust is requested.
*/
- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
- baud == (port->uartclk/4))
- quot = 0x8001;
- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
- baud == (port->uartclk/8))
- quot = 0x8002;
- else
- quot = uart_get_divisor(port, baud);
- return quot;
+ *prescaler = 16;
+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
+ unsigned int quot = port->uartclk / baud;
+
+ /*
+ * Handle magic divisors for baud rates above baud_base on
+ * SMSC SuperIO chips.
+ */
+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
+ if (quot == 4) {
+ return 0x8001;
+ } else if (quot == 8) {
+ return 0x8002;
+ }
+ }
+ if (port->type == PORT_16C950) {
+ /*
+ * This computes TCR value (4 to 16), not CPR value (which can
+ * be between 1.000 and 31.875) - chip I have uses XTAL of
+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
+ * I'm leaving CPR disabled for now, until someone will
+ * hit even more exotic XTAL (it is needed to get 500kbps
+ * or 1000kbps from 18.432MHz XTAL, but I have no device
+ * which would benefit from doing that).
+ *
+ * If we can use divide by 16, use it. Otherwise look for
+ * better prescaler, from 15 to 4. If quotient cannot
+ * be divided by any integer value between 4 and 15, use 4.
+ */
+ if (quot & 0x0F) {
+ unsigned int div;
+
+ for (div = 15; div > 4; div--) {
+ if (quot % div == 0) {
+ break;
+ }
+ }
+ *prescaler = div;
+ return quot / div;
+ }
+ }
+ }
+ return uart_get_divisor(port, baud);
}
static void
@@ -1991,7 +2025,7 @@ serial8250_set_termios(struct uart_port
struct uart_8250_port *up = (struct uart_8250_port *)port;
unsigned char cval, fcr = 0;
unsigned long flags;
- unsigned int baud, quot;
+ unsigned int baud, quot, prescaler;
switch (termios->c_cflag & CSIZE) {
case CS5:
@@ -2023,8 +2057,13 @@ serial8250_set_termios(struct uart_port
/*
* Ask the core to calculate the divisor for us.
*/
- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
- quot = serial8250_get_divisor(port, baud);
+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
+ } else {
+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
+ }
+ quot = serial8250_get_divisor(port, baud, &prescaler);
+
/*
* Oxford Semi 952 rev B workaround
@@ -2139,6 +2178,13 @@ serial8250_set_termios(struct uart_port
serial_dl_write(up, quot);
/*
+ * Program prescaler for 16C950 chips.
+ */
+ if (up->port.type == PORT_16C950) {
+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
+ }
+
+ /*
* LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
* is written without DLAB set, this mode will be disabled.
*/

View File

@ -0,0 +1,555 @@
This patch adds support for Sharp CE-RH2 on Spitz.
It is not clean enough to be upstreamed:
- It is a bit syslog-noisy.
- Does not support other Zaurus models.
- Maybe split to more parts:
* MAX1111 driver
* linear input device
* virtual keyboard on top of linear input device
Index: linux-2.6.26-rc4/arch/arm/mach-pxa/spitz.c
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/spitz.c 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mach-pxa/spitz.c 2008-06-02 00:20:05.000000000 +0100
@@ -261,6 +261,13 @@
.id = -1,
};
+/*
+ * Spitz Remote Control Device
+ */
+static struct platform_device sharpsl_rc_device = {
+ .name = "sharpsl-remote-control",
+ .id = -1,
+};
/*
* Spitz LEDs
@@ -522,6 +529,7 @@
&spitzscoop_device,
&spitzssp_device,
&spitzkbd_device,
+ &sharpsl_rc_device,
&spitzts_device,
&spitzbl_device,
&spitzled_device,
Index: linux-2.6.26-rc4/drivers/input/keyboard/Kconfig
===================================================================
--- linux-2.6.26-rc4.orig/drivers/input/keyboard/Kconfig 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/drivers/input/keyboard/Kconfig 2008-06-02 09:46:10.000000000 +0100
@@ -175,6 +175,17 @@
Say Y only if you know, what you are doing!
+config SHARPSL_RC
+ tristate "Sharp SL-Cxx00 Remote Control"
+ depends on PXA_SHARPSL
+ default y
+ help
+ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
+ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
+
+ To compile this driver as a module, choose M here: the
+ module will be called sharpsl_rc.
+
config KEYBOARD_AMIGA
tristate "Amiga keyboard"
depends on AMIGA
Index: linux-2.6.26-rc4/drivers/input/keyboard/Makefile
===================================================================
--- linux-2.6.26-rc4.orig/drivers/input/keyboard/Makefile 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/drivers/input/keyboard/Makefile 2008-06-02 09:46:10.000000000 +0100
@@ -26,4 +26,5 @@
obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
+obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o
Index: linux-2.6.26-rc4/drivers/input/keyboard/sharpsl_rc.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.26-rc4/drivers/input/keyboard/sharpsl_rc.c 2008-06-02 09:47:39.000000000 +0100
@@ -0,0 +1,319 @@
+/*
+ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
+ *
+ * Copyright (c) 2004-2005 Richard Purdie
+ *
+ * Based on corgikbd.c and Sharp's RC driver
+ *
+ * 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.
+ *
+ */
+
+#define DEBUG 1
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+#include <linux/init.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/jiffies.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+
+#include <asm/mach-types.h>
+#include <asm/arch/spitz.h>
+#include <asm/arch/akita.h>
+#include <asm/arch/corgi.h>
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/pxa-regs.h>
+#include <asm/arch/pxa2xx-gpio.h>
+#include <asm/hardware/scoop.h>
+#include <asm/arch/sharpsl.h>
+#include <asm/hardware/sharpsl_pm.h>
+
+#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
+
+struct remote_control_key {
+ unsigned char min;
+ unsigned char max;
+ unsigned char key;
+};
+
+static struct remote_control_key remote_keys_spitz[] = {
+ /* CE-RH2 values */
+ { 25, 35, KEY_STOPCD},
+ { 55, 65, KEY_PLAYPAUSE},
+ { 85, 95, KEY_NEXTSONG},
+ { 115, 125, KEY_VOLUMEUP},
+ { 145, 155, KEY_PREVIOUSSONG},
+ { 180, 190, KEY_MUTE},
+ { 215, 225, KEY_VOLUMEDOWN},
+};
+static struct remote_control_key remote_keys_corgi[] = {
+ /* CE-RH1 values */
+ { 27, 35, KEY_STOPCD},
+ { 7, 13, KEY_PLAYPAUSE},
+ { 77, 93, KEY_NEXTSONG},
+ { 115, 132, KEY_VOLUMEUP},
+ { 46, 58, KEY_PREVIOUSSONG},
+ { 170, 186, KEY_VOLUMEDOWN},
+};
+
+#define RELEASE_HI 230
+#define MAX_EARPHONE 6
+#define RC_POLL_MS 10
+#define RC_FINISH_MS 500
+#define WAIT_STATE 3
+#define NOISE_THRESHOLD 100
+
+struct sharpsl_rc {
+ struct input_dev *input;
+ struct device *dev;
+
+ spinlock_t lock;
+ struct timer_list rctimer;
+ struct timer_list rctimer_finish;
+
+ unsigned int handling_press;
+ unsigned int noise;
+ unsigned int state;
+ unsigned int last_key;
+};
+
+static int get_remocon_raw(void)
+{
+ int i, val;
+ struct remote_control_key *remote_keys;
+
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
+ remote_keys = remote_keys_spitz;
+ else
+ remote_keys = remote_keys_corgi;
+
+ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
+ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
+ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
+ ++i) {
+ if (val >= remote_keys[i].min
+ && val <= remote_keys[i].max) {
+ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
+ return remote_keys[i].key;
+ }
+ }
+ return 0;
+}
+
+static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id)
+{
+ struct sharpsl_rc *data = dev_id;
+ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
+ if (!data->handling_press) {
+ DPRINTK("handling interrupt");
+ data->handling_press = 1;
+ data->noise = 0;
+ data->state = 0;
+ data->last_key = 0;
+
+ if (machine_is_borzoi() || machine_is_spitz())
+ reset_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
+ else if (machine_is_akita())
+ akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
+ else
+ reset_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
+ }
+ return IRQ_HANDLED;
+}
+
+static void sharpsl_rc_timer_callback(unsigned long dataPtr)
+{
+ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
+ int timer = 1;
+ int key = get_remocon_raw();
+ DPRINTK("timer callback, key: %d", key);
+
+ //wait for value to stabilize
+ if (data->state < WAIT_STATE) {
+ if (data->last_key != key) {
+ ++data->noise;
+ if (data->noise > NOISE_THRESHOLD) {
+ DPRINTK("too much noise, bailing");
+ timer = 0;
+ }
+ data->state = 0;
+ } else {
+ ++data->state;
+ }
+ data->last_key = key;
+
+ //stable value, send event
+ } else if (data->state == WAIT_STATE) {
+ data->noise = 0;
+ //non-key returned, skip the rest of the states and bail now
+ if (data->last_key == 0) {
+ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
+ timer = 0;
+ //send button press
+ } else {
+ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
+ input_report_key(data->input, data->last_key, 1);
+ }
+ ++data->state;
+
+ //wait until key is released
+ } else if (data->state < WAIT_STATE * 2) {
+ if (key == data->last_key
+ && data->noise < NOISE_THRESHOLD) {
+ data->state = WAIT_STATE + 1;
+ ++data->noise;
+ } else {
+ ++data->state;
+ }
+ //key is released, send event
+ } else {
+ //send button release
+ DPRINTK("release key %d", data->last_key);
+ input_report_key(data->input, data->last_key, 0);
+ timer = 0;
+ }
+ if (timer) {
+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
+ } else {
+ if (machine_is_borzoi() || machine_is_spitz())
+ set_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
+ else if (machine_is_akita())
+ akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
+ else
+ set_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
+ data->handling_press = 0;
+ }
+}
+
+static int __init sharpsl_rc_probe(struct platform_device *pdev)
+{
+ struct sharpsl_rc *sharpsl_rc;
+ struct input_dev *input_dev;
+ int i, ret;
+ struct remote_control_key *remote_keys;
+
+ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
+
+ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
+ input_dev = input_allocate_device();
+ if (!sharpsl_rc || !input_dev) {
+ kfree(sharpsl_rc);
+ input_free_device(input_dev);
+ return -ENOMEM;
+ }
+
+ platform_set_drvdata(pdev, sharpsl_rc);
+
+ sharpsl_rc->dev = &pdev->dev;
+ sharpsl_rc->input = input_dev;
+ spin_lock_init(&sharpsl_rc->lock);
+
+ /* Init Remote Control Timer */
+ init_timer(&sharpsl_rc->rctimer);
+ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
+ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
+
+ input_dev->name = "Sharp Remote Control CE-RHX";
+ input_dev->phys = "sharpsl_rc/input0";
+ input_dev->id.bustype = BUS_HOST;
+ input_dev->id.vendor = 0x0001;
+ input_dev->id.product = 0x0001;
+ input_dev->id.version = 0x0100;
+ input_dev->dev.parent = &pdev->dev;
+
+ input_dev->evbit[0] = BIT(EV_KEY);
+
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
+ remote_keys = remote_keys_spitz;
+ else
+ remote_keys = remote_keys_corgi;
+ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
+ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
+ ++i)
+ set_bit(remote_keys[i].key, input_dev->keybit);
+
+ ret = input_register_device(sharpsl_rc->input);
+ if (ret) {
+ dev_dbg(&pdev->dev, "Failed to register Sharp Remote input device\n");
+ kfree(sharpsl_rc);
+ input_free_device(input_dev);
+ return ret;
+ }
+
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) {
+ pxa_gpio_mode(SPITZ_GPIO_AK_INT | GPIO_IN);
+ ret = request_irq(SPITZ_IRQ_GPIO_AK_INT,
+ sharpsl_rc_interrupt,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
+ "sharpsl_rc",
+ sharpsl_rc);
+ } else {
+ pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN);
+ ret = request_irq(CORGI_IRQ_GPIO_AK_INT,
+ sharpsl_rc_interrupt,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
+ "sharpsl_rc",
+ sharpsl_rc);
+ }
+ if (ret < 0) {
+ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
+ kfree(sharpsl_rc);
+ input_free_device(input_dev);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int sharpsl_rc_remove(struct platform_device *pdev)
+{
+ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
+
+ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
+
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
+ free_irq(SPITZ_IRQ_GPIO_AK_INT, sharpsl_rc);
+ else
+ free_irq(CORGI_IRQ_GPIO_AK_INT, sharpsl_rc);
+ del_timer_sync(&sharpsl_rc->rctimer);
+ input_unregister_device(sharpsl_rc->input);
+ kfree(sharpsl_rc);
+
+ return 0;
+}
+
+static struct platform_driver sharpsl_rc_driver = {
+ .probe = sharpsl_rc_probe,
+ .remove = sharpsl_rc_remove,
+ .suspend = NULL,
+ .resume = NULL,
+ .driver = {
+ .name = "sharpsl-remote-control",
+ },
+};
+
+static int __devinit sharpsl_rc_init(void)
+{
+ printk("sharpsl_rc_init\n");
+ return platform_driver_register(&sharpsl_rc_driver);
+}
+
+static void __exit sharpsl_rc_exit(void)
+{
+ printk("sharpsl_rc_exit\n");
+ platform_driver_unregister(&sharpsl_rc_driver);
+}
+
+module_init(sharpsl_rc_init);
+module_exit(sharpsl_rc_exit);
+
+MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
+MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
+MODULE_DESCRIPTION("SharpSL Remote Control Driver");
+MODULE_LICENSE("GPL");
Index: linux-2.6.26-rc4/drivers/input/keyboard/spitzkbd.c
===================================================================
--- linux-2.6.26-rc4.orig/drivers/input/keyboard/spitzkbd.c 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/drivers/input/keyboard/spitzkbd.c 2008-06-02 00:20:05.000000000 +0100
@@ -19,6 +19,7 @@
#include <linux/jiffies.h>
#include <linux/module.h>
#include <linux/slab.h>
+#include <linux/kmod.h>
#include <asm/arch/spitz.h>
#include <asm/arch/hardware.h>
@@ -280,13 +281,21 @@
static int sharpsl_hinge_state;
static int hinge_count;
+void spitzkbd_handle_sharpsl_rc(void *arg) {
+ request_module("sharpsl_rc");
+}
+
+DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
+
static void spitzkbd_hinge_timer(unsigned long data)
{
struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
unsigned long state;
unsigned long flags;
+ unsigned int headphone, remote;
state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
+ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
if (state != sharpsl_hinge_state) {
hinge_count = 0;
@@ -300,9 +309,18 @@
input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
+
+ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
+ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
+
+ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
+ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
input_sync(spitzkbd_data->input);
+ if (remote) {
+ schedule_work(&spitzkbd_work);
+ }
+
spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
} else {
mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
@@ -396,6 +414,7 @@
set_bit(SW_LID, input_dev->swbit);
set_bit(SW_TABLET_MODE, input_dev->swbit);
set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
+ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
err = input_register_device(input_dev);
if (err)
@@ -433,9 +452,12 @@
request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"Spitzkbd SWB", spitzkbd);
- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
+ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"Spitzkbd HP", spitzkbd);
+ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
+ "Spitzkbd HP Type", spitzkbd);
return 0;
@@ -456,6 +478,7 @@
free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
del_timer_sync(&spitzkbd->htimer);
Index: linux-2.6.26-rc4/arch/arm/mach-pxa/sharpsl.h
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/sharpsl.h 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mach-pxa/sharpsl.h 2008-06-02 00:20:05.000000000 +0100
@@ -37,15 +37,10 @@
*/
#define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
-/* MAX1111 Channel Definitions */
-#define MAX1111_BATT_VOLT 4u
-#define MAX1111_BATT_TEMP 2u
-#define MAX1111_ACIN_VOLT 6u
-
extern struct battery_thresh spitz_battery_levels_acin[];
extern struct battery_thresh spitz_battery_levels_noac[];
void sharpsl_pm_pxa_init(void);
void sharpsl_pm_pxa_remove(void);
-int sharpsl_pm_pxa_read_max1111(int channel);
+
Index: linux-2.6.26-rc4/arch/arm/mach-pxa/sharpsl_pm.c
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/sharpsl_pm.c 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mach-pxa/sharpsl_pm.c 2008-06-02 00:20:05.000000000 +0100
@@ -136,6 +136,8 @@
| MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
}
+EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
+
void sharpsl_pm_pxa_init(void)
{
pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
Index: linux-2.6.26-rc4/include/asm-arm/hardware/sharpsl_pm.h
===================================================================
--- linux-2.6.26-rc4.orig/include/asm-arm/hardware/sharpsl_pm.h 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/include/asm-arm/hardware/sharpsl_pm.h 2008-06-02 00:20:05.000000000 +0100
@@ -104,3 +104,10 @@
irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
+/* MAX1111 Channel Definitions */
+#define MAX1111_REMCOM 0u
+#define MAX1111_BATT_VOLT 4u
+#define MAX1111_BATT_TEMP 2u
+#define MAX1111_ACIN_VOLT 6u
+
+int sharpsl_pm_pxa_read_max1111(int channel);
Index: linux-2.6.26-rc4/include/linux/input.h
===================================================================
--- linux-2.6.26-rc4.orig/include/linux/input.h 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/include/linux/input.h 2008-06-02 00:20:05.000000000 +0100
@@ -638,6 +638,7 @@
#define SW_TABLET_MODE 0x01 /* set = tablet mode */
#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
#define SW_RADIO 0x03 /* set = radio enabled */
+#define SW_REMOTE_INSERT 0x04 /* set = remote */
#define SW_MAX 0x0f
#define SW_CNT (SW_MAX+1)
Index: linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 00:20:03.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 09:46:10.000000000 +0100
@@ -160,6 +160,13 @@
if (resume_on_alarm && (PEDR & PWER_RTC))
is_resume |= PWER_RTC;
+ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
+
+ //remote/headphone interrupt, wakeup
+ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
+ is_resume |= PWER_RTC;
+ }
+
dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
return is_resume;
}

View File

@ -0,0 +1,497 @@
http://www.uwsg.indiana.edu/hypermail/linux/kernel/0802.1/3541.html
Here is a rewrite of spitz.h, which includes comments documenting
function of particular GPIO pins.
spitz_h_rewrite.patch provides:
- no changes in compiled code
- partial spitz.h rewrite:
* organized by function
* describes complete GPIO pinout
* comments added
* removed defines cloning pxa-regs.h
- prefer generic pxa-regs.h GPIO if available
- use GPIO names instead of numbers
Thanks to Trisoft for providing needed information.
Index: linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 00:13:53.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 00:13:53.000000000 +0100
@@ -111,9 +111,9 @@
pxa_gpio_mode(GPIO18_RDY|GPIO_OUT | GPIO_DFLT_HIGH);
PRER = GPIO_bit(SPITZ_GPIO_KEY_INT);
- PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
- PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET) | PWER_RTC;
- PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
+ PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST);
+ PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST) | PWER_RTC;
+ PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST);
PKSR = 0xffffffff; // clear
/* nRESET_OUT Disable */
@@ -126,7 +126,7 @@
static void spitz_postsuspend(void)
{
pxa_gpio_mode(GPIO18_RDY_MD);
- pxa_gpio_mode(10 | GPIO_IN);
+ pxa_gpio_mode(SPITZ_GPIO_NC_10 | GPIO_IN);
}
static int spitz_should_wakeup(unsigned int resume_on_alarm)
Index: linux-2.6.26-rc4/drivers/video/pxafb.c
===================================================================
--- linux-2.6.26-rc4.orig/drivers/video/pxafb.c 2008-05-26 19:08:11.000000000 +0100
+++ linux-2.6.26-rc4/drivers/video/pxafb.c 2008-06-02 00:15:22.000000000 +0100
@@ -966,7 +966,7 @@
return;
}
- for (gpio = 58; ldd_bits; gpio++, ldd_bits--)
+ for (gpio = GPIO58_LDD_0; ldd_bits; gpio++, ldd_bits--)
pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/akita.h
===================================================================
--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/akita.h 2008-05-26 19:08:11.000000000 +0100
+++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/akita.h 2008-06-02 00:13:53.000000000 +0100
@@ -12,11 +12,11 @@
/* Akita IO Expander GPIOs */
#define AKITA_IOEXP_RESERVED_7 (1 << 7)
-#define AKITA_IOEXP_IR_ON (1 << 6)
-#define AKITA_IOEXP_AKIN_PULLUP (1 << 5)
-#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4)
-#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3)
-#define AKITA_IOEXP_MIC_BIAS (1 << 2)
+#define AKITA_IOEXP_IR_ON (1 << 6) /* IrDA On */
+#define AKITA_IOEXP_AKIN_PULLUP (1 << 5) /* Pull-Up for Remote */
+#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4) /* Backlight Control */
+#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3) /* Backlight On */
+#define AKITA_IOEXP_MIC_BIAS (1 << 2) /* Mic Bias On */
#define AKITA_IOEXP_RESERVED_1 (1 << 1)
#define AKITA_IOEXP_RESERVED_0 (1 << 0)
Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/spitz.h
===================================================================
--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/spitz.h 2008-05-26 19:08:11.000000000 +0100
+++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/spitz.h 2008-06-02 00:13:53.000000000 +0100
@@ -1,8 +1,9 @@
/*
- * Hardware specific definitions for SL-Cx000 series of PDAs
+ * Hardware specific definitions for SL-Cxx00 series of PDAs
*
* Copyright (c) 2005 Alexander Wykes
* Copyright (c) 2005 Richard Purdie
+ * Copyright (c) 2008 Stanislav Brabec
*
* Based on Sharp's 2.4 kernel patches
*
@@ -13,140 +14,257 @@
*/
#ifndef __ASM_ARCH_SPITZ_H
#define __ASM_ARCH_SPITZ_H 1
-#endif
-#include <linux/fb.h>
+#include <asm-arm/arch-pxa/irqs.h>
+#include <linux/platform_device.h>
/* Spitz/Akita GPIOs */
-#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */
-#define SPITZ_GPIO_RESET (1)
-#define SPITZ_GPIO_nSD_DETECT (9)
-#define SPITZ_GPIO_TP_INT (11) /* Touch Panel interrupt */
-#define SPITZ_GPIO_AK_INT (13) /* Remote Control */
-#define SPITZ_GPIO_ADS7846_CS (14)
-#define SPITZ_GPIO_SYNC (16)
-#define SPITZ_GPIO_MAX1111_CS (20)
-#define SPITZ_GPIO_FATAL_BAT (21)
-#define SPITZ_GPIO_HSYNC (22)
-#define SPITZ_GPIO_nSD_CLK (32)
-#define SPITZ_GPIO_USB_DEVICE (35)
-#define SPITZ_GPIO_USB_HOST (37)
-#define SPITZ_GPIO_USB_CONNECT (41)
-#define SPITZ_GPIO_LCDCON_CS (53)
-#define SPITZ_GPIO_nPCE (54)
-#define SPITZ_GPIO_nSD_WP (81)
-#define SPITZ_GPIO_ON_RESET (89)
-#define SPITZ_GPIO_BAT_COVER (90)
-#define SPITZ_GPIO_CF_CD (94)
-#define SPITZ_GPIO_ON_KEY (95)
-#define SPITZ_GPIO_SWA (97)
-#define SPITZ_GPIO_SWB (96)
-#define SPITZ_GPIO_CHRG_FULL (101)
-#define SPITZ_GPIO_CO (101)
-#define SPITZ_GPIO_CF_IRQ (105)
-#define SPITZ_GPIO_AC_IN (115)
-#define SPITZ_GPIO_HP_IN (116)
+/* This list refers to all GPIO pins either in defines or in comments.
+ *
+ * GPIO pins not listed:
+ * GPIO2 SYS_EN: System Power Enable
+ * GPIO5-GPIO8 PWR_CAP0-PWR_CAP3: sleep DC-DC converter power capacitors
+ * GPIO40 not connected
+ */
-/* Spitz Only GPIOs */
-#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */
-#define SPITZ_GPIO_CF2_CD (93)
+/* Spitz/Akita System GPIO */
+
+#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */
+#define SPITZ_GPIO_SYNC (16) /* IOPORT Wake Up (input) */
+#define SPITZ_GPIO_NAND_CS (79) /* NAND Flash Chip Select */
+#define SPITZ_GPIO_NC_10 (10) /* Not Connected (but used in kernel) */
+/* This GPIO pin is connected:
+ * GPIO1_RST
+ */
+/* Compact Flash Interface */
+
+/* Spitz/Akita Compact Flash Interface */
+#define SPITZ_GPIO_CF_CD (94) /* CF IRQ */
+#define SPITZ_GPIO_CF_IRQ (105) /* CF Ready */
+/* These GPIO pins are connected:
+ * GPIO48_nPOE
+ * GPIO49_nPWE
+ * GPIO50_nPIOR
+ * GPIO51_nPIOW
+ * GPIO54_nPCE_2
+ * GPIO55_nPREG
+ * GPIO56_nPWAIT
+ * GPIO57_nIOIS16
+ * GPIO80_nCS_4
+ * GPIO85_nPCE_1
+ * GPIO104_pSKTSEL
+ */
+
+/* Spitz only Compact Flash Interface */
+#define SPITZ_GPIO_CF2_CD (93) /* CF slot1 IRQ */
+#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */
+/* This GPIO pin is connected:
+ * GPIO78_nCS_2
+ */
+
+
+/* Spitz/Akita Battery, Power and Service Connector */
+
+#define SPITZ_GPIO_FATAL_BAT (21) /* Fatal Battery */
+#define SPITZ_GPIO_BAT_COVER (90) /* Battery Cover switch */
+#define SPITZ_GPIO_BAT_COVER2 (15) /* Battery Cover switch, parallel pin */
+#define SPITZ_GPIO_CHRG_FULL (101) /* Battery Full */
+#define SPITZ_GPIO_AC_IN (115) /* External Power Supply is active */
+#define SPITZ_GPIO_ON_RESET (89) /* Software Reset */
+#define SPITZ_GPIO_SERVICE0 (83) /* Service Connector */
+#define SPITZ_GPIO_SERVICE1 (84) /* Service Connector */
+/* This GPIO pin is connected:
+ * GPIO18_RDY
+ */
+
+
+/* Spitz/Akita Display Controller */
+
+#define SPITZ_GPIO_HSYNC (22) /* Line Sync Feedback */
+/* These GPIO pins are connected:
+ * GPIO58_LDD_0-GPIO58_LDD_15
+ * GPIO74_LCD_FCLK
+ * GPIO75_LCD_LCLK
+ * GPIO76_LCD_PCLK
+ * GPIO77_LCD_ACBIAS
+ */
+
+
+/* Spitz/Akita SSP/SPI Bus and Devices */
+
+#define SPITZ_GPIO_SSP_CLK (19) /* SSP bus Clock */
+#define SPITZ_GPIO_SSP_RXD (86) /* SSP bus RxD */
+#define SPITZ_GPIO_SSP_TXD (87) /* SSP bus TxD */
+#define SPITZ_GPIO_TP_INT (11) /* Touch Panel IRQ */
+#define SPITZ_GPIO_ADS7846_CS (14) /* Touch Panel Controller Chip Select */
+#define SPITZ_GPIO_MAX1111_CS (20) /* Multi Channel ADC Chip Select */
+#define SPITZ_GPIO_LCDCON_CS (53) /* LCD Controller Chip Select */
+
+
+/* Spitz/Akita Supplementary USB OTG Pins */
+
+#define SPITZ_GPIO_USB_DEVICE (35) /* USB Client power is present */
+#define SPITZ_GPIO_USB_HOST (37) /* USB OTG 5V Host power supply control */
+#define SPITZ_GPIO_USB_CONNECT (41) /* USB Host Cable is connected */
+
+
+/* Spitz/Akita Audio */
+
+#define SPITZ_GPIO_HP_IN (116) /* CPU Headphone detect */
+#define SPITZ_GPIO_AK_INT (13) /* Remote Control detect */
+/* These GPIO AC97 pins are connected:
+ * GPIO28_BITCLK
+ * GPIO29_SDATA_IN
+ * GPIO30_SDATA_OUT
+ * GPIO31_SYNC
+ * GPIO113_AC97_RESET_N
+ */
+
+
+/* Spitz/Akita SD Slot */
+
+#define SPITZ_GPIO_nSD_DETECT (9) /* SD Card Presence */
+#define SPITZ_GPIO_nSD_WP (81) /* SD Write Protection */
+/* These GPIO pins are connected:
+ * GPIO32_MMCCLK
+ * GPIO92_MMCDAT0
+ * GPIO109_MMCDAT1
+ * GPIO110_MMCDAT2
+ * GPIO111_MMCDAT3
+ * GPIO112_MMCCMD
+ */
+
+/* Spitz/Akita I2C bus */
+#define SPITZ_GPIO_SCL (117) /* I2C SCL */
+#define SPITZ_GPIO_SDA (118) /* I2C SDA */
+#define SPITZ_GPIO_PWR_SCL (3) /* I2C SCL power */
+#define SPITZ_GPIO_PWR_SDA (4) /* I2C SDA power */
+
+/* audio codec pins */
+
+
+/* Spitz/Akita UART ports */
+
+/* Fully Featured UART - connected to IOPORT connector */
+#define SPITZ_GPIO_FFRXD (102) /* IOPORT has nRXD inverted levels */
+#define SPITZ_GPIO_FFTXD (99) /* IOPORT has nTXD inverted levels */
+#define SPITZ_GPIO_FFRTS (98)
+#define SPITZ_GPIO_FFCTS (100)
+#define SPITZ_GPIO_FFDTR (82)
+#define SPITZ_GPIO_FFDSR (33)
+
+/* These UART GPIO pins are connected to Bluetooth
+ * (only on Akita version with Bluetooth)
+ * GPIO42_BTRXD
+ * GPIO43_BTTXD
+ * GPIO44_BTCTS
+ * GPIO45_BTRTS
+ */
+
+/* These UART GPIO pins are connected to IrDA:
+ * GPIO46_STRXD
+ * GPIO47_STTXD
+ */
+
/* Spitz/Akita Keyboard Definitions */
-#define SPITZ_KEY_STROBE_NUM (11)
-#define SPITZ_KEY_SENSE_NUM (7)
-#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000
-#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000
-#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000
-#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880
-#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000
-#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4
-#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000
-#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000
-
-#define SPITZ_GPIO_KEY_STROBE0 88
-#define SPITZ_GPIO_KEY_STROBE1 23
-#define SPITZ_GPIO_KEY_STROBE2 24
-#define SPITZ_GPIO_KEY_STROBE3 25
-#define SPITZ_GPIO_KEY_STROBE4 26
-#define SPITZ_GPIO_KEY_STROBE5 27
-#define SPITZ_GPIO_KEY_STROBE6 52
-#define SPITZ_GPIO_KEY_STROBE7 103
-#define SPITZ_GPIO_KEY_STROBE8 107
-#define SPITZ_GPIO_KEY_STROBE9 108
-#define SPITZ_GPIO_KEY_STROBE10 114
-
-#define SPITZ_GPIO_KEY_SENSE0 12
-#define SPITZ_GPIO_KEY_SENSE1 17
-#define SPITZ_GPIO_KEY_SENSE2 91
-#define SPITZ_GPIO_KEY_SENSE3 34
-#define SPITZ_GPIO_KEY_SENSE4 36
-#define SPITZ_GPIO_KEY_SENSE5 38
-#define SPITZ_GPIO_KEY_SENSE6 39
+#define SPITZ_KEY_STROBE_NUM (11)
+#define SPITZ_KEY_SENSE_NUM (7)
+#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000
+#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000
+#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000
+#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880
+#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000
+#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4
+#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000
+#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000
+#define SPITZ_GPIO_KEY_STROBE0 (88)
+#define SPITZ_GPIO_KEY_STROBE1 (23)
+#define SPITZ_GPIO_KEY_STROBE2 (24)
+#define SPITZ_GPIO_KEY_STROBE3 (25)
+#define SPITZ_GPIO_KEY_STROBE4 (26)
+#define SPITZ_GPIO_KEY_STROBE5 (27)
+#define SPITZ_GPIO_KEY_STROBE6 (52)
+#define SPITZ_GPIO_KEY_STROBE7 (103)
+#define SPITZ_GPIO_KEY_STROBE8 (107)
+#define SPITZ_GPIO_KEY_STROBE9 (108)
+#define SPITZ_GPIO_KEY_STROBE10 (114)
+#define SPITZ_GPIO_KEY_SENSE0 (12)
+#define SPITZ_GPIO_KEY_SENSE1 (17)
+#define SPITZ_GPIO_KEY_SENSE2 (91)
+#define SPITZ_GPIO_KEY_SENSE3 (34)
+#define SPITZ_GPIO_KEY_SENSE4 (36)
+#define SPITZ_GPIO_KEY_SENSE5 (38)
+#define SPITZ_GPIO_KEY_SENSE6 (39)
+
+#define SPITZ_GPIO_SWA (97) /* Keyboard Interrupt A */
+#define SPITZ_GPIO_SWB (96) /* Keyboard Interrupt B */
+#define SPITZ_GPIO_ON_KEY (95) /* Power On Key */
-/* Spitz Scoop Device (No. 1) GPIOs */
+/* Spitz/Akita Scoop Device (No. 1) GPIOs */
/* Suspend States in comments */
-#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Keep */
-#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Keep */
-#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Keep */
-#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Low */
-#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Low */
-#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* Keep */
-#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Keep */
-#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Low */
-#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Low */
+#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Green LED, Keep */
+#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Fast Charge On, Keep */
+#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Charge On, Keep */
+#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Extra Mute Left, Low */
+#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Extra Mute Right, Low */
+#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* CF+SD Power Circuit, Keep */
+#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Orange LED, Keep */
+#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Dummy Load, Low */
+#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Battery Sensor On, Low */
#define SPITZ_SCP_IO_DIR (SPITZ_SCP_LED_GREEN | SPITZ_SCP_JK_B | SPITZ_SCP_CHRG_ON | \
- SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \
- SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
+ SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \
+ SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
#define SPITZ_SCP_IO_OUT (SPITZ_SCP_CHRG_ON | SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R)
#define SPITZ_SCP_SUS_CLR (SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
#define SPITZ_SCP_SUS_SET 0
/* Spitz Scoop Device (No. 2) GPIOs */
-/* Suspend States in comments */
-#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* High */
-#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Keep */
-#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */
-#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */
-#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */
-#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */
-#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Low */
-#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Low */
-#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Low */
+/* Suspend States in comments
+ * Spitz only, Akita uses corresponding AKITA_IOEXP_ */
+#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* IrDA On, High */
+#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Pull-Up for Remote, Keep */
+#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */
+#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */
+#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */
+#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */
+#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Backlight Control, Low */
+#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Backlight On, Low */
+#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Mic Bias On, Low */
#define SPITZ_SCP2_IO_DIR (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1 | \
- SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
+ SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
+ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
#define SPITZ_SCP2_IO_OUT (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1)
#define SPITZ_SCP2_SUS_CLR (SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
+ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
#define SPITZ_SCP2_SUS_SET (SPITZ_SCP2_IR_ON | SPITZ_SCP2_RESERVED_1)
-/* Spitz IRQ Definitions */
+/* Spitz/Akita IRQ Definitions */
-#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT)
-#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN)
-#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT)
-#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN)
-#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT)
-#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC)
-#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY)
-#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA)
-#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB)
+#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT)
+#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN)
+#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT)
+#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN)
+#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT)
+#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC)
+#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY)
+#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA)
+#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB)
#define SPITZ_IRQ_GPIO_BAT_COVER IRQ_GPIO(SPITZ_GPIO_BAT_COVER)
#define SPITZ_IRQ_GPIO_FATAL_BAT IRQ_GPIO(SPITZ_GPIO_FATAL_BAT)
-#define SPITZ_IRQ_GPIO_CO IRQ_GPIO(SPITZ_GPIO_CO)
-#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ)
-#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD)
-#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ)
-#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT)
+#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ)
+#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD)
+#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ)
+#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT)
#define SPITZ_IRQ_GPIO_nSD_DETECT IRQ_GPIO(SPITZ_GPIO_nSD_DETECT)
/*
@@ -156,3 +274,5 @@
extern struct platform_device spitzscoop2_device;
extern struct platform_device spitzssp_device;
extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
+
+#endif
Index: linux-2.6.26-rc4/sound/arm/pxa2xx-ac97.c
===================================================================
--- linux-2.6.26-rc4.orig/sound/arm/pxa2xx-ac97.c 2008-05-26 19:08:11.000000000 +0100
+++ linux-2.6.26-rc4/sound/arm/pxa2xx-ac97.c 2008-06-02 00:19:38.000000000 +0100
@@ -156,10 +156,10 @@
#ifdef CONFIG_PXA27x
/* warm reset broken on Bulverde,
so manually keep AC97 reset high */
- pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH);
+ pxa_gpio_mode(GPIO113_AC97_RESET_N | GPIO_OUT | GPIO_DFLT_HIGH);
udelay(10);
GCR |= GCR_WARM_RST;
- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
+ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD);
udelay(500);
#elif defined(CONFIG_PXA3xx)
timeout = 100;
@@ -364,7 +364,7 @@
pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
#ifdef CONFIG_PXA27x
/* Use GPIO 113 as AC97 Reset on Bulverde */
- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
+ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD | GPIO_ALT_FN_2_OUT);
ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK");
if (IS_ERR(ac97conf_clk)) {
ret = PTR_ERR(ac97conf_clk);
Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa2xx-gpio.h
===================================================================
--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/pxa2xx-gpio.h 2008-06-02 00:18:07.000000000 +0100
+++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa2xx-gpio.h 2008-06-02 00:18:28.000000000 +0100
@@ -138,6 +138,7 @@
#define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */
#define GPIO103_CIF_DD_3 103 /* Camera data pin 3 */
#define GPIO104_CIF_DD_2 104 /* Camera data pin 2 */
+#define GPIO104_pSKTSEL 104 /* PCMCIA Socket Select (PXA27x) */
#define GPIO105_CIF_DD_1 105 /* Camera data pin 1 */
#define GPIO106_CIF_DD_9 106 /* Camera data pin 9 */
#define GPIO107_CIF_DD_8 107 /* Camera data pin 8 */

View File

@ -0,0 +1,17 @@
---
arch/arm/mm/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: linux-2.6.26-rc4/arch/arm/mm/Kconfig
===================================================================
--- linux-2.6.26-rc4.orig/arch/arm/mm/Kconfig 2008-05-26 19:08:11.000000000 +0100
+++ linux-2.6.26-rc4/arch/arm/mm/Kconfig 2008-06-01 18:40:07.000000000 +0100
@@ -387,7 +387,7 @@
# ARMv6
config CPU_V6
bool "Support ARM V6 processor"
- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176
+ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || ARCH_VERSATILE_PB
default y if ARCH_MX3
default y if ARCH_MSM7X00A
select CPU_32v6

View File

@ -0,0 +1,45 @@
From 04c42f566c68b757fdadf54e0e0f9dfe9f3f9b06 Mon Sep 17 00:00:00 2001
From: eric miao <eric.miao@marvell.com>
Date: Tue, 19 Jun 2007 16:42:53 +0800
Subject: [PATCH] [PATCH] make zylonite boot
1. reuse head-xscale.S for XSC3
2. add a workaround for machine ID assignment, which should be done
by boot loader
---
arch/arm/boot/compressed/Makefile | 4 ++++
arch/arm/boot/compressed/head-xscale.S | 5 +++++
2 files changed, 9 insertions(+)
Index: linux-2.6-pxa3/arch/arm/boot/compressed/Makefile
===================================================================
--- linux-2.6-pxa3.orig/arch/arm/boot/compressed/Makefile 2007-09-24 11:25:57.000000000 +0200
+++ linux-2.6-pxa3/arch/arm/boot/compressed/Makefile 2007-09-24 12:26:53.000000000 +0200
@@ -40,6 +40,10 @@
OBJS += head-xscale.o
endif
+ifeq ($(CONFIG_CPU_XSC3),y)
+OBJS += head-xscale.o
+endif
+
ifeq ($(CONFIG_PXA_SHARPSL),y)
OBJS += head-sharpsl.o
endif
Index: linux-2.6-pxa3/arch/arm/boot/compressed/head-xscale.S
===================================================================
--- linux-2.6-pxa3.orig/arch/arm/boot/compressed/head-xscale.S 2007-09-24 11:42:27.000000000 +0200
+++ linux-2.6-pxa3/arch/arm/boot/compressed/head-xscale.S 2007-09-24 12:26:02.000000000 +0200
@@ -33,6 +33,11 @@
bic r0, r0, #0x1000 @ clear Icache
mcr p15, 0, r0, c1, c0, 0
+#ifdef CONFIG_MACH_ZYLONITE
+ mov r7, #(MACH_TYPE_ZYLONITE & 0xff)
+ orr r7, r7, #(MACH_TYPE_ZYLONITE & 0xff00)
+#endif
+
#ifdef CONFIG_ARCH_COTULLA_IDP
mov r7, #MACH_TYPE_COTULLA_IDP
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,190 @@
require linux-rp.inc
PR = "r5"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_qemuarm = "1"
DEFAULT_PREFERENCE_qemux86 = "1"
DEFAULT_PREFERENCE_spitz = "1"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
# ${KERNELORG_MIRROR}pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
# ${KERNELORG_MIRROR}pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
# Patches submitted upstream are towards top of this list
# Hacks should clearly named and at the bottom
SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \
${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.26-rc4.bz2;patch=1 \
${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
${RPSRC}/hx2750_base-r34.patch;patch=1 \
${RPSRC}/hx2750_bl-r9.patch;patch=1 \
${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \
${RPSRC}/pxa_keys-r9.patch;patch=1 \
${RPSRC}/tsc2101-r19.patch;patch=1 \
${RPSRC}/hx2750_test1-r8.patch;patch=1 \
${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
${RPSRC}/pm_changes-r1.patch;patch=1 \
${RPSRC}/locomo_kbd_tweak-r2.patch;patch=1 \
# ${RPSRC}/pxa27x_overlay-r8.patch;patch=1 \
${RPSRC}/w100_extaccel-r2.patch;patch=1 \
${RPSRC}/w100_extmem-r1.patch;patch=1 \
${RPSRC}/poodle_pm-r6.patch;patch=1 \
${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \
${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \
${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
file://hostap-monitor-mode.patch;patch=1;status=unmergable \
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \
${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
${RPSRC}/mmcsd_no_scr_check-r2.patch;patch=1;status=hack \
${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
file://sharpsl-rc-r1.patch;patch=1 \
file://sharpsl-rc-r2.patch;patch=1 \
file://spitz_h_rewrite.patch;patch=1 \
file://pxa-serial-hack.patch;patch=1;status=hack \
file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
file://htcuni.patch;patch=1 \
file://versatile-armv6.patch;patch=1 \
file://defconfig-c7x0 \
file://defconfig-hx2000 \
file://defconfig-akita \
file://defconfig-spitz \
file://defconfig-qemuarm \
file://defconfig-qemux86 \
file://defconfig-bootcdx86 \
file://defconfig-htcuniversal \
file://defconfig-zylonite"
# Disabled until the patchset is updated:
# file://defconfig-tosa
# file://defconfig-collie
# file://defconfig-poodle
# FIXMEs before made default
# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
# Add this to enable pm debug code (useful with a serial lead)
# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
# Disabled until I find the reason this gives issues with cdc_subset
# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
SRC_URI_append_collie = "\
${TKSRC}/mtd-sharp-flash-hack-r4.patch;patch=1 \
${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
${TKSRC}/locomo-r1.patch;patch=1 \
${TKSRC}/collie-kexec-r1.patch;patch=1 \
${TKSRC}/sharpsl_pm-4.patch;patch=1 \
${TKSRC}/collie_pm-3.patch;patch=1 \
${TKSRC}/ucb1x00_suspend.patch;patch=1 \
${TKSRC}/collie-ts.patch;patch=1 \
${TKSRC}/pcmcia_suspend.patch;patch=1 \
${TKSRC}/locomo_spi-6.patch;patch=1 \
${TKSRC}/config.patch;patch=1 \
${TKSRC}/locomokeyb-2.patch;patch=1 \
${TKSRC}/mmc-spi.patch;patch=1 \
${TKSRC}/linux-2.6.24-SIMpad-rtc-sa1100.patch;patch=1 \
${TKSRC}/sa1100_spinlock.patch;patch=1 \
${TKSRC}/sa1100-dma.patch;patch=1 \
${TKSRC}/sa1100_udc_g_ether-2.patch;patch=1 \
"
SRC_URI_append_poodle = "\
${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \
file://poodle_ts.patch;patch=1 \
file://pxafb.patch;patch=1 \
"
SRC_URI_append_tosa = "\
file://tosa/0001-Allow-runtime-registration-of-regions-of-memory-that.patch;patch=1 \
file://tosa/0002-Modify-dma_alloc_coherent-on-ARM-so-that-it-supports.patch;patch=1 \
file://tosa/0003-Core-MFD-support.patch;patch=1 \
file://tosa/0004-Add-support-for-tc6393xb-MFD-core.patch;patch=1 \
file://tosa/0005-Add-support-for-tc6387xb-MFD-core.patch;patch=1 \
file://tosa/0006-Add-support-for-t7l66xb-MFD-core.patch;patch=1 \
file://tosa/0007-Common-headers-for-TMIO-MFD-subdevices.patch;patch=1 \
file://tosa/0008-Nand-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0009-FB-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0010-OHCI-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0011-MMC-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0012-Tosa-keyboard-support.patch;patch=1 \
file://tosa/0013-USB-gadget-pxa2xx_udc-supports-inverted-vbus.patch;patch=1 \
file://tosa/0014-tosa_udc_use_gpio_vbus.patch.patch;patch=1 \
file://tosa/0015-sharpsl-export-params.patch;patch=1 \
file://tosa/0016-This-patch-fixes-the-pxa25x-clocks-definitions-to-ad.patch;patch=1 \
file://tosa/0017-Convert-pxa2xx-UDC-to-use-debugfs.patch;patch=1 \
file://tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch;patch=1 \
file://tosa/0026-I-don-t-think-we-should-check-for-IRQs-when-determin.patch;patch=1 \
file://tosa/0027-Add-LiMn-one-of-the-most-common-for-small-non-recha.patch;patch=1 \
file://tosa/0028-Add-suspend-resume-wakeup-support-for-pda_power.patch;patch=1 \
file://tosa/0029-Support-using-VOLTAGE_-properties-for-apm-calculati.patch;patch=1 \
file://tosa/0030-Core-driver-for-WM97xx-touchscreens.patch;patch=1 \
file://tosa/0031-Add-chip-driver-for-WM9705-touchscreen.patch;patch=1 \
file://tosa/0032-Add-chip-driver-for-WM9712-touchscreen.patch;patch=1 \
file://tosa/0033-Add-chip-driver-for-WM9713-touchscreen.patch;patch=1 \
file://tosa/0034-Driver-for-WM97xx-touchscreens-in-streaming-mode-on.patch;patch=1 \
file://tosa/0035-Build-system-and-MAINTAINERS-entry-for-WM97xx-touchs.patch;patch=1 \
file://tosa/0036-Set-id-to-1-for-wm97xx-subdevices.patch;patch=1 \
file://tosa/0037-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \
file://tosa/0038-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \
file://tosa/0044-fix-tmio_mmc-debug-compilation.patch;patch=1 \
file://tosa/0045-Update-tmio_ohci.patch;patch=1 \
file://tosa/0046-patch-tc6393xb-cleanup.patch;patch=1 \
file://tosa/0047-tc6393xb-use-bitmasks-instead-of-bit-field-structs.patch;patch=1 \
file://tosa/0048-tc6393xb-GPIO-support.patch;patch=1 \
file://tosa/0049-platform-support-for-TMIO-on-tosa.patch;patch=1 \
file://tosa/0050-tosa-update-for-tc6393xb-gpio.patch;patch=1 \
file://tosa/0051-fix-sound-soc-pxa-tosa.c-to-new-gpio-api.patch;patch=1 \
file://tosa/0052-tosa-platform-backlight-support.patch;patch=1 \
file://tosa/0053-sound-soc-codecs-wm9712.c-28.patch;patch=1 \
file://tosa/0054-sound-soc-codecs-wm9712.c-2.patch;patch=1 \
file://tosa/0055-Add-GPIO_POWERON-to-the-list-of-devices-that-we-supp.patch;patch=1 \
file://tosa/0058-Fix-tosakbd-suspend.patch;patch=1 \
file://tosa/0059-patch-tosa-wakeup-test.patch;patch=1 \
file://tosa/0060-Add-support-for-power_supply-on-tosa.patch;patch=1 \
file://tosa/0061-tosa-bat-unify.patch;patch=1 \
file://tosa/0062-tosa-bat-fix-charging.patch;patch=1 \
file://tosa/0063-patch-tosa-bat-jacket-detect.patch;patch=1 \
file://tosa/0064-Export-modes-via-sysfs.patch;patch=1 \
file://tosa/0065-wm97xx-core-fixes.patch;patch=1 \
file://tosa/0066-tmiofb_probe-should-be-__devinit.patch;patch=1 \
file://tosa/0067-modeswitching.patch;patch=1 \
file://tosa/0068-Preliminary-tosa-denoiser.patch;patch=1 \
file://tosa/0019-pxa-remove-periodic-mode-emulation-support.patch;patch=1 \
file://tosa/0020-Provide-dew-device-clock-backports-from-2.6.24-git.patch;patch=1 \
file://tosa/0021-Add-an-empty-drivers-gpio-directory-for-gpiolib-infr.patch;patch=1 \
file://tosa/0022-Provide-new-implementation-infrastructure-that-platf.patch;patch=1 \
file://tosa/0023-This-adds-gpiolib-support-for-the-PXA-architecture.patch;patch=1 \
file://tosa/0024-Update-Documentation-gpio.txt-primarily-to-include.patch;patch=1 \
file://tosa/0025-Signed-off-by-Dmitry-Baryshkov-dbaryshkov-gmail.co.patch;patch=1 \
file://tosa/0039-Add-generic-framework-for-managing-clocks.patch;patch=1 \
file://tosa/0040-Clocklib-debugfs-support.patch;patch=1 \
file://tosa/0041-From-80a359e60c2aec59ccf4fca0a7fd20495f82b1d2-Mon-Se.patch;patch=1 \
file://tosa/0042-Use-correct-clock-for-IrDA-on-pxa.patch;patch=1 \
file://tosa/0043-Use-clocklib-for-sa1100-sub-arch.patch;patch=1 \
file://tosa/0056-Support-resetting-by-asserting-GPIO-pin.patch;patch=1 \
file://tosa/0057-Clean-up-tosa-resetting.patch;patch=1 \
"
SRC_URI_append_htcuniversal ="\
file://htcuni-acx.patch;patch=1;status=external \
"
SRC_URI_append_zylonite ="\
file://pxa_fb_overlay.patch;patch=1 \
file://zylonite-boot.patch;patch=1 \
file://zylonite_mtd-r0.patch;patch=1 \
file://zylonite_touch-r0.patch;patch=1 \
file://zylonite_keypad-r0.patch;patch=1 \
"
S = "${WORKDIR}/linux-2.6.25"