diff options
Diffstat (limited to 'arch/arm/mach-s3c2410/usb-simtec.c')
-rw-r--r-- | arch/arm/mach-s3c2410/usb-simtec.c | 31 |
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 dd45eb4a6f0..6cd9377ddb8 100644 --- a/arch/arm/mach-s3c2410/usb-simtec.c +++ b/arch/arm/mach-s3c2410/usb-simtec.c @@ -22,6 +22,7 @@ #include <linux/timer.h> #include <linux/init.h> #include <linux/device.h> +#include <linux/gpio.h> #include <linux/io.h> #include <asm/mach/arch.h> @@ -30,7 +31,6 @@ #include <mach/bast-map.h> #include <mach/bast-irq.h> -#include <mach/regs-gpio.h> #include <mach/hardware.h> #include <asm/irq.h> @@ -54,9 +54,9 @@ usb_simtec_powercontrol(int port, int to) power_state[port] = to; if (power_state[0] && power_state[1]) - s3c2410_gpio_setpin(S3C2410_GPB(4), 0); + gpio_set_value(S3C2410_GPB(4), 0); else - s3c2410_gpio_setpin(S3C2410_GPB(4), 1); + gpio_set_value(S3C2410_GPB(4), 1); } static irqreturn_t @@ -64,7 +64,7 @@ usb_simtec_ocirq(int irq, void *pw) { struct s3c2410_hcd_info *info = pw; - if (s3c2410_gpio_getpin(S3C2410_GPG(10)) == 0) { + if (gpio_get_value(S3C2410_GPG(10)) == 0) { pr_debug("usb_simtec: over-current irq (oc detected)\n"); s3c2410_usb_report_oc(info, 3); } else { @@ -107,10 +107,27 @@ static struct s3c2410_hcd_info usb_simtec_info = { int usb_simtec_init(void) { + int ret; + printk("USB Power Control, (c) 2004 Simtec Electronics\n"); - s3c_device_usb.dev.platform_data = &usb_simtec_info; - s3c2410_gpio_cfgpin(S3C2410_GPB(4), S3C2410_GPIO_OUTPUT); - s3c2410_gpio_setpin(S3C2410_GPB(4), 1); + ret = gpio_request(S3C2410_GPB(4), "USB power control"); + if (ret < 0) { + pr_err("%s: failed to get GPB4\n", __func__); + return ret; + } + + ret = gpio_request(S3C2410_GPG(10), "USB overcurrent"); + if (ret < 0) { + pr_err("%s: failed to get GPG10\n", __func__); + gpio_free(S3C2410_GPB(4)); + return ret; + } + + /* turn power on */ + gpio_direction_output(S3C2410_GPB(4), 1); + gpio_direction_input(S3C2410_GPG(10)); + + s3c_device_usb.dev.platform_data = &usb_simtec_info; return 0; } |