aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2010-08-12 14:35:59 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-08-12 14:35:59 -0700
commit1b7f0118b6230122c54406c62c9a446b93667456 (patch)
treea347e2aa67aa99b4aa7b71eee03da869ea53586a
parentf32abb8c7a4b184000d1c7cbef8b14db7c131147 (diff)
downloadpatches-1b7f0118b6230122c54406c62c9a446b93667456.tar.gz
bug fixes
-rw-r--r--driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch146
-rw-r--r--f1.patch14
-rw-r--r--series38
-rw-r--r--staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch56
-rw-r--r--staging.current/staging-spectra-initializa-lblk-variable.patch30
-rw-r--r--staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch30
-rw-r--r--staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch45
-rw-r--r--staging.current/staging-spectra-removes-unused-functions.patch477
-rw-r--r--staging.current/staging-spectra-removes-unused-variable.patch27
-rw-r--r--staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch29
-rw-r--r--tty.current/serial-print-early-console-device-address-in-hex.patch40
-rw-r--r--usb.current/usb-add-device-ids-for-igotu-to-navman.patch43
-rw-r--r--usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch49
-rw-r--r--usb.current/usb-option-add-celot-ct-650.patch43
-rw-r--r--usb.current/usb-pl2303-new-vendor-and-product-id.patch50
-rw-r--r--usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch117
-rw-r--r--usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch37
17 files changed, 1261 insertions, 10 deletions
diff --git a/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch b/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch
new file mode 100644
index 00000000000000..9f43911ad61bbc
--- /dev/null
+++ b/driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch
@@ -0,0 +1,146 @@
+From dhowells@redhat.com Thu Aug 12 13:40:21 2010
+From: David Howells <dhowells@redhat.com>
+Subject: kobject: Break the kobject namespace defs into their own header
+To: ebiederm@xmission.com, gregkh@suse.de
+Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
+ David Howells <dhowells@redhat.com>
+Date: Wed, 11 Aug 2010 15:01:02 +0100
+Message-ID: <20100811140102.19596.84876.stgit@warthog.procyon.org.uk>
+
+Break the kobject namespace defs into their own header to avoid a header file
+inclusion ordering problem between linux/sysfs.h and linux/kobject.h.
+
+This fixes the build breakage on older versions of gcc.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+Cc: Eric Biederman <ebiederm@xmission.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/kobject.h | 35 ----------------------------
+ include/linux/kobject_ns.h | 56 +++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/sysfs.h | 1
+ 3 files changed, 58 insertions(+), 34 deletions(-)
+
+--- a/include/linux/kobject.h
++++ b/include/linux/kobject.h
+@@ -22,6 +22,7 @@
+ #include <linux/compiler.h>
+ #include <linux/spinlock.h>
+ #include <linux/kref.h>
++#include <linux/kobject_ns.h>
+ #include <linux/kernel.h>
+ #include <linux/wait.h>
+ #include <asm/atomic.h>
+@@ -136,42 +137,8 @@ struct kobj_attribute {
+
+ extern const struct sysfs_ops kobj_sysfs_ops;
+
+-/*
+- * Namespace types which are used to tag kobjects and sysfs entries.
+- * Network namespace will likely be the first.
+- */
+-enum kobj_ns_type {
+- KOBJ_NS_TYPE_NONE = 0,
+- KOBJ_NS_TYPE_NET,
+- KOBJ_NS_TYPES
+-};
+-
+ struct sock;
+
+-/*
+- * Callbacks so sysfs can determine namespaces
+- * @current_ns: return calling task's namespace
+- * @netlink_ns: return namespace to which a sock belongs (right?)
+- * @initial_ns: return the initial namespace (i.e. init_net_ns)
+- */
+-struct kobj_ns_type_operations {
+- enum kobj_ns_type type;
+- const void *(*current_ns)(void);
+- const void *(*netlink_ns)(struct sock *sk);
+- const void *(*initial_ns)(void);
+-};
+-
+-int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
+-int kobj_ns_type_registered(enum kobj_ns_type type);
+-const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
+-const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
+-
+-const void *kobj_ns_current(enum kobj_ns_type type);
+-const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
+-const void *kobj_ns_initial(enum kobj_ns_type type);
+-void kobj_ns_exit(enum kobj_ns_type type, const void *ns);
+-
+-
+ /**
+ * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
+ *
+--- /dev/null
++++ b/include/linux/kobject_ns.h
+@@ -0,0 +1,56 @@
++/* Kernel object name space definitions
++ *
++ * Copyright (c) 2002-2003 Patrick Mochel
++ * Copyright (c) 2002-2003 Open Source Development Labs
++ * Copyright (c) 2006-2008 Greg Kroah-Hartman <greg@kroah.com>
++ * Copyright (c) 2006-2008 Novell Inc.
++ *
++ * Split from kobject.h by David Howells (dhowells@redhat.com)
++ *
++ * This file is released under the GPLv2.
++ *
++ * Please read Documentation/kobject.txt before using the kobject
++ * interface, ESPECIALLY the parts about reference counts and object
++ * destructors.
++ */
++
++#ifndef _LINUX_KOBJECT_NS_H
++#define _LINUX_KOBJECT_NS_H
++
++struct sock;
++struct kobject;
++
++/*
++ * Namespace types which are used to tag kobjects and sysfs entries.
++ * Network namespace will likely be the first.
++ */
++enum kobj_ns_type {
++ KOBJ_NS_TYPE_NONE = 0,
++ KOBJ_NS_TYPE_NET,
++ KOBJ_NS_TYPES
++};
++
++/*
++ * Callbacks so sysfs can determine namespaces
++ * @current_ns: return calling task's namespace
++ * @netlink_ns: return namespace to which a sock belongs (right?)
++ * @initial_ns: return the initial namespace (i.e. init_net_ns)
++ */
++struct kobj_ns_type_operations {
++ enum kobj_ns_type type;
++ const void *(*current_ns)(void);
++ const void *(*netlink_ns)(struct sock *sk);
++ const void *(*initial_ns)(void);
++};
++
++int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
++int kobj_ns_type_registered(enum kobj_ns_type type);
++const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
++const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
++
++const void *kobj_ns_current(enum kobj_ns_type type);
++const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
++const void *kobj_ns_initial(enum kobj_ns_type type);
++void kobj_ns_exit(enum kobj_ns_type type, const void *ns);
++
++#endif /* _LINUX_KOBJECT_NS_H */
+--- a/include/linux/sysfs.h
++++ b/include/linux/sysfs.h
+@@ -16,6 +16,7 @@
+ #include <linux/errno.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
++#include <linux/kobject_ns.h>
+ #include <asm/atomic.h>
+
+ struct kobject;
diff --git a/f1.patch b/f1.patch
new file mode 100644
index 00000000000000..9696651f2c9d11
--- /dev/null
+++ b/f1.patch
@@ -0,0 +1,14 @@
+---
+ drivers/media/video/v4l2-ctrls.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/media/video/v4l2-ctrls.c
++++ b/drivers/media/video/v4l2-ctrls.c
+@@ -19,6 +19,7 @@
+ */
+
+ #include <linux/ctype.h>
++#include <linux/slab.h>
+ #include <media/v4l2-ioctl.h>
+ #include <media/v4l2-device.h>
+ #include <media/v4l2-ctrls.h>
diff --git a/series b/series
index 011c377ff34e8e..812488754e33c0 100644
--- a/series
+++ b/series
@@ -2,45 +2,63 @@
gregkh/gkh-version.patch
#####################################################################
-# Stuff to be merged for 2.6.35
+# Stuff to be merged for 2.6.36
#####################################################################
#################################
-# Driver core patches for 2.6.35
+# Driver core patches for 2.6.36
#################################
+driver-core.current/kobject-break-the-kobject-namespace-defs-into-their-own-header.patch
#################################
-# TTY patches for 2.6.35
+# TTY patches for 2.6.36
#################################
+tty.current/serial-print-early-console-device-address-in-hex.patch
#################################
-# USB patches for 2.6.35
+# USB patches for 2.6.36
#################################
+usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch
+usb.current/usb-option-add-celot-ct-650.patch
+usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch
+usb.current/usb-add-device-ids-for-igotu-to-navman.patch
+usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch
+usb.current/usb-pl2303-new-vendor-and-product-id.patch
#################################
-# Staging patches for 2.6.35
+# Staging patches for 2.6.36
#################################
+staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch
+staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch
+staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch
+staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch
+staging.current/staging-spectra-removes-unused-variable.patch
+staging.current/staging-spectra-initializa-lblk-variable.patch
+staging.current/staging-spectra-removes-unused-functions.patch
#####################################################################
-# Stuff to be merged after 2.6.35 is out
+# Stuff to be merged after 2.6.36 is out
#####################################################################
#############################################
-# Driver core patches for after 2.6.35 is out
+# Driver core patches for after 2.6.36 is out
#############################################
# can we really drop it? (nope, not yet...)
#driver-core/driver-core-remove-config_sysfs_deprecated.patch
#####################################
-# TTY patches for after 2.6.35 is out
+# TTY patches for after 2.6.36 is out
#####################################
###################################
-# USB stuff for after 2.6.35 is out
+# USB stuff for after 2.6.36 is out
###################################
-# staging stuff is now in the staging-next tree on git.kernel.org
+# staging stuff for next is now in the staging-next tree on git.kernel.org
+
+
+f1.patch
diff --git a/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch b/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch
new file mode 100644
index 00000000000000..300aaf84eeaeb9
--- /dev/null
+++ b/staging.current/staging-spectra-don-t-use-locked_ioctl-fix-build.patch
@@ -0,0 +1,56 @@
+From martinez.javier@gmail.com Thu Aug 12 13:10:00 2010
+Subject: Staging: spectra: don't use locked_ioctl, fix build
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Sat, 10 Jul 2010 00:07:35 -0400
+Message-ID: <1278734855.1725.52.camel@lenovo>
+
+Last patch has a style problem. Sending the correct one. Sorry for the noise
+
+Since BKL was removed from block ioctl handling code, locked_ioctl doesn't
+exist anymore.
+
+Using ioctl instead and doing the locking manually.
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/ffsport.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+--- a/drivers/staging/spectra/ffsport.c
++++ b/drivers/staging/spectra/ffsport.c
+@@ -27,6 +27,7 @@
+ #include <linux/kthread.h>
+ #include <linux/log2.h>
+ #include <linux/init.h>
++#include <linux/smp_lock.h>
+
+ /**** Helper functions used for Div, Remainder operation on u64 ****/
+
+@@ -589,11 +590,23 @@ int GLOB_SBD_ioctl(struct block_device *
+ return -ENOTTY;
+ }
+
++int GLOB_SBD_unlocked_ioctl(struct block_device *bdev, fmode_t mode,
++ unsigned int cmd, unsigned long arg)
++{
++ int ret;
++
++ lock_kernel();
++ ret = GLOB_SBD_ioctl(bdev, mode, cmd, arg);
++ unlock_kernel();
++
++ return ret;
++}
++
+ static struct block_device_operations GLOB_SBD_ops = {
+ .owner = THIS_MODULE,
+ .open = GLOB_SBD_open,
+ .release = GLOB_SBD_release,
+- .locked_ioctl = GLOB_SBD_ioctl,
++ .ioctl = GLOB_SBD_unlocked_ioctl,
+ .getgeo = GLOB_SBD_getgeo,
+ };
+
diff --git a/staging.current/staging-spectra-initializa-lblk-variable.patch b/staging.current/staging-spectra-initializa-lblk-variable.patch
new file mode 100644
index 00000000000000..5c73c891d9ffcd
--- /dev/null
+++ b/staging.current/staging-spectra-initializa-lblk-variable.patch
@@ -0,0 +1,30 @@
+From martinez.javier@gmail.com Thu Aug 12 13:11:54 2010
+Subject: Staging: spectra: initializa lblk variable
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Sat, 17 Jul 2010 16:45:27 -0400
+Message-ID: <1279399527.14049.24.camel@lenovo>
+
+Fix a compile warning by initializaing lblk. Since FTL_Get_Block_Index()
+returns BAD_BLOCK if it doesn't find the logical block number, lblk
+number is initizalized to BAD_BLOCK.
+
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/flash.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/spectra/flash.c
++++ b/drivers/staging/spectra/flash.c
+@@ -1698,7 +1698,7 @@ static int get_l2_cache_blks(void)
+ static int erase_l2_cache_blocks(void)
+ {
+ int i, ret = PASS;
+- u32 pblk, lblk;
++ u32 pblk, lblk = BAD_BLOCK;
+ u64 addr;
+ u32 *pbt = (u32 *)g_pBlockTable;
+
diff --git a/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch b/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch
new file mode 100644
index 00000000000000..f4e1ccca1a536d
--- /dev/null
+++ b/staging.current/staging-spectra-remove-duplicate-glob_version-definition.patch
@@ -0,0 +1,30 @@
+From martinez.javier@gmail.com Thu Aug 12 13:10:43 2010
+Subject: Staging: spectra: remove duplicate GLOB_VERSION definition
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Sat, 17 Jul 2010 16:39:54 -0400
+Message-ID: <1279399194.14049.18.camel@lenovo>
+
+This is the first patch of a patchset that removes all compilations
+warnings in staging/spectra.
+
+These patches are a delta from a previous patchset and it assumes that
+these three patches all already applied:
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/ffsport.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/staging/spectra/ffsport.c
++++ b/drivers/staging/spectra/ffsport.c
+@@ -114,7 +114,6 @@ u64 GLOB_u64_Remainder(u64 addr, u32 div
+
+ #define GLOB_SBD_NAME "nd"
+ #define GLOB_SBD_IRQ_NUM (29)
+-#define GLOB_VERSION "driver version 20091110"
+
+ #define GLOB_SBD_IOCTL_GC (0x7701)
+ #define GLOB_SBD_IOCTL_WL (0x7702)
diff --git a/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch b/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch
new file mode 100644
index 00000000000000..8c7c8ad27f7f9c
--- /dev/null
+++ b/staging.current/staging-spectra-removes-q-prepare_flush_fn-fix-build-breakage.patch
@@ -0,0 +1,45 @@
+From martinez.javier@gmail.com Thu Aug 12 13:07:55 2010
+Subject: Staging: spectra: removes q->prepare_flush_fn, fix build breakage
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Fri, 09 Jul 2010 23:25:12 -0400
+Message-ID: <1278732312.1725.17.camel@lenovo>
+
+This patch is the first one of a patchset that allows
+stagin/spectra driver to compile in linux-next.
+
+blk_queue_ordered doesn't receive a prepare flush function anymore
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/ffsport.c | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+--- a/drivers/staging/spectra/ffsport.c
++++ b/drivers/staging/spectra/ffsport.c
+@@ -272,13 +272,6 @@ static int get_res_blk_num_os(void)
+ return res_blks;
+ }
+
+-static void SBD_prepare_flush(struct request_queue *q, struct request *rq)
+-{
+- rq->cmd_type = REQ_TYPE_LINUX_BLOCK;
+- /* rq->timeout = 5 * HZ; */
+- rq->cmd[0] = REQ_LB_OP_FLUSH;
+-}
+-
+ /* Transfer a full request. */
+ static int do_transfer(struct spectra_nand_dev *tr, struct request *req)
+ {
+@@ -650,8 +643,7 @@ static int SBD_setup_device(struct spect
+ /* Here we force report 512 byte hardware sector size to Kernel */
+ blk_queue_logical_block_size(dev->queue, 512);
+
+- blk_queue_ordered(dev->queue, QUEUE_ORDERED_DRAIN_FLUSH,
+- SBD_prepare_flush);
++ blk_queue_ordered(dev->queue, QUEUE_ORDERED_DRAIN_FLUSH);
+
+ dev->thread = kthread_run(spectra_trans_thread, dev, "nand_thd");
+ if (IS_ERR(dev->thread)) {
diff --git a/staging.current/staging-spectra-removes-unused-functions.patch b/staging.current/staging-spectra-removes-unused-functions.patch
new file mode 100644
index 00000000000000..d24607a7e06eba
--- /dev/null
+++ b/staging.current/staging-spectra-removes-unused-functions.patch
@@ -0,0 +1,477 @@
+From martinez.javier@gmail.com Thu Aug 12 13:12:12 2010
+Subject: Staging: spectra: removes unused functions
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Sat, 17 Jul 2010 16:46:28 -0400
+Message-ID: <1279399588.14049.25.camel@lenovo>
+
+Fix compilation warning removing unused functions.
+
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/flash.c | 416 ----------------------------------------
+ 1 file changed, 416 deletions(-)
+
+--- a/drivers/staging/spectra/flash.c
++++ b/drivers/staging/spectra/flash.c
+@@ -61,7 +61,6 @@ static void FTL_Cache_Read_Page(u8 *pDat
+ static void FTL_Cache_Write_Page(u8 *pData, u64 dwPageAddr,
+ u8 cache_blk, u16 flag);
+ static int FTL_Cache_Write(void);
+-static int FTL_Cache_Write_Back(u8 *pData, u64 blk_addr);
+ static void FTL_Calculate_LRU(void);
+ static u32 FTL_Get_Block_Index(u32 wBlockNum);
+
+@@ -86,8 +85,6 @@ static u32 FTL_Replace_MWBlock(void);
+ static int FTL_Replace_Block(u64 blk_addr);
+ static int FTL_Adjust_Relative_Erase_Count(u32 Index_of_MAX);
+
+-static int FTL_Flash_Error_Handle(u8 *pData, u64 old_page_addr, u64 blk_addr);
+-
+ struct device_info_tag DeviceInfo;
+ struct flash_cache_tag Cache;
+ static struct spectra_l2_cache_info cache_l2;
+@@ -1538,79 +1535,6 @@ static int FTL_Cache_Write_All(u8 *pData
+ }
+
+ /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+-* Function: FTL_Cache_Update_Block
+-* Inputs: pointer to buffer,page address,block address
+-* Outputs: PASS=0 / FAIL=1
+-* Description: It updates the cache
+-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
+-static int FTL_Cache_Update_Block(u8 *pData,
+- u64 old_page_addr, u64 blk_addr)
+-{
+- int i, j;
+- u8 *buf = pData;
+- int wResult = PASS;
+- int wFoundInCache;
+- u64 page_addr;
+- u64 addr;
+- u64 old_blk_addr;
+- u16 page_offset;
+-
+- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n",
+- __FILE__, __LINE__, __func__);
+-
+- old_blk_addr = (u64)(old_page_addr >>
+- DeviceInfo.nBitsInBlockDataSize) * DeviceInfo.wBlockDataSize;
+- page_offset = (u16)(GLOB_u64_Remainder(old_page_addr, 2) >>
+- DeviceInfo.nBitsInPageDataSize);
+-
+- for (i = 0; i < DeviceInfo.wPagesPerBlock; i += Cache.pages_per_item) {
+- page_addr = old_blk_addr + i * DeviceInfo.wPageDataSize;
+- if (i != page_offset) {
+- wFoundInCache = FAIL;
+- for (j = 0; j < CACHE_ITEM_NUM; j++) {
+- addr = Cache.array[j].address;
+- addr = FTL_Get_Physical_Block_Addr(addr) +
+- GLOB_u64_Remainder(addr, 2);
+- if ((addr >= page_addr) && addr <
+- (page_addr + Cache.cache_item_size)) {
+- wFoundInCache = PASS;
+- buf = Cache.array[j].buf;
+- Cache.array[j].changed = SET;
+-#if CMD_DMA
+-#if RESTORE_CACHE_ON_CDMA_CHAIN_FAILURE
+- int_cache[ftl_cmd_cnt].item = j;
+- int_cache[ftl_cmd_cnt].cache.address =
+- Cache.array[j].address;
+- int_cache[ftl_cmd_cnt].cache.changed =
+- Cache.array[j].changed;
+-#endif
+-#endif
+- break;
+- }
+- }
+- if (FAIL == wFoundInCache) {
+- if (ERR == FTL_Cache_Read_All(g_pTempBuf,
+- page_addr)) {
+- wResult = FAIL;
+- break;
+- }
+- buf = g_pTempBuf;
+- }
+- } else {
+- buf = pData;
+- }
+-
+- if (FAIL == FTL_Cache_Write_All(buf,
+- blk_addr + (page_addr - old_blk_addr))) {
+- wResult = FAIL;
+- break;
+- }
+- }
+-
+- return wResult;
+-}
+-
+-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+ * Function: FTL_Copy_Block
+ * Inputs: source block address
+ * Destination block address
+@@ -2004,87 +1928,6 @@ static int search_l2_cache(u8 *buf, u64
+ return ret;
+ }
+
+-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+-* Function: FTL_Cache_Write_Back
+-* Inputs: pointer to data cached in sys memory
+-* address of free block in flash
+-* Outputs: PASS=0 / FAIL=1
+-* Description: writes all the pages of Cache Block to flash
+-*
+-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
+-static int FTL_Cache_Write_Back(u8 *pData, u64 blk_addr)
+-{
+- int i, j, iErase;
+- u64 old_page_addr, addr, phy_addr;
+- u32 *pbt = (u32 *)g_pBlockTable;
+- u32 lba;
+-
+- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n",
+- __FILE__, __LINE__, __func__);
+-
+- old_page_addr = FTL_Get_Physical_Block_Addr(blk_addr) +
+- GLOB_u64_Remainder(blk_addr, 2);
+-
+- iErase = (FAIL == FTL_Replace_Block(blk_addr)) ? PASS : FAIL;
+-
+- pbt[BLK_FROM_ADDR(blk_addr)] &= (~SPARE_BLOCK);
+-
+-#if CMD_DMA
+- p_BTableChangesDelta = (struct BTableChangesDelta *)g_pBTDelta_Free;
+- g_pBTDelta_Free += sizeof(struct BTableChangesDelta);
+-
+- p_BTableChangesDelta->ftl_cmd_cnt = ftl_cmd_cnt;
+- p_BTableChangesDelta->BT_Index = (u32)(blk_addr >>
+- DeviceInfo.nBitsInBlockDataSize);
+- p_BTableChangesDelta->BT_Entry_Value =
+- pbt[(u32)(blk_addr >> DeviceInfo.nBitsInBlockDataSize)];
+- p_BTableChangesDelta->ValidFields = 0x0C;
+-#endif
+-
+- if (IN_PROGRESS_BLOCK_TABLE != g_cBlockTableStatus) {
+- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE;
+- FTL_Write_IN_Progress_Block_Table_Page();
+- }
+-
+- for (i = 0; i < RETRY_TIMES; i++) {
+- if (PASS == iErase) {
+- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr);
+- if (FAIL == GLOB_FTL_Block_Erase(phy_addr)) {
+- lba = BLK_FROM_ADDR(blk_addr);
+- MARK_BLOCK_AS_BAD(pbt[lba]);
+- i = RETRY_TIMES;
+- break;
+- }
+- }
+-
+- for (j = 0; j < CACHE_ITEM_NUM; j++) {
+- addr = Cache.array[j].address;
+- if ((addr <= blk_addr) &&
+- ((addr + Cache.cache_item_size) > blk_addr))
+- cache_block_to_write = j;
+- }
+-
+- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr);
+- if (PASS == FTL_Cache_Update_Block(pData,
+- old_page_addr, phy_addr)) {
+- cache_block_to_write = UNHIT_CACHE_ITEM;
+- break;
+- } else {
+- iErase = PASS;
+- }
+- }
+-
+- if (i >= RETRY_TIMES) {
+- if (ERR == FTL_Flash_Error_Handle(pData,
+- old_page_addr, blk_addr))
+- return ERR;
+- else
+- return FAIL;
+- }
+-
+- return PASS;
+-}
+-
+ /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+ * Function: FTL_Cache_Write_Page
+ * Inputs: Pointer to buffer, page address, cache block number
+@@ -2370,159 +2213,6 @@ static int FTL_Write_Block_Table(int wFo
+ return 1;
+ }
+
+-/******************************************************************
+-* Function: GLOB_FTL_Flash_Format
+-* Inputs: none
+-* Outputs: PASS
+-* Description: The block table stores bad block info, including MDF+
+-* blocks gone bad over the ages. Therefore, if we have a
+-* block table in place, then use it to scan for bad blocks
+-* If not, then scan for MDF.
+-* Now, a block table will only be found if spectra was already
+-* being used. For a fresh flash, we'll go thru scanning for
+-* MDF. If spectra was being used, then there is a chance that
+-* the MDF has been corrupted. Spectra avoids writing to the
+-* first 2 bytes of the spare area to all pages in a block. This
+-* covers all known flash devices. However, since flash
+-* manufacturers have no standard of where the MDF is stored,
+-* this cannot guarantee that the MDF is protected for future
+-* devices too. The initial scanning for the block table assures
+-* this. It is ok even if the block table is outdated, as all
+-* we're looking for are bad block markers.
+-* Use this when mounting a file system or starting a
+-* new flash.
+-*
+-*********************************************************************/
+-static int FTL_Format_Flash(u8 valid_block_table)
+-{
+- u32 i, j;
+- u32 *pbt = (u32 *)g_pBlockTable;
+- u32 tempNode;
+- int ret;
+-
+-#if CMD_DMA
+- u32 *pbtStartingCopy = (u32 *)g_pBTStartingCopy;
+- if (ftl_cmd_cnt)
+- return FAIL;
+-#endif
+-
+- if (FAIL == FTL_Check_Block_Table(FAIL))
+- valid_block_table = 0;
+-
+- if (valid_block_table) {
+- u8 switched = 1;
+- u32 block, k;
+-
+- k = DeviceInfo.wSpectraStartBlock;
+- while (switched && (k < DeviceInfo.wSpectraEndBlock)) {
+- switched = 0;
+- k++;
+- for (j = DeviceInfo.wSpectraStartBlock, i = 0;
+- j <= DeviceInfo.wSpectraEndBlock;
+- j++, i++) {
+- block = (pbt[i] & ~BAD_BLOCK) -
+- DeviceInfo.wSpectraStartBlock;
+- if (block != i) {
+- switched = 1;
+- tempNode = pbt[i];
+- pbt[i] = pbt[block];
+- pbt[block] = tempNode;
+- }
+- }
+- }
+- if ((k == DeviceInfo.wSpectraEndBlock) && switched)
+- valid_block_table = 0;
+- }
+-
+- if (!valid_block_table) {
+- memset(g_pBlockTable, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u32));
+- memset(g_pWearCounter, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u8));
+- if (DeviceInfo.MLCDevice)
+- memset(g_pReadCounter, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u16));
+-#if CMD_DMA
+- memset(g_pBTStartingCopy, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u32));
+- memset(g_pWearCounterCopy, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u8));
+- if (DeviceInfo.MLCDevice)
+- memset(g_pReadCounterCopy, 0,
+- DeviceInfo.wDataBlockNum * sizeof(u16));
+-#endif
+- for (j = DeviceInfo.wSpectraStartBlock, i = 0;
+- j <= DeviceInfo.wSpectraEndBlock;
+- j++, i++) {
+- if (GLOB_LLD_Get_Bad_Block((u32)j))
+- pbt[i] = (u32)(BAD_BLOCK | j);
+- }
+- }
+-
+- nand_dbg_print(NAND_DBG_WARN, "Erasing all blocks in the NAND\n");
+-
+- for (j = DeviceInfo.wSpectraStartBlock, i = 0;
+- j <= DeviceInfo.wSpectraEndBlock;
+- j++, i++) {
+- if ((pbt[i] & BAD_BLOCK) != BAD_BLOCK) {
+- ret = GLOB_LLD_Erase_Block(j);
+- if (FAIL == ret) {
+- pbt[i] = (u32)(j);
+- MARK_BLOCK_AS_BAD(pbt[i]);
+- nand_dbg_print(NAND_DBG_WARN,
+- "NAND Program fail in %s, Line %d, "
+- "Function: %s, new Bad Block %d generated!\n",
+- __FILE__, __LINE__, __func__, (int)j);
+- } else {
+- pbt[i] = (u32)(SPARE_BLOCK | j);
+- }
+- }
+-#if CMD_DMA
+- pbtStartingCopy[i] = pbt[i];
+-#endif
+- }
+-
+- g_wBlockTableOffset = 0;
+- for (i = 0; (i <= (DeviceInfo.wSpectraEndBlock -
+- DeviceInfo.wSpectraStartBlock))
+- && ((pbt[i] & BAD_BLOCK) == BAD_BLOCK); i++)
+- ;
+- if (i > (DeviceInfo.wSpectraEndBlock - DeviceInfo.wSpectraStartBlock)) {
+- printk(KERN_ERR "All blocks bad!\n");
+- return FAIL;
+- } else {
+- g_wBlockTableIndex = pbt[i] & ~BAD_BLOCK;
+- if (i != BLOCK_TABLE_INDEX) {
+- tempNode = pbt[i];
+- pbt[i] = pbt[BLOCK_TABLE_INDEX];
+- pbt[BLOCK_TABLE_INDEX] = tempNode;
+- }
+- }
+- pbt[BLOCK_TABLE_INDEX] &= (~SPARE_BLOCK);
+-
+-#if CMD_DMA
+- pbtStartingCopy[BLOCK_TABLE_INDEX] &= (~SPARE_BLOCK);
+-#endif
+-
+- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE;
+- memset(g_pBTBlocks, 0xFF,
+- (1 + LAST_BT_ID - FIRST_BT_ID) * sizeof(u32));
+- g_pBTBlocks[FIRST_BT_ID-FIRST_BT_ID] = g_wBlockTableIndex;
+- FTL_Write_Block_Table(FAIL);
+-
+- for (i = 0; i < CACHE_ITEM_NUM; i++) {
+- Cache.array[i].address = NAND_CACHE_INIT_ADDR;
+- Cache.array[i].use_cnt = 0;
+- Cache.array[i].changed = CLEAR;
+- }
+-
+-#if (RESTORE_CACHE_ON_CDMA_CHAIN_FAILURE && CMD_DMA)
+- memcpy((void *)&cache_start_copy, (void *)&Cache,
+- sizeof(struct flash_cache_tag));
+-#endif
+- return PASS;
+-}
+-
+ static int force_format_nand(void)
+ {
+ u32 i;
+@@ -3030,112 +2720,6 @@ static int FTL_Read_Block_Table(void)
+
+ return wResult;
+ }
+-
+-
+-/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+-* Function: FTL_Flash_Error_Handle
+-* Inputs: Pointer to data
+-* Page address
+-* Block address
+-* Outputs: PASS=0 / FAIL=1
+-* Description: It handles any error occured during Spectra operation
+-*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
+-static int FTL_Flash_Error_Handle(u8 *pData, u64 old_page_addr,
+- u64 blk_addr)
+-{
+- u32 i;
+- int j;
+- u32 tmp_node, blk_node = BLK_FROM_ADDR(blk_addr);
+- u64 phy_addr;
+- int wErase = FAIL;
+- int wResult = FAIL;
+- u32 *pbt = (u32 *)g_pBlockTable;
+-
+- nand_dbg_print(NAND_DBG_TRACE, "%s, Line %d, Function: %s\n",
+- __FILE__, __LINE__, __func__);
+-
+- if (ERR == GLOB_FTL_Garbage_Collection())
+- return ERR;
+-
+- do {
+- for (i = DeviceInfo.wSpectraEndBlock -
+- DeviceInfo.wSpectraStartBlock;
+- i > 0; i--) {
+- if (IS_SPARE_BLOCK(i)) {
+- tmp_node = (u32)(BAD_BLOCK |
+- pbt[blk_node]);
+- pbt[blk_node] = (u32)(pbt[i] &
+- (~SPARE_BLOCK));
+- pbt[i] = tmp_node;
+-#if CMD_DMA
+- p_BTableChangesDelta =
+- (struct BTableChangesDelta *)
+- g_pBTDelta_Free;
+- g_pBTDelta_Free +=
+- sizeof(struct BTableChangesDelta);
+-
+- p_BTableChangesDelta->ftl_cmd_cnt =
+- ftl_cmd_cnt;
+- p_BTableChangesDelta->BT_Index =
+- blk_node;
+- p_BTableChangesDelta->BT_Entry_Value =
+- pbt[blk_node];
+- p_BTableChangesDelta->ValidFields = 0x0C;
+-
+- p_BTableChangesDelta =
+- (struct BTableChangesDelta *)
+- g_pBTDelta_Free;
+- g_pBTDelta_Free +=
+- sizeof(struct BTableChangesDelta);
+-
+- p_BTableChangesDelta->ftl_cmd_cnt =
+- ftl_cmd_cnt;
+- p_BTableChangesDelta->BT_Index = i;
+- p_BTableChangesDelta->BT_Entry_Value = pbt[i];
+- p_BTableChangesDelta->ValidFields = 0x0C;
+-#endif
+- wResult = PASS;
+- break;
+- }
+- }
+-
+- if (FAIL == wResult) {
+- if (FAIL == GLOB_FTL_Garbage_Collection())
+- break;
+- else
+- continue;
+- }
+-
+- if (IN_PROGRESS_BLOCK_TABLE != g_cBlockTableStatus) {
+- g_cBlockTableStatus = IN_PROGRESS_BLOCK_TABLE;
+- FTL_Write_IN_Progress_Block_Table_Page();
+- }
+-
+- phy_addr = FTL_Get_Physical_Block_Addr(blk_addr);
+-
+- for (j = 0; j < RETRY_TIMES; j++) {
+- if (PASS == wErase) {
+- if (FAIL == GLOB_FTL_Block_Erase(phy_addr)) {
+- MARK_BLOCK_AS_BAD(pbt[blk_node]);
+- break;
+- }
+- }
+- if (PASS == FTL_Cache_Update_Block(pData,
+- old_page_addr,
+- phy_addr)) {
+- wResult = PASS;
+- break;
+- } else {
+- wResult = FAIL;
+- wErase = PASS;
+- }
+- }
+- } while (FAIL == wResult);
+-
+- FTL_Write_Block_Table(FAIL);
+-
+- return wResult;
+-}
+
+ /*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+ * Function: FTL_Get_Page_Num
diff --git a/staging.current/staging-spectra-removes-unused-variable.patch b/staging.current/staging-spectra-removes-unused-variable.patch
new file mode 100644
index 00000000000000..2210436191700d
--- /dev/null
+++ b/staging.current/staging-spectra-removes-unused-variable.patch
@@ -0,0 +1,27 @@
+From martinez.javier@gmail.com Thu Aug 12 13:11:36 2010
+Subject: Staging: spectra: removes unused variable
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Randy Dunlap <randy.dunlap@oracle.com>, Greg KH <greg@kroah.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Sat, 17 Jul 2010 16:42:19 -0400
+Message-ID: <1279399339.14049.21.camel@lenovo>
+
+Fix a compile warning by removing an unused variable int i.
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/flash.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/spectra/flash.c
++++ b/drivers/staging/spectra/flash.c
+@@ -775,7 +775,7 @@ static void dump_cache_l2_table(void)
+ {
+ struct list_head *p;
+ struct spectra_l2_cache_list *pnd;
+- int n, i;
++ int n;
+
+ n = 0;
+ list_for_each(p, &cache_l2.table.list) {
diff --git a/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch b/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch
new file mode 100644
index 00000000000000..1438655c659a30
--- /dev/null
+++ b/staging.current/staging-use-new-req_flush-flag-fix-build-breakage.patch
@@ -0,0 +1,29 @@
+From martinez.javier@gmail.com Thu Aug 12 13:05:33 2010
+Subject: Staging: use new REQ_FLUSH flag, fix build breakage
+From: Javier Martinez Canillas <martinez.javier@gmail.com>
+To: Greg KH <greg@kroah.com>, Randy Dunlap <randy.dunlap@oracle.com>, devel@driverdev.osuosl.org, David Woodhouse <David.Woodhouse@intel.com>, kernel-janitors@vger.kernel.org
+Date: Fri, 09 Jul 2010 23:28:13 -0400
+Message-ID: <1278732493.1725.19.camel@lenovo>
+
+REQ_TYPE_LINUX_BLOCK and REQ_LB_OP_FLUSH doesn't exist anymore. Using
+the new REQ_FLUSH flag instead
+
+Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/spectra/ffsport.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/staging/spectra/ffsport.c
++++ b/drivers/staging/spectra/ffsport.c
+@@ -289,8 +289,7 @@ static int do_transfer(struct spectra_na
+ IdentifyDeviceData.PagesPerBlock *
+ res_blks_os;
+
+- if (req->cmd_type == REQ_TYPE_LINUX_BLOCK &&
+- req->cmd[0] == REQ_LB_OP_FLUSH) {
++ if (req->cmd_type & REQ_FLUSH) {
+ if (force_flush_cache()) /* Fail to flush cache */
+ return -EIO;
+ else
diff --git a/tty.current/serial-print-early-console-device-address-in-hex.patch b/tty.current/serial-print-early-console-device-address-in-hex.patch
new file mode 100644
index 00000000000000..eeaaf2d1933c96
--- /dev/null
+++ b/tty.current/serial-print-early-console-device-address-in-hex.patch
@@ -0,0 +1,40 @@
+From tony.luck@intel.com Thu Aug 12 13:41:16 2010
+From: "Luck, Tony" <tony.luck@intel.com>
+To: "Greg KH" <gregkh@suse.de>
+Cc: linux-kernel@vger.kernel.org,
+ "Samium Gromoff" <_deepfire@feelingofgreen.ru>,
+ "Randy Dunlap" <randy.dunlap@oracle.com>,
+ "KOSAKI Motohiro" <kosaki.motohiro@jp.fujitsu.com>,
+ "Andrew Morton" <akpm@linux-foundation.org>
+Subject: serial: print early console device address in hex
+Date: Thu, 12 Aug 2010 12:16:43 -0700
+Message-Id: <4c64489b11469c2a9e@agluck-desktop.sc.intel.com>
+
+Device addresses are usually printed in hex.
+
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/serial/8250_early.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/serial/8250_early.c
++++ b/drivers/serial/8250_early.c
+@@ -203,13 +203,13 @@ static int __init parse_options(struct e
+
+ if (mmio || mmio32)
+ printk(KERN_INFO
+- "Early serial console at MMIO%s 0x%llu (options '%s')\n",
++ "Early serial console at MMIO%s 0x%llx (options '%s')\n",
+ mmio32 ? "32" : "",
+ (unsigned long long)port->mapbase,
+ device->options);
+ else
+ printk(KERN_INFO
+- "Early serial console at I/O port 0x%lu (options '%s')\n",
++ "Early serial console at I/O port 0x%lx (options '%s')\n",
+ port->iobase,
+ device->options);
+
diff --git a/usb.current/usb-add-device-ids-for-igotu-to-navman.patch b/usb.current/usb-add-device-ids-for-igotu-to-navman.patch
new file mode 100644
index 00000000000000..81840fa98092de
--- /dev/null
+++ b/usb.current/usb-add-device-ids-for-igotu-to-navman.patch
@@ -0,0 +1,43 @@
+From ross@linux.intel.com Thu Aug 12 13:46:35 2010
+Subject: USB: add device IDs for igotu to navman
+From: Ross Burton <ross@linux.intel.com>
+To: linux-kernel@vger.kernel.org
+Cc: gregkh@suse.de
+Date: Fri, 06 Aug 2010 16:36:39 +0100
+Message-ID: <1281108999.3781.50.camel@flashheart.burtonini.com>
+
+
+I recently bought a i-gotU USB GPS, and whilst hunting around for linux
+support discovered this post by you back in 2009:
+
+http://kerneltrap.org/mailarchive/linux-usb/2009/3/12/5148644
+
+>Try the navman driver instead. You can either add the device id to the
+> driver and rebuild it, or do this before you plug the device in:
+> modprobe navman
+> echo -n "0x0df7 0x0900" > /sys/bus/usb-serial/drivers/navman/new_id
+>
+> and then plug your device in and see if that works.
+
+I can confirm that the navman driver works with the right device IDs on
+my i-gotU GT-600, which has the same device IDs. Attached is a patch
+adding the IDs.
+
+From: Ross Burton <ross@linux.intel.com>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/navman.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/navman.c
++++ b/drivers/usb/serial/navman.c
+@@ -25,6 +25,7 @@ static int debug;
+
+ static const struct usb_device_id id_table[] = {
+ { USB_DEVICE(0x0a99, 0x0001) }, /* Talon Technology device */
++ { USB_DEVICE(0x0df7, 0x0900) }, /* Mobile Action i-gotU */
+ { },
+ };
+ MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch b/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch
new file mode 100644
index 00000000000000..82c3a63c557a94
--- /dev/null
+++ b/usb.current/usb-isp1760-use-a-write-barrier-to-ensure-proper-ndelay-timing.patch
@@ -0,0 +1,49 @@
+From vapier@gentoo.org Thu Aug 12 13:45:44 2010
+From: Mike Frysinger <vapier@gentoo.org>
+To: linux-usb@vger.kernel.org, Greg Kroah-Hartman <gregkh@suse.de>
+Cc: uclinux-dist-devel@blackfin.uclinux.org,
+ Michael Hennerich <michael.hennerich@analog.com>
+Subject: USB: isp1760: use a write barrier to ensure proper ndelay timing
+Date: Thu, 5 Aug 2010 17:53:57 -0400
+Message-Id: <1281045237-21967-1-git-send-email-vapier@gentoo.org>
+
+From: Michael Hennerich <michael.hennerich@analog.com>
+
+The ISP1760 has some timing requirements where it has to delay a short
+period after a write to a register has started. However, this delay is
+from the time the write hits the USB chip (the ISP1760), not from the
+time where the processor started processing the write. So on a quick
+enough processor, it is sometimes possible for the write to not hit the
+device before we start delaying, and we then violate the part's timing
+requirements, so things stop working.
+
+To avoid all this, insert a write barrier after the register write and
+before the timing delay/register read so we can guarantee we only start
+counting time after the write has hit the device.
+
+Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/isp1760-hcd.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/host/isp1760-hcd.c
++++ b/drivers/usb/host/isp1760-hcd.c
+@@ -829,6 +829,7 @@ static void enqueue_an_ATL_packet(struct
+ * almost immediately. With ISP1761, this register requires a delay of
+ * 195ns between a write and subsequent read (see section 15.1.1.3).
+ */
++ mmiowb();
+ ndelay(195);
+ skip_map = isp1760_readl(hcd->regs + HC_ATL_PTD_SKIPMAP_REG);
+
+@@ -870,6 +871,7 @@ static void enqueue_an_INT_packet(struct
+ * almost immediately. With ISP1761, this register requires a delay of
+ * 195ns between a write and subsequent read (see section 15.1.1.3).
+ */
++ mmiowb();
+ ndelay(195);
+ skip_map = isp1760_readl(hcd->regs + HC_INT_PTD_SKIPMAP_REG);
+
diff --git a/usb.current/usb-option-add-celot-ct-650.patch b/usb.current/usb-option-add-celot-ct-650.patch
new file mode 100644
index 00000000000000..a8fab4b979e353
--- /dev/null
+++ b/usb.current/usb-option-add-celot-ct-650.patch
@@ -0,0 +1,43 @@
+From mjt@tls.msk.ru Thu Aug 12 13:43:49 2010
+Message-ID: <4C5C20F1.6060704@msgid.tls.msk.ru>
+Date: Fri, 06 Aug 2010 18:49:21 +0400
+From: Michael Tokarev <mjt@tls.msk.ru>
+To: Greg KH <greg@kroah.com>
+CC: Oliver Neukum <oneukum@suse.de>
+Subject: USB: option: add Celot CT-650
+
+
+Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/usb/serial/option.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -365,6 +365,10 @@ static void option_instat_callback(struc
+ #define OLIVETTI_VENDOR_ID 0x0b3c
+ #define OLIVETTI_PRODUCT_OLICARD100 0xc000
+
++/* Celot products */
++#define CELOT_VENDOR_ID 0x211f
++#define CELOT_PRODUCT_CT680M 0x6801
++
+ /* some devices interfaces need special handling due to a number of reasons */
+ enum option_blacklist_reason {
+ OPTION_BLACKLIST_NONE = 0,
+@@ -887,10 +891,9 @@ static const struct usb_device_id option
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) },
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)},
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)},
+-
+ { USB_DEVICE(CINTERION_VENDOR_ID, 0x0047) },
+-
+ { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
++ { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
+ { } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, option_ids);
diff --git a/usb.current/usb-pl2303-new-vendor-and-product-id.patch b/usb.current/usb-pl2303-new-vendor-and-product-id.patch
new file mode 100644
index 00000000000000..1441d24001f728
--- /dev/null
+++ b/usb.current/usb-pl2303-new-vendor-and-product-id.patch
@@ -0,0 +1,50 @@
+From linux-usb-owner@vger.kernel.org Thu Aug 12 13:53:19 2010
+From: Jef Driesen <jefdriesen@telenet.be>
+To: Greg Kroah-Hartman <gregkh@suse.de>,
+ Johan Hovold <jhovold@gmail.com>,
+ Frank Schaefer <schaefer.frank@gmx.net>,
+ Alan Cox <alan@linux.intel.com>,
+ Pawel Ludwikow <pludwiko@rab.ict.pwr.wroc.pl>,
+ Manuel Jander <manuel.jander@gmail.com>
+Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
+ Jef Driesen <jefdriesen@telenet.be>
+Subject: USB: pl2303: New vendor and product id
+Date: Mon, 9 Aug 2010 15:55:32 +0200
+Message-Id: <1281362132-9106-1-git-send-email-jefdriesen@telenet.be>
+
+Add support for the Zeagle N2iTiON3 dive computer interface. Since
+Zeagle devices are actually manufactured by Seiko, this patch will
+support other Seiko based models as well.
+
+Signed-off-by: Jef Driesen <jefdriesen@telenet.be>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/pl2303.c | 1 +
+ drivers/usb/serial/pl2303.h | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+--- a/drivers/usb/serial/pl2303.c
++++ b/drivers/usb/serial/pl2303.c
+@@ -86,6 +86,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
+ { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
+ { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
++ { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
+ { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
+ { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
+ { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
+--- a/drivers/usb/serial/pl2303.h
++++ b/drivers/usb/serial/pl2303.h
+@@ -128,6 +128,10 @@
+ #define CRESSI_VENDOR_ID 0x04b8
+ #define CRESSI_EDY_PRODUCT_ID 0x0521
+
++/* Zeagle dive computer interface */
++#define ZEAGLE_VENDOR_ID 0x04b8
++#define ZEAGLE_N2ITION3_PRODUCT_ID 0x0522
++
+ /* Sony, USB data cable for CMD-Jxx mobile phones */
+ #define SONY_VENDOR_ID 0x054c
+ #define SONY_QN3USB_PRODUCT_ID 0x0437
diff --git a/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch b/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch
new file mode 100644
index 00000000000000..3e5fed200af458
--- /dev/null
+++ b/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch
@@ -0,0 +1,117 @@
+From tom.leiming@gmail.com Thu Aug 12 13:50:12 2010
+From: tom.leiming@gmail.com
+To: greg@kroah.com,
+ stern@rowland.harvard.edu
+Cc: linux-usb@vger.kernel.org, Ming Lei <tom.leiming@gmail.com>, Johan Hovold <jhovold@gmail.com>, Andi Kleen <ak@linux.intel.com>
+Subject: USB: serial: fix leak of usb serial module refrence count
+Date: Sat, 7 Aug 2010 16:20:35 +0800
+Message-Id: <1281169235-4883-1-git-send-email-tom.leiming@gmail.com>
+
+From: Ming Lei <tom.leiming@gmail.com>
+
+The patch with title below makes reference count of usb serial module
+always more than one after driver is bound.
+
+ USB-BKL: Remove BKL use for usb serial driver probing
+
+In fact, the patch above only replaces lock_kernel() with try_module_get()
+, and does not use module_put() to do what unlock_kernel() did, so casue leak
+of reference count of usb serial module and the module can not be unloaded
+after serial driver is bound with device.
+
+This patch fixes the issue, also simplifies such things:
+ -only call try_module_get() once in the entry of usb_serial_probe()
+ -only call module_put() once in the exit of usb_serial_probe
+
+Signed-off-by: Ming Lei <tom.leiming@gmail.com>
+Cc: Johan Hovold <jhovold@gmail.com>
+Cc: Andi Kleen <ak@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/usb-serial.c | 23 +++++++----------------
+ 1 file changed, 7 insertions(+), 16 deletions(-)
+
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -736,6 +736,7 @@ int usb_serial_probe(struct usb_interfac
+
+ serial = create_serial(dev, interface, type);
+ if (!serial) {
++ module_put(type->driver.owner);
+ dev_err(&interface->dev, "%s - out of memory\n", __func__);
+ return -ENOMEM;
+ }
+@@ -746,11 +747,11 @@ int usb_serial_probe(struct usb_interfac
+
+ id = get_iface_id(type, interface);
+ retval = type->probe(serial, id);
+- module_put(type->driver.owner);
+
+ if (retval) {
+ dbg("sub driver rejected device");
+ kfree(serial);
++ module_put(type->driver.owner);
+ return retval;
+ }
+ }
+@@ -822,6 +823,7 @@ int usb_serial_probe(struct usb_interfac
+ if (num_bulk_in == 0 || num_bulk_out == 0) {
+ dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
+ kfree(serial);
++ module_put(type->driver.owner);
+ return -ENODEV;
+ }
+ }
+@@ -835,22 +837,15 @@ int usb_serial_probe(struct usb_interfac
+ dev_err(&interface->dev,
+ "Generic device with no bulk out, not allowed.\n");
+ kfree(serial);
++ module_put(type->driver.owner);
+ return -EIO;
+ }
+ }
+ #endif
+ if (!num_ports) {
+ /* if this device type has a calc_num_ports function, call it */
+- if (type->calc_num_ports) {
+- if (!try_module_get(type->driver.owner)) {
+- dev_err(&interface->dev,
+- "module get failed, exiting\n");
+- kfree(serial);
+- return -EIO;
+- }
++ if (type->calc_num_ports)
+ num_ports = type->calc_num_ports(serial);
+- module_put(type->driver.owner);
+- }
+ if (!num_ports)
+ num_ports = type->num_ports;
+ }
+@@ -1039,13 +1034,7 @@ int usb_serial_probe(struct usb_interfac
+
+ /* if this device type has an attach function, call it */
+ if (type->attach) {
+- if (!try_module_get(type->driver.owner)) {
+- dev_err(&interface->dev,
+- "module get failed, exiting\n");
+- goto probe_error;
+- }
+ retval = type->attach(serial);
+- module_put(type->driver.owner);
+ if (retval < 0)
+ goto probe_error;
+ serial->attached = 1;
+@@ -1088,10 +1077,12 @@ int usb_serial_probe(struct usb_interfac
+ exit:
+ /* success */
+ usb_set_intfdata(interface, serial);
++ module_put(type->driver.owner);
+ return 0;
+
+ probe_error:
+ usb_serial_put(serial);
++ module_put(type->driver.owner);
+ return -EIO;
+ }
+ EXPORT_SYMBOL_GPL(usb_serial_probe);
diff --git a/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch b/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch
new file mode 100644
index 00000000000000..042018b1a81f88
--- /dev/null
+++ b/usb.current/usb-uvc_v4l2-cleanup-test-for-end-of-loop.patch
@@ -0,0 +1,37 @@
+From linux-usb-owner@vger.kernel.org Thu Aug 12 13:42:22 2010
+Date: Thu, 12 Aug 2010 09:59:58 +0200
+From: Dan Carpenter <error27@gmail.com>
+To: David Brownell <dbrownell@users.sourceforge.net>
+Cc: Greg Kroah-Hartman <gregkh@suse.de>,
+ Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ linux-usb@vger.kernel.org, kernel-janitors@vger.kernel.org
+Subject: USB: uvc_v4l2: cleanup test for end of loop
+Message-ID: <20100812075958.GP645@bicker>
+Content-Disposition: inline
+
+We're trying to test for the the end of the loop here. "format" is
+never NULL. We don't know what "format->fcc" is because we're past the
+end of the loop and I think "fmt->fmt.pix.pixelformat" comes from the
+user so we don't know what that is either. It works, but it's cleaner
+to just test to see if (i == ARRAY_SIZE(uvc_formats).
+
+Signed-off-by: Dan Carpenter <error27@gmail.com>
+Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/uvc_v4l2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/gadget/uvc_v4l2.c
++++ b/drivers/usb/gadget/uvc_v4l2.c
+@@ -94,7 +94,7 @@ uvc_v4l2_set_format(struct uvc_video *vi
+ break;
+ }
+
+- if (format == NULL || format->fcc != fmt->fmt.pix.pixelformat) {
++ if (i == ARRAY_SIZE(uvc_formats)) {
+ printk(KERN_INFO "Unsupported format 0x%08x.\n",
+ fmt->fmt.pix.pixelformat);
+ return -EINVAL;