diff options
author | Vicente Bergas <vicencb@gmail.com> | 2013-03-10 00:19:39 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-03-25 10:21:16 +0100 |
commit | c60a184c5351315a1e703f6f89a0a57e77fcdbd9 (patch) | |
tree | ebc608460004c7c1ee5943937b26cbdc55ebec06 /arch/arm/mach-omap | |
parent | 4fe4febc3edd251bed70f62ed7bbb7fff8022c12 (diff) | |
download | barebox-c60a184c5351315a1e703f6f89a0a57e77fcdbd9.tar.gz barebox-c60a184c5351315a1e703f6f89a0a57e77fcdbd9.tar.xz |
ARM: omap4_romusb: allow adding usb-serial when not booting from usb
Signed-off-by: Vicente Bergas <vicencb@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-omap')
-rw-r--r-- | arch/arm/mach-omap/include/mach/omap4_rom_usb.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap/omap4_rom_usb.c | 23 |
2 files changed, 14 insertions, 12 deletions
diff --git a/arch/arm/mach-omap/include/mach/omap4_rom_usb.h b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h index 50c359f474..bf8bd159ad 100644 --- a/arch/arm/mach-omap/include/mach/omap4_rom_usb.h +++ b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h @@ -122,8 +122,11 @@ struct omap4_usbboot { struct per_handle dread; struct per_handle dwrite; struct per_driver *io; + int ready; }; +int omap4_usbboot_open(void); +int omap4_usbboot_ready(void); void omap4_usbboot_close(void); void omap4_usbboot_queue_read(void *data, unsigned len); diff --git a/arch/arm/mach-omap/omap4_rom_usb.c b/arch/arm/mach-omap/omap4_rom_usb.c index 38f886b207..de35d61c13 100644 --- a/arch/arm/mach-omap/omap4_rom_usb.c +++ b/arch/arm/mach-omap/omap4_rom_usb.c @@ -38,7 +38,7 @@ static struct omap4_usbboot omap4_usbboot_data; -static int omap4_usbboot_open(void) +int omap4_usbboot_open(void) { int (*rom_get_per_driver)(struct per_driver **io, u32 device_type); int (*rom_get_per_device)(struct per_handle **rh); @@ -60,7 +60,7 @@ static int omap4_usbboot_open(void) if ((boot->device_type != DEVICE_USB) && (boot->device_type != DEVICE_USBEXT)) - return -1; + return 0; memset(&omap4_usbboot_data, 0, sizeof(omap4_usbboot_data)); n = rom_get_per_driver(&omap4_usbboot_data.io, boot->device_type); @@ -77,9 +77,16 @@ static int omap4_usbboot_open(void) omap4_usbboot_data.dwrite.options = boot->options; omap4_usbboot_data.dwrite.device_type = boot->device_type; __asm__ __volatile__ ("cpsie i\n"); + omap4_usbboot_data.ready = 1; + + omap4_usbboot_puts("USB communications initialized\n"); return 0; } +core_initcall(omap4_usbboot_open); +int omap4_usbboot_ready(void){ + return omap4_usbboot_data.ready; +} static void rom_read_callback(struct per_handle *rh) { @@ -110,11 +117,13 @@ int omap4_usbboot_wait_read(void) omap4_usbboot_data.dread.status = -1; return ret; } + int omap4_usbboot_is_read_waiting(void) { barrier(); return omap4_usbboot_data.dread.status == STATUS_WAITING; } + int omap4_usbboot_is_read_ok(void) { barrier(); @@ -186,13 +195,3 @@ void omap4_usbboot_puts(const char *s) while ((c = *s++)) omap4_usbboot_write(&c, 4); } - -static int omap4_usbboot_init(void) -{ - if (omap4_bootsrc() == OMAP_BOOTSRC_USB1) { - omap4_usbboot_open(); - omap4_usbboot_puts("USB communications initialized\n"); - } - return 0; -} -core_initcall(omap4_usbboot_init); |