summaryrefslogtreecommitdiff
path: root/packages/linux/linux-omap
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2008-11-22 18:59:33 +0100
committerKoen Kooi <koen@openembedded.org>2008-11-22 18:59:33 +0100
commit13a2a9b12b07f1d86f523dc242e160c2592f904d (patch)
treeef9cd9e00fb1fa30ee8d68aeb5cfd5105d674a28 /packages/linux/linux-omap
parent5efdc93f5c6558c9ec001b21ccf649f0796a03e6 (diff)
linux-omap git: update to 2.6.28rc6, remove patches that were applied
Diffstat (limited to 'packages/linux/linux-omap')
-rw-r--r--packages/linux/linux-omap/beagleboard/defconfig24
-rw-r--r--packages/linux/linux-omap/fix-asoc.diff130
-rw-r--r--packages/linux/linux-omap/fix-mmc.diff39
-rw-r--r--packages/linux/linux-omap/musb-dma-iso-in.eml138
-rw-r--r--packages/linux/linux-omap/musb-fix-endpoints.diff197
-rw-r--r--packages/linux/linux-omap/musb-fix-multiple-bulk-transfers.diff194
6 files changed, 9 insertions, 713 deletions
diff --git a/packages/linux/linux-omap/beagleboard/defconfig b/packages/linux/linux-omap/beagleboard/defconfig
index ce06b21672..cf6cc12d6e 100644
--- a/packages/linux/linux-omap/beagleboard/defconfig
+++ b/packages/linux/linux-omap/beagleboard/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28-rc3-omap1
-# Tue Nov 11 15:45:33 2008
+# Linux kernel version: 2.6.28-rc4-omap1
+# Mon Nov 17 15:37:33 2008
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -801,7 +801,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
@@ -1314,6 +1314,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG=y
@@ -1323,11 +1324,11 @@ CONFIG_FB_OMAP2_DEBUG=y
# OMAP2/3 Display Device Drivers
#
CONFIG_PANEL_DVI=y
-# CONFIG_PANEL_DVI_LOWLOWRES is not set
-# CONFIG_PANEL_DVI_LOWRES is not set
-CONFIG_PANEL_DVI_HIGHRES=y
-# CONFIG_PANEL_DVI_VERYHIGHRES is not set
-# CONFIG_PANEL_SDP3430 is not set
+# CONFIG_PANEL_DVI_640X480 is not set
+# CONFIG_PANEL_DVI_800X600 is not set
+CONFIG_PANEL_DVI_1024X768=y
+# CONFIG_PANEL_DVI_1280X1024 is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
@@ -1734,14 +1735,7 @@ CONFIG_RTC_DRV_TWL4030=y
# on-CPU RTC drivers
#
# CONFIG_DMADEVICES is not set
-
-#
-# Voltage and Current regulators
-#
# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REGULATOR_BQ24022 is not set
# CONFIG_UIO is not set
#
diff --git a/packages/linux/linux-omap/fix-asoc.diff b/packages/linux/linux-omap/fix-asoc.diff
deleted file mode 100644
index 4948e932fb..0000000000
--- a/packages/linux/linux-omap/fix-asoc.diff
+++ /dev/null
@@ -1,130 +0,0 @@
-From linux-omap-owner@vger.kernel.org Mon Nov 10 23:48:17 2008
-Date: Mon, 10 Nov 2008 14:36:32 -0800
-From: "Steve Sakoman" <sakoman@gmail.com>
-To: "Philip Balister" <philip@balister.org>
-Subject: Re: ASOC and the Beagle
-Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
- "Tony Lindgren" <tony@atomide.com>
-
-On Mon, Nov 10, 2008 at 12:38 PM, Steve Sakoman <sakoman@gmail.com> wrote:
-> On Mon, Nov 10, 2008 at 7:10 AM, Philip Balister <philip@balister.org> wrote:
->> A few weeks ago kernels built from git would detect the sound hardware and
->> actually work.
->>
->> Yesterday I build a kernel and the sound hardware is no longer detected. Is
->> there an easy way to fix this?
->>
->> Sorry I'm so vague, I don't have all the revision data handy ....
->
-> I just noticed this too.
->
-> It seems that the Kconfig for soc/omap got damaged in the merge.
->
-> The fix is simple, patch below.
-
-Next time I should build test before posting :-)
-
-Turns out that the Makefile for soc/omap and the Kconfig and Makefile
-for soc/codec also got screwed up in the merge, so those need to be
-fixed.
-
-The complete fix is:
-
-diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
-index 38a0e3b..5df7402 100644
---- a/sound/soc/codecs/Kconfig
-+++ b/sound/soc/codecs/Kconfig
-@@ -10,6 +10,7 @@ config SND_SOC_ALL_CODECS
- select SND_SOC_TLV320AIC23
- select SND_SOC_TLV320AIC26
- select SND_SOC_TLV320AIC3X
-+ select SND_SOC_TWL4030
- select SND_SOC_UDA1380
- select SND_SOC_WM8510
- select SND_SOC_WM8580
-@@ -75,6 +76,10 @@ config SND_SOC_TLV320AIC3X
- tristate
- depends on I2C
-
-+config SND_SOC_TWL4030
-+ tristate
-+ depends on TWL4030_CORE
-+
- config SND_SOC_UDA1380
- tristate
-
-diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
-index 90f0a58..3b9b58a 100644
---- a/sound/soc/codecs/Makefile
-+++ b/sound/soc/codecs/Makefile
-@@ -7,6 +7,7 @@ snd-soc-ssm2602-objs := ssm2602.o
- snd-soc-tlv320aic23-objs := tlv320aic23.o
- snd-soc-tlv320aic26-objs := tlv320aic26.o
- snd-soc-tlv320aic3x-objs := tlv320aic3x.o
-+snd-soc-twl4030-objs := twl4030.o
- snd-soc-uda1380-objs := uda1380.o
- snd-soc-wm8510-objs := wm8510.o
- snd-soc-wm8580-objs := wm8580.o
-@@ -29,6 +30,7 @@ obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o
- obj-$(CONFIG_SND_SOC_TLV320AIC23) += snd-soc-tlv320aic23.o
- obj-$(CONFIG_SND_SOC_TLV320AIC26) += snd-soc-tlv320aic26.o
- obj-$(CONFIG_SND_SOC_TLV320AIC3X) += snd-soc-tlv320aic3x.o
-+obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
- obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
- obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
- obj-$(CONFIG_SND_SOC_WM8580) += snd-soc-wm8580.o
-diff --git a/sound/soc/omap/Kconfig b/sound/soc/omap/Kconfig
-index 8b7766b..0daeee4 100644
---- a/sound/soc/omap/Kconfig
-+++ b/sound/soc/omap/Kconfig
-@@ -14,6 +14,14 @@ config SND_OMAP_SOC_N810
- help
- Say Y if you want to add support for SoC audio on Nokia N810.
-
-+config SND_OMAP_SOC_OMAP3_BEAGLE
-+ tristate "SoC Audio support for OMAP3 Beagle"
-+ depends on SND_OMAP_SOC && MACH_OMAP3_BEAGLE
-+ select SND_OMAP_SOC_MCBSP
-+ select SND_SOC_TWL4030
-+ help
-+ Say Y if you want to add support for SoC audio on the Beagleboard.
-+
- config SND_OMAP_SOC_OSK5912
- tristate "SoC Audio support for omap osk5912"
- depends on SND_OMAP_SOC && MACH_OMAP_OSK
-@@ -21,3 +29,13 @@ config SND_OMAP_SOC_OSK5912
- select SND_SOC_TLV320AIC23
- help
- Say Y if you want to add support for SoC audio on osk5912.
-+
-+config SND_OMAP_SOC_OVERO
-+ tristate "SoC Audio support for Gumstix Overo"
-+ depends on SND_OMAP_SOC && MACH_OVERO
-+ select SND_OMAP_SOC_MCBSP
-+ select SND_SOC_TWL4030
-+ help
-+ Say Y if you want to add support for SoC audio on the Gumstix Overo.
-+
-+
-diff --git a/sound/soc/omap/Makefile b/sound/soc/omap/Makefile
-index e09d1f2..4bae404 100644
---- a/sound/soc/omap/Makefile
-+++ b/sound/soc/omap/Makefile
-@@ -7,7 +7,12 @@ obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o
-
- # OMAP Machine Support
- snd-soc-n810-objs := n810.o
-+snd-soc-omap3beagle-objs := omap3beagle.o
- snd-soc-osk5912-objs := osk5912.o
-+snd-soc-overo-objs := overo.o
-
- obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o
-+obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o
- obj-$(CONFIG_SND_OMAP_SOC_OSK5912) += snd-soc-osk5912.o
-+obj-$(CONFIG_SND_OMAP_SOC_OVERO) += snd-soc-overo.o
-+
---
-To unsubscribe from this list: send the line "unsubscribe linux-omap" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
-
diff --git a/packages/linux/linux-omap/fix-mmc.diff b/packages/linux/linux-omap/fix-mmc.diff
deleted file mode 100644
index dfc531c3ef..0000000000
--- a/packages/linux/linux-omap/fix-mmc.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-Oops.. Haven't thought to try it without gpio_cd set up, in which case c->mmc
-is not set initialized.. Please try the following patch:
-
-
-diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c
-index 0ea6ba6..626d668 100644
---- a/arch/arm/mach-omap2/mmc-twl4030.c
-+++ b/arch/arm/mach-omap2/mmc-twl4030.c
-@@ -239,6 +239,7 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
- u32 reg;
- int ret = 0;
- struct twl_mmc_controller *c = &hsmmc[0];
-+ struct omap_mmc_platform_data *mmc = dev->platform_data;
-
- if (power_on) {
- if (cpu_is_omap2430()) {
-@@ -250,7 +251,7 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
- omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
- }
-
-- if (c->mmc->slots[0].internal_clock) {
-+ if (mmc->slots[0].internal_clock) {
- reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
- reg |= OMAP2_MMCSDIO1ADPCLKISEL;
- omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
-@@ -293,11 +294,11 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
- static int twl_mmc2_set_power(struct device *dev, int slot, int power_on, int vdd)
- {
- int ret;
--
- struct twl_mmc_controller *c = &hsmmc[1];
-+ struct omap_mmc_platform_data *mmc = dev->platform_data;
-
- if (power_on) {
-- if (c->mmc->slots[0].internal_clock) {
-+ if (mmc->slots[0].internal_clock) {
- u32 reg;
-
- reg = omap_ctrl_readl(control_devconf1_offset);
diff --git a/packages/linux/linux-omap/musb-dma-iso-in.eml b/packages/linux/linux-omap/musb-dma-iso-in.eml
deleted file mode 100644
index 56fc827a5d..0000000000
--- a/packages/linux/linux-omap/musb-dma-iso-in.eml
+++ /dev/null
@@ -1,138 +0,0 @@
-Fixes blurred capture images in dma mode. Isochronous error field in
-urb and source data buffer pointer were not updated properly in dma
-mode.
-
-Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
----
-diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
-index 08e421f..a481d54 100644
---- a/drivers/usb/musb/musb_host.c
-+++ b/drivers/usb/musb/musb_host.c
-@@ -1505,10 +1505,29 @@ void musb_host_rx(struct musb *musb, u8 epnum)
- musb_writew(hw_ep->regs, MUSB_RXCSR, val);
-
- #ifdef CONFIG_USB_INVENTRA_DMA
-+ if (usb_pipeisoc(pipe)) {
-+ struct usb_iso_packet_descriptor *d;
-+
-+ d = urb->iso_frame_desc + qh->iso_idx;
-+ d->actual_length = xfer_len;
-+
-+ /* even if there was an error, we did the dma
-+ * for iso_frame_desc->length
-+ */
-+ if (d->status != EILSEQ && d->status != -EOVERFLOW)
-+ d->status = 0;
-+
-+ if (++qh->iso_idx >= urb->number_of_packets)
-+ done = true;
-+ else
-+ done = false;
-+
-+ } else {
- /* done if urb buffer is full or short packet is recd */
- done = (urb->actual_length + xfer_len >=
- urb->transfer_buffer_length
- || dma->actual_len < qh->maxpacket);
-+ }
-
- /* send IN token for next packet, without AUTOREQ */
- if (!done) {
-@@ -1545,7 +1564,8 @@ void musb_host_rx(struct musb *musb, u8 epnum)
- if (dma) {
- struct dma_controller *c;
- u16 rx_count;
-- int ret;
-+ int ret, length;
-+ dma_addr_t buf;
-
- rx_count = musb_readw(epio, MUSB_RXCOUNT);
-
-@@ -1558,6 +1578,35 @@ void musb_host_rx(struct musb *musb, u8 epnum)
-
- c = musb->dma_controller;
-
-+ if (usb_pipeisoc(pipe)) {
-+ int status = 0;
-+ struct usb_iso_packet_descriptor *d;
-+
-+ d = urb->iso_frame_desc + qh->iso_idx;
-+
-+ if (iso_err) {
-+ status = -EILSEQ;
-+ urb->error_count++;
-+ }
-+ if (rx_count > d->length) {
-+ if (status == 0) {
-+ status = -EOVERFLOW;
-+ urb->error_count++;
-+ }
-+ DBG(2, "** OVERFLOW %d into %d\n",\
-+ rx_count, d->length);
-+
-+ length = d->length;
-+ } else
-+ length = rx_count;
-+ d->status = status;
-+ buf = urb->transfer_dma + d->offset;
-+ } else {
-+ length = rx_count;
-+ buf = urb->transfer_dma +
-+ urb->actual_length;
-+ }
-+
- dma->desired_mode = 0;
- #ifdef USE_MODE1
- /* because of the issue below, mode 1 will
-@@ -1569,6 +1618,12 @@ void musb_host_rx(struct musb *musb, u8 epnum)
- urb->actual_length)
- > qh->maxpacket)
- dma->desired_mode = 1;
-+ if (rx_count < hw_ep->max_packet_sz_rx) {
-+ length = rx_count;
-+ dma->bDesiredMode = 0;
-+ } else {
-+ length = urb->transfer_buffer_length;
-+ }
- #endif
-
- /* Disadvantage of using mode 1:
-@@ -1606,12 +1661,7 @@ void musb_host_rx(struct musb *musb, u8 epnum)
- */
- ret = c->channel_program(
- dma, qh->maxpacket,
-- dma->desired_mode,
-- urb->transfer_dma
-- + urb->actual_length,
-- (dma->desired_mode == 0)
-- ? rx_count
-- : urb->transfer_buffer_length);
-+ dma->desired_mode, buf, length);
-
- if (!ret) {
- c->channel_release(dma);
-@@ -1628,19 +1678,6 @@ void musb_host_rx(struct musb *musb, u8 epnum)
- }
- }
-
-- if (dma && usb_pipeisoc(pipe)) {
-- struct usb_iso_packet_descriptor *d;
-- int iso_stat = status;
--
-- d = urb->iso_frame_desc + qh->iso_idx;
-- d->actual_length += xfer_len;
-- if (iso_err) {
-- iso_stat = -EILSEQ;
-- urb->error_count++;
-- }
-- d->status = iso_stat;
-- }
--
- finish:
- urb->actual_length += xfer_len;
- qh->offset += xfer_len;
---
-To unsubscribe from this list: send the line "unsubscribe linux-omap" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
-
diff --git a/packages/linux/linux-omap/musb-fix-endpoints.diff b/packages/linux/linux-omap/musb-fix-endpoints.diff
deleted file mode 100644
index 5d1201f014..0000000000
--- a/packages/linux/linux-omap/musb-fix-endpoints.diff
+++ /dev/null
@@ -1,197 +0,0 @@
-From: Ajay Kumar Gupta <ajay.gupta@ti.com>
-To: linux-usb@vger.kernel.org
-Cc: linux-omap@vger.kernel.org, david-b@pacbell.net, me@felipebalbi.com,
- Ajay Kumar Gupta <ajay.gupta@ti.com>
-Subject: [PATCH] MUSB: BULK request on different available endpoints
-Date: Tue, 7 Oct 2008 11:12:24 +0530
-
-Fixes co-working issue of usb serial device with usb/net devices while
-oter endpoints are free and can be used.This patch implements the policy
-that if endpoint resources are available then different BULK request goes
-to different endpoint otherwise they are multiplexed to one reserved
-endpoint as currently done.
-
-NAK limit scheme has to be added for multiplexed BULK request scenario
-to avoid endpoint starvation due to usb/net devices.
-
-musb->periodic[] flag setting is also updated.It use to set this flag for
-an endpoint even when only rx or tx is used.Now flag setting is done on
-rx/tx basis of an endpoint.
-
-Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
----
- drivers/usb/musb/musb_host.c | 94 ++++++++++++++++++++++++------------------
- drivers/usb/musb/musb_host.h | 1 +
- 2 files changed, 55 insertions(+), 40 deletions(-)
-
---- /tmp/musb_host.c 2008-10-07 10:10:49.000000000 +0200
-+++ git/drivers/usb/musb/musb_host.c 2008-10-07 10:13:59.000000000 +0200
-@@ -378,27 +378,32 @@
-
- switch (qh->type) {
-
-+ case USB_ENDPOINT_XFER_CONTROL:
-+ case USB_ENDPOINT_XFER_BULK:
-+ /* fifo policy for these lists, except that NAKing
-+ * should rotate a qh to the end (for fairness).
-+ */
-+ if (qh->mux == 1) {
-+ head = qh->ring.prev;
-+ list_del(&qh->ring);
-+ kfree(qh);
-+ qh = first_qh(head);
-+ break;
-+ }
- case USB_ENDPOINT_XFER_ISOC:
- case USB_ENDPOINT_XFER_INT:
- /* this is where periodic bandwidth should be
- * de-allocated if it's tracked and allocated;
- * and where we'd update the schedule tree...
- */
-- musb->periodic[ep->epnum] = NULL;
-+ if (is_in)
-+ musb->periodic[2 * ep->epnum - 2] = NULL;
-+ else
-+ musb->periodic[2 * ep->epnum - 1] = NULL;
- kfree(qh);
- qh = NULL;
- break;
-
-- case USB_ENDPOINT_XFER_CONTROL:
-- case USB_ENDPOINT_XFER_BULK:
-- /* fifo policy for these lists, except that NAKing
-- * should rotate a qh to the end (for fairness).
-- */
-- head = qh->ring.prev;
-- list_del(&qh->ring);
-- kfree(qh);
-- qh = first_qh(head);
-- break;
- }
- }
- return qh;
-@@ -1728,22 +1733,9 @@
- u16 maxpacket;
-
- /* use fixed hardware for control and bulk */
-- switch (qh->type) {
-- case USB_ENDPOINT_XFER_CONTROL:
-+ if (qh->type == USB_ENDPOINT_XFER_CONTROL) {
- head = &musb->control;
- hw_ep = musb->control_ep;
-- break;
-- case USB_ENDPOINT_XFER_BULK:
-- hw_ep = musb->bulk_ep;
-- if (is_in)
-- head = &musb->in_bulk;
-- else
-- head = &musb->out_bulk;
-- break;
-- }
-- if (head) {
-- idle = list_empty(head);
-- list_add_tail(&qh->ring, head);
- goto success;
- }
-
-@@ -1778,7 +1770,8 @@
- for (epnum = 1; epnum < musb->nr_endpoints; epnum++) {
- int diff;
-
-- if (musb->periodic[epnum])
-+ if ((is_in && musb->periodic[2 * epnum - 2]) ||
-+ (!is_in && musb->periodic[2 * epnum - 1]))
- continue;
- hw_ep = &musb->endpoints[epnum];
- if (hw_ep == musb->bulk_ep)
-@@ -1789,19 +1782,36 @@
- else
- diff = hw_ep->max_packet_sz_tx - maxpacket;
-
-- if (diff > 0 && best_diff > diff) {
-+ if (diff >= 0 && best_diff > diff) {
- best_diff = diff;
- best_end = epnum;
- }
- }
-- if (best_end < 0)
-+ /* use bulk reserved ep1 if no other ep is free*/
-+ if (best_end < 0 && qh->type == USB_ENDPOINT_XFER_BULK) {
-+ hw_ep = musb->bulk_ep;
-+ if (is_in)
-+ head = &musb->in_bulk;
-+ else
-+ head = &musb->out_bulk;
-+ goto success;
-+ } else if (best_end < 0)
- return -ENOSPC;
-
- idle = 1;
-+ qh->mux = 0;
- hw_ep = musb->endpoints + best_end;
-- musb->periodic[best_end] = qh;
-- DBG(4, "qh %p periodic slot %d\n", qh, best_end);
-+ if (is_in)
-+ musb->periodic[2 * best_end - 2] = qh;
-+ else
-+ musb->periodic[2 * best_end - 1] = qh;
-+ DBG(4, "qh %p periodic slot %d%s\n", qh, best_end, is_in ? "Rx" : "Tx");
- success:
-+ if (head) {
-+ idle = list_empty(head);
-+ list_add_tail(&qh->ring, head);
-+ qh->mux = 1;
-+ }
- qh->hw_ep = hw_ep;
- qh->hep->hcpriv = qh;
- if (idle)
-@@ -2065,11 +2075,13 @@
- sched = &musb->control;
- break;
- case USB_ENDPOINT_XFER_BULK:
-- if (usb_pipein(urb->pipe))
-- sched = &musb->in_bulk;
-- else
-- sched = &musb->out_bulk;
-- break;
-+ if (qh->mux == 1) {
-+ if (usb_pipein(urb->pipe))
-+ sched = &musb->in_bulk;
-+ else
-+ sched = &musb->out_bulk;
-+ break;
-+ }
- default:
- /* REVISIT when we get a schedule tree, periodic
- * transfers won't always be at the head of a
-@@ -2131,11 +2143,13 @@
- sched = &musb->control;
- break;
- case USB_ENDPOINT_XFER_BULK:
-- if (is_in)
-- sched = &musb->in_bulk;
-- else
-- sched = &musb->out_bulk;
-- break;
-+ if (qh->mux == 1) {
-+ if (is_in)
-+ sched = &musb->in_bulk;
-+ else
-+ sched = &musb->out_bulk;
-+ break;
-+ }
- case USB_ENDPOINT_XFER_ISOC:
- case USB_ENDPOINT_XFER_INT:
- for (i = 0; i < musb->nr_endpoints; i++) {
---- /tmp/musb_host.h 2008-10-07 08:59:38.000000000 +0200
-+++ git/drivers/usb/musb/musb_host.h 2008-10-07 10:10:54.000000000 +0200
-@@ -53,7 +53,8 @@
-
- struct list_head ring; /* of musb_qh */
- /* struct musb_qh *next; */ /* for periodic tree */
--
-+ u8 mux; /* qh multiplexed to hw_ep */
-+
- unsigned offset; /* in urb->transfer_buffer */
- unsigned segsize; /* current xfer fragment */
-
diff --git a/packages/linux/linux-omap/musb-fix-multiple-bulk-transfers.diff b/packages/linux/linux-omap/musb-fix-multiple-bulk-transfers.diff
deleted file mode 100644
index 7435a2e413..0000000000
--- a/packages/linux/linux-omap/musb-fix-multiple-bulk-transfers.diff
+++ /dev/null
@@ -1,194 +0,0 @@
-From: Ajay Kumar Gupta <ajay.gupta@ti.com>
-To: linux-usb@vger.kernel.org
-Cc: linux-omap@vger.kernel.org, felipe.balbi@nokia.com,
-Subject: [PATCH] MUSB: Fix for kernel panic with multiple bulk transfer
-Date: Wed, 1 Oct 2008 13:08:56 +0530
-
-Fixes kernel panic when multiple copy is performed among more than two mass
-storage media and transfer is aborted.musb_advance_schedule(),
-musb_urb_dequeue(),musb_cleanup_urb() and musb_h_disable() functions have
-been modified to correct urb handling associated with bulk and control
-endpoints which are multiplexed on one hardware endpoint.
-
-musb_advance_schedule() has been removed from musb_cleanup_urb() and added
-to musb_urb_dequeue(). musb_h_disable() has been modified to take care of
-multiple qh on same hw_ep scenario.
-
-Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
-CC: Romit Dasgupta <romit@ti.com>
----
-Suggestions welcome to move while loop doing kfree(qh) from
-musb_advance_schedule() and musb_h_disable() to musb_giveback().
-
- drivers/usb/musb/musb_host.c | 105 ++++++++++++++++++++++++++++++-----------
- 1 files changed, 77 insertions(+), 28 deletions(-)
-
-diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
-index 8b4be01..c2474de 100644
---- a/drivers/usb/musb/musb_host.c
-+++ b/drivers/usb/musb/musb_host.c
-@@ -427,8 +427,17 @@ musb_advance_schedule(struct musb *musb, struct urb *urb,
- qh = musb_giveback(qh, urb, 0);
- else
- qh = musb_giveback(qh, urb, urb->status);
-+ while (qh && qh->is_ready && list_empty(&qh->hep->urb_list)) {
-+ struct list_head *head;
-+ head = qh->ring.prev;
-+ list_del(&qh->ring);
-+ qh->hep->hcpriv = NULL;
-+ kfree(qh);
-+ qh = first_qh(head);
-+ }
-
-- if (qh && qh->is_ready && !list_empty(&qh->hep->urb_list)) {
-+
-+ if (qh && qh->is_ready) {
- DBG(4, "... next ep%d %cX urb %p\n",
- hw_ep->epnum, is_in ? 'R' : 'T',
- next_urb(qh));
-@@ -1964,8 +1973,6 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh, int is_in)
- /* flush cpu writebuffer */
- csr = musb_readw(epio, MUSB_TXCSR);
- }
-- if (status == 0)
-- musb_advance_schedule(ep->musb, urb, ep, is_in);
- return status;
- }
-
-@@ -2026,13 +2033,24 @@ static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
- /* NOTE: qh is invalid unless !list_empty(&hep->urb_list) */
- if (ret < 0 || (sched && qh != first_qh(sched))) {
- int ready = qh->is_ready;
--
-+ int type = urb->pipe;
- ret = 0;
- qh->is_ready = 0;
- __musb_giveback(musb, urb, 0);
-- qh->is_ready = ready;
-- } else
-+
-+ if (list_empty(&qh->hep->urb_list) && list_empty(&qh->ring))
-+ list_del(&qh->ring);
-+ else
-+ qh->is_ready = ready;
-+ if (usb_pipeisoc(type))
-+ musb->periodic[qh->hw_ep->epnum] = NULL;
-+ } else {
- ret = musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN);
-+ if (!ret) {
-+ musb_advance_schedule(qh->hw_ep->musb, urb, qh->hw_ep,
-+ urb->pipe & USB_DIR_IN);
-+ }
-+ }
- done:
- spin_unlock_irqrestore(&musb->lock, flags);
- return ret;
-@@ -2046,14 +2064,17 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)
- unsigned long flags;
- struct musb *musb = hcd_to_musb(hcd);
- u8 is_in = epnum & USB_DIR_IN;
-- struct musb_qh *qh = hep->hcpriv;
-+ struct musb_qh *qh, *qh_for_curr_urb;
- struct urb *urb, *tmp;
- struct list_head *sched;
--
-- if (!qh)
-- return;
-+ int i;
-
- spin_lock_irqsave(&musb->lock, flags);
-+ qh = hep->hcpriv;
-+ if (!qh) {
-+ spin_unlock_irqrestore(&musb->lock, flags);
-+ return;
-+ }
-
- switch (qh->type) {
- case USB_ENDPOINT_XFER_CONTROL:
-@@ -2065,6 +2086,13 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)
- else
- sched = &musb->out_bulk;
- break;
-+ case USB_ENDPOINT_XFER_ISOC:
-+ case USB_ENDPOINT_XFER_INT:
-+ for (i = 0; i < musb->nr_endpoints; i++) {
-+ if (musb->periodic[i] == qh)
-+ sched = &qh->ring;
-+ break;
-+ }
- default:
- /* REVISIT when we get a schedule tree, periodic transfers
- * won't always be at the head of a singleton queue...
-@@ -2073,26 +2101,47 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)
- break;
- }
-
-- /* NOTE: qh is invalid unless !list_empty(&hep->urb_list) */
--
- /* kick first urb off the hardware, if needed */
-- qh->is_ready = 0;
-- if (!sched || qh == first_qh(sched)) {
-+ if (sched) {
-+ qh_for_curr_urb = qh;
- urb = next_urb(qh);
--
-- /* make software (then hardware) stop ASAP */
-- if (!urb->unlinked)
-- urb->status = -ESHUTDOWN;
--
-- /* cleanup */
-- musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN);
-- } else
-- urb = NULL;
--
-- /* then just nuke all the others */
-- list_for_each_entry_safe_from(urb, tmp, &hep->urb_list, urb_list)
-- musb_giveback(qh, urb, -ESHUTDOWN);
--
-+ if (urb) {
-+ /* make software (then hardware) stop ASAP */
-+ if (!urb->unlinked)
-+ urb->status = -ESHUTDOWN;
-+ /* cleanup first urb of first qh; */
-+ if (qh == first_qh(sched)) {
-+ musb_cleanup_urb(urb, qh,
-+ urb->pipe & USB_DIR_IN);
-+ }
-+ qh = musb_giveback(qh, urb, -ESHUTDOWN);
-+ if (qh == qh_for_curr_urb) {
-+ list_for_each_entry_safe_from(urb, tmp,
-+ &hep->urb_list, urb_list) {
-+ qh = musb_giveback(qh, tmp, -ESHUTDOWN);
-+ if (qh != qh_for_curr_urb)
-+ break;
-+ }
-+ }
-+ }
-+ /* pick the next candidate and go */
-+ if (qh && qh->is_ready) {
-+ while (qh && qh->is_ready &&
-+ list_empty(&qh->hep->urb_list)) {
-+ struct list_head *head;
-+ head = qh->ring.prev;
-+ list_del(&qh->ring);
-+ qh->hep->hcpriv = NULL;
-+ kfree(qh);
-+ qh = first_qh(head);
-+ }
-+ if (qh && qh->is_ready) {
-+ epnum = qh->hep->desc.bEndpointAddress;
-+ is_in = epnum & USB_DIR_IN;
-+ musb_start_urb(musb, is_in, qh);
-+ }
-+ }
-+ }
- spin_unlock_irqrestore(&musb->lock, flags);
- }
-
---
-1.5.6
-
---
-To unsubscribe from this list: send the line "unsubscribe linux-omap" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html