aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-s3c2410/usb-simtec.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-s3c2410/usb-simtec.c')
-rw-r--r--arch/arm/mach-s3c2410/usb-simtec.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c
index 8331e8d97e20..50e25fc5f8ab 100644
--- a/arch/arm/mach-s3c2410/usb-simtec.c
+++ b/arch/arm/mach-s3c2410/usb-simtec.c
@@ -18,6 +18,7 @@
18#include <linux/types.h> 18#include <linux/types.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/list.h> 20#include <linux/list.h>
21#include <linux/gpio.h>
21#include <linux/timer.h> 22#include <linux/timer.h>
22#include <linux/init.h> 23#include <linux/init.h>
23#include <linux/device.h> 24#include <linux/device.h>
@@ -29,7 +30,6 @@
29 30
30#include <mach/bast-map.h> 31#include <mach/bast-map.h>
31#include <mach/bast-irq.h> 32#include <mach/bast-irq.h>
32#include <mach/regs-gpio.h>
33 33
34#include <mach/hardware.h> 34#include <mach/hardware.h>
35#include <asm/irq.h> 35#include <asm/irq.h>
@@ -53,9 +53,9 @@ usb_simtec_powercontrol(int port, int to)
53 power_state[port] = to; 53 power_state[port] = to;
54 54
55 if (power_state[0] && power_state[1]) 55 if (power_state[0] && power_state[1])
56 s3c2410_gpio_setpin(S3C2410_GPB4, 0); 56 gpio_set_value(S3C2410_GPB(4), 0);
57 else 57 else
58 s3c2410_gpio_setpin(S3C2410_GPB4, 1); 58 gpio_set_value(S3C2410_GPB(4), 1);
59} 59}
60 60
61static irqreturn_t 61static irqreturn_t
@@ -63,7 +63,7 @@ usb_simtec_ocirq(int irq, void *pw)
63{ 63{
64 struct s3c2410_hcd_info *info = pw; 64 struct s3c2410_hcd_info *info = pw;
65 65
66 if (s3c2410_gpio_getpin(S3C2410_GPG10) == 0) { 66 if (gpio_get_value(S3C2410_GPG(10)) == 0) {
67 pr_debug("usb_simtec: over-current irq (oc detected)\n"); 67 pr_debug("usb_simtec: over-current irq (oc detected)\n");
68 s3c2410_usb_report_oc(info, 3); 68 s3c2410_usb_report_oc(info, 3);
69 } else { 69 } else {
@@ -106,10 +106,27 @@ static struct s3c2410_hcd_info usb_simtec_info = {
106 106
107int usb_simtec_init(void) 107int usb_simtec_init(void)
108{ 108{
109 int ret;
110
109 printk("USB Power Control, (c) 2004 Simtec Electronics\n"); 111 printk("USB Power Control, (c) 2004 Simtec Electronics\n");
110 s3c_device_usb.dev.platform_data = &usb_simtec_info;
111 112
112 s3c2410_gpio_cfgpin(S3C2410_GPB4, S3C2410_GPB4_OUTP); 113 ret = gpio_request(S3C2410_GPB(4), "USB power control");
113 s3c2410_gpio_setpin(S3C2410_GPB4, 1); 114 if (ret < 0) {
115 pr_err("%s: failed to get GPB4\n", __func__);
116 return ret;
117 }
118
119 ret = gpio_request(S3C2410_GPG(10), "USB overcurrent");
120 if (ret < 0) {
121 pr_err("%s: failed to get GPG10\n", __func__);
122 gpio_free(S3C2410_GPB(4));
123 return ret;
124 }
125
126 /* turn power on */
127 gpio_direction_output(S3C2410_GPB(4), 1);
128 gpio_direction_input(S3C2410_GPG(10));
129
130 s3c_device_usb.dev.platform_data = &usb_simtec_info;
114 return 0; 131 return 0;
115} 132}