From fd5cb720c4b922979e854ee3d07979b81f60e776 Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Sat, 31 Dec 2011 21:18:10 +0000 Subject: usb-s3c6400: use more complete functions from usb-drv-as3525v2 update copyright git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31508 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/usb-s3c6400x.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'firmware/target/arm/usb-s3c6400x.c') diff --git a/firmware/target/arm/usb-s3c6400x.c b/firmware/target/arm/usb-s3c6400x.c index 26db55ee67..43c9f2fd77 100644 --- a/firmware/target/arm/usb-s3c6400x.c +++ b/firmware/target/arm/usb-s3c6400x.c @@ -8,6 +8,7 @@ * $Id$ * * Copyright (C) 2009 by Michael Sparmann + * Copyright © 2010 Amaury Pouly * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -81,6 +82,30 @@ int usb_drv_recv(int endpoint, void* ptr, int length) return 0; } +int usb_drv_port_speed(void) +{ + static const uint8_t speed[4] = { + [DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ] = 1, + [DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ] = 0, + [DSTS_ENUMSPD_FS_PHY_48MHZ] = 0, + [DSTS_ENUMSPD_LS_PHY_6MHZ] = 0, + }; + + unsigned enumspd = extract(DSTS, enumspd); + + if(enumspd == DSTS_ENUMSPD_LS_PHY_6MHZ) + panicf("usb-drv: LS is not supported"); + + return speed[enumspd & 3]; +} + +void usb_drv_set_test_mode(int mode) +{ + /* there is a perfect matching between usb test mode code + * and the register field value */ + DCTL = (DCTL & ~bitm(DCTL, tstctl)) | (mode << DCTL_tstctl_bitp); +} + #if CONFIG_CPU == AS3525v2 /* FIXME FIXME FIXME */ # include "as3525/usb-drv-as3525v2.c" #else @@ -100,11 +125,6 @@ static union unsigned char payload[64]; } ctrlreq USB_DEVBSS_ATTR; -int usb_drv_port_speed(void) -{ - return (DSTS & 2) == 0 ? 1 : 0; -} - static void reset_endpoints(int reinit) { unsigned int i; @@ -331,11 +351,6 @@ void usb_drv_cancel_all_transfers(void) restore_irq(flags); } -void usb_drv_set_test_mode(int mode) -{ - (void)mode; -} - void usb_drv_init(void) { for (unsigned i = 0; i < sizeof(endpoints)/sizeof(struct ep_type); i++) -- cgit v1.2.3