예제 #1
0
static void __pl011_uart5_prepare(void)
{
    NX_UART_CH_INIT(5);
    NX_GPIO_SetPadFunction (PAD_GET_GROUP(PAD_GPIO_B), 30, NX_GPIO_PADFUNC_3);	// RX
    NX_GPIO_SetPadFunction (PAD_GET_GROUP(PAD_GPIO_B), 31, NX_GPIO_PADFUNC_3);	// TX
    NX_GPIO_SetOutputEnable(PAD_GET_GROUP(PAD_GPIO_B), 30, CFALSE);
    NX_GPIO_SetOutputEnable(PAD_GET_GROUP(PAD_GPIO_B), 31, CTRUE);
}
예제 #2
0
static void __pl011_uart1_prepare(void)
{
    NX_UART_CH_INIT(1);
    NX_GPIO_SetPadFunction (PAD_GET_GROUP(PAD_GPIO_D), 15, NX_GPIO_PADFUNC_1);	// RX
    NX_GPIO_SetPadFunction (PAD_GET_GROUP(PAD_GPIO_D), 19, NX_GPIO_PADFUNC_1);	// TX
    NX_GPIO_SetOutputEnable(PAD_GET_GROUP(PAD_GPIO_D), 15, CFALSE);
    NX_GPIO_SetOutputEnable(PAD_GET_GROUP(PAD_GPIO_D), 19, CTRUE);
}
예제 #3
0
static void uart_device_init(int hwport)
{

	switch(hwport)
	{
		case 0: UART_CHARNNEL_INIT(0);break;
		case 1: UART_CHARNNEL_INIT(1);break;
		case 2: UART_CHARNNEL_INIT(2);break;
		case 3: UART_CHARNNEL_INIT(3);break;
		case 4: UART_CHARNNEL_INIT(4);break;
		case 5: UART_CHARNNEL_INIT(5);break;
	}		
	NX_GPIO_SetPadFunction (PAD_GET_GROUP(uart_port[hwport][0]), uart_port[hwport][1], uart_port[hwport][4] );	// RX
	NX_GPIO_SetPadFunction (PAD_GET_GROUP(uart_port[hwport][2]), uart_port[hwport][3], uart_port[hwport][4] );	// TX
	NX_GPIO_SetOutputEnable(PAD_GET_GROUP(uart_port[hwport][0]), uart_port[hwport][1], CFALSE);
	NX_GPIO_SetOutputEnable(PAD_GET_GROUP(uart_port[hwport][2]), uart_port[hwport][3], CTRUE);
}
예제 #4
0
static void io_init(void)
{
    /* GPIO_C4设置为input */
    NX_GPIO_SetOutputEnable(PAD_GPIO_C, 4, CFALSE);

    NX_GPIO_SetInterruptMode(PAD_GPIO_C, 4, NX_GPIO_INTMODE_HIGHLEVEL);
    NX_GPIO_SetInterruptEnable(PAD_GPIO_C, 4, CTRUE);

    return;
}
예제 #5
0
파일: board.c 프로젝트: projectnano/zeus
static void bd_gpio_init(void)
{
	int index, bit;
	int mode, func, out, lv, plup, stren;
	U32 gpio;

	const U32 pads[NUMBER_OF_GPIO_MODULE][32] = {
	{	/* GPIO_A */
	PAD_GPIOA0 , PAD_GPIOA1 , PAD_GPIOA2 , PAD_GPIOA3 , PAD_GPIOA4 , PAD_GPIOA5 , PAD_GPIOA6 , PAD_GPIOA7 , PAD_GPIOA8 , PAD_GPIOA9 ,
	PAD_GPIOA10, PAD_GPIOA11, PAD_GPIOA12, PAD_GPIOA13, PAD_GPIOA14, PAD_GPIOA15, PAD_GPIOA16, PAD_GPIOA17, PAD_GPIOA18, PAD_GPIOA19,
	PAD_GPIOA20, PAD_GPIOA21, PAD_GPIOA22, PAD_GPIOA23, PAD_GPIOA24, PAD_GPIOA25, PAD_GPIOA26, PAD_GPIOA27, PAD_GPIOA28, PAD_GPIOA29,
	PAD_GPIOA30, PAD_GPIOA31
	}, { /* GPIO_B */
	PAD_GPIOB0 , PAD_GPIOB1 , PAD_GPIOB2 , PAD_GPIOB3 , PAD_GPIOB4 , PAD_GPIOB5 , PAD_GPIOB6 , PAD_GPIOB7 , PAD_GPIOB8 , PAD_GPIOB9 ,
	PAD_GPIOB10, PAD_GPIOB11, PAD_GPIOB12, PAD_GPIOB13, PAD_GPIOB14, PAD_GPIOB15, PAD_GPIOB16, PAD_GPIOB17, PAD_GPIOB18, PAD_GPIOB19,
	PAD_GPIOB20, PAD_GPIOB21, PAD_GPIOB22, PAD_GPIOB23, PAD_GPIOB24, PAD_GPIOB25, PAD_GPIOB26, PAD_GPIOB27, PAD_GPIOB28, PAD_GPIOB29,
	PAD_GPIOB30, PAD_GPIOB31
	}, { /* GPIO_C */
	PAD_GPIOC0 , PAD_GPIOC1 , PAD_GPIOC2 , PAD_GPIOC3 , PAD_GPIOC4 , PAD_GPIOC5 , PAD_GPIOC6 , PAD_GPIOC7 , PAD_GPIOC8 , PAD_GPIOC9 ,
	PAD_GPIOC10, PAD_GPIOC11, PAD_GPIOC12, PAD_GPIOC13, PAD_GPIOC14, PAD_GPIOC15, PAD_GPIOC16, PAD_GPIOC17, PAD_GPIOC18, PAD_GPIOC19,
	PAD_GPIOC20, PAD_GPIOC21, PAD_GPIOC22, PAD_GPIOC23, PAD_GPIOC24, PAD_GPIOC25, PAD_GPIOC26, PAD_GPIOC27, PAD_GPIOC28, PAD_GPIOC29,
	PAD_GPIOC30, PAD_GPIOC31
	}, { /* GPIO_D */
	PAD_GPIOD0 , PAD_GPIOD1 , PAD_GPIOD2 , PAD_GPIOD3 , PAD_GPIOD4 , PAD_GPIOD5 , PAD_GPIOD6 , PAD_GPIOD7 , PAD_GPIOD8 , PAD_GPIOD9 ,
	PAD_GPIOD10, PAD_GPIOD11, PAD_GPIOD12, PAD_GPIOD13, PAD_GPIOD14, PAD_GPIOD15, PAD_GPIOD16, PAD_GPIOD17, PAD_GPIOD18, PAD_GPIOD19,
	PAD_GPIOD20, PAD_GPIOD21, PAD_GPIOD22, PAD_GPIOD23, PAD_GPIOD24, PAD_GPIOD25, PAD_GPIOD26, PAD_GPIOD27, PAD_GPIOD28, PAD_GPIOD29,
	PAD_GPIOD30, PAD_GPIOD31
	}, { /* GPIO_E */
	PAD_GPIOE0 , PAD_GPIOE1 , PAD_GPIOE2 , PAD_GPIOE3 , PAD_GPIOE4 , PAD_GPIOE5 , PAD_GPIOE6 , PAD_GPIOE7 , PAD_GPIOE8 , PAD_GPIOE9 ,
	PAD_GPIOE10, PAD_GPIOE11, PAD_GPIOE12, PAD_GPIOE13, PAD_GPIOE14, PAD_GPIOE15, PAD_GPIOE16, PAD_GPIOE17, PAD_GPIOE18, PAD_GPIOE19,
	PAD_GPIOE20, PAD_GPIOE21, PAD_GPIOE22, PAD_GPIOE23, PAD_GPIOE24, PAD_GPIOE25, PAD_GPIOE26, PAD_GPIOE27, PAD_GPIOE28, PAD_GPIOE29,
	PAD_GPIOE30, PAD_GPIOE31
	},
	};

	/* GPIO pad function */
	for (index = 0; NUMBER_OF_GPIO_MODULE > index; index++) {

		NX_GPIO_ClearInterruptPendingAll(index);

		for (bit = 0; 32 > bit; bit++) {
			gpio  = pads[index][bit];
			func  = PAD_GET_FUNC(gpio);
			mode  = PAD_GET_MODE(gpio);
			lv    = PAD_GET_LEVEL(gpio);
			stren = PAD_GET_STRENGTH(gpio);
			plup  = PAD_GET_PULLUP(gpio);

			/* get pad alternate function (0,1,2,4) */
			switch (func) {
			case PAD_GET_FUNC(PAD_FUNC_ALT0): func = NX_GPIO_PADFUNC_0;	break;
			case PAD_GET_FUNC(PAD_FUNC_ALT1): func = NX_GPIO_PADFUNC_1;	break;
			case PAD_GET_FUNC(PAD_FUNC_ALT2): func = NX_GPIO_PADFUNC_2;	break;
			case PAD_GET_FUNC(PAD_FUNC_ALT3): func = NX_GPIO_PADFUNC_3;	break;
			default: printf("ERROR, unknown alt func (%d.%02d=%d)\n", index, bit, func);
				continue;
			}

			switch (mode) {
			case PAD_GET_MODE(PAD_MODE_ALT): out = 0;
			case PAD_GET_MODE(PAD_MODE_IN ): out = 0;
			case PAD_GET_MODE(PAD_MODE_INT): out = 0; break;
			case PAD_GET_MODE(PAD_MODE_OUT): out = 1; break;
			default: printf("ERROR, unknown io mode (%d.%02d=%d)\n", index, bit, mode);
				continue;
			}

			NX_GPIO_SetPadFunction(index, bit, func);
			NX_GPIO_SetOutputEnable(index, bit, (out ? CTRUE : CFALSE));
			NX_GPIO_SetOutputValue(index, bit,  (lv  ? CTRUE : CFALSE));
			NX_GPIO_SetInterruptMode(index, bit, (lv));

			NX_GPIO_SetPullMode(index, bit, plup);
			set_gpio_strenth(index, bit, stren); /* pad strength */
		}

		NX_GPIO_SetDRV0_DISABLE_DEFAULT(index, 0xFFFFFFFF);
		NX_GPIO_SetDRV1_DISABLE_DEFAULT(index, 0xFFFFFFFF);
	}
}
예제 #6
0
int ehci_hcd_init(int index, enum usb_init_type init,
                  struct ehci_hccr **hccr, struct ehci_hcor **hcor)
{
    //reset
    //1. ohci
    writel(readl(0xc0011014) & ~(1<<18), 0xc0011014);
    //2. auxwell
    writel(readl(0xc0011014) & ~(1<<19), 0xc0011014);
    //3. ahb
    writel(readl(0xc0011014) & ~(1<<17), 0xc0011014);
    //4. hsic utmi
    writel(readl(0xc0011014) & ~(1<<22), 0xc0011014);
    //5. ehci utmi
    writel(readl(0xc0011014) & ~(1<<21), 0xc0011014);
    //6. free
    writel(readl(0xc0011014) & ~(1<<20), 0xc0011014);
    //7. hsic por
    writel(readl(0xc0011028) |  (3<<18), 0xc0011028);
    //8. echi por
    writel(readl(0xc0011020) |  (3<<7 ), 0xc0011020);
    //9. resetcon
    writel(readl(0xc0012004) & ~(1<<24), 0xc0012004);			// reset on

#if defined( CONFIG_USB_HSIC_MODE )
    // GPIO Reset
    NX_GPIO_SetPadFunction( 4, 22, 0 );
    NX_GPIO_SetOutputEnable( 4, 22, CTRUE );
#if defined( CONFIG_MACH_S5P4418 )
    NX_GPIO_SetPullSelect( 4, 22, CTRUE );
    NX_GPIO_SetPullEnable( 4, 22, CFALSE );
#else
    NX_GPIO_SetPullEnable( 4, 22, NX_GPIO_PULL_UP );
#endif
    NX_GPIO_SetOutputValue( 4, 22, CTRUE );
    udelay( 100 );
    NX_GPIO_SetOutputValue( 4, 22, CFALSE );
    udelay( 100 );
    NX_GPIO_SetOutputValue( 4, 22, CTRUE );
#endif

    // Release common reset of host controller
    writel(readl(0xc0012004) |  (1<<24), 0xc0012004);			// reset off
    NX_CONSOLE_Printf( "\nRSTCON[24](0xc0012004) set 1'b1 0x%08x\n", readl( 0xc0012004 ) );

#if defined( CONFIG_USB_HSIC_MODE )
    // HSIC 12M rerference Clock setting
    writel( 0x02, 0xc006b000 );
    writel( 0x0C, 0xc006b004 );	// 8 : ok, c : no
    writel( 0x10, 0xc006b00c );
    writel( 0x30, 0xc006b00c );
    writel( 0x06, 0xc006b000 );

    // HSIC 480M clock setting
    writel(readl(0xc0011014) & ~(3<<23), 0xc0011014);
    writel(readl(0xc0011014) |  (2<<23), 0xc0011014);

    // 2. HSIC Enable in PORT1 of LINK
    writel(readl(0xc0011014) & ~(7<<14), 0xc0011014);
    writel(readl(0xc0011014) |  (2<<14), 0xc0011014);
#endif

    // Program AHB Burst type
    writel(readl(0xc001101c) & ~(7<<25), 0xc001101c);
    writel(readl(0xc001101c) |  (7<<25), 0xc001101c);
    NX_CONSOLE_Printf( "TIEOFFREG7[27:25](0xc001101c) set 3'b111 0x%08x\n", readl( 0xc001101c ) );

    // Select word interface and enable word interface selection in link
    writel(readl(0xc0011014) & ~(3<<25), 0xc0011014);
    writel(readl(0xc0011014) |  (3<<25), 0xc0011014);			// 2'b01 8bit, 2'b11 16bit word
    NX_CONSOLE_Printf( "TIEOFFREG5[26:25](0xc0011014) set 2'b11 0x%08x\n", readl( 0xc0011014 ) );

    // Select word interface and enable word interface selection in link in EHCI PHY
    writel(readl(0xc0011024) & ~(3<<8), 0xc0011024);
    writel(readl(0xc0011024) |  (3<<8), 0xc0011024);				// 2'b01 8bit, 2'b11 16bit word
    NX_CONSOLE_Printf( "TIEOFFREG9[10:9](0xc0011024) set 2'b11 0x%08x\n", readl( 0xc0011024 ) );

    // POR of EHCI PHY
    writel(readl(0xc0011020) & ~(3<<7), 0xc0011020);
    writel(readl(0xc0011020) |  (1<<7), 0xc0011020);
    NX_CONSOLE_Printf( "TIEOFFREG8[8:7](0xc0011020) set 2'b01 0x%08x\n", readl( 0xc0011020 ) );

    // Wait clock of PHY - about 40 micro seconds
    udelay(40); // 40us delay need.

#if defined( CONFIG_USB_HSIC_MODE )
    NX_CONSOLE_Printf( "\n HSIC PHY Init!!!\n" );

    udelay(10); // 10us delay need.

    // word interface in HSIC PHY
    writel(readl(0xc001102c) & ~(3<<12), 0xc001102c);
    writel(readl(0xc001102c) |  (3<<12), 0xc001102c);				// 2'b01 8bit, 2'b11 16bit word
//	NX_CONSOLE_Printf( "TIEOFFREG9[10:9](0xc001102c) set 2'b11 0x%08x\n", readl( 0xc001102c ) );

    // POR of HSIC PHY
    writel(readl(0xc0011028) & ~(3<<18), 0xc0011028);
    writel(readl(0xc0011028) |  (1<<18), 0xc0011028);
//	NX_CONSOLE_Printf( "TIEOFFREG8[19:18](0xc0011028) set 2'b01 0x%08x\n", readl( 0xc0011028 ) );

    // 5. Wait clock of PHY - about 40 micro seconds
    //udelay(40); // 40us delay need.
    udelay(400); // 40us delay need.
#endif

    // Release phy free clock reset
    writel(readl(0xc0011014) |  (1<<20), 0xc0011014);
    udelay(2);

#if defined( CONFIG_USB_EHCI_MODE )
    // Release ehci utmi reset
    writel(readl(0xc0011014) |  (1<<21), 0xc0011014);
    udelay(2);
    NX_CONSOLE_Printf( "TIEOFFREG5[21:20](0xc0011014) set 2'b11 0x%08x\n", readl( 0xc0011014 ) );
#endif

#if defined( CONFIG_USB_HSIC_MODE )
    // Release hsic utmi reset
    writel(readl(0xc0011014) |  (1<<22), 0xc0011014);
    udelay(2);
#endif

    //Release ahb reset of EHCI
    writel(readl(0xc0011014) |  (1<<17), 0xc0011014);

    //Release ahb reset of OHCI
    writel(readl(0xc0011014) |  (1<<18), 0xc0011014);

    //Release auxwell reset of EHCI, OHCI
    writel(readl(0xc0011014) |  (1<<19), 0xc0011014);


    // set Base Address
    NX_USB20HOST_SetBaseAddress( 0, (void*)NX_USB20HOST_GetPhysicalAddress(0) );

    *hccr	= ( struct ehci_hccr * )( NX_USB20HOST_GetBaseAddress(0) );
    *hcor	= ( struct ehci_hcor * )( NX_USB20HOST_GetBaseAddress(0) + 0x10 );
//	NX_CONSOLE_Printf( "Set EHCI Base Address : hccr( 0x%08x ), hcor( 0x%08x )\n" , *hccr, *hcor );

    return 0;
}
예제 #7
0
파일: board.c 프로젝트: vlasenko/kernel.rk
/*------------------------------------------------------------------------------
 * set nexell soc pad func.
 */
static void init_gpio_pad(void)
{
	int  io_grp, io_bit;
	U32  io_mod, outval, detect, pullup, strength;

	const U32 io_pad[NUMBER_OF_GPIO_MODULE][32] = {
		/* GPIO group A */
		{
		PAD_GPIOA0,  PAD_GPIOA1,  PAD_GPIOA2,  PAD_GPIOA3,  PAD_GPIOA4,  PAD_GPIOA5,  PAD_GPIOA6,  PAD_GPIOA7,  PAD_GPIOA8,  PAD_GPIOA9,
		PAD_GPIOA10, PAD_GPIOA11, PAD_GPIOA12, PAD_GPIOA13, PAD_GPIOA14, PAD_GPIOA15, PAD_GPIOA16, PAD_GPIOA17, PAD_GPIOA18, PAD_GPIOA19,
		PAD_GPIOA20, PAD_GPIOA21, PAD_GPIOA22, PAD_GPIOA23, PAD_GPIOA24, PAD_GPIOA25, PAD_GPIOA26, PAD_GPIOA27, PAD_GPIOA28, PAD_GPIOA29,
		PAD_GPIOA30, PAD_GPIOA31
		},
		/* GPIO group B */
		{
		PAD_GPIOB0,  PAD_GPIOB1 , PAD_GPIOB2 , PAD_GPIOB3,  PAD_GPIOB4,  PAD_GPIOB5,  PAD_GPIOB6,  PAD_GPIOB7,  PAD_GPIOB8,  PAD_GPIOB9,
		PAD_GPIOB10, PAD_GPIOB11, PAD_GPIOB12, PAD_GPIOB13, PAD_GPIOB14, PAD_GPIOB15, PAD_GPIOB16, PAD_GPIOB17, PAD_GPIOB18, PAD_GPIOB19,
		PAD_GPIOB20, PAD_GPIOB21, PAD_GPIOB22, PAD_GPIOB23, PAD_GPIOB24, PAD_GPIOB25, PAD_GPIOB26, PAD_GPIOB27, PAD_GPIOB28, PAD_GPIOB29,
		PAD_GPIOB30, PAD_GPIOB31
		},
		/* GPIO group C */
		{
		PAD_GPIOC0,  PAD_GPIOC1,  PAD_GPIOC2,  PAD_GPIOC3,  PAD_GPIOC4,  PAD_GPIOC5,  PAD_GPIOC6,  PAD_GPIOC7,  PAD_GPIOC8,  PAD_GPIOC9,
		PAD_GPIOC10, PAD_GPIOC11, PAD_GPIOC12, PAD_GPIOC13, PAD_GPIOC14, PAD_GPIOC15, PAD_GPIOC16, PAD_GPIOC17, PAD_GPIOC18, PAD_GPIOC19,
		PAD_GPIOC20, 		   0, 		    0,  	     0,           0,           0,           0,           0,           0,           0,
		          0,           0
		}
	};

	/* GPIO pad function */
	for (io_grp = 0; NUMBER_OF_GPIO_MODULE > io_grp; io_grp++) {
		for (io_bit = 0; 32 > io_bit; io_bit++) {

			if (! io_pad[io_grp][io_bit])
				continue;

			io_mod = PAD_GET_PADMODE(io_pad[io_grp][io_bit]);

			switch(io_mod) {
			case PAD_MODE_IN:
				NX_GPIO_SetPadFunction (io_grp, io_bit, NX_GPIO_PADFUNC_GPIO);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CFALSE);
				break;
			case PAD_MODE_OUT:
				NX_GPIO_SetPadFunction (io_grp, io_bit, NX_GPIO_PADFUNC_GPIO);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CTRUE);
				break;
			case PAD_MODE_ALT1:
				NX_GPIO_SetPadFunction (io_grp, io_bit, NX_GPIO_PADFUNC_1);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CFALSE);
				break;
			case PAD_MODE_ALT2:
				NX_GPIO_SetPadFunction (io_grp, io_bit, NX_GPIO_PADFUNC_2);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CFALSE);
				break;
			case PAD_MODE_ALT3:
				NX_GPIO_SetPadFunction (io_grp, io_bit, NX_GPIO_PADFUNC_3);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CFALSE);
				break;
			case PAD_MODE_INT:
				detect = PAD_GET_DECTMODE(io_pad[io_grp][io_bit]);
				NX_GPIO_SetPadFunction(io_grp, io_bit, NX_GPIO_PADFUNC_GPIO);
				NX_GPIO_SetOutputEnable(io_grp, io_bit, CFALSE);
				NX_GPIO_SetInterruptMode(io_grp, io_bit, detect);
				break;
			case PAD_MODE_SKIP:
			case PAD_NOTEXIST:
			default:
				continue;
			}
			outval   = PAD_GET_OUTLEVEL(io_pad[io_grp][io_bit]);
			pullup   = PAD_GET_PULLUP(io_pad[io_grp][io_bit]);
			strength = PAD_GET_STRENGTH(io_pad[io_grp][io_bit]);

			NX_GPIO_SetOutputValue (io_grp, io_bit, (outval ? CTRUE : CFALSE));
			NX_GPIO_SetPullUpEnable(io_grp, io_bit, (pullup ? CTRUE : CFALSE));
			NX_CLKPWR_SetGPIOPadStrength(io_grp, io_bit, strength);
		}
	}
}