From 614683faf8029100802db06a825648d0b6490285 Mon Sep 17 00:00:00 2001 From: Mirko Vogt Date: Fri, 12 Dec 2008 11:58:53 +0000 Subject: changed Makefile and profiles, added patches for kernel 2.6.24 (stable-branch of Openmoko) SVN-Revision: 13613 --- .../1061-s3c2410-usb-switch.patch.patch | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 target/linux/s3c24xx/patches-2.6.24/1061-s3c2410-usb-switch.patch.patch (limited to 'target/linux/s3c24xx/patches-2.6.24/1061-s3c2410-usb-switch.patch.patch') diff --git a/target/linux/s3c24xx/patches-2.6.24/1061-s3c2410-usb-switch.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1061-s3c2410-usb-switch.patch.patch new file mode 100644 index 0000000000..a26b237f64 --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1061-s3c2410-usb-switch.patch.patch @@ -0,0 +1,89 @@ +From e98d739947484f7ca2cf0fe017fda73cab63067a Mon Sep 17 00:00:00 2001 +From: mokopatches +Date: Sun, 13 Apr 2008 07:23:54 +0100 +Subject: [PATCH] s3c2410-usb-switch.patch + +--- + drivers/usb/host/ohci-s3c2410.c | 43 +++++++++++++++++++++++++++++++++++++++ + 1 files changed, 43 insertions(+), 0 deletions(-) + +diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c +index 44b79e8..68f5689 100644 +--- a/drivers/usb/host/ohci-s3c2410.c ++++ b/drivers/usb/host/ohci-s3c2410.c +@@ -24,6 +24,7 @@ + + #include + #include ++#include + + #define valid_port(idx) ((idx) == 1 || (idx) == 2) + +@@ -308,6 +309,40 @@ static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc) + local_irq_restore(flags); + } + ++/* switching of USB pads */ ++static ssize_t show_usb_mode(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ if (__raw_readl(S3C24XX_MISCCR) & S3C2410_MISCCR_USBHOST) ++ return sprintf(buf, "host\n"); ++ ++ return sprintf(buf, "device\n"); ++} ++ ++static ssize_t set_usb_mode(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ if (!strncmp(buf, "host", 4)) { ++ printk("s3c2410: changing usb to host\n"); ++ s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST, ++ S3C2410_MISCCR_USBHOST); ++ /* FIXME: ++ * - call machine-specific disable-pullup function i ++ * - enable +Vbus (if hardware supports it) ++ */ ++ s3c2410_gpio_setpin(S3C2410_GPB9, 0); ++ } else if (!strncmp(buf, "device", 6)) { ++ printk("s3c2410: changing usb to device\n"); ++ s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST, 0); ++ s3c2410_gpio_setpin(S3C2410_GPB9, 1); ++ } else ++ printk("s3c2410: unknown mode\n"); ++ return -EINVAL; ++ return count; ++} ++ ++static DEVICE_ATTR(usb_mode, S_IRUGO | S_IWUSR, show_usb_mode, set_usb_mode); ++ + /* may be called without controller electrically present */ + /* may be called with controller, bus, and devices active */ + +@@ -325,6 +360,7 @@ static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc) + static void + usb_hcd_s3c2410_remove (struct usb_hcd *hcd, struct platform_device *dev) + { ++ device_remove_file(&dev->dev, &dev_attr_usb_mode); + usb_remove_hcd(hcd); + s3c2410_stop_hc(dev); + iounmap(hcd->regs); +@@ -392,8 +428,15 @@ static int usb_hcd_s3c2410_probe (const struct hc_driver *driver, + if (retval != 0) + goto err_ioremap; + ++ retval = device_create_file(&dev->dev, &dev_attr_usb_mode); ++ if (retval != 0) ++ goto err_hcd; ++ + return 0; + ++ err_hcd: ++ usb_remove_hcd(hcd); ++ + err_ioremap: + s3c2410_stop_hc(dev); + iounmap(hcd->regs); +-- +1.5.6.5 + -- cgit v1.2.3