xref: /utopia/UTPA2-700.0.x/modules/usb/hal/messi/usbhost/halUSB.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2*53ee8cc1Swenshuai.xi //
3*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
4*53ee8cc1Swenshuai.xi // All rights reserved.
5*53ee8cc1Swenshuai.xi //
6*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
7*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
8*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
9*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
10*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
11*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
12*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
13*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
14*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi #include "../../../drv/usbhost/include/drvGlobal.h"
19*53ee8cc1Swenshuai.xi #include "../../../drv/usbhost/include/_drvUSB.h"
20*53ee8cc1Swenshuai.xi 
HAL_USB_GetChipID(void)21*53ee8cc1Swenshuai.xi U16 HAL_USB_GetChipID(void)
22*53ee8cc1Swenshuai.xi {
23*53ee8cc1Swenshuai.xi     return CHIPID_MONET;
24*53ee8cc1Swenshuai.xi }
25*53ee8cc1Swenshuai.xi 
HAL_USB_BC_Enable(U8 uPort,BOOLEAN bEnable)26*53ee8cc1Swenshuai.xi void HAL_USB_BC_Enable(U8 uPort, BOOLEAN bEnable)
27*53ee8cc1Swenshuai.xi {
28*53ee8cc1Swenshuai.xi     static U8 PortBCStaus[4] = {1, 1, 1, 1}; //Set port BC enabled at first time
29*53ee8cc1Swenshuai.xi     U32 utmi_base, bc_base;
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi     if (uPort == 0)
32*53ee8cc1Swenshuai.xi     {
33*53ee8cc1Swenshuai.xi         utmi_base = 0x103A80;
34*53ee8cc1Swenshuai.xi         bc_base = 0x123600;
35*53ee8cc1Swenshuai.xi     }
36*53ee8cc1Swenshuai.xi     else if (uPort == 1)
37*53ee8cc1Swenshuai.xi     {
38*53ee8cc1Swenshuai.xi         utmi_base = 0x103A00;
39*53ee8cc1Swenshuai.xi         bc_base = 0x123620;
40*53ee8cc1Swenshuai.xi     }
41*53ee8cc1Swenshuai.xi     else if (uPort == 2)
42*53ee8cc1Swenshuai.xi     {
43*53ee8cc1Swenshuai.xi         utmi_base = 0x103900;
44*53ee8cc1Swenshuai.xi         bc_base = 0x123640;
45*53ee8cc1Swenshuai.xi     }
46*53ee8cc1Swenshuai.xi     else if (uPort == 3)
47*53ee8cc1Swenshuai.xi     {
48*53ee8cc1Swenshuai.xi         utmi_base = 0x122080;
49*53ee8cc1Swenshuai.xi         bc_base = 0x123660;
50*53ee8cc1Swenshuai.xi     }
51*53ee8cc1Swenshuai.xi     else
52*53ee8cc1Swenshuai.xi     {
53*53ee8cc1Swenshuai.xi         printf("HAL_USB_BC_Enable: invalid port number %d\n", uPort);
54*53ee8cc1Swenshuai.xi         return;
55*53ee8cc1Swenshuai.xi     }
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi     if (bEnable)
58*53ee8cc1Swenshuai.xi     {
59*53ee8cc1Swenshuai.xi         if ( !PortBCStaus[uPort] )
60*53ee8cc1Swenshuai.xi         {
61*53ee8cc1Swenshuai.xi             printf("USB BC mode enabled\n");
62*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(utmi_base+0x01, ENABLE, 0x40); //IREF_PDN=1��b1. (utmi+0x01[6] )
63*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(bc_base+0x03, ENABLE, 0x40); // [6]= reg_host_bc_en
64*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(bc_base+0x0C, ENABLE, 0x40); // [6]= reg_into_host_bc_sw_tri
65*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(bc_base, 0x0); // [15:0] = bc_ctl_ov_en
66*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(bc_base+0x0A, ENABLE, 0x80); // [7]=reg_bc_switch_en
67*53ee8cc1Swenshuai.xi             PortBCStaus[uPort] = 1;
68*53ee8cc1Swenshuai.xi         }
69*53ee8cc1Swenshuai.xi     }
70*53ee8cc1Swenshuai.xi     else
71*53ee8cc1Swenshuai.xi     {
72*53ee8cc1Swenshuai.xi         if ( PortBCStaus[uPort] )
73*53ee8cc1Swenshuai.xi         {
74*53ee8cc1Swenshuai.xi             printf("USB BC mode disabled\n");
75*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(bc_base+0x0C, DISABLE, 0x40); // [6]= reg_into_host_bc_sw_tri
76*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(bc_base+0x03, DISABLE, 0x40); // [6]= reg_host_bc_en
77*53ee8cc1Swenshuai.xi             MDrv_WriteRegBit(utmi_base+0x01, DISABLE, 0x40); //IREF_PDN=1��b1. (utmi+0x01[6] )
78*53ee8cc1Swenshuai.xi             PortBCStaus[uPort] = 0;
79*53ee8cc1Swenshuai.xi         }
80*53ee8cc1Swenshuai.xi     }
81*53ee8cc1Swenshuai.xi }
82*53ee8cc1Swenshuai.xi 
83