Add linux-rp 2.6.22+2.6.23-rc4 (not default)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2585 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
parent
bfc657cd2f
commit
2ab6191779
|
@ -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
|
@ -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,
|
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
|
@ -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++;
|
|
@ -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.
|
||||
*/
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,208 @@
|
|||
Index: linux-tosa/drivers/input/touchscreen/wm9712.c
|
||||
===================================================================
|
||||
--- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
|
||||
+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
|
||||
*
|
||||
- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
|
||||
+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
|
||||
* Author: Liam Girdwood
|
||||
* liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
|
||||
* Parts Copyright : Ian Molton <spyro@f2s.com>
|
||||
@@ -13,6 +13,12 @@
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
+ * Revision history
|
||||
+ * 4th Jul 2005 Initial version.
|
||||
+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
|
||||
+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
|
||||
+ * touchscreen interference.
|
||||
+ *
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -28,6 +34,10 @@
|
||||
#define WM9705_VERSION "0.60"
|
||||
#define DEFAULT_PRESSURE 0xb0c0
|
||||
|
||||
+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
|
||||
+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
|
||||
+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
|
||||
+
|
||||
/*
|
||||
* Debug
|
||||
*/
|
||||
@@ -243,6 +253,36 @@
|
||||
return wm->dig[2] & WM9712_PDEN;
|
||||
}
|
||||
|
||||
+
|
||||
+#ifdef CONFIG_MACH_TOSA
|
||||
+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
|
||||
+ * before sampling the Y axis of the touchscreen */
|
||||
+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
|
||||
+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
|
||||
+ if (adcsel == WM97XX_ADCSEL_Y) {
|
||||
+ wait_time = wm97xx_calc_lcd_waittime(wm);
|
||||
+
|
||||
+ CCNT_ON();
|
||||
+
|
||||
+ if (wait_time) {
|
||||
+ /* wait for LCD rising edge */
|
||||
+ wm_machinfo->wait_hsync();
|
||||
+ /* get clock */
|
||||
+ CCNT(timer1);
|
||||
+ CCNT(timer2);
|
||||
+
|
||||
+ while ((timer2 - timer1) < wait_time) {
|
||||
+ CCNT(timer2);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static inline void wm9712_lcd_sync_off(void) {
|
||||
+ CCNT_OFF();
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Read a sample from the WM9712 adc in polling mode.
|
||||
*/
|
||||
@@ -260,6 +300,9 @@
|
||||
/* set up digitiser */
|
||||
if (adcsel & 0x8000)
|
||||
adcsel = ((adcsel & 0x7fff) + 3) << 12;
|
||||
+ #ifdef CONFIG_MACH_TOSA
|
||||
+ wm9712_lcd_sync_on(wm, adcsel);
|
||||
+ #endif
|
||||
wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
|
||||
|
||||
/* wait 3 AC97 time slots + delay for conversion */
|
||||
@@ -282,6 +325,10 @@
|
||||
|
||||
*sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
|
||||
|
||||
+ #ifdef CONFIG_MACH_TOSA
|
||||
+ wm9712_lcd_sync_off();
|
||||
+ #endif
|
||||
+
|
||||
/* check we have correct sample */
|
||||
if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
|
||||
dbg ("adc wrong sample, read %x got %x", adcsel,
|
||||
@@ -303,11 +350,12 @@
|
||||
static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
|
||||
{
|
||||
int rc;
|
||||
-
|
||||
if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
|
||||
return rc;
|
||||
+
|
||||
if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
|
||||
return rc;
|
||||
+
|
||||
if (pil && !five_wire) {
|
||||
if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
|
||||
return rc;
|
||||
Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
|
||||
===================================================================
|
||||
--- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
|
||||
+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
|
||||
@@ -2,7 +2,7 @@
|
||||
* wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
|
||||
* and WM9713 AC97 Codecs.
|
||||
*
|
||||
- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
|
||||
+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
|
||||
* Author: Liam Girdwood
|
||||
* liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
|
||||
* Parts Copyright : Ian Molton <spyro@f2s.com>
|
||||
@@ -67,6 +67,9 @@
|
||||
* GPIOs) and 2.6 power management.
|
||||
* 29th Nov 2004 Added WM9713 support.
|
||||
* 4th Jul 2005 Moved codec specific code out to seperate files.
|
||||
+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
|
||||
+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
|
||||
+ * touchscreen interference.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -94,6 +97,7 @@
|
||||
static DECLARE_MUTEX(gpio_sem);
|
||||
static LIST_HEAD(wm97xx_misc_list);
|
||||
static struct wm97xx* wm_codec = NULL;
|
||||
+struct wm97xx_machinfo *wm_machinfo;
|
||||
|
||||
/*
|
||||
* WM97xx - enable/disable AUX ADC sysfs
|
||||
@@ -832,6 +836,23 @@
|
||||
mdev->remove(wm_codec);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_MACH_TOSA
|
||||
+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
|
||||
+ * before sampling the Y axis of the touchscreen */
|
||||
+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
|
||||
+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
|
||||
+ return hsync_time;
|
||||
+}
|
||||
+
|
||||
+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
|
||||
+ wm_machinfo = machinfo;
|
||||
+}
|
||||
+
|
||||
+void wm97xx_unset_machinfo() {
|
||||
+ wm_machinfo = NULL;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static struct device_driver wm97xx_driver = {
|
||||
.name = "ac97",
|
||||
.bus = &ac97_bus_type,
|
||||
@@ -861,6 +882,9 @@
|
||||
EXPORT_SYMBOL_GPL(wm97xx_reg_write);
|
||||
EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
|
||||
EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
|
||||
+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
|
||||
+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
|
||||
+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
|
||||
|
||||
module_init(wm97xx_init);
|
||||
module_exit(wm97xx_exit);
|
||||
Index: linux-tosa/include/linux/wm97xx.h
|
||||
===================================================================
|
||||
--- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
|
||||
+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
|
||||
@@ -207,6 +207,7 @@
|
||||
|
||||
struct wm97xx;
|
||||
extern struct wm97xx_codec_drv wm97xx_codec;
|
||||
+extern struct wm97xx_machinfo *wm_machinfo;
|
||||
|
||||
/*
|
||||
* Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
|
||||
@@ -253,6 +254,11 @@
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
+struct wm97xx_machinfo {
|
||||
+ unsigned long (*get_hsync_time)(void);
|
||||
+ void (*wait_hsync)(void);
|
||||
+};
|
||||
+
|
||||
int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
|
||||
void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
|
||||
|
||||
@@ -281,4 +287,9 @@
|
||||
int wm97xx_acc_startup(struct wm97xx* wm);
|
||||
void wm97xx_acc_shutdown(struct wm97xx* wm);
|
||||
|
||||
+
|
||||
+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
|
||||
+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
|
||||
+void wm97xx_unset_machinfo(void);
|
||||
+
|
||||
#endif
|
|
@ -0,0 +1,116 @@
|
|||
require linux-rp.inc
|
||||
|
||||
PR = "r0"
|
||||
|
||||
DEFAULT_PREFERNCE = "-1"
|
||||
|
||||
# Handy URLs
|
||||
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
|
||||
# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
|
||||
# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
|
||||
# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
|
||||
# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
|
||||
# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
|
||||
# http://www.kernel.org/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 = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
|
||||
http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.23-rc4.bz2;patch=1 \
|
||||
${RPSRC}/lzo_jffs2-r2.patch;patch=1 \
|
||||
${RPSRC}/lzo_crypto-r2.patch;patch=1 \
|
||||
${RPSRC}/lzo_jffs2_lzomode-r1.patch;patch=1 \
|
||||
${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
|
||||
${RPSRC}/hx2750_base-r29.patch;patch=1 \
|
||||
${RPSRC}/hx2750_bl-r9.patch;patch=1 \
|
||||
${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
|
||||
${RPSRC}/pxa_keys-r7.patch;patch=1 \
|
||||
${RPSRC}/tsc2101-r16.patch;patch=1 \
|
||||
${RPSRC}/hx2750_test1-r7.patch;patch=1 \
|
||||
${RPSRC}/input_power-r9.patch;patch=1 \
|
||||
${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
|
||||
${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
|
||||
${RPSRC}/pm_changes-r1.patch;patch=1 \
|
||||
${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
|
||||
${RPSRC}/usb_pxa27x_udc-r6.patch;patch=1 \
|
||||
${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
|
||||
${RPSRC}/poodle_pm-r4.patch;patch=1 \
|
||||
${RPSRC}/pxa27x_overlay-r6.patch;patch=1 \
|
||||
${RPSRC}/w100_extaccel-r1.patch;patch=1 \
|
||||
file://hostap-monitor-mode.patch;patch=1 \
|
||||
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
|
||||
${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
|
||||
${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
|
||||
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
|
||||
${RPSRC}/mmcsd_large_cards-r1.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://pxa-serial-hack.patch;patch=1;status=hack \
|
||||
file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
|
||||
file://squashfs3.0-2.6.15.patch;patch=1;status=external \
|
||||
file://uvesafb-0.1-rc3-2.6.22.patch;patch=1;status=external \
|
||||
file://defconfig-c7x0 \
|
||||
file://defconfig-hx2000 \
|
||||
file://defconfig-collie \
|
||||
file://defconfig-poodle \
|
||||
file://defconfig-akita \
|
||||
file://defconfig-spitz \
|
||||
file://defconfig-qemuarm \
|
||||
file://defconfig-qemux86 \
|
||||
file://defconfig-bootcdx86 \
|
||||
file://defconfig-htcuniversal \
|
||||
file://defconfig-tosa "
|
||||
|
||||
# FIXMEs before made default
|
||||
# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
|
||||
# file://htcuni.patch;patch=1
|
||||
|
||||
|
||||
# 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 \
|
||||
|
||||
# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
|
||||
# (Pavel Machek's git tree has updated versions of this?)
|
||||
# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
|
||||
|
||||
# These patches are extracted from Pavel Machek's git tree
|
||||
# (diff against vanilla kernel)
|
||||
SRC_URI_append_collie = "\
|
||||
${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
|
||||
${DOSRC}/collie/collie-r0.patch;patch=1 \
|
||||
${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
|
||||
${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
|
||||
file://collie-mcp-r1.patch;patch=1 \
|
||||
${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
|
||||
# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
|
||||
"
|
||||
|
||||
SRC_URI_append_tosa = "\
|
||||
${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
|
||||
${CHSRC}/tmio-core-r4.patch;patch=1 \
|
||||
file://tmio-tc6393-r8.patch;patch=1 \
|
||||
file://tmio-nand-r7.patch;patch=1 \
|
||||
file://tmio-ohci-r6.patch;patch=1 \
|
||||
${CHSRC}/tmio-fb-r6.patch;patch=1 \
|
||||
file://tosa-keyboard-r18.patch;patch=1 \
|
||||
${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
|
||||
${DOSRC}/tosa-tmio-r6.patch;patch=1 \
|
||||
${DOSRC}/tosa-power-r17.patch;patch=1 \
|
||||
file://tosa-tmio-lcd-r10.patch;patch=1 \
|
||||
${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
|
||||
${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
|
||||
file://wm9712-suspend-cold-res-r2.patch;patch=1 \
|
||||
file://sharpsl-pm-postresume-r1.patch;patch=1 \
|
||||
${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
|
||||
${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
|
||||
file://wm9712-reset-loop-r2.patch;patch=1 \
|
||||
file://tosa-lcdnoise-r1.patch;patch=1 \
|
||||
file://wm97xx-lcdnoise-r0.patch;patch=1 "
|
||||
# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
|
||||
|
||||
SRC_URI_append_htcuniversal ="file://htcuni-acx.patch;patch=1;status=external"
|
||||
|
||||
S = "${WORKDIR}/linux-2.6.22"
|
Loading…
Reference in New Issue