[PATCH] ARM: 2849/1: S3C24XX - USB host update (2848/1)
authorBen Dooks <ben-linux@fluff.org>
Wed, 10 Aug 2005 15:45:14 +0000 (16:45 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 10 Aug 2005 15:45:14 +0000 (16:45 +0100)
Patch from Ben Dooks

Rename the s3c2410_report_oc() to s3c2410_usb_report_oc()
as this is an usb specific function.
Change port power on the usb-simtec implementation to only
power up the output if both are set, as per the usb 1.1
specification

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-s3c2410/usb-simtec.c
include/asm-arm/arch-s3c2410/usb-control.h

index 7f2b61362976b088a5c8126f4f7915082062b307..f021fd82be52cb7260c91be5c02a8ce0c4d2ef49 100644 (file)
@@ -1,6 +1,6 @@
 /* linux/arch/arm/mach-s3c2410/usb-simtec.c
  *
- * Copyright (c) 2004 Simtec Electronics
+ * Copyright (c) 2004,2005 Simtec Electronics
  *   Ben Dooks <ben@simtec.co.uk>
  *
  * http://www.simtec.co.uk/products/EB2410ITX/
@@ -14,6 +14,8 @@
  * Modifications:
  *     14-Sep-2004 BJD  Created
  *     18-Oct-2004 BJD  Cleanups, and added code to report OC cleared
+ *     09-Aug-2005 BJD  Renamed s3c2410_report_oc to s3c2410_usb_report_oc
+ *     09-Aug-2005 BJD  Ports powered only if both are enabled
 */
 
 #define DEBUG
  * designed boards.
 */
 
+static unsigned int power_state[2];
+
 static void
 usb_simtec_powercontrol(int port, int to)
 {
        pr_debug("usb_simtec_powercontrol(%d,%d)\n", port, to);
 
-       if (port == 1)
-               s3c2410_gpio_setpin(S3C2410_GPB4, to ? 0:1);
+       power_state[port] = to;
+
+       if (power_state[0] && power_state[1])
+               s3c2410_gpio_setpin(S3C2410_GPB4, 0);
+       else
+               s3c2410_gpio_setpin(S3C2410_GPB4, 1);
 }
 
 static irqreturn_t
@@ -63,10 +71,10 @@ usb_simtec_ocirq(int irq, void *pw, struct pt_regs *regs)
 
        if (s3c2410_gpio_getpin(S3C2410_GPG10) == 0) {
                pr_debug("usb_simtec: over-current irq (oc detected)\n");
-               s3c2410_report_oc(info, 3);
+               s3c2410_usb_report_oc(info, 3);
        } else {
                pr_debug("usb_simtec: over-current irq (oc cleared)\n");
-               s3c2410_report_oc(info, 0);
+               s3c2410_usb_report_oc(info, 0);
        }
 
        return IRQ_HANDLED;
index 1cc85a096b23851eab314e1cd388fe9441ea7cfd..bd43b566db3ece998be04a885d80daaa1f694e36 100644 (file)
@@ -12,6 +12,7 @@
  * Changelog:
  *  11-Sep-2004 BJD  Created file
  *  21-Sep-2004 BJD  Updated port info
+ *  09-Aug-2005 BJD  Renamed s3c2410_report_oc s3c2410_usb_report_oc
 */
 
 #ifndef __ASM_ARCH_USBCONTROL_H
@@ -35,7 +36,7 @@ struct s3c2410_hcd_info {
        void            (*report_oc)(struct s3c2410_hcd_info *, int ports);
 };
 
-static void inline s3c2410_report_oc(struct s3c2410_hcd_info *info, int ports)
+static void inline s3c2410_usb_report_oc(struct s3c2410_hcd_info *info, int ports)
 {
        if (info->report_oc != NULL) {
                (info->report_oc)(info, ports);