summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorRobert Hodaszi <robert.hodaszi@digi.com>2011-05-23 14:28:03 +0200
committerHector Palacios <hector.palacios@digi.com>2011-09-01 10:36:33 +0200
commit5ea5e14ba2919ce14bd7d8f5f6f202b04e502517 (patch)
tree7d50a00b1e64a9eff0fffc3f924b408f83a253ce /drivers/usb
parentaf0c7f7ef6061906932b9664b499725ede2c4262 (diff)
merge: merged changes from 2.6.28
Conflicts: gpio Special handling of PORT A gpios is lost. Some code has been ported but it must be fixed. Signed-off-by: Hector Palacios <hector.palacios@digi.com> Signed-off-by: Robert Hodaszi <robert.hodaszi@digi.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/Kconfig15
-rw-r--r--drivers/usb/gadget/gadget_chips.h11
-rw-r--r--drivers/usb/gadget/s3c2443_udc.c16
-rw-r--r--drivers/usb/gadget/s3c2443_udc.h8
4 files changed, 38 insertions, 12 deletions
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 5b6b913d66b6..b38438fd8c75 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -316,6 +316,21 @@ config USB_IMX
default USB_GADGET
select USB_GADGET_SELECTED
+config USB_GADGET_S3C2443
+ boolean "S3C2443 USB Device Controller"
+ depends on S3C2443_USB_PHY_UDC
+ select USB_GADGET_SELECTED
+ help
+ Samsung's S3C2443 with an integrated full speed USB 2.0 device
+ controller.
+
+config USB_S3C2443
+ tristate
+ depends on USB_GADGET_S3C2443
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+ select USB_GADGET_DUALSPEED
+
config USB_GADGET_S3C2410
boolean "S3C2410 USB Device Controller"
depends on ARCH_S3C2410
diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
index 9820bf0955f1..e24979a096a6 100644
--- a/drivers/usb/gadget/gadget_chips.h
+++ b/drivers/usb/gadget/gadget_chips.h
@@ -120,6 +120,13 @@
#define gadget_is_fsl_qe(g) 0
#endif
+/* Samsung S3C2443 UDC */
+#ifdef CONFIG_USB_GADGET_S3C2443
+#define gadget_is_s3c2443(g) !strcmp("s3c2443_udc", (g)->name)
+#else
+#define gadget_is_s3c2443(g) 0
+#endif
+
#ifdef CONFIG_USB_GADGET_CI13XXX
#define gadget_is_ci13xxx(g) (!strcmp("ci13xxx_udc", (g)->name))
#else
@@ -207,7 +214,9 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
else if (gadget_is_s3c_hsotg(gadget))
return 0x26;
else if (gadget_is_arcotg(gadget))
- return 0x26;
+ return 0x27;
+ else if (gadget_is_s3c2443(gadget))
+ return 0x28;
return -ENOENT;
}
diff --git a/drivers/usb/gadget/s3c2443_udc.c b/drivers/usb/gadget/s3c2443_udc.c
index 3eaf7d14f84a..8c3d28479399 100644
--- a/drivers/usb/gadget/s3c2443_udc.c
+++ b/drivers/usb/gadget/s3c2443_udc.c
@@ -371,10 +371,10 @@ static inline int s3c2443_udc_vbus_state(struct s3c24xx_udc *udc)
unsigned long iocfg;
/* @XXX: Do we really need to change to INPUT first? */
- iocfg = s3c2410_gpio_getcfg(info->vbus_pin);
- s3c2410_gpio_cfgpin(info->vbus_pin, S3C2410_GPIO_INPUT);
+ iocfg = s3c_gpio_getcfg(info->vbus_pin);
+ s3c_gpio_cfgpin(info->vbus_pin, S3C2410_GPIO_INPUT);
retval = s3c2410_gpio_getpin(info->vbus_pin);
- s3c2410_gpio_cfgpin(info->vbus_pin, iocfg);
+ s3c_gpio_cfgpin(info->vbus_pin, iocfg);
if (info->vbus_pin_inverted)
retval = !retval;
@@ -660,7 +660,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
info = udc->mach_info;
- iocfg = s3c2410_gpio_getcfg(info->vbus_pin);
+ iocfg = s3c_gpio_getcfg(info->vbus_pin);
s3c2410_gpio_cfgpin(info->vbus_pin, S3C2410_GPIO_INPUT);
state = s3c2410_gpio_getpin(info->vbus_pin);
s3c2410_gpio_cfgpin(info->vbus_pin, iocfg);
@@ -1330,7 +1330,7 @@ static irqreturn_t s3c24xx_udc_vbus_irq(int irq, void *_udc)
info = udc->mach_info;
/* Some cpus cannot read from an line configured to IRQ! */
- cfg = s3c2410_gpio_getcfg(info->vbus_pin);
+ cfg = s3c_gpio_getcfg(info->vbus_pin);
s3c2410_gpio_cfgpin(info->vbus_pin, S3C2410_GPIO_INPUT);
value = s3c2410_gpio_getpin(info->vbus_pin);
s3c2410_gpio_cfgpin(info->vbus_pin, cfg);
@@ -2369,7 +2369,7 @@ static const struct usb_gadget_ops s3c_udc_ops = {
static void nop_release(struct device *dev)
{
- pk_dbg("%s %s\n", __FUNCTION__, dev->bus_id);
+ pk_dbg("%s %s\n", __FUNCTION__, dev->init_name);
}
/*
@@ -2386,7 +2386,7 @@ static struct s3c24xx_udc memory = {
.ep0 = &memory.ep[0].ep,
.name = DRIVER_NAME,
.dev = {
- .bus_id = "gadget",
+ .init_name = "gadget",
.release = nop_release,
},
},
@@ -2587,7 +2587,7 @@ static int s3c24xx_udc_probe(struct platform_device *pdev)
pk_dbg("IRQ %i for the UDC\n", IRQ_USBD);
if (mach_info && mach_info->vbus_pin > 0) {
- udc->irq_vbus = s3c2410_gpio_getirq(mach_info->vbus_pin);
+ udc->irq_vbus = gpio_to_irq(mach_info->vbus_pin);
retval = request_irq(udc->irq_vbus,
s3c24xx_udc_vbus_irq,
IRQF_DISABLED | IRQF_SHARED |
diff --git a/drivers/usb/gadget/s3c2443_udc.h b/drivers/usb/gadget/s3c2443_udc.h
index f22985128cff..2c1c13549ada 100644
--- a/drivers/usb/gadget/s3c2443_udc.h
+++ b/drivers/usb/gadget/s3c2443_udc.h
@@ -41,6 +41,7 @@
#include <linux/mm.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
+#include <linux/gpio.h>
#include <asm/byteorder.h>
#include <asm/dma.h>
@@ -48,14 +49,15 @@
#include <asm/irq.h>
#include <asm/system.h>
#include <asm/unaligned.h>
-#include <mach/hardware.h>
+#include <plat/gpio-cfg.h>
+#include <mach/gpio-fns.h>
#include <linux/usb.h>
#include <linux/usb/gadget.h>
-#include <asm/plat-s3c24xx/regs-udc.h>
-#include <asm/plat-s3c24xx/udc.h>
+#include <plat/regs-udc.h>
+#include <plat/udc.h>
#include <linux/io.h>
#include <mach/regs-s3c2443-clock.h>
#include <mach/regs-gpio.h>