1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2010 Marcin Bukat
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
28 void usb_init_device(void)
30 /* GPIO42 is USB detect input
31 * but it also serves as MCLK2 for DAC
33 and_l(~(1<<4), &GPIO1_OUT
);
34 or_l((1<<4)|(1<<18), &GPIO1_ENABLE
); /* GPIO36 GPIO50 */
35 or_l((1<<4)|(1<<18), &GPIO1_FUNCTION
);
38 /* GPIO31 has to be low to ATA work */
39 or_l((1<<22)|(1<<30), &GPIO_OUT
);
40 or_l((1<<22)|(1<<30)|(1<<31), &GPIO_ENABLE
);
41 or_l((1<<22)|(1<<30)|(1<<31), &GPIO_FUNCTION
);
46 /* GPIO42 active low*/
47 return (GPIO1_READ
& (1<<10)) ? USB_EXTRACTED
: USB_INSERTED
;
50 void usb_enable(bool on
)
55 or_l((1<<18),&GPIO1_OUT
); /* GPIO50 high */
57 and_l(~(1<<30),&GPIO_OUT
); /* GPIO30 low */
58 /* GPIO36 low delay GPIO36 high delay */
59 and_l(~(1<<4),&GPIO1_OUT
);
60 or_l((1<<4),&GPIO1_OUT
);
62 and_l(~(1<<18),&GPIO1_OUT
); /* GPIO50 low */
63 sleep(HZ
/5); /* delay 200 ms */
64 and_l(~(1<<22),&GPIO_OUT
); /* GPIO22 low */
68 /* GPIO36 low delay GPIO36 high delay */
69 and_l(~(1<<4),&GPIO1_OUT
);
71 or_l((1<<4),&GPIO1_OUT
);
74 or_l((1<<22),&GPIO_OUT
); /* GPIO22 high */
75 or_l((1<<30),&GPIO_OUT
); /* GPIO30 high */
77 and_l(~(1<<4),&GPIO1_OUT
); /* GPIO36 low */
79 //or_l((1<<18),&GPIO1_OUT); /* GPIO50 high */