* [PATCH 1/7] balloon3: drop udc_is_connected
@ 2011-04-01 13:56 Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 2/7] mioa701: " Dmitry Eremin-Solenikov
` (5 more replies)
0 siblings, 6 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Balloon3 is a pxa270 machins and pxa27x_udc driver doesn't pay any attention
to udc_is_connected, so drop it.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
arch/arm/mach-pxa/balloon3.c | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-pxa/balloon3.c b/arch/arm/mach-pxa/balloon3.c
index bfbecec..79cabe8 100644
--- a/arch/arm/mach-pxa/balloon3.c
+++ b/arch/arm/mach-pxa/balloon3.c
@@ -317,14 +317,8 @@ static void balloon3_udc_command(int cmd)
UP2OCR &= ~UP2OCR_DPPUE;
}
-static int balloon3_udc_is_connected(void)
-{
- return 1;
-}
-
static struct pxa2xx_udc_mach_info balloon3_udc_info __initdata = {
.udc_command = balloon3_udc_command,
- .udc_is_connected = balloon3_udc_is_connected,
.gpio_pullup = -1,
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 2/7] mioa701: drop udc_is_connected
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-01 14:10 ` Sergei Shtylyov
2011-04-01 13:56 ` [PATCH 3/7] stargate2: udc_is_connected is ignored for pxa27x, drop it Dmitry Eremin-Solenikov
` (4 subsequent siblings)
5 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Mioa701 is a pxa270 machine and pxa27x_udc driver doesn't pay any attention
to udc_is_connected, so drop it.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
arch/arm/mach-pxa/mioa701.c | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
index dd13bb6..f69a3c7 100644
--- a/arch/arm/mach-pxa/mioa701.c
+++ b/arch/arm/mach-pxa/mioa701.c
@@ -402,13 +402,7 @@ static void gsm_exit(void)
/*
* USB UDC
*/
-static int is_usb_connected(void)
-{
- return !gpio_get_value(GPIO13_nUSB_DETECT);
-}
-
static struct pxa2xx_udc_mach_info mioa701_udc_info = {
- .udc_is_connected = is_usb_connected,
.gpio_pullup = GPIO22_USB_ENABLE,
};
@@ -596,6 +590,11 @@ static int is_ac_connected(void)
return gpio_get_value(GPIO96_AC_DETECT);
}
+static int is_usb_connected(void)
+{
+ return !gpio_get_value(GPIO13_nUSB_DETECT);
+}
+
static void mioa701_set_charge(int flags)
{
gpio_set_value(GPIO9_CHARGE_EN, (flags == PDA_POWER_CHARGE_USB));
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 3/7] stargate2: udc_is_connected is ignored for pxa27x, drop it
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 2/7] mioa701: " Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver Dmitry Eremin-Solenikov
` (3 subsequent siblings)
5 siblings, 0 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
arch/arm/mach-pxa/stargate2.c | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c
index cb5611d..3e3621d 100644
--- a/arch/arm/mach-pxa/stargate2.c
+++ b/arch/arm/mach-pxa/stargate2.c
@@ -956,13 +956,7 @@ static struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
/* Board doesn't support cable detection - so always lie and say
* something is there.
*/
-static int sg2_udc_detect(void)
-{
- return 1;
-}
-
static struct pxa2xx_udc_mach_info stargate2_udc_info __initdata = {
- .udc_is_connected = sg2_udc_detect,
.udc_command = sg2_udc_command,
};
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 2/7] mioa701: " Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 3/7] stargate2: udc_is_connected is ignored for pxa27x, drop it Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-04 7:01 ` Eric Miao
2011-04-01 13:56 ` [PATCH 5/7] lubbock: switch to using lubbock_usb_xceiv transceiver Dmitry Eremin-Solenikov
` (2 subsequent siblings)
5 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Move all handling of lubbock board to separate lubbock-usb transceiver,
removing cruft from pxa25x_udc.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
drivers/usb/gadget/pxa25x_udc.c | 74 ----------------
drivers/usb/otg/Kconfig | 8 ++
drivers/usb/otg/Makefile | 1 +
drivers/usb/otg/lubbock-usb.c | 178 +++++++++++++++++++++++++++++++++++++++
4 files changed, 187 insertions(+), 74 deletions(-)
create mode 100644 drivers/usb/otg/lubbock-usb.c
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 444b60a..6cb32b8 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -65,10 +65,6 @@
#include <mach/pxa25x-udc.h>
#endif
-#ifdef CONFIG_ARCH_LUBBOCK
-#include <mach/lubbock.h>
-#endif
-
#include <asm/mach/udc_pxa2xx.h>
@@ -1383,42 +1379,6 @@ EXPORT_SYMBOL(usb_gadget_unregister_driver);
/*-------------------------------------------------------------------------*/
-#ifdef CONFIG_ARCH_LUBBOCK
-
-/* Lubbock has separate connect and disconnect irqs. More typical designs
- * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
- */
-
-static irqreturn_t
-lubbock_vbus_irq(int irq, void *_dev)
-{
- struct pxa25x_udc *dev = _dev;
- int vbus;
-
- dev->stats.irqs++;
- switch (irq) {
- case LUBBOCK_USB_IRQ:
- vbus = 1;
- disable_irq(LUBBOCK_USB_IRQ);
- enable_irq(LUBBOCK_USB_DISC_IRQ);
- break;
- case LUBBOCK_USB_DISC_IRQ:
- vbus = 0;
- disable_irq(LUBBOCK_USB_DISC_IRQ);
- enable_irq(LUBBOCK_USB_IRQ);
- break;
- default:
- return IRQ_NONE;
- }
-
- pxa25x_udc_vbus_session(&dev->gadget, vbus);
- return IRQ_HANDLED;
-}
-
-#endif
-
-
-/*-------------------------------------------------------------------------*/
static inline void clear_ep_state (struct pxa25x_udc *dev)
{
@@ -2206,38 +2166,10 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
}
dev->got_irq = 1;
-#ifdef CONFIG_ARCH_LUBBOCK
- if (machine_is_lubbock()) {
- retval = request_irq(LUBBOCK_USB_DISC_IRQ,
- lubbock_vbus_irq,
- IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
- driver_name, dev);
- if (retval != 0) {
- pr_err("%s: can't get irq %i, err %d\n",
- driver_name, LUBBOCK_USB_DISC_IRQ, retval);
-lubbock_fail0:
- goto err_irq_lub;
- }
- retval = request_irq(LUBBOCK_USB_IRQ,
- lubbock_vbus_irq,
- IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
- driver_name, dev);
- if (retval != 0) {
- pr_err("%s: can't get irq %i, err %d\n",
- driver_name, LUBBOCK_USB_IRQ, retval);
- free_irq(LUBBOCK_USB_DISC_IRQ, dev);
- goto lubbock_fail0;
- }
- } else
-#endif
create_debug_files(dev);
return 0;
-#ifdef CONFIG_ARCH_LUBBOCK
- free_irq(LUBBOCK_USB_DISC_IRQ, dev);
- err_irq_lub:
-#endif
free_irq(irq, dev);
err_irq1:
if (gpio_is_valid(dev->mach->gpio_pullup))
@@ -2273,12 +2205,6 @@ static int __exit pxa25x_udc_remove(struct platform_device *pdev)
free_irq(platform_get_irq(pdev, 0), dev);
dev->got_irq = 0;
}
-#ifdef CONFIG_ARCH_LUBBOCK
- if (machine_is_lubbock()) {
- free_irq(LUBBOCK_USB_DISC_IRQ, dev);
- free_irq(LUBBOCK_USB_IRQ, dev);
- }
-#endif
if (gpio_is_valid(dev->mach->gpio_pullup))
gpio_free(dev->mach->gpio_pullup);
diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
index daf3e5f..7ddfc54 100644
--- a/drivers/usb/otg/Kconfig
+++ b/drivers/usb/otg/Kconfig
@@ -122,4 +122,12 @@ config AB8500_USB
This transceiver supports high and full speed devices plus,
in host mode, low speed.
+config LUBBOCK_USB
+ tristate "Intel DBPXA250 (Lubbock) Tranceiver Driver"
+ depends on ARCH_LUBBOCK
+ select USB_OTG_UTILS
+ help
+ Enable this to support the USB UDC connectivity on Intel DBPXA250
+ development platform (so-called Lubbock).
+
endif # USB || OTG
diff --git a/drivers/usb/otg/Makefile b/drivers/usb/otg/Makefile
index e22d917..5ed42cd 100644
--- a/drivers/usb/otg/Makefile
+++ b/drivers/usb/otg/Makefile
@@ -19,3 +19,4 @@ obj-$(CONFIG_USB_ULPI) += ulpi.o
obj-$(CONFIG_USB_ULPI_VIEWPORT) += ulpi_viewport.o
obj-$(CONFIG_USB_MSM_OTG) += msm_otg.o
obj-$(CONFIG_AB8500_USB) += ab8500-usb.o
+obj-$(CONFIG_LUBBOCK_USB) += lubbock-usb.o
diff --git a/drivers/usb/otg/lubbock-usb.c b/drivers/usb/otg/lubbock-usb.c
new file mode 100644
index 0000000..d18c101
--- /dev/null
+++ b/drivers/usb/otg/lubbock-usb.c
@@ -0,0 +1,178 @@
+/*
+ * Intel DBPXA250 Development Platform USB UDC support
+ *
+ * Copyright (C) 2011 Dmitry Eremin-Solenikov
+ *
+ * Based on pxa25x_udc driver:
+ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
+ * Copyright (C) 2003 Robert Schwebel, Pengutronix
+ * Copyright (C) 2003 Benedikt Spranger, Pengutronix
+ * Copyright (C) 2003 David Brownell
+ * Copyright (C) 2003 Joshua Wise
+ *
+ * Largely based on lubbock-usb-xceiv:
+ * Copyright (C) 2009 Texas Instruments Inc
+ */
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/dma-mapping.h>
+#include <linux/usb.h>
+#include <linux/usb/gadget.h>
+#include <linux/usb/otg.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+
+#include <mach/lubbock.h>
+
+static int lubbock_udc_is_connected(void)
+{
+ return (LUB_MISC_RD & (1 << 9)) == 0;
+}
+
+static int lubbock_set_peripheral(struct otg_transceiver *lubbock,
+ struct usb_gadget *gadget)
+{
+ if (!lubbock)
+ return -ENODEV;
+
+ if (!gadget) {
+ lubbock->gadget = NULL;
+ return 0;
+ }
+
+ lubbock->gadget = gadget;
+ lubbock->state = OTG_STATE_B_IDLE;
+ if (lubbock_udc_is_connected()) {
+ lubbock->state = OTG_STATE_B_PERIPHERAL;
+ usb_gadget_vbus_connect(lubbock->gadget);
+ }
+
+ return 0;
+}
+
+/* Lubbock has separate connect and disconnect irqs. More typical designs
+ * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
+ */
+
+static irqreturn_t
+lubbock_vbus_irq(int irq, void *_dev)
+{
+ struct otg_transceiver *lubbock = _dev;
+ switch (irq) {
+ case LUBBOCK_USB_IRQ:
+ lubbock->state = OTG_STATE_B_PERIPHERAL;
+ usb_gadget_vbus_connect(lubbock->gadget);
+
+ disable_irq(LUBBOCK_USB_IRQ);
+ enable_irq(LUBBOCK_USB_DISC_IRQ);
+ break;
+ case LUBBOCK_USB_DISC_IRQ:
+ usb_gadget_vbus_disconnect(lubbock->gadget);
+ lubbock->state = OTG_STATE_B_IDLE;
+
+ disable_irq(LUBBOCK_USB_DISC_IRQ);
+ enable_irq(LUBBOCK_USB_IRQ);
+ break;
+ default:
+ return IRQ_NONE;
+ }
+
+ return IRQ_HANDLED;
+}
+
+
+static int __devinit lubbock_usb_xceiv_probe(struct platform_device *pdev)
+{
+ struct otg_transceiver *lubbock;
+ int err;
+
+ lubbock = kzalloc(sizeof *lubbock, GFP_KERNEL);
+ if (!lubbock)
+ return -ENOMEM;
+
+ lubbock->dev = &pdev->dev;
+ lubbock->label = "lubbock-xceiv";
+ lubbock->state = OTG_STATE_UNDEFINED;
+ lubbock->set_peripheral = lubbock_set_peripheral;
+
+ err = request_irq(LUBBOCK_USB_DISC_IRQ,
+ lubbock_vbus_irq,
+ IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
+ lubbock->label, lubbock);
+ if (err != 0) {
+ pr_err("%s: can't get irq %i, err %d\n",
+ lubbock->label, LUBBOCK_USB_DISC_IRQ, err);
+ goto err_irq_lub;
+ }
+ err = request_irq(LUBBOCK_USB_IRQ,
+ lubbock_vbus_irq,
+ IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
+ lubbock->label, lubbock);
+ if (err != 0) {
+ pr_err("%s: can't get irq %i, err %d\n",
+ lubbock->label, LUBBOCK_USB_IRQ, err);
+ goto err_irq_lub2;
+ }
+
+ err = otg_set_transceiver(lubbock);
+ if (err) {
+ dev_err(&pdev->dev, "can't register transceiver, err: %d\n",
+ err);
+ goto exit;
+ }
+
+ platform_set_drvdata(pdev, lubbock);
+
+ BLOCKING_INIT_NOTIFIER_HEAD(&lubbock->notifier);
+
+ return 0;
+exit:
+ free_irq(LUBBOCK_USB_IRQ, lubbock);
+err_irq_lub2:
+ free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
+err_irq_lub:
+ kfree(lubbock);
+ return err;
+}
+
+static int __devexit lubbock_usb_xceiv_remove(struct platform_device *pdev)
+{
+ struct otg_transceiver *lubbock = platform_get_drvdata(pdev);
+
+ otg_set_transceiver(NULL);
+
+ platform_set_drvdata(pdev, NULL);
+
+ free_irq(LUBBOCK_USB_IRQ, lubbock);
+ free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
+
+ kfree(lubbock);
+
+ return 0;
+}
+
+static struct platform_driver lubbock_usb_xceiv_driver = {
+ .probe = lubbock_usb_xceiv_probe,
+ .remove = __devexit_p(lubbock_usb_xceiv_remove),
+ .driver = {
+ .name = "lubbock_usb_xceiv",
+ .owner = THIS_MODULE,
+ },
+};
+
+static int __init lubbock_usb_xceiv_init(void)
+{
+ return platform_driver_register(&lubbock_usb_xceiv_driver);
+}
+subsys_initcall(lubbock_usb_xceiv_init);
+
+static void __exit lubbock_usb_xceiv_exit(void)
+{
+ platform_driver_unregister(&lubbock_usb_xceiv_driver);
+}
+module_exit(lubbock_usb_xceiv_exit);
+
+MODULE_ALIAS("platform:lubbock_usb_xceiv");
+MODULE_DESCRIPTION("lubbock USB Transceiver driver");
+MODULE_LICENSE("GPL");
+
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 5/7] lubbock: switch to using lubbock_usb_xceiv transceiver
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
` (2 preceding siblings ...)
2011-04-01 13:56 ` [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 6/7] pxa25x: drop handling of udc_is_connected Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv Dmitry Eremin-Solenikov
5 siblings, 0 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
arch/arm/mach-pxa/lubbock.c | 17 ++++++-----------
1 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c
index 3ede978..8b6e654 100644
--- a/arch/arm/mach-pxa/lubbock.c
+++ b/arch/arm/mach-pxa/lubbock.c
@@ -207,16 +207,6 @@ device_initcall(lubbock_irq_device_init);
#endif
-static int lubbock_udc_is_connected(void)
-{
- return (LUB_MISC_RD & (1 << 9)) == 0;
-}
-
-static struct pxa2xx_udc_mach_info udc_info __initdata = {
- .udc_is_connected = lubbock_udc_is_connected,
- // no D+ pullup; lubbock can't connect/disconnect in software
-};
-
static struct resource sa1111_resources[] = {
[0] = {
.start = 0x10000000,
@@ -388,11 +378,17 @@ static struct platform_device lubbock_flash_device[2] = {
},
};
+static struct platform_device lubbock_usb_xceiv = {
+ .name = "lubbock_usb_xceiv",
+ .id = -1,
+};
+
static struct platform_device *devices[] __initdata = {
&sa1111_device,
&smc91x_device,
&lubbock_flash_device[0],
&lubbock_flash_device[1],
+ &lubbock_usb_xceiv,
};
static struct pxafb_mode_info sharp_lm8v31_mode = {
@@ -520,7 +516,6 @@ static void __init lubbock_init(void)
pxa_set_stuart_info(NULL);
clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL);
- pxa_set_udc_info(&udc_info);
pxa_set_fb_info(NULL, &sharp_lm8v31);
pxa_set_mci_info(&lubbock_mci_platform_data);
pxa_set_ficp_info(&lubbock_ficp_platform_data);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 6/7] pxa25x: drop handling of udc_is_connected
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
` (3 preceding siblings ...)
2011-04-01 13:56 ` [PATCH 5/7] lubbock: switch to using lubbock_usb_xceiv transceiver Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-01 19:02 ` Sergei Shtylyov
2011-04-01 13:56 ` [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv Dmitry Eremin-Solenikov
5 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
There are no more users of udc_is_connected. Drop this field from mach_info
and stop using it in pxa25x_udc.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
arch/arm/include/asm/mach/udc_pxa2xx.h | 1 -
drivers/usb/gadget/pxa25x_udc.c | 13 +++++++++----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/arch/arm/include/asm/mach/udc_pxa2xx.h b/arch/arm/include/asm/mach/udc_pxa2xx.h
index ea297ac..f0719d3 100644
--- a/arch/arm/include/asm/mach/udc_pxa2xx.h
+++ b/arch/arm/include/asm/mach/udc_pxa2xx.h
@@ -10,7 +10,6 @@
*/
struct pxa2xx_udc_mach_info {
- int (*udc_is_connected)(void); /* do we see host? */
void (*udc_command)(int cmd);
#define PXA2XX_UDC_CMD_CONNECT 0 /* let host see us */
#define PXA2XX_UDC_CMD_DISCONNECT 1 /* so host won't see us */
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index 6cb32b8..40ceb73 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -1072,7 +1072,7 @@ udc_seq_show(struct seq_file *m, void *_d)
(tmp & UDCCFR_ACM) ? " acm" : "");
}
- if (dev->gadget.speed != USB_SPEED_FULL || !dev->driver)
+ if (dev->gadget.speed == USB_SPEED_UNKNOWN || !dev->driver)
goto done;
seq_printf(m, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n",
@@ -1700,9 +1700,13 @@ pxa25x_udc_irq(int irq, void *_dev)
if (unlikely(udccr & UDCCR_SUSIR)) {
udc_ack_int_UDCCR(UDCCR_SUSIR);
handled = 1;
- DBG(DBG_VERBOSE, "USB suspend\n");
+ DBG(DBG_VERBOSE, "USB suspend%s\n",
+ dev->gadget.speed != USB_SPEED_UNKNOWN
+ ? "" : "+disconnect");
- if (dev->gadget.speed != USB_SPEED_UNKNOWN
+ if (dev->gadget.speed == USB_SPEED_UNKNOWN)
+ stop_activity(dev, dev->driver);
+ else if (dev->gadget.speed != USB_SPEED_UNKNOWN
&& dev->driver
&& dev->driver->suspend)
dev->driver->suspend(&dev->gadget);
@@ -1717,7 +1721,8 @@ pxa25x_udc_irq(int irq, void *_dev)
if (dev->gadget.speed != USB_SPEED_UNKNOWN
&& dev->driver
- && dev->driver->resume)
+ && dev->driver->resume
+ && dev->gadget.speed != USB_SPEED_UNKNOWN)
dev->driver->resume(&dev->gadget);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
` (4 preceding siblings ...)
2011-04-01 13:56 ` [PATCH 6/7] pxa25x: drop handling of udc_is_connected Dmitry Eremin-Solenikov
@ 2011-04-01 13:56 ` Dmitry Eremin-Solenikov
2011-04-18 8:42 ` Eric Miao
5 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 13:56 UTC (permalink / raw)
To: linux-arm-kernel
Ask for vbus_draw regulator before registering tranceiver to disallow possible
race between registration and set_power/etc.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
drivers/usb/otg/gpio_vbus.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/otg/gpio_vbus.c b/drivers/usb/otg/gpio_vbus.c
index 221c444..52733d9 100644
--- a/drivers/usb/otg/gpio_vbus.c
+++ b/drivers/usb/otg/gpio_vbus.c
@@ -279,6 +279,13 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
}
INIT_WORK(&gpio_vbus->work, gpio_vbus_work);
+ gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
+ if (IS_ERR(gpio_vbus->vbus_draw)) {
+ dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
+ PTR_ERR(gpio_vbus->vbus_draw));
+ gpio_vbus->vbus_draw = NULL;
+ }
+
/* only active when a gadget is registered */
err = otg_set_transceiver(&gpio_vbus->otg);
if (err) {
@@ -287,13 +294,6 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
goto err_otg;
}
- gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
- if (IS_ERR(gpio_vbus->vbus_draw)) {
- dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
- PTR_ERR(gpio_vbus->vbus_draw));
- gpio_vbus->vbus_draw = NULL;
- }
-
return 0;
err_otg:
free_irq(irq, &pdev->dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 2/7] mioa701: drop udc_is_connected
2011-04-01 13:56 ` [PATCH 2/7] mioa701: " Dmitry Eremin-Solenikov
@ 2011-04-01 14:10 ` Sergei Shtylyov
2011-04-01 14:50 ` Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Sergei Shtylyov @ 2011-04-01 14:10 UTC (permalink / raw)
To: linux-arm-kernel
Dmitry Eremin-Solenikov wrote:
> Mioa701 is a pxa270 machine and pxa27x_udc driver doesn't pay any attention
> to udc_is_connected, so drop it.
You seem to be moving is_usb_connected(), not dropping it...
> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
> ---
> arch/arm/mach-pxa/mioa701.c | 11 +++++------
> 1 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
> index dd13bb6..f69a3c7 100644
> --- a/arch/arm/mach-pxa/mioa701.c
> +++ b/arch/arm/mach-pxa/mioa701.c
> @@ -402,13 +402,7 @@ static void gsm_exit(void)
> /*
> * USB UDC
> */
> -static int is_usb_connected(void)
> -{
> - return !gpio_get_value(GPIO13_nUSB_DETECT);
> -}
> -
> static struct pxa2xx_udc_mach_info mioa701_udc_info = {
> - .udc_is_connected = is_usb_connected,
> .gpio_pullup = GPIO22_USB_ENABLE,
> };
>
> @@ -596,6 +590,11 @@ static int is_ac_connected(void)
> return gpio_get_value(GPIO96_AC_DETECT);
> }
>
> +static int is_usb_connected(void)
> +{
> + return !gpio_get_value(GPIO13_nUSB_DETECT);
> +}
> +
> static void mioa701_set_charge(int flags)
> {
> gpio_set_value(GPIO9_CHARGE_EN, (flags == PDA_POWER_CHARGE_USB));
WBR, Sergei
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 2/7] mioa701: drop udc_is_connected
2011-04-01 14:10 ` Sergei Shtylyov
@ 2011-04-01 14:50 ` Dmitry Eremin-Solenikov
2011-04-04 6:58 ` Eric Miao
0 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-01 14:50 UTC (permalink / raw)
To: linux-arm-kernel
On 01.04.2011 18:10, Sergei Shtylyov wrote:
> Dmitry Eremin-Solenikov wrote:
>
>> Mioa701 is a pxa270 machine and pxa27x_udc driver doesn't pay any
>> attention
>> to udc_is_connected, so drop it.
>
> You seem to be moving is_usb_connected(), not dropping it...
It may seem to be a bad wording. I'm dropping
pxa2xx_udc_mach_info.udc_is_connected() callback assignment. The
is_usb_connected() function is still used by pda-power driver.
>
>> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>> ---
>> arch/arm/mach-pxa/mioa701.c | 11 +++++------
>> 1 files changed, 5 insertions(+), 6 deletions(-)
>>
>> diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
>> index dd13bb6..f69a3c7 100644
>> --- a/arch/arm/mach-pxa/mioa701.c
>> +++ b/arch/arm/mach-pxa/mioa701.c
>> @@ -402,13 +402,7 @@ static void gsm_exit(void)
>> /*
>> * USB UDC
>> */
>> -static int is_usb_connected(void)
>> -{
>> - return !gpio_get_value(GPIO13_nUSB_DETECT);
>> -}
>> -
>> static struct pxa2xx_udc_mach_info mioa701_udc_info = {
>> - .udc_is_connected = is_usb_connected,
>> .gpio_pullup = GPIO22_USB_ENABLE,
>> };
>>
>> @@ -596,6 +590,11 @@ static int is_ac_connected(void)
>> return gpio_get_value(GPIO96_AC_DETECT);
>> }
>>
>> +static int is_usb_connected(void)
>> +{
>> + return !gpio_get_value(GPIO13_nUSB_DETECT);
>> +}
>> +
>> static void mioa701_set_charge(int flags)
>> {
>> gpio_set_value(GPIO9_CHARGE_EN, (flags == PDA_POWER_CHARGE_USB));
>
> WBR, Sergei
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 6/7] pxa25x: drop handling of udc_is_connected
2011-04-01 13:56 ` [PATCH 6/7] pxa25x: drop handling of udc_is_connected Dmitry Eremin-Solenikov
@ 2011-04-01 19:02 ` Sergei Shtylyov
2011-04-02 14:46 ` Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Sergei Shtylyov @ 2011-04-01 19:02 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
Dmitry Eremin-Solenikov wrote:
> There are no more users of udc_is_connected. Drop this field from mach_info
If I don't mistake, this patch does more than just that.
> and stop using it in pxa25x_udc.
Hm, I don't see where you're doing that. Instead you're changing some checks
for gadget speed and adding some code. And you've said that the driver never
used that thing before. Hm?
> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
[...]
> diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
> index 6cb32b8..40ceb73 100644
> --- a/drivers/usb/gadget/pxa25x_udc.c
> +++ b/drivers/usb/gadget/pxa25x_udc.c
> @@ -1072,7 +1072,7 @@ udc_seq_show(struct seq_file *m, void *_d)
> (tmp & UDCCFR_ACM) ? " acm" : "");
> }
>
> - if (dev->gadget.speed != USB_SPEED_FULL || !dev->driver)
> + if (dev->gadget.speed == USB_SPEED_UNKNOWN || !dev->driver)
> goto done;
>
> seq_printf(m, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n",
> @@ -1700,9 +1700,13 @@ pxa25x_udc_irq(int irq, void *_dev)
> if (unlikely(udccr & UDCCR_SUSIR)) {
> udc_ack_int_UDCCR(UDCCR_SUSIR);
> handled = 1;
> - DBG(DBG_VERBOSE, "USB suspend\n");
> + DBG(DBG_VERBOSE, "USB suspend%s\n",
> + dev->gadget.speed != USB_SPEED_UNKNOWN
> + ? "" : "+disconnect");
>
> - if (dev->gadget.speed != USB_SPEED_UNKNOWN
> + if (dev->gadget.speed == USB_SPEED_UNKNOWN)
> + stop_activity(dev, dev->driver);
> + else if (dev->gadget.speed != USB_SPEED_UNKNOWN
This is redundant, as it will always be true after your first *if*.
WBR, Sergei
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 6/7] pxa25x: drop handling of udc_is_connected
2011-04-01 19:02 ` Sergei Shtylyov
@ 2011-04-02 14:46 ` Dmitry Eremin-Solenikov
0 siblings, 0 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-02 14:46 UTC (permalink / raw)
To: linux-arm-kernel
On 4/1/11, Sergei Shtylyov <sshtylyov@mvista.com> wrote:
> Hello.
>
> Dmitry Eremin-Solenikov wrote:
>
>> There are no more users of udc_is_connected. Drop this field from
>> mach_info
>
> If I don't mistake, this patch does more than just that.
>
>> and stop using it in pxa25x_udc.
>
> Hm, I don't see where you're doing that. Instead you're changing some
> checks
> for gadget speed and adding some code. And you've said that the driver never
> used that thing before. Hm?
Strange. I thought I cleaned up this patch. There are some leftovers
from previous
rebases. Correct patch as it is now includes only the part regarding
udc_is_connected
field.
I'll wait for more review comments and then resend the whole serie.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 2/7] mioa701: drop udc_is_connected
2011-04-01 14:50 ` Dmitry Eremin-Solenikov
@ 2011-04-04 6:58 ` Eric Miao
0 siblings, 0 replies; 23+ messages in thread
From: Eric Miao @ 2011-04-04 6:58 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Apr 1, 2011 at 10:50 PM, Dmitry Eremin-Solenikov
<dbaryshkov@gmail.com> wrote:
> On 01.04.2011 18:10, Sergei Shtylyov wrote:
>>
>> Dmitry Eremin-Solenikov wrote:
>>
>>> Mioa701 is a pxa270 machine and pxa27x_udc driver doesn't pay any
>>> attention
>>> to udc_is_connected, so drop it.
>>
>> You seem to be moving is_usb_connected(), not dropping it...
>
> It may seem to be a bad wording. I'm dropping
> pxa2xx_udc_mach_info.udc_is_connected() callback assignment. The
> is_usb_connected() function is still used by pda-power driver.
I'll apply this patch as is. However, this does reveal another problem at
least, that pda-power should have a way to know usb connected status,
maybe through gpio_vbus.
>
>>
>>> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>>> ---
>>> arch/arm/mach-pxa/mioa701.c | 11 +++++------
>>> 1 files changed, 5 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
>>> index dd13bb6..f69a3c7 100644
>>> --- a/arch/arm/mach-pxa/mioa701.c
>>> +++ b/arch/arm/mach-pxa/mioa701.c
>>> @@ -402,13 +402,7 @@ static void gsm_exit(void)
>>> /*
>>> * USB UDC
>>> */
>>> -static int is_usb_connected(void)
>>> -{
>>> - return !gpio_get_value(GPIO13_nUSB_DETECT);
>>> -}
>>> -
>>> static struct pxa2xx_udc_mach_info mioa701_udc_info = {
>>> - .udc_is_connected = is_usb_connected,
>>> .gpio_pullup = GPIO22_USB_ENABLE,
>>> };
>>>
>>> @@ -596,6 +590,11 @@ static int is_ac_connected(void)
>>> return gpio_get_value(GPIO96_AC_DETECT);
>>> }
>>>
>>> +static int is_usb_connected(void)
>>> +{
>>> + return !gpio_get_value(GPIO13_nUSB_DETECT);
>>> +}
>>> +
>>> static void mioa701_set_charge(int flags)
>>> {
>>> gpio_set_value(GPIO9_CHARGE_EN, (flags == PDA_POWER_CHARGE_USB));
>>
>> WBR, Sergei
>
>
> --
> With best wishes
> Dmitry
>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-01 13:56 ` [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver Dmitry Eremin-Solenikov
@ 2011-04-04 7:01 ` Eric Miao
2011-04-04 7:04 ` Eric Miao
0 siblings, 1 reply; 23+ messages in thread
From: Eric Miao @ 2011-04-04 7:01 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Apr 1, 2011 at 9:56 PM, Dmitry Eremin-Solenikov
<dbaryshkov@gmail.com> wrote:
> Move all handling of lubbock board to separate lubbock-usb transceiver,
> removing cruft from pxa25x_udc.
>
> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
I like this change very much. It would be perfect if someone can actually
test this, but provided Lubbock is no way popular these days, it would
just be fine.
Acked-by: Eric Miao <eric.y.miao@gmail.com>
> ---
> ?drivers/usb/gadget/pxa25x_udc.c | ? 74 ----------------
> ?drivers/usb/otg/Kconfig ? ? ? ? | ? ?8 ++
> ?drivers/usb/otg/Makefile ? ? ? ?| ? ?1 +
> ?drivers/usb/otg/lubbock-usb.c ? | ?178 +++++++++++++++++++++++++++++++++++++++
> ?4 files changed, 187 insertions(+), 74 deletions(-)
> ?create mode 100644 drivers/usb/otg/lubbock-usb.c
>
> diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
> index 444b60a..6cb32b8 100644
> --- a/drivers/usb/gadget/pxa25x_udc.c
> +++ b/drivers/usb/gadget/pxa25x_udc.c
> @@ -65,10 +65,6 @@
> ?#include <mach/pxa25x-udc.h>
> ?#endif
>
> -#ifdef CONFIG_ARCH_LUBBOCK
> -#include <mach/lubbock.h>
> -#endif
> -
> ?#include <asm/mach/udc_pxa2xx.h>
>
>
> @@ -1383,42 +1379,6 @@ EXPORT_SYMBOL(usb_gadget_unregister_driver);
>
> ?/*-------------------------------------------------------------------------*/
>
> -#ifdef CONFIG_ARCH_LUBBOCK
> -
> -/* Lubbock has separate connect and disconnect irqs. ?More typical designs
> - * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
> - */
> -
> -static irqreturn_t
> -lubbock_vbus_irq(int irq, void *_dev)
> -{
> - ? ? ? struct pxa25x_udc ? ? ? *dev = _dev;
> - ? ? ? int ? ? ? ? ? ? ? ? ? ? vbus;
> -
> - ? ? ? dev->stats.irqs++;
> - ? ? ? switch (irq) {
> - ? ? ? case LUBBOCK_USB_IRQ:
> - ? ? ? ? ? ? ? vbus = 1;
> - ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_IRQ);
> - ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_DISC_IRQ);
> - ? ? ? ? ? ? ? break;
> - ? ? ? case LUBBOCK_USB_DISC_IRQ:
> - ? ? ? ? ? ? ? vbus = 0;
> - ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_DISC_IRQ);
> - ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_IRQ);
> - ? ? ? ? ? ? ? break;
> - ? ? ? default:
> - ? ? ? ? ? ? ? return IRQ_NONE;
> - ? ? ? }
> -
> - ? ? ? pxa25x_udc_vbus_session(&dev->gadget, vbus);
> - ? ? ? return IRQ_HANDLED;
> -}
> -
> -#endif
> -
> -
> -/*-------------------------------------------------------------------------*/
>
> ?static inline void clear_ep_state (struct pxa25x_udc *dev)
> ?{
> @@ -2206,38 +2166,10 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
> ? ? ? ?}
> ? ? ? ?dev->got_irq = 1;
>
> -#ifdef CONFIG_ARCH_LUBBOCK
> - ? ? ? if (machine_is_lubbock()) {
> - ? ? ? ? ? ? ? retval = request_irq(LUBBOCK_USB_DISC_IRQ,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, dev);
> - ? ? ? ? ? ? ? if (retval != 0) {
> - ? ? ? ? ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, LUBBOCK_USB_DISC_IRQ, retval);
> -lubbock_fail0:
> - ? ? ? ? ? ? ? ? ? ? ? goto err_irq_lub;
> - ? ? ? ? ? ? ? }
> - ? ? ? ? ? ? ? retval = request_irq(LUBBOCK_USB_IRQ,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, dev);
> - ? ? ? ? ? ? ? if (retval != 0) {
> - ? ? ? ? ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, LUBBOCK_USB_IRQ, retval);
> - ? ? ? ? ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
> - ? ? ? ? ? ? ? ? ? ? ? goto lubbock_fail0;
> - ? ? ? ? ? ? ? }
> - ? ? ? } else
> -#endif
> ? ? ? ?create_debug_files(dev);
>
> ? ? ? ?return 0;
>
> -#ifdef CONFIG_ARCH_LUBBOCK
> - ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
> - err_irq_lub:
> -#endif
> ? ? ? ?free_irq(irq, dev);
> ?err_irq1:
> ? ? ? ?if (gpio_is_valid(dev->mach->gpio_pullup))
> @@ -2273,12 +2205,6 @@ static int __exit pxa25x_udc_remove(struct platform_device *pdev)
> ? ? ? ? ? ? ? ?free_irq(platform_get_irq(pdev, 0), dev);
> ? ? ? ? ? ? ? ?dev->got_irq = 0;
> ? ? ? ?}
> -#ifdef CONFIG_ARCH_LUBBOCK
> - ? ? ? if (machine_is_lubbock()) {
> - ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
> - ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_IRQ, dev);
> - ? ? ? }
> -#endif
> ? ? ? ?if (gpio_is_valid(dev->mach->gpio_pullup))
> ? ? ? ? ? ? ? ?gpio_free(dev->mach->gpio_pullup);
>
> diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
> index daf3e5f..7ddfc54 100644
> --- a/drivers/usb/otg/Kconfig
> +++ b/drivers/usb/otg/Kconfig
> @@ -122,4 +122,12 @@ config AB8500_USB
> ? ? ? ? ? This transceiver supports high and full speed devices plus,
> ? ? ? ? ? in host mode, low speed.
>
> +config LUBBOCK_USB
> + ? ? ? tristate "Intel DBPXA250 (Lubbock) Tranceiver Driver"
> + ? ? ? depends on ARCH_LUBBOCK
> + ? ? ? ?select USB_OTG_UTILS
> + ? ? ? help
> + ? ? ? ? Enable this to support the USB UDC connectivity on Intel DBPXA250
> + ? ? ? ? development platform (so-called Lubbock).
> +
> ?endif # USB || OTG
> diff --git a/drivers/usb/otg/Makefile b/drivers/usb/otg/Makefile
> index e22d917..5ed42cd 100644
> --- a/drivers/usb/otg/Makefile
> +++ b/drivers/usb/otg/Makefile
> @@ -19,3 +19,4 @@ obj-$(CONFIG_USB_ULPI) ? ? ? ? ? ? ? ?+= ulpi.o
> ?obj-$(CONFIG_USB_ULPI_VIEWPORT) ? ? ? ?+= ulpi_viewport.o
> ?obj-$(CONFIG_USB_MSM_OTG) ? ? ?+= msm_otg.o
> ?obj-$(CONFIG_AB8500_USB) ? ? ? += ab8500-usb.o
> +obj-$(CONFIG_LUBBOCK_USB) ? ? ?+= lubbock-usb.o
> diff --git a/drivers/usb/otg/lubbock-usb.c b/drivers/usb/otg/lubbock-usb.c
> new file mode 100644
> index 0000000..d18c101
> --- /dev/null
> +++ b/drivers/usb/otg/lubbock-usb.c
> @@ -0,0 +1,178 @@
> +/*
> + * Intel DBPXA250 Development Platform USB UDC support
> + *
> + * Copyright (C) 2011 Dmitry Eremin-Solenikov
> + *
> + * Based on pxa25x_udc driver:
> + * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
> + * Copyright (C) 2003 Robert Schwebel, Pengutronix
> + * Copyright (C) 2003 Benedikt Spranger, Pengutronix
> + * Copyright (C) 2003 David Brownell
> + * Copyright (C) 2003 Joshua Wise
> + *
> + * Largely based on lubbock-usb-xceiv:
> + * Copyright (C) 2009 Texas Instruments Inc
> + */
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/usb.h>
> +#include <linux/usb/gadget.h>
> +#include <linux/usb/otg.h>
> +#include <linux/slab.h>
> +#include <linux/interrupt.h>
> +
> +#include <mach/lubbock.h>
> +
> +static int lubbock_udc_is_connected(void)
> +{
> + ? ? ? return (LUB_MISC_RD & (1 << 9)) == 0;
> +}
> +
> +static int lubbock_set_peripheral(struct otg_transceiver *lubbock,
> + ? ? ? ? ? ? ? struct usb_gadget *gadget)
> +{
> + ? ? ? if (!lubbock)
> + ? ? ? ? ? ? ? return -ENODEV;
> +
> + ? ? ? if (!gadget) {
> + ? ? ? ? ? ? ? lubbock->gadget = NULL;
> + ? ? ? ? ? ? ? return 0;
> + ? ? ? }
> +
> + ? ? ? lubbock->gadget = gadget;
> + ? ? ? lubbock->state = OTG_STATE_B_IDLE;
> + ? ? ? if (lubbock_udc_is_connected()) {
> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_PERIPHERAL;
> + ? ? ? ? ? ? ? usb_gadget_vbus_connect(lubbock->gadget);
> + ? ? ? }
> +
> + ? ? ? return 0;
> +}
> +
> +/* Lubbock has separate connect and disconnect irqs. ?More typical designs
> + * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
> + */
> +
> +static irqreturn_t
> +lubbock_vbus_irq(int irq, void *_dev)
> +{
> + ? ? ? struct otg_transceiver *lubbock = _dev;
> + ? ? ? switch (irq) {
> + ? ? ? case LUBBOCK_USB_IRQ:
> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_PERIPHERAL;
> + ? ? ? ? ? ? ? usb_gadget_vbus_connect(lubbock->gadget);
> +
> + ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_IRQ);
> + ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_DISC_IRQ);
> + ? ? ? ? ? ? ? break;
> + ? ? ? case LUBBOCK_USB_DISC_IRQ:
> + ? ? ? ? ? ? ? usb_gadget_vbus_disconnect(lubbock->gadget);
> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_IDLE;
> +
> + ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_DISC_IRQ);
> + ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_IRQ);
> + ? ? ? ? ? ? ? break;
> + ? ? ? default:
> + ? ? ? ? ? ? ? return IRQ_NONE;
> + ? ? ? }
> +
> + ? ? ? return IRQ_HANDLED;
> +}
> +
> +
> +static int __devinit lubbock_usb_xceiv_probe(struct platform_device *pdev)
> +{
> + ? ? ? struct otg_transceiver ?*lubbock;
> + ? ? ? int err;
> +
> + ? ? ? lubbock = kzalloc(sizeof *lubbock, GFP_KERNEL);
> + ? ? ? if (!lubbock)
> + ? ? ? ? ? ? ? return -ENOMEM;
> +
> + ? ? ? lubbock->dev ? ? ? ? ? ?= &pdev->dev;
> + ? ? ? lubbock->label ? ? ? ? ?= "lubbock-xceiv";
> + ? ? ? lubbock->state ? ? ? ? ?= OTG_STATE_UNDEFINED;
> + ? ? ? lubbock->set_peripheral = lubbock_set_peripheral;
> +
> + ? ? ? err = request_irq(LUBBOCK_USB_DISC_IRQ,
> + ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
> + ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, lubbock);
> + ? ? ? if (err != 0) {
> + ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, LUBBOCK_USB_DISC_IRQ, err);
> + ? ? ? ? ? ? ? goto err_irq_lub;
> + ? ? ? }
> + ? ? ? err = request_irq(LUBBOCK_USB_IRQ,
> + ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
> + ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, lubbock);
> + ? ? ? if (err != 0) {
> + ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, LUBBOCK_USB_IRQ, err);
> + ? ? ? ? ? ? ? goto err_irq_lub2;
> + ? ? ? }
> +
> + ? ? ? err = otg_set_transceiver(lubbock);
> + ? ? ? if (err) {
> + ? ? ? ? ? ? ? dev_err(&pdev->dev, "can't register transceiver, err: %d\n",
> + ? ? ? ? ? ? ? ? ? ? ? err);
> + ? ? ? ? ? ? ? goto exit;
> + ? ? ? }
> +
> + ? ? ? platform_set_drvdata(pdev, lubbock);
> +
> + ? ? ? BLOCKING_INIT_NOTIFIER_HEAD(&lubbock->notifier);
> +
> + ? ? ? return 0;
> +exit:
> + ? ? ? free_irq(LUBBOCK_USB_IRQ, lubbock);
> +err_irq_lub2:
> + ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
> +err_irq_lub:
> + ? ? ? kfree(lubbock);
> + ? ? ? return err;
> +}
> +
> +static int __devexit lubbock_usb_xceiv_remove(struct platform_device *pdev)
> +{
> + ? ? ? struct otg_transceiver *lubbock = platform_get_drvdata(pdev);
> +
> + ? ? ? otg_set_transceiver(NULL);
> +
> + ? ? ? platform_set_drvdata(pdev, NULL);
> +
> + ? ? ? free_irq(LUBBOCK_USB_IRQ, lubbock);
> + ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
> +
> + ? ? ? kfree(lubbock);
> +
> + ? ? ? return 0;
> +}
> +
> +static struct platform_driver lubbock_usb_xceiv_driver = {
> + ? ? ? .probe ? ? ? ? ?= lubbock_usb_xceiv_probe,
> + ? ? ? .remove ? ? ? ? = __devexit_p(lubbock_usb_xceiv_remove),
> + ? ? ? .driver ? ? ? ? = {
> + ? ? ? ? ? ? ? .name ? = "lubbock_usb_xceiv",
> + ? ? ? ? ? ? ? .owner ?= THIS_MODULE,
> + ? ? ? },
> +};
> +
> +static int __init lubbock_usb_xceiv_init(void)
> +{
> + ? ? ? return platform_driver_register(&lubbock_usb_xceiv_driver);
> +}
> +subsys_initcall(lubbock_usb_xceiv_init);
> +
> +static void __exit lubbock_usb_xceiv_exit(void)
> +{
> + ? ? ? platform_driver_unregister(&lubbock_usb_xceiv_driver);
> +}
> +module_exit(lubbock_usb_xceiv_exit);
> +
> +MODULE_ALIAS("platform:lubbock_usb_xceiv");
> +MODULE_DESCRIPTION("lubbock USB Transceiver driver");
> +MODULE_LICENSE("GPL");
> +
> --
> 1.7.4.1
>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-04 7:01 ` Eric Miao
@ 2011-04-04 7:04 ` Eric Miao
2011-04-06 21:21 ` Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Eric Miao @ 2011-04-04 7:04 UTC (permalink / raw)
To: linux-arm-kernel
David,
Let me know if you're OK I take this patch, as several others following
have dependency on this one.
On Mon, Apr 4, 2011 at 3:01 PM, Eric Miao <eric.y.miao@gmail.com> wrote:
> On Fri, Apr 1, 2011 at 9:56 PM, Dmitry Eremin-Solenikov
> <dbaryshkov@gmail.com> wrote:
>> Move all handling of lubbock board to separate lubbock-usb transceiver,
>> removing cruft from pxa25x_udc.
>>
>> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>
> I like this change very much. It would be perfect if someone can actually
> test this, but provided Lubbock is no way popular these days, it would
> just be fine.
>
> Acked-by: Eric Miao <eric.y.miao@gmail.com>
>
>> ---
>> ?drivers/usb/gadget/pxa25x_udc.c | ? 74 ----------------
>> ?drivers/usb/otg/Kconfig ? ? ? ? | ? ?8 ++
>> ?drivers/usb/otg/Makefile ? ? ? ?| ? ?1 +
>> ?drivers/usb/otg/lubbock-usb.c ? | ?178 +++++++++++++++++++++++++++++++++++++++
>> ?4 files changed, 187 insertions(+), 74 deletions(-)
>> ?create mode 100644 drivers/usb/otg/lubbock-usb.c
>>
>> diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
>> index 444b60a..6cb32b8 100644
>> --- a/drivers/usb/gadget/pxa25x_udc.c
>> +++ b/drivers/usb/gadget/pxa25x_udc.c
>> @@ -65,10 +65,6 @@
>> ?#include <mach/pxa25x-udc.h>
>> ?#endif
>>
>> -#ifdef CONFIG_ARCH_LUBBOCK
>> -#include <mach/lubbock.h>
>> -#endif
>> -
>> ?#include <asm/mach/udc_pxa2xx.h>
>>
>>
>> @@ -1383,42 +1379,6 @@ EXPORT_SYMBOL(usb_gadget_unregister_driver);
>>
>> ?/*-------------------------------------------------------------------------*/
>>
>> -#ifdef CONFIG_ARCH_LUBBOCK
>> -
>> -/* Lubbock has separate connect and disconnect irqs. ?More typical designs
>> - * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
>> - */
>> -
>> -static irqreturn_t
>> -lubbock_vbus_irq(int irq, void *_dev)
>> -{
>> - ? ? ? struct pxa25x_udc ? ? ? *dev = _dev;
>> - ? ? ? int ? ? ? ? ? ? ? ? ? ? vbus;
>> -
>> - ? ? ? dev->stats.irqs++;
>> - ? ? ? switch (irq) {
>> - ? ? ? case LUBBOCK_USB_IRQ:
>> - ? ? ? ? ? ? ? vbus = 1;
>> - ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_IRQ);
>> - ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_DISC_IRQ);
>> - ? ? ? ? ? ? ? break;
>> - ? ? ? case LUBBOCK_USB_DISC_IRQ:
>> - ? ? ? ? ? ? ? vbus = 0;
>> - ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_DISC_IRQ);
>> - ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_IRQ);
>> - ? ? ? ? ? ? ? break;
>> - ? ? ? default:
>> - ? ? ? ? ? ? ? return IRQ_NONE;
>> - ? ? ? }
>> -
>> - ? ? ? pxa25x_udc_vbus_session(&dev->gadget, vbus);
>> - ? ? ? return IRQ_HANDLED;
>> -}
>> -
>> -#endif
>> -
>> -
>> -/*-------------------------------------------------------------------------*/
>>
>> ?static inline void clear_ep_state (struct pxa25x_udc *dev)
>> ?{
>> @@ -2206,38 +2166,10 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
>> ? ? ? ?}
>> ? ? ? ?dev->got_irq = 1;
>>
>> -#ifdef CONFIG_ARCH_LUBBOCK
>> - ? ? ? if (machine_is_lubbock()) {
>> - ? ? ? ? ? ? ? retval = request_irq(LUBBOCK_USB_DISC_IRQ,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, dev);
>> - ? ? ? ? ? ? ? if (retval != 0) {
>> - ? ? ? ? ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, LUBBOCK_USB_DISC_IRQ, retval);
>> -lubbock_fail0:
>> - ? ? ? ? ? ? ? ? ? ? ? goto err_irq_lub;
>> - ? ? ? ? ? ? ? }
>> - ? ? ? ? ? ? ? retval = request_irq(LUBBOCK_USB_IRQ,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, dev);
>> - ? ? ? ? ? ? ? if (retval != 0) {
>> - ? ? ? ? ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? driver_name, LUBBOCK_USB_IRQ, retval);
>> - ? ? ? ? ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>> - ? ? ? ? ? ? ? ? ? ? ? goto lubbock_fail0;
>> - ? ? ? ? ? ? ? }
>> - ? ? ? } else
>> -#endif
>> ? ? ? ?create_debug_files(dev);
>>
>> ? ? ? ?return 0;
>>
>> -#ifdef CONFIG_ARCH_LUBBOCK
>> - ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>> - err_irq_lub:
>> -#endif
>> ? ? ? ?free_irq(irq, dev);
>> ?err_irq1:
>> ? ? ? ?if (gpio_is_valid(dev->mach->gpio_pullup))
>> @@ -2273,12 +2205,6 @@ static int __exit pxa25x_udc_remove(struct platform_device *pdev)
>> ? ? ? ? ? ? ? ?free_irq(platform_get_irq(pdev, 0), dev);
>> ? ? ? ? ? ? ? ?dev->got_irq = 0;
>> ? ? ? ?}
>> -#ifdef CONFIG_ARCH_LUBBOCK
>> - ? ? ? if (machine_is_lubbock()) {
>> - ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>> - ? ? ? ? ? ? ? free_irq(LUBBOCK_USB_IRQ, dev);
>> - ? ? ? }
>> -#endif
>> ? ? ? ?if (gpio_is_valid(dev->mach->gpio_pullup))
>> ? ? ? ? ? ? ? ?gpio_free(dev->mach->gpio_pullup);
>>
>> diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
>> index daf3e5f..7ddfc54 100644
>> --- a/drivers/usb/otg/Kconfig
>> +++ b/drivers/usb/otg/Kconfig
>> @@ -122,4 +122,12 @@ config AB8500_USB
>> ? ? ? ? ? This transceiver supports high and full speed devices plus,
>> ? ? ? ? ? in host mode, low speed.
>>
>> +config LUBBOCK_USB
>> + ? ? ? tristate "Intel DBPXA250 (Lubbock) Tranceiver Driver"
>> + ? ? ? depends on ARCH_LUBBOCK
>> + ? ? ? ?select USB_OTG_UTILS
>> + ? ? ? help
>> + ? ? ? ? Enable this to support the USB UDC connectivity on Intel DBPXA250
>> + ? ? ? ? development platform (so-called Lubbock).
>> +
>> ?endif # USB || OTG
>> diff --git a/drivers/usb/otg/Makefile b/drivers/usb/otg/Makefile
>> index e22d917..5ed42cd 100644
>> --- a/drivers/usb/otg/Makefile
>> +++ b/drivers/usb/otg/Makefile
>> @@ -19,3 +19,4 @@ obj-$(CONFIG_USB_ULPI) ? ? ? ? ? ? ? ?+= ulpi.o
>> ?obj-$(CONFIG_USB_ULPI_VIEWPORT) ? ? ? ?+= ulpi_viewport.o
>> ?obj-$(CONFIG_USB_MSM_OTG) ? ? ?+= msm_otg.o
>> ?obj-$(CONFIG_AB8500_USB) ? ? ? += ab8500-usb.o
>> +obj-$(CONFIG_LUBBOCK_USB) ? ? ?+= lubbock-usb.o
>> diff --git a/drivers/usb/otg/lubbock-usb.c b/drivers/usb/otg/lubbock-usb.c
>> new file mode 100644
>> index 0000000..d18c101
>> --- /dev/null
>> +++ b/drivers/usb/otg/lubbock-usb.c
>> @@ -0,0 +1,178 @@
>> +/*
>> + * Intel DBPXA250 Development Platform USB UDC support
>> + *
>> + * Copyright (C) 2011 Dmitry Eremin-Solenikov
>> + *
>> + * Based on pxa25x_udc driver:
>> + * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
>> + * Copyright (C) 2003 Robert Schwebel, Pengutronix
>> + * Copyright (C) 2003 Benedikt Spranger, Pengutronix
>> + * Copyright (C) 2003 David Brownell
>> + * Copyright (C) 2003 Joshua Wise
>> + *
>> + * Largely based on lubbock-usb-xceiv:
>> + * Copyright (C) 2009 Texas Instruments Inc
>> + */
>> +#include <linux/module.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/dma-mapping.h>
>> +#include <linux/usb.h>
>> +#include <linux/usb/gadget.h>
>> +#include <linux/usb/otg.h>
>> +#include <linux/slab.h>
>> +#include <linux/interrupt.h>
>> +
>> +#include <mach/lubbock.h>
>> +
>> +static int lubbock_udc_is_connected(void)
>> +{
>> + ? ? ? return (LUB_MISC_RD & (1 << 9)) == 0;
>> +}
>> +
>> +static int lubbock_set_peripheral(struct otg_transceiver *lubbock,
>> + ? ? ? ? ? ? ? struct usb_gadget *gadget)
>> +{
>> + ? ? ? if (!lubbock)
>> + ? ? ? ? ? ? ? return -ENODEV;
>> +
>> + ? ? ? if (!gadget) {
>> + ? ? ? ? ? ? ? lubbock->gadget = NULL;
>> + ? ? ? ? ? ? ? return 0;
>> + ? ? ? }
>> +
>> + ? ? ? lubbock->gadget = gadget;
>> + ? ? ? lubbock->state = OTG_STATE_B_IDLE;
>> + ? ? ? if (lubbock_udc_is_connected()) {
>> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_PERIPHERAL;
>> + ? ? ? ? ? ? ? usb_gadget_vbus_connect(lubbock->gadget);
>> + ? ? ? }
>> +
>> + ? ? ? return 0;
>> +}
>> +
>> +/* Lubbock has separate connect and disconnect irqs. ?More typical designs
>> + * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
>> + */
>> +
>> +static irqreturn_t
>> +lubbock_vbus_irq(int irq, void *_dev)
>> +{
>> + ? ? ? struct otg_transceiver *lubbock = _dev;
>> + ? ? ? switch (irq) {
>> + ? ? ? case LUBBOCK_USB_IRQ:
>> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_PERIPHERAL;
>> + ? ? ? ? ? ? ? usb_gadget_vbus_connect(lubbock->gadget);
>> +
>> + ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_IRQ);
>> + ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_DISC_IRQ);
>> + ? ? ? ? ? ? ? break;
>> + ? ? ? case LUBBOCK_USB_DISC_IRQ:
>> + ? ? ? ? ? ? ? usb_gadget_vbus_disconnect(lubbock->gadget);
>> + ? ? ? ? ? ? ? lubbock->state = OTG_STATE_B_IDLE;
>> +
>> + ? ? ? ? ? ? ? disable_irq(LUBBOCK_USB_DISC_IRQ);
>> + ? ? ? ? ? ? ? enable_irq(LUBBOCK_USB_IRQ);
>> + ? ? ? ? ? ? ? break;
>> + ? ? ? default:
>> + ? ? ? ? ? ? ? return IRQ_NONE;
>> + ? ? ? }
>> +
>> + ? ? ? return IRQ_HANDLED;
>> +}
>> +
>> +
>> +static int __devinit lubbock_usb_xceiv_probe(struct platform_device *pdev)
>> +{
>> + ? ? ? struct otg_transceiver ?*lubbock;
>> + ? ? ? int err;
>> +
>> + ? ? ? lubbock = kzalloc(sizeof *lubbock, GFP_KERNEL);
>> + ? ? ? if (!lubbock)
>> + ? ? ? ? ? ? ? return -ENOMEM;
>> +
>> + ? ? ? lubbock->dev ? ? ? ? ? ?= &pdev->dev;
>> + ? ? ? lubbock->label ? ? ? ? ?= "lubbock-xceiv";
>> + ? ? ? lubbock->state ? ? ? ? ?= OTG_STATE_UNDEFINED;
>> + ? ? ? lubbock->set_peripheral = lubbock_set_peripheral;
>> +
>> + ? ? ? err = request_irq(LUBBOCK_USB_DISC_IRQ,
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
>> + ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, lubbock);
>> + ? ? ? if (err != 0) {
>> + ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, LUBBOCK_USB_DISC_IRQ, err);
>> + ? ? ? ? ? ? ? goto err_irq_lub;
>> + ? ? ? }
>> + ? ? ? err = request_irq(LUBBOCK_USB_IRQ,
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock_vbus_irq,
>> + ? ? ? ? ? ? ? ? ? ? ? IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, lubbock);
>> + ? ? ? if (err != 0) {
>> + ? ? ? ? ? ? ? pr_err("%s: can't get irq %i, err %d\n",
>> + ? ? ? ? ? ? ? ? ? ? ? lubbock->label, LUBBOCK_USB_IRQ, err);
>> + ? ? ? ? ? ? ? goto err_irq_lub2;
>> + ? ? ? }
>> +
>> + ? ? ? err = otg_set_transceiver(lubbock);
>> + ? ? ? if (err) {
>> + ? ? ? ? ? ? ? dev_err(&pdev->dev, "can't register transceiver, err: %d\n",
>> + ? ? ? ? ? ? ? ? ? ? ? err);
>> + ? ? ? ? ? ? ? goto exit;
>> + ? ? ? }
>> +
>> + ? ? ? platform_set_drvdata(pdev, lubbock);
>> +
>> + ? ? ? BLOCKING_INIT_NOTIFIER_HEAD(&lubbock->notifier);
>> +
>> + ? ? ? return 0;
>> +exit:
>> + ? ? ? free_irq(LUBBOCK_USB_IRQ, lubbock);
>> +err_irq_lub2:
>> + ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
>> +err_irq_lub:
>> + ? ? ? kfree(lubbock);
>> + ? ? ? return err;
>> +}
>> +
>> +static int __devexit lubbock_usb_xceiv_remove(struct platform_device *pdev)
>> +{
>> + ? ? ? struct otg_transceiver *lubbock = platform_get_drvdata(pdev);
>> +
>> + ? ? ? otg_set_transceiver(NULL);
>> +
>> + ? ? ? platform_set_drvdata(pdev, NULL);
>> +
>> + ? ? ? free_irq(LUBBOCK_USB_IRQ, lubbock);
>> + ? ? ? free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
>> +
>> + ? ? ? kfree(lubbock);
>> +
>> + ? ? ? return 0;
>> +}
>> +
>> +static struct platform_driver lubbock_usb_xceiv_driver = {
>> + ? ? ? .probe ? ? ? ? ?= lubbock_usb_xceiv_probe,
>> + ? ? ? .remove ? ? ? ? = __devexit_p(lubbock_usb_xceiv_remove),
>> + ? ? ? .driver ? ? ? ? = {
>> + ? ? ? ? ? ? ? .name ? = "lubbock_usb_xceiv",
>> + ? ? ? ? ? ? ? .owner ?= THIS_MODULE,
>> + ? ? ? },
>> +};
>> +
>> +static int __init lubbock_usb_xceiv_init(void)
>> +{
>> + ? ? ? return platform_driver_register(&lubbock_usb_xceiv_driver);
>> +}
>> +subsys_initcall(lubbock_usb_xceiv_init);
>> +
>> +static void __exit lubbock_usb_xceiv_exit(void)
>> +{
>> + ? ? ? platform_driver_unregister(&lubbock_usb_xceiv_driver);
>> +}
>> +module_exit(lubbock_usb_xceiv_exit);
>> +
>> +MODULE_ALIAS("platform:lubbock_usb_xceiv");
>> +MODULE_DESCRIPTION("lubbock USB Transceiver driver");
>> +MODULE_LICENSE("GPL");
>> +
>> --
>> 1.7.4.1
>>
>>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-04 7:04 ` Eric Miao
@ 2011-04-06 21:21 ` Dmitry Eremin-Solenikov
2011-04-07 1:48 ` Eric Miao
0 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-04-06 21:21 UTC (permalink / raw)
To: linux-arm-kernel
On 4/4/11, Eric Miao <eric.y.miao@gmail.com> wrote:
> David,
>
> Let me know if you're OK I take this patch, as several others following
> have dependency on this one.
So, what is the current status of this patch?
>
> On Mon, Apr 4, 2011 at 3:01 PM, Eric Miao <eric.y.miao@gmail.com> wrote:
>> On Fri, Apr 1, 2011 at 9:56 PM, Dmitry Eremin-Solenikov
>> <dbaryshkov@gmail.com> wrote:
>>> Move all handling of lubbock board to separate lubbock-usb transceiver,
>>> removing cruft from pxa25x_udc.
>>>
>>> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>>
>> I like this change very much. It would be perfect if someone can actually
>> test this, but provided Lubbock is no way popular these days, it would
>> just be fine.
>>
>> Acked-by: Eric Miao <eric.y.miao@gmail.com>
>>
>>> ---
>>> drivers/usb/gadget/pxa25x_udc.c | 74 ----------------
>>> drivers/usb/otg/Kconfig | 8 ++
>>> drivers/usb/otg/Makefile | 1 +
>>> drivers/usb/otg/lubbock-usb.c | 178
>>> +++++++++++++++++++++++++++++++++++++++
>>> 4 files changed, 187 insertions(+), 74 deletions(-)
>>> create mode 100644 drivers/usb/otg/lubbock-usb.c
>>>
>>> diff --git a/drivers/usb/gadget/pxa25x_udc.c
>>> b/drivers/usb/gadget/pxa25x_udc.c
>>> index 444b60a..6cb32b8 100644
>>> --- a/drivers/usb/gadget/pxa25x_udc.c
>>> +++ b/drivers/usb/gadget/pxa25x_udc.c
>>> @@ -65,10 +65,6 @@
>>> #include <mach/pxa25x-udc.h>
>>> #endif
>>>
>>> -#ifdef CONFIG_ARCH_LUBBOCK
>>> -#include <mach/lubbock.h>
>>> -#endif
>>> -
>>> #include <asm/mach/udc_pxa2xx.h>
>>>
>>>
>>> @@ -1383,42 +1379,6 @@ EXPORT_SYMBOL(usb_gadget_unregister_driver);
>>>
>>> /*-------------------------------------------------------------------------*/
>>>
>>> -#ifdef CONFIG_ARCH_LUBBOCK
>>> -
>>> -/* Lubbock has separate connect and disconnect irqs. More typical
>>> designs
>>> - * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
>>> - */
>>> -
>>> -static irqreturn_t
>>> -lubbock_vbus_irq(int irq, void *_dev)
>>> -{
>>> - struct pxa25x_udc *dev = _dev;
>>> - int vbus;
>>> -
>>> - dev->stats.irqs++;
>>> - switch (irq) {
>>> - case LUBBOCK_USB_IRQ:
>>> - vbus = 1;
>>> - disable_irq(LUBBOCK_USB_IRQ);
>>> - enable_irq(LUBBOCK_USB_DISC_IRQ);
>>> - break;
>>> - case LUBBOCK_USB_DISC_IRQ:
>>> - vbus = 0;
>>> - disable_irq(LUBBOCK_USB_DISC_IRQ);
>>> - enable_irq(LUBBOCK_USB_IRQ);
>>> - break;
>>> - default:
>>> - return IRQ_NONE;
>>> - }
>>> -
>>> - pxa25x_udc_vbus_session(&dev->gadget, vbus);
>>> - return IRQ_HANDLED;
>>> -}
>>> -
>>> -#endif
>>> -
>>> -
>>> -/*-------------------------------------------------------------------------*/
>>>
>>> static inline void clear_ep_state (struct pxa25x_udc *dev)
>>> {
>>> @@ -2206,38 +2166,10 @@ static int __init pxa25x_udc_probe(struct
>>> platform_device *pdev)
>>> }
>>> dev->got_irq = 1;
>>>
>>> -#ifdef CONFIG_ARCH_LUBBOCK
>>> - if (machine_is_lubbock()) {
>>> - retval = request_irq(LUBBOCK_USB_DISC_IRQ,
>>> - lubbock_vbus_irq,
>>> - IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>>> - driver_name, dev);
>>> - if (retval != 0) {
>>> - pr_err("%s: can't get irq %i, err %d\n",
>>> - driver_name, LUBBOCK_USB_DISC_IRQ,
>>> retval);
>>> -lubbock_fail0:
>>> - goto err_irq_lub;
>>> - }
>>> - retval = request_irq(LUBBOCK_USB_IRQ,
>>> - lubbock_vbus_irq,
>>> - IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>>> - driver_name, dev);
>>> - if (retval != 0) {
>>> - pr_err("%s: can't get irq %i, err %d\n",
>>> - driver_name, LUBBOCK_USB_IRQ, retval);
>>> - free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>>> - goto lubbock_fail0;
>>> - }
>>> - } else
>>> -#endif
>>> create_debug_files(dev);
>>>
>>> return 0;
>>>
>>> -#ifdef CONFIG_ARCH_LUBBOCK
>>> - free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>>> - err_irq_lub:
>>> -#endif
>>> free_irq(irq, dev);
>>> err_irq1:
>>> if (gpio_is_valid(dev->mach->gpio_pullup))
>>> @@ -2273,12 +2205,6 @@ static int __exit pxa25x_udc_remove(struct
>>> platform_device *pdev)
>>> free_irq(platform_get_irq(pdev, 0), dev);
>>> dev->got_irq = 0;
>>> }
>>> -#ifdef CONFIG_ARCH_LUBBOCK
>>> - if (machine_is_lubbock()) {
>>> - free_irq(LUBBOCK_USB_DISC_IRQ, dev);
>>> - free_irq(LUBBOCK_USB_IRQ, dev);
>>> - }
>>> -#endif
>>> if (gpio_is_valid(dev->mach->gpio_pullup))
>>> gpio_free(dev->mach->gpio_pullup);
>>>
>>> diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
>>> index daf3e5f..7ddfc54 100644
>>> --- a/drivers/usb/otg/Kconfig
>>> +++ b/drivers/usb/otg/Kconfig
>>> @@ -122,4 +122,12 @@ config AB8500_USB
>>> This transceiver supports high and full speed devices plus,
>>> in host mode, low speed.
>>>
>>> +config LUBBOCK_USB
>>> + tristate "Intel DBPXA250 (Lubbock) Tranceiver Driver"
>>> + depends on ARCH_LUBBOCK
>>> + select USB_OTG_UTILS
>>> + help
>>> + Enable this to support the USB UDC connectivity on Intel
>>> DBPXA250
>>> + development platform (so-called Lubbock).
>>> +
>>> endif # USB || OTG
>>> diff --git a/drivers/usb/otg/Makefile b/drivers/usb/otg/Makefile
>>> index e22d917..5ed42cd 100644
>>> --- a/drivers/usb/otg/Makefile
>>> +++ b/drivers/usb/otg/Makefile
>>> @@ -19,3 +19,4 @@ obj-$(CONFIG_USB_ULPI) += ulpi.o
>>> obj-$(CONFIG_USB_ULPI_VIEWPORT) += ulpi_viewport.o
>>> obj-$(CONFIG_USB_MSM_OTG) += msm_otg.o
>>> obj-$(CONFIG_AB8500_USB) += ab8500-usb.o
>>> +obj-$(CONFIG_LUBBOCK_USB) += lubbock-usb.o
>>> diff --git a/drivers/usb/otg/lubbock-usb.c
>>> b/drivers/usb/otg/lubbock-usb.c
>>> new file mode 100644
>>> index 0000000..d18c101
>>> --- /dev/null
>>> +++ b/drivers/usb/otg/lubbock-usb.c
>>> @@ -0,0 +1,178 @@
>>> +/*
>>> + * Intel DBPXA250 Development Platform USB UDC support
>>> + *
>>> + * Copyright (C) 2011 Dmitry Eremin-Solenikov
>>> + *
>>> + * Based on pxa25x_udc driver:
>>> + * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
>>> + * Copyright (C) 2003 Robert Schwebel, Pengutronix
>>> + * Copyright (C) 2003 Benedikt Spranger, Pengutronix
>>> + * Copyright (C) 2003 David Brownell
>>> + * Copyright (C) 2003 Joshua Wise
>>> + *
>>> + * Largely based on lubbock-usb-xceiv:
>>> + * Copyright (C) 2009 Texas Instruments Inc
>>> + */
>>> +#include <linux/module.h>
>>> +#include <linux/platform_device.h>
>>> +#include <linux/dma-mapping.h>
>>> +#include <linux/usb.h>
>>> +#include <linux/usb/gadget.h>
>>> +#include <linux/usb/otg.h>
>>> +#include <linux/slab.h>
>>> +#include <linux/interrupt.h>
>>> +
>>> +#include <mach/lubbock.h>
>>> +
>>> +static int lubbock_udc_is_connected(void)
>>> +{
>>> + return (LUB_MISC_RD & (1 << 9)) == 0;
>>> +}
>>> +
>>> +static int lubbock_set_peripheral(struct otg_transceiver *lubbock,
>>> + struct usb_gadget *gadget)
>>> +{
>>> + if (!lubbock)
>>> + return -ENODEV;
>>> +
>>> + if (!gadget) {
>>> + lubbock->gadget = NULL;
>>> + return 0;
>>> + }
>>> +
>>> + lubbock->gadget = gadget;
>>> + lubbock->state = OTG_STATE_B_IDLE;
>>> + if (lubbock_udc_is_connected()) {
>>> + lubbock->state = OTG_STATE_B_PERIPHERAL;
>>> + usb_gadget_vbus_connect(lubbock->gadget);
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +/* Lubbock has separate connect and disconnect irqs. More typical
>>> designs
>>> + * use one GPIO as the VBUS IRQ, and another to control the D+ pullup.
>>> + */
>>> +
>>> +static irqreturn_t
>>> +lubbock_vbus_irq(int irq, void *_dev)
>>> +{
>>> + struct otg_transceiver *lubbock = _dev;
>>> + switch (irq) {
>>> + case LUBBOCK_USB_IRQ:
>>> + lubbock->state = OTG_STATE_B_PERIPHERAL;
>>> + usb_gadget_vbus_connect(lubbock->gadget);
>>> +
>>> + disable_irq(LUBBOCK_USB_IRQ);
>>> + enable_irq(LUBBOCK_USB_DISC_IRQ);
>>> + break;
>>> + case LUBBOCK_USB_DISC_IRQ:
>>> + usb_gadget_vbus_disconnect(lubbock->gadget);
>>> + lubbock->state = OTG_STATE_B_IDLE;
>>> +
>>> + disable_irq(LUBBOCK_USB_DISC_IRQ);
>>> + enable_irq(LUBBOCK_USB_IRQ);
>>> + break;
>>> + default:
>>> + return IRQ_NONE;
>>> + }
>>> +
>>> + return IRQ_HANDLED;
>>> +}
>>> +
>>> +
>>> +static int __devinit lubbock_usb_xceiv_probe(struct platform_device
>>> *pdev)
>>> +{
>>> + struct otg_transceiver *lubbock;
>>> + int err;
>>> +
>>> + lubbock = kzalloc(sizeof *lubbock, GFP_KERNEL);
>>> + if (!lubbock)
>>> + return -ENOMEM;
>>> +
>>> + lubbock->dev = &pdev->dev;
>>> + lubbock->label = "lubbock-xceiv";
>>> + lubbock->state = OTG_STATE_UNDEFINED;
>>> + lubbock->set_peripheral = lubbock_set_peripheral;
>>> +
>>> + err = request_irq(LUBBOCK_USB_DISC_IRQ,
>>> + lubbock_vbus_irq,
>>> + IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>>> + lubbock->label, lubbock);
>>> + if (err != 0) {
>>> + pr_err("%s: can't get irq %i, err %d\n",
>>> + lubbock->label, LUBBOCK_USB_DISC_IRQ, err);
>>> + goto err_irq_lub;
>>> + }
>>> + err = request_irq(LUBBOCK_USB_IRQ,
>>> + lubbock_vbus_irq,
>>> + IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
>>> + lubbock->label, lubbock);
>>> + if (err != 0) {
>>> + pr_err("%s: can't get irq %i, err %d\n",
>>> + lubbock->label, LUBBOCK_USB_IRQ, err);
>>> + goto err_irq_lub2;
>>> + }
>>> +
>>> + err = otg_set_transceiver(lubbock);
>>> + if (err) {
>>> + dev_err(&pdev->dev, "can't register transceiver, err:
>>> %d\n",
>>> + err);
>>> + goto exit;
>>> + }
>>> +
>>> + platform_set_drvdata(pdev, lubbock);
>>> +
>>> + BLOCKING_INIT_NOTIFIER_HEAD(&lubbock->notifier);
>>> +
>>> + return 0;
>>> +exit:
>>> + free_irq(LUBBOCK_USB_IRQ, lubbock);
>>> +err_irq_lub2:
>>> + free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
>>> +err_irq_lub:
>>> + kfree(lubbock);
>>> + return err;
>>> +}
>>> +
>>> +static int __devexit lubbock_usb_xceiv_remove(struct platform_device
>>> *pdev)
>>> +{
>>> + struct otg_transceiver *lubbock = platform_get_drvdata(pdev);
>>> +
>>> + otg_set_transceiver(NULL);
>>> +
>>> + platform_set_drvdata(pdev, NULL);
>>> +
>>> + free_irq(LUBBOCK_USB_IRQ, lubbock);
>>> + free_irq(LUBBOCK_USB_DISC_IRQ, lubbock);
>>> +
>>> + kfree(lubbock);
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static struct platform_driver lubbock_usb_xceiv_driver = {
>>> + .probe = lubbock_usb_xceiv_probe,
>>> + .remove = __devexit_p(lubbock_usb_xceiv_remove),
>>> + .driver = {
>>> + .name = "lubbock_usb_xceiv",
>>> + .owner = THIS_MODULE,
>>> + },
>>> +};
>>> +
>>> +static int __init lubbock_usb_xceiv_init(void)
>>> +{
>>> + return platform_driver_register(&lubbock_usb_xceiv_driver);
>>> +}
>>> +subsys_initcall(lubbock_usb_xceiv_init);
>>> +
>>> +static void __exit lubbock_usb_xceiv_exit(void)
>>> +{
>>> + platform_driver_unregister(&lubbock_usb_xceiv_driver);
>>> +}
>>> +module_exit(lubbock_usb_xceiv_exit);
>>> +
>>> +MODULE_ALIAS("platform:lubbock_usb_xceiv");
>>> +MODULE_DESCRIPTION("lubbock USB Transceiver driver");
>>> +MODULE_LICENSE("GPL");
>>> +
>>> --
>>> 1.7.4.1
>>>
>>>
>>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-06 21:21 ` Dmitry Eremin-Solenikov
@ 2011-04-07 1:48 ` Eric Miao
2011-07-01 11:48 ` Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Eric Miao @ 2011-04-07 1:48 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Apr 7, 2011 at 5:21 AM, Dmitry Eremin-Solenikov
<dbaryshkov@gmail.com> wrote:
> On 4/4/11, Eric Miao <eric.y.miao@gmail.com> wrote:
>> David,
>>
>> Let me know if you're OK I take this patch, as several others following
>> have dependency on this one.
>
> So, what is the current status of this patch?
Unfortunately, David passed away as Greg KH announced days ago.
I'll take these patches.
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv
2011-04-01 13:56 ` [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv Dmitry Eremin-Solenikov
@ 2011-04-18 8:42 ` Eric Miao
2011-05-02 23:38 ` Greg KH
0 siblings, 1 reply; 23+ messages in thread
From: Eric Miao @ 2011-04-18 8:42 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Apr 1, 2011 at 9:56 PM, Dmitry Eremin-Solenikov
<dbaryshkov@gmail.com> wrote:
> Ask for vbus_draw regulator before registering tranceiver to disallow possible
> race between registration and set_power/etc.
>
> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Acked-by: Eric Miao <eric.y.miao@gmail.com>
Greg, can you help take this patch. This looks like a good fix.
> ---
> ?drivers/usb/otg/gpio_vbus.c | ? 14 +++++++-------
> ?1 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/usb/otg/gpio_vbus.c b/drivers/usb/otg/gpio_vbus.c
> index 221c444..52733d9 100644
> --- a/drivers/usb/otg/gpio_vbus.c
> +++ b/drivers/usb/otg/gpio_vbus.c
> @@ -279,6 +279,13 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
> ? ? ? ?}
> ? ? ? ?INIT_WORK(&gpio_vbus->work, gpio_vbus_work);
>
> + ? ? ? gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
> + ? ? ? if (IS_ERR(gpio_vbus->vbus_draw)) {
> + ? ? ? ? ? ? ? dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
> + ? ? ? ? ? ? ? ? ? ? ? PTR_ERR(gpio_vbus->vbus_draw));
> + ? ? ? ? ? ? ? gpio_vbus->vbus_draw = NULL;
> + ? ? ? }
> +
> ? ? ? ?/* only active when a gadget is registered */
> ? ? ? ?err = otg_set_transceiver(&gpio_vbus->otg);
> ? ? ? ?if (err) {
> @@ -287,13 +294,6 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
> ? ? ? ? ? ? ? ?goto err_otg;
> ? ? ? ?}
>
> - ? ? ? gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
> - ? ? ? if (IS_ERR(gpio_vbus->vbus_draw)) {
> - ? ? ? ? ? ? ? dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
> - ? ? ? ? ? ? ? ? ? ? ? PTR_ERR(gpio_vbus->vbus_draw));
> - ? ? ? ? ? ? ? gpio_vbus->vbus_draw = NULL;
> - ? ? ? }
> -
> ? ? ? ?return 0;
> ?err_otg:
> ? ? ? ?free_irq(irq, &pdev->dev);
> --
> 1.7.4.1
>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv
2011-04-18 8:42 ` Eric Miao
@ 2011-05-02 23:38 ` Greg KH
2011-05-03 8:46 ` [PATCH] " Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Greg KH @ 2011-05-02 23:38 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Apr 18, 2011 at 04:42:28PM +0800, Eric Miao wrote:
> On Fri, Apr 1, 2011 at 9:56 PM, Dmitry Eremin-Solenikov
> <dbaryshkov@gmail.com> wrote:
> > Ask for vbus_draw regulator before registering tranceiver to disallow possible
> > race between registration and set_power/etc.
> >
> > Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>
> Acked-by: Eric Miao <eric.y.miao@gmail.com>
>
> Greg, can you help take this patch. This looks like a good fix.
I could if I could get it in a format I could apply it in :(
Can someone resend it?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH] gpio-vbus: ask for vbus_draw regulator before registering xceiv
2011-05-02 23:38 ` Greg KH
@ 2011-05-03 8:46 ` Dmitry Eremin-Solenikov
0 siblings, 0 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-05-03 8:46 UTC (permalink / raw)
To: linux-arm-kernel
Ask for vbus_draw regulator before registering tranceiver to disallow possible
race between registration and set_power/etc.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
---
drivers/usb/otg/gpio_vbus.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/otg/gpio_vbus.c b/drivers/usb/otg/gpio_vbus.c
index 221c444..52733d9 100644
--- a/drivers/usb/otg/gpio_vbus.c
+++ b/drivers/usb/otg/gpio_vbus.c
@@ -279,6 +279,13 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
}
INIT_WORK(&gpio_vbus->work, gpio_vbus_work);
+ gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
+ if (IS_ERR(gpio_vbus->vbus_draw)) {
+ dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
+ PTR_ERR(gpio_vbus->vbus_draw));
+ gpio_vbus->vbus_draw = NULL;
+ }
+
/* only active when a gadget is registered */
err = otg_set_transceiver(&gpio_vbus->otg);
if (err) {
@@ -287,13 +294,6 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
goto err_otg;
}
- gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
- if (IS_ERR(gpio_vbus->vbus_draw)) {
- dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
- PTR_ERR(gpio_vbus->vbus_draw));
- gpio_vbus->vbus_draw = NULL;
- }
-
return 0;
err_otg:
free_irq(irq, &pdev->dev);
--
1.7.4.4
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-04-07 1:48 ` Eric Miao
@ 2011-07-01 11:48 ` Dmitry Eremin-Solenikov
2011-07-05 7:26 ` Eric Miao
0 siblings, 1 reply; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-07-01 11:48 UTC (permalink / raw)
To: linux-arm-kernel
Hello,
On 07.04.2011 05:48, Eric Miao wrote:
> On Thu, Apr 7, 2011 at 5:21 AM, Dmitry Eremin-Solenikov
> <dbaryshkov@gmail.com> wrote:
>> On 4/4/11, Eric Miao<eric.y.miao@gmail.com> wrote:
>>> David,
>>>
>>> Let me know if you're OK I take this patch, as several others following
>>> have dependency on this one.
>>
>> So, what is the current status of this patch?
>
> Unfortunately, David passed away as Greg KH announced days ago.
> I'll take these patches.
I'v seen these patches rest a bit in your tree. It wasn't merged for
3.0. Does it stand a chance to be merged into 3.1, or it's better to
resubmit these patches to usb/gadget subtree to Felipe/Greg?
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-07-01 11:48 ` Dmitry Eremin-Solenikov
@ 2011-07-05 7:26 ` Eric Miao
2011-07-05 13:26 ` Greg KH
0 siblings, 1 reply; 23+ messages in thread
From: Eric Miao @ 2011-07-05 7:26 UTC (permalink / raw)
To: linux-arm-kernel
Felipe, ping?
Cc'ed Greg KH. Any possibility for this to go quicker, this series has been
delayed for 2 cycles. And the patches look good to me.
Dmitry,
If this is going to be merged through the usb tree, what are the other
patches that have no dependency?
- eric
On Fri, Jul 1, 2011 at 7:48 PM, Dmitry Eremin-Solenikov
<dbaryshkov@gmail.com> wrote:
> Hello,
>
> On 07.04.2011 05:48, Eric Miao wrote:
>>
>> On Thu, Apr 7, 2011 at 5:21 AM, Dmitry Eremin-Solenikov
>> <dbaryshkov@gmail.com> ?wrote:
>>>
>>> On 4/4/11, Eric Miao<eric.y.miao@gmail.com> ?wrote:
>>>>
>>>> David,
>>>>
>>>> Let me know if you're OK I take this patch, as several others following
>>>> have dependency on this one.
>>>
>>> So, what is the current status of this patch?
>>
>> Unfortunately, David passed away as Greg KH announced days ago.
>> I'll take these patches.
>
> I'v seen these patches rest a bit in your tree. It wasn't merged for 3.0.
> Does it stand a chance to be merged into 3.1, or it's better to resubmit
> these patches to usb/gadget subtree to Felipe/Greg?
>
>
> --
> With best wishes
> Dmitry
>
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-07-05 7:26 ` Eric Miao
@ 2011-07-05 13:26 ` Greg KH
2011-07-05 14:35 ` Dmitry Eremin-Solenikov
0 siblings, 1 reply; 23+ messages in thread
From: Greg KH @ 2011-07-05 13:26 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Jul 05, 2011 at 03:26:37PM +0800, Eric Miao wrote:
> Felipe, ping?
>
> Cc'ed Greg KH. Any possibility for this to go quicker, this series has been
> delayed for 2 cycles. And the patches look good to me.
Someone should have said something sooner then :)
I can take them, if someone resends them, with the proper acked-by
lines, and queue them up for 3.1.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver
2011-07-05 13:26 ` Greg KH
@ 2011-07-05 14:35 ` Dmitry Eremin-Solenikov
0 siblings, 0 replies; 23+ messages in thread
From: Dmitry Eremin-Solenikov @ 2011-07-05 14:35 UTC (permalink / raw)
To: linux-arm-kernel
On 7/5/11, Greg KH <gregkh@suse.de> wrote:
> On Tue, Jul 05, 2011 at 03:26:37PM +0800, Eric Miao wrote:
>> Felipe, ping?
>>
>> Cc'ed Greg KH. Any possibility for this to go quicker, this series has
>> been
>> delayed for 2 cycles. And the patches look good to me.
>
> Someone should have said something sooner then :)
>
> I can take them, if someone resends them, with the proper acked-by
> lines, and queue them up for 3.1.
I've resent them + several more patches which waited for them to be applied.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2011-07-05 14:35 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-01 13:56 [PATCH 1/7] balloon3: drop udc_is_connected Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 2/7] mioa701: " Dmitry Eremin-Solenikov
2011-04-01 14:10 ` Sergei Shtylyov
2011-04-01 14:50 ` Dmitry Eremin-Solenikov
2011-04-04 6:58 ` Eric Miao
2011-04-01 13:56 ` [PATCH 3/7] stargate2: udc_is_connected is ignored for pxa27x, drop it Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 4/7] pxa25x: separate lubbock handling to lubbock-usb transceiver Dmitry Eremin-Solenikov
2011-04-04 7:01 ` Eric Miao
2011-04-04 7:04 ` Eric Miao
2011-04-06 21:21 ` Dmitry Eremin-Solenikov
2011-04-07 1:48 ` Eric Miao
2011-07-01 11:48 ` Dmitry Eremin-Solenikov
2011-07-05 7:26 ` Eric Miao
2011-07-05 13:26 ` Greg KH
2011-07-05 14:35 ` Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 5/7] lubbock: switch to using lubbock_usb_xceiv transceiver Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 6/7] pxa25x: drop handling of udc_is_connected Dmitry Eremin-Solenikov
2011-04-01 19:02 ` Sergei Shtylyov
2011-04-02 14:46 ` Dmitry Eremin-Solenikov
2011-04-01 13:56 ` [PATCH 7/7] gpio-vbus: ask for vbus_draw regulator before registering xceiv Dmitry Eremin-Solenikov
2011-04-18 8:42 ` Eric Miao
2011-05-02 23:38 ` Greg KH
2011-05-03 8:46 ` [PATCH] " Dmitry Eremin-Solenikov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.