-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This is a backport from 2.6.25 of the correct fix for the pxa2xx_udc module.
I have now tested it on the Z c7x0, as has Grigorios Prasinos, both with success. Could I request it be added to the current angstrom release, i.e. a new release of stable (that won't require regenerating the ipkg feeds would it?) I have attached the patch to be dropped into linux-rp-2.6.24 and the .bb needs to be tweaked appropriately (I have included the one I tweaked for reference purposes) so it is only built for the c7x0. Now onto the WPA problem! - -- Dr Matthew Swabey Rm3229, Bldg59 Zepler School of ECS University of Southampton University Road Southampton, SO17 1BJ England Tel: 02380 597381 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org iD8DBQFILbn4soSsB2Ynk1ARAjLhAKCQkZEdiLlsDKDtC2ZdluTq3CivmQCeID4S aizwn0gDO9XEbnkRqk4Yi2Y= =u0WS -----END PGP SIGNATURE-----
---
drivers/usb/gadget/pxa2xx_udc.c | 88 ++++++++++++++++++++++------------------
drivers/usb/gadget/pxa2xx_udc.h | 4 +
2 files changed, 53 insertions(+), 39 deletions(-)
--- g26.orig/drivers/usb/gadget/pxa2xx_udc.c 2008-02-19 12:47:06.000000000 -0800
+++ g26/drivers/usb/gadget/pxa2xx_udc.c 2008-02-19 14:07:17.000000000 -0800
@@ -103,6 +103,12 @@ static const char ep0name [] = "ep0";
#error "Can't configure both IXP and PXA"
#endif
+/* IXP doesn't yet support <linux/clk.h> */
+#define clk_get(dev,name) NULL
+#define clk_enable(clk) do { } while (0)
+#define clk_disable(clk) do { } while (0)
+#define clk_put(clk) do { } while (0)
+
#endif
#include "pxa2xx_udc.h"
@@ -934,20 +940,31 @@ static void udc_disable(struct pxa2xx_ud
/* We disable the UDC -- and its 48 MHz clock -- whenever it's not
* in active use.
*/
-static int pullup(struct pxa2xx_udc *udc, int is_active)
+static int pullup(struct pxa2xx_udc *udc)
{
- is_active = is_active && udc->vbus && udc->pullup;
+ int is_active = udc->vbus && udc->pullup && !udc->suspended;
DMSG("%s\n", is_active ? "active" : "inactive");
- if (is_active)
- udc_enable(udc);
- else {
- if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
- DMSG("disconnect %s\n", udc->driver
- ? udc->driver->driver.name
- : "(no driver)");
- stop_activity(udc, udc->driver);
+ if (is_active) {
+ if (!udc->active) {
+ udc->active = 1;
+ /* Enable clock for USB device */
+ clk_enable(udc->clk);
+ udc_enable(udc);
}
- udc_disable(udc);
+ } else {
+ if (udc->active) {
+ if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
+ DMSG("disconnect %s\n", udc->driver
+ ? udc->driver->driver.name
+ : "(no driver)");
+ stop_activity(udc, udc->driver);
+ }
+ udc_disable(udc);
+ /* Disable clock for USB device */
+ clk_disable(udc->clk);
+ udc->active = 0;
+ }
+
}
return 0;
}
@@ -958,9 +975,9 @@ static int pxa2xx_udc_vbus_session(struc
struct pxa2xx_udc *udc;
udc = container_of(_gadget, struct pxa2xx_udc, gadget);
- udc->vbus = is_active = (is_active != 0);
+ udc->vbus = (is_active != 0);
DMSG("vbus %s\n", is_active ? "supplied" : "inactive");
- pullup(udc, is_active);
+ pullup(udc);
return 0;
}
@@ -975,9 +992,8 @@ static int pxa2xx_udc_pullup(struct usb_
if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
return -EOPNOTSUPP;
- is_active = (is_active != 0);
- udc->pullup = is_active;
- pullup(udc, is_active);
+ udc->pullup = (is_active != 0);
+ pullup(udc);
return 0;
}
@@ -1146,11 +1162,6 @@ static void udc_disable(struct pxa2xx_ud
udc_clear_mask_UDCCR(UDCCR_UDE);
-#ifdef CONFIG_ARCH_PXA
- /* Disable clock for USB device */
- clk_disable(dev->clk);
-#endif
-
ep0_idle (dev);
dev->gadget.speed = USB_SPEED_UNKNOWN;
}
@@ -1191,11 +1202,6 @@ static void udc_enable (struct pxa2xx_ud
{
udc_clear_mask_UDCCR(UDCCR_UDE);
-#ifdef CONFIG_ARCH_PXA
- /* Enable clock for USB device */
- clk_enable(dev->clk);
-#endif
-
/* try to clear these bits before we enable the udc */
udc_ack_int_UDCCR(UDCCR_SUSIR|/*UDCCR_RSTIR|*/UDCCR_RESIR);
@@ -1286,7 +1292,7 @@ fail:
* for set_configuration as well as eventual disconnect.
*/
DMSG("registered gadget driver '%s'\n", driver->driver.name);
- pullup(dev, 1);
+ pullup(dev);
dump_state(dev);
return 0;
}
@@ -1329,7 +1335,8 @@ int usb_gadget_unregister_driver(struct
return -EINVAL;
local_irq_disable();
- pullup(dev, 0);
+ dev->pullup = 0;
+ pullup(dev);
stop_activity(dev, driver);
local_irq_enable();
@@ -2131,13 +2138,11 @@ static int __init pxa2xx_udc_probe(struc
if (irq < 0)
return -ENODEV;
-#ifdef CONFIG_ARCH_PXA
dev->clk = clk_get(&pdev->dev, "UDCCLK");
if (IS_ERR(dev->clk)) {
retval = PTR_ERR(dev->clk);
goto err_clk;
}
-#endif
pr_debug("%s: IRQ %d%s%s\n", driver_name, irq,
dev->has_cfr ? "" : " (!cfr)",
@@ -2250,10 +2255,8 @@ lubbock_fail0:
if (dev->mach->gpio_vbus)
gpio_free(dev->mach->gpio_vbus);
err_gpio_vbus:
-#ifdef CONFIG_ARCH_PXA
clk_put(dev->clk);
err_clk:
-#endif
return retval;
}
@@ -2269,7 +2272,9 @@ static int __exit pxa2xx_udc_remove(stru
if (dev->driver)
return -EBUSY;
- udc_disable(dev);
+ dev->pullup = 0;
+ pullup(dev);
+
remove_proc_files();
if (dev->got_irq) {
@@ -2289,9 +2294,7 @@ static int __exit pxa2xx_udc_remove(stru
if (dev->mach->gpio_pullup)
gpio_free(dev->mach->gpio_pullup);
-#ifdef CONFIG_ARCH_PXA
clk_put(dev->clk);
-#endif
platform_set_drvdata(pdev, NULL);
the_controller = NULL;
@@ -2317,10 +2320,15 @@ static int __exit pxa2xx_udc_remove(stru
static int pxa2xx_udc_suspend(struct platform_device *dev, pm_message_t state)
{
struct pxa2xx_udc *udc = platform_get_drvdata(dev);
+ unsigned long flags;
if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
WARN("USB host won't detect disconnect!\n");
- pullup(udc, 0);
+ udc->suspended = 1;
+
+ local_irq_save(flags);
+ pullup(udc);
+ local_irq_restore(flags);
return 0;
}
@@ -2328,8 +2336,12 @@ static int pxa2xx_udc_suspend(struct pla
static int pxa2xx_udc_resume(struct platform_device *dev)
{
struct pxa2xx_udc *udc = platform_get_drvdata(dev);
+ unsigned long flags;
- pullup(udc, 1);
+ udc->suspended = 0;
+ local_irq_save(flags);
+ pullup(udc);
+ local_irq_restore(flags);
return 0;
}
--- g26.orig/drivers/usb/gadget/pxa2xx_udc.h 2008-02-19 12:47:06.000000000 -0800
+++ g26/drivers/usb/gadget/pxa2xx_udc.h 2008-02-19 12:57:42.000000000 -0800
@@ -119,7 +119,9 @@ struct pxa2xx_udc {
has_cfr : 1,
req_pending : 1,
req_std : 1,
- req_config : 1;
+ req_config : 1,
+ suspended : 1,
+ active : 1;
#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
struct timer_list timer;
-
require linux-rp.inc
PR = "r5"
DEFAULT_PREFERENCE = "-1"
#DEFAULT_PREFERENCE_collie = "1"
#DEFAULT_PREFERENCE_qemux86 = "1"
DEFAULT_PREFERENCE_akita = "1"
DEFAULT_PREFERENCE_c7x0 = "1"
DEFAULT_PREFERENCE_spitz = "1"
DEFAULT_PREFERENCE_tosa = "1"
# Handy URLs
#
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
#
${KERNELORG_MIRROR}pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
#
${KERNELORG_MIRROR}pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
#
${KERNELORG_MIRROR}pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
# Patches submitted upstream are towards top of this list
# Hacks should clearly named and at the bottom
SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
${RPSRC}/export_atags-r2.patch;patch=1;status=pending \
${RPSRC}/lzo_crypto-r2.patch;patch=1;status=pending \
${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1;status=pending \
${RPSRC}/allow_disable_deferrred-r0.patch;patch=1 \
${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
${RPSRC}/hx2750_base-r33.patch;patch=1 \
${RPSRC}/hx2750_bl-r9.patch;patch=1 \
${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \
${RPSRC}/pxa_keys-r8.patch;patch=1 \
${RPSRC}/tsc2101-r18.patch;patch=1 \
${RPSRC}/hx2750_test1-r8.patch;patch=1 \
${RPSRC}/input_power-r10.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-r4.patch;patch=1 \
${RPSRC}/usb_pxa27x_udc-r8.patch;patch=1 \
${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
${RPSRC}/pxa27x_overlay-r8.patch;patch=1 \
${RPSRC}/w100_extaccel-r2.patch;patch=1 \
${RPSRC}/w100_extmem-r1.patch;patch=1 \
${RPSRC}/poodle_pm-r5.patch;patch=1 \
${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \
${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \
file://pxa27x-resume.patch;patch=1;status=external \
file://squashfs3.3.patch;patch=1;status=external \
${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
file://hostap-monitor-mode.patch;patch=1;status=unmergable \
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable
\
${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
${RPSRC}/mmcsd_no_scr_check-r2.patch;patch=1;status=hack \
${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
file://pxa-serial-hack.patch;patch=1;status=hack \
file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
file://binutils-buildid-arm.patch;patch=1 \
file://versatile-armv6.patch;patch=1 \
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 \
file://defconfig-zylonite"
# FIXMEs before made default
# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
# Add this to enable pm debug code (useful with a serial lead)
# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
# Disabled until I find the reason this gives issues with cdc_subset
# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
# 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 = "\
${TKSRC}/mtd-sharp-flash-hack-r3.patch;patch=1 \
${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
${TKSRC}/locomo-r0.patch;patch=1 \
# ${TKSRC}/locomo_spi-4.patch;patch=1 \
${TKSRC}/collie-kexec.patch;patch=1 \
${TKSRC}/sharpsl_pm-3.patch;patch=1 \
${TKSRC}/collie_pm-2.patch;patch=1 \
${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \
${TKSRC}/ucb1x00_suspend.patch;patch=1 \
${TKSRC}/collie-ts.patch;patch=1 \
${TKSRC}/pcmcia_suspend.patch;patch=1 \
"
SRC_URI_append_poodle = "\
${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \
file://poodle_ts.patch;patch=1 \
file://pxafb.patch;patch=1 \
"
SRC_URI_append_tosa = "\
file://tosa/0001-Allow-runtime-registration-of-regions-of-memory-that.patch;patch=1
\
file://tosa/0002-Modify-dma_alloc_coherent-on-ARM-so-that-it-supports.patch;patch=1
\
file://tosa/0003-Core-MFD-support.patch;patch=1 \
file://tosa/0004-Add-support-for-tc6393xb-MFD-core.patch;patch=1 \
file://tosa/0005-Add-support-for-tc6387xb-MFD-core.patch;patch=1 \
file://tosa/0006-Add-support-for-t7l66xb-MFD-core.patch;patch=1 \
file://tosa/0007-Common-headers-for-TMIO-MFD-subdevices.patch;patch=1 \
file://tosa/0008-Nand-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0009-FB-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0010-OHCI-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0011-MMC-driver-for-TMIO-devices.patch;patch=1 \
file://tosa/0012-Tosa-keyboard-support.patch;patch=1 \
file://tosa/0013-USB-gadget-pxa2xx_udc-supports-inverted-vbus.patch;patch=1 \
file://tosa/0014-tosa_udc_use_gpio_vbus.patch.patch;patch=1 \
file://tosa/0015-sharpsl-export-params.patch;patch=1 \
file://tosa/0016-This-patch-fixes-the-pxa25x-clocks-definitions-to-ad.patch;patch=1
\
file://tosa/0017-Convert-pxa2xx-UDC-to-use-debugfs.patch;patch=1 \
file://tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch;patch=1
\
file://tosa/0026-I-don-t-think-we-should-check-for-IRQs-when-determin.patch;patch=1
\
file://tosa/0027-Add-LiMn-one-of-the-most-common-for-small-non-recha.patch;patch=1
\
file://tosa/0028-Add-suspend-resume-wakeup-support-for-pda_power.patch;patch=1 \
file://tosa/0029-Support-using-VOLTAGE_-properties-for-apm-calculati.patch;patch=1
\
file://tosa/0030-Core-driver-for-WM97xx-touchscreens.patch;patch=1 \
file://tosa/0031-Add-chip-driver-for-WM9705-touchscreen.patch;patch=1 \
file://tosa/0032-Add-chip-driver-for-WM9712-touchscreen.patch;patch=1 \
file://tosa/0033-Add-chip-driver-for-WM9713-touchscreen.patch;patch=1 \
file://tosa/0034-Driver-for-WM97xx-touchscreens-in-streaming-mode-on.patch;patch=1
\
file://tosa/0035-Build-system-and-MAINTAINERS-entry-for-WM97xx-touchs.patch;patch=1
\
file://tosa/0036-Set-id-to-1-for-wm97xx-subdevices.patch;patch=1 \
file://tosa/0037-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1
\
file://tosa/0038-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1
\
file://tosa/0044-fix-tmio_mmc-debug-compilation.patch;patch=1 \
file://tosa/0045-Update-tmio_ohci.patch;patch=1 \
file://tosa/0046-patch-tc6393xb-cleanup.patch;patch=1 \
file://tosa/0047-tc6393xb-use-bitmasks-instead-of-bit-field-structs.patch;patch=1
\
file://tosa/0048-tc6393xb-GPIO-support.patch;patch=1 \
file://tosa/0049-platform-support-for-TMIO-on-tosa.patch;patch=1 \
file://tosa/0050-tosa-update-for-tc6393xb-gpio.patch;patch=1 \
file://tosa/0051-fix-sound-soc-pxa-tosa.c-to-new-gpio-api.patch;patch=1 \
file://tosa/0052-tosa-platform-backlight-support.patch;patch=1 \
file://tosa/0053-sound-soc-codecs-wm9712.c-28.patch;patch=1 \
file://tosa/0054-sound-soc-codecs-wm9712.c-2.patch;patch=1 \
file://tosa/0055-Add-GPIO_POWERON-to-the-list-of-devices-that-we-supp.patch;patch=1
\
file://tosa/0058-Fix-tosakbd-suspend.patch;patch=1 \
file://tosa/0059-patch-tosa-wakeup-test.patch;patch=1 \
file://tosa/0060-Add-support-for-power_supply-on-tosa.patch;patch=1 \
file://tosa/0061-tosa-bat-unify.patch;patch=1 \
file://tosa/0062-tosa-bat-fix-charging.patch;patch=1 \
file://tosa/0063-patch-tosa-bat-jacket-detect.patch;patch=1 \
file://tosa/0064-Export-modes-via-sysfs.patch;patch=1 \
file://tosa/0065-wm97xx-core-fixes.patch;patch=1 \
file://tosa/0066-tmiofb_probe-should-be-__devinit.patch;patch=1 \
file://tosa/0067-modeswitching.patch;patch=1 \
file://tosa/0068-Preliminary-tosa-denoiser.patch;patch=1 \
file://tosa/0019-pxa-remove-periodic-mode-emulation-support.patch;patch=1 \
file://tosa/0020-Provide-dew-device-clock-backports-from-2.6.24-git.patch;patch=1
\
file://tosa/0021-Add-an-empty-drivers-gpio-directory-for-gpiolib-infr.patch;patch=1
\
file://tosa/0022-Provide-new-implementation-infrastructure-that-platf.patch;patch=1
\
file://tosa/0023-This-adds-gpiolib-support-for-the-PXA-architecture.patch;patch=1
\
file://tosa/0024-Update-Documentation-gpio.txt-primarily-to-include.patch;patch=1
\
file://tosa/0025-Signed-off-by-Dmitry-Baryshkov-dbaryshkov-gmail.co.patch;patch=1
\
file://tosa/0039-Add-generic-framework-for-managing-clocks.patch;patch=1 \
file://tosa/0040-Clocklib-debugfs-support.patch;patch=1 \
file://tosa/0041-From-80a359e60c2aec59ccf4fca0a7fd20495f82b1d2-Mon-Se.patch;patch=1
\
file://tosa/0042-Use-correct-clock-for-IrDA-on-pxa.patch;patch=1 \
file://tosa/0043-Use-clocklib-for-sa1100-sub-arch.patch;patch=1 \
file://tosa/0056-Support-resetting-by-asserting-GPIO-pin.patch;patch=1 \
file://tosa/0057-Clean-up-tosa-resetting.patch;patch=1 \
"
SRC_URI_append_akita = "\
file://mtd-module.patch;patch=1;status=external \
file://wm8750-treble.patch;patch=1;status=external \
"
SRC_URI_append_spitz = "\
file://mtd-module.patch;patch=1;status=external \
file://wm8750-treble.patch;patch=1;status=external \
file://spitz_h_rewrite.patch;patch=1;status=external \
"
SRC_URI_append_htcuniversal ="\
file://htcuni-acx.patch;patch=1;status=external \
"
SRC_URI_append_zylonite ="\
file://pxa_fb_overlay.patch;patch=1 \
file://zylonite-boot.patch;patch=1 \
"
SRC_URI_append_c7x0 ="\
file://pxa2xx_udc-clock.patch;patch=1 \
"
S = "${WORKDIR}/linux-2.6.24"
pxa2xx_udc-clock.patch.sig
Description: Binary data
linux-rp_2.6.24.bb.sig
Description: Binary data
_______________________________________________ Angstrom-distro-devel mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/angstrom-distro-devel
