The initarm() should initialize GPIO. We must not initialize GPIO in
foo_attach() of the each drivers. And, it is necessary to confirm whether to be initialized in foo_match(). To avoid a dangerous configuring on the evaluation boards.
This commit is contained in:
parent
89ad31246c
commit
f1bbc2447a
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pxa2x0_ac97.c,v 1.5 2007/03/04 05:59:38 christos Exp $ */
|
||||
/* $NetBSD: pxa2x0_ac97.c,v 1.6 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2005 Wasabi Systems, Inc.
|
||||
@ -53,6 +53,7 @@
|
||||
#include <dev/ic/ac97reg.h>
|
||||
#include <dev/ic/ac97var.h>
|
||||
|
||||
#include <arm/xscale/pxa2x0cpu.h>
|
||||
#include <arm/xscale/pxa2x0reg.h>
|
||||
#include <arm/xscale/pxa2x0var.h>
|
||||
#include <arm/xscale/pxa2x0_gpio.h>
|
||||
@ -232,11 +233,23 @@ static int
|
||||
pxaacu_match(struct device *parent, struct cfdata *cf, void *aux)
|
||||
{
|
||||
struct pxaip_attach_args *pxa = aux;
|
||||
struct pxa2x0_gpioconf *gpioconf;
|
||||
u_int gpio;
|
||||
int i;
|
||||
|
||||
if (pxa->pxa_addr != PXA2X0_AC97_BASE ||
|
||||
pxa->pxa_intr != PXA2X0_INT_AC97)
|
||||
return (0);
|
||||
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_pxaacu_gpioconf :
|
||||
pxa27x_pxaacu_gpioconf;
|
||||
for (i = 0; gpioconf[i].pin != -1; i++) {
|
||||
gpio = pxa2x0_gpio_get_function(gpioconf[i].pin);
|
||||
if (GPIO_FN(gpio) != GPIO_FN(gpioconf[i].value) ||
|
||||
GPIO_FN_IS_OUT(gpio) != GPIO_FN_IS_OUT(gpioconf[i].value))
|
||||
return (0);
|
||||
}
|
||||
|
||||
pxa->pxa_size = PXA2X0_AC97_SIZE;
|
||||
|
||||
return (1);
|
||||
@ -267,11 +280,6 @@ pxaacu_attach(struct device *parent, struct device *self, void *aux)
|
||||
/* Make sure the AC97 clock is enabled */
|
||||
pxa2x0_clkman_config(CKEN_AC97, true);
|
||||
delay(100);
|
||||
pxa2x0_gpio_set_function(31, GPIO_CLR | GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(30, GPIO_CLR | GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(28, GPIO_CLR | GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(29, GPIO_CLR | GPIO_ALT_FN_1_IN);
|
||||
delay(100);
|
||||
|
||||
/* Do a cold reset */
|
||||
acu_reg_write(sc, AC97_GCR, 0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pxa2x0_com.c,v 1.7 2006/12/10 12:46:48 kiyohara Exp $ */
|
||||
/* $NetBSD: pxa2x0_com.c,v 1.8 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2003 Wasabi Systems, Inc.
|
||||
@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_com.c,v 1.7 2006/12/10 12:46:48 kiyohara Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_com.c,v 1.8 2007/08/21 11:39:11 kiyohara Exp $");
|
||||
|
||||
#include "opt_com.h"
|
||||
|
||||
@ -55,8 +55,10 @@ __KERNEL_RCSID(0, "$NetBSD: pxa2x0_com.c,v 1.7 2006/12/10 12:46:48 kiyohara Exp
|
||||
#include <dev/ic/comreg.h>
|
||||
#include <dev/ic/comvar.h>
|
||||
|
||||
#include <arm/xscale/pxa2x0cpu.h>
|
||||
#include <arm/xscale/pxa2x0reg.h>
|
||||
#include <arm/xscale/pxa2x0var.h>
|
||||
#include <arm/xscale/pxa2x0_gpio.h>
|
||||
|
||||
#include "locators.h"
|
||||
|
||||
@ -72,32 +74,48 @@ pxauart_match(struct device *parent, struct cfdata *cf, void *aux)
|
||||
struct pxaip_attach_args *pxa = aux;
|
||||
bus_space_tag_t bt = &pxa2x0_a4x_bs_tag; /* XXX: This sucks */
|
||||
bus_space_handle_t bh;
|
||||
int rv;
|
||||
struct pxa2x0_gpioconf *gpioconf;
|
||||
u_int gpio;
|
||||
int rv, i;
|
||||
|
||||
switch (pxa->pxa_addr) {
|
||||
case PXA2X0_FFUART_BASE:
|
||||
if (pxa->pxa_intr != PXA2X0_INT_FFUART)
|
||||
return (0);
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_com_ffuart_gpioconf :
|
||||
pxa27x_com_ffuart_gpioconf;
|
||||
break;
|
||||
|
||||
case PXA2X0_STUART_BASE:
|
||||
if (pxa->pxa_intr != PXA2X0_INT_STUART)
|
||||
return (0);
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_com_stuart_gpioconf :
|
||||
pxa27x_com_stuart_gpioconf;
|
||||
break;
|
||||
|
||||
case PXA2X0_BTUART_BASE: /* XXX: Config file option ... */
|
||||
if (pxa->pxa_intr != PXA2X0_INT_BTUART)
|
||||
return (0);
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_com_btuart_gpioconf :
|
||||
pxa27x_com_btuart_gpioconf;
|
||||
break;
|
||||
|
||||
case PXA2X0_HWUART_BASE:
|
||||
if (pxa->pxa_intr != PXA2X0_INT_HWUART)
|
||||
return (0);
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_com_hwuart_gpioconf :
|
||||
pxa27x_com_hwuart_gpioconf;
|
||||
break;
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
for (i = 0; gpioconf[i].pin != -1; i++) {
|
||||
gpio = pxa2x0_gpio_get_function(gpioconf[i].pin);
|
||||
if (GPIO_FN(gpio) != GPIO_FN(gpioconf[i].value) ||
|
||||
GPIO_FN_IS_OUT(gpio) != GPIO_FN_IS_OUT(gpioconf[i].value))
|
||||
return (0);
|
||||
}
|
||||
|
||||
pxa->pxa_size = 0x20;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pxa2x0_gpio.c,v 1.7 2006/12/17 16:03:33 peter Exp $ */
|
||||
/* $NetBSD: pxa2x0_gpio.c,v 1.8 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2003 Wasabi Systems, Inc.
|
||||
@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_gpio.c,v 1.7 2006/12/17 16:03:33 peter Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_gpio.c,v 1.8 2007/08/21 11:39:11 kiyohara Exp $");
|
||||
|
||||
#include "opt_pxa2x0_gpio.h"
|
||||
|
||||
@ -670,3 +670,280 @@ pxa2x0_gpio_set_intr_level(u_int gpio, int level)
|
||||
|
||||
splx(s);
|
||||
}
|
||||
|
||||
|
||||
#if defined(CPU_XSCALE_PXA250)
|
||||
/*
|
||||
* Configurations of GPIO for PXA25x
|
||||
*/
|
||||
struct pxa2x0_gpioconf pxa25x_com_btuart_gpioconf[] = {
|
||||
{ 42, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BTRXD */
|
||||
{ 43, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* BTTXD */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 44, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BTCTS */
|
||||
{ 45, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* BTRTS */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_com_ffuart_gpioconf[] = {
|
||||
{ 34, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 35, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* CTS */
|
||||
{ 36, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* DCD */
|
||||
{ 37, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* DSR */
|
||||
{ 38, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* RI */
|
||||
#endif
|
||||
|
||||
{ 39, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 40, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* DTR */
|
||||
{ 41, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* RTS */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_com_hwuart_gpioconf[] = {
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 42, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* HWRXD */
|
||||
{ 49, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* HWRXD */
|
||||
|
||||
{ 43, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* HWTXD */
|
||||
{ 48, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* HWTXD */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 44, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* HWCST */
|
||||
{ 51, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* HWCST */
|
||||
|
||||
{ 45, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* HWRST */
|
||||
{ 52, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* HWRST */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_com_stuart_gpioconf[] = {
|
||||
{ 46, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* RXD */
|
||||
{ 47, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* TXD */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_i2c_gpioconf[] = {
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_i2s_gpioconf[] = {
|
||||
{ 28, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* BITCLK */
|
||||
{ 29, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* SDATA_IN */
|
||||
{ 30, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* SDATA_OUT */
|
||||
{ 31, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* SYNC */
|
||||
{ 32, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* SYSCLK */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_pcic_gpioconf[] = {
|
||||
{ 48, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPOE */
|
||||
{ 49, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPWE */
|
||||
{ 50, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPIOR */
|
||||
{ 51, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPIOW */
|
||||
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 52, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPCE1 */
|
||||
{ 53, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPCE2 */
|
||||
#endif
|
||||
|
||||
{ 54, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* pSKTSEL */
|
||||
{ 55, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPREG */
|
||||
{ 56, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* nPWAIT */
|
||||
{ 57, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* nIOIS16 */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_pxaacu_gpioconf[] = {
|
||||
{ 28, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BITCLK */
|
||||
{ 30, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* SDATA_OUT */
|
||||
{ 31, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* SYNC */
|
||||
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 29, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||
{ 32, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN1 */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa25x_pxamci_gpioconf[] = {
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 6, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCLK */
|
||||
{ 53, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCLK */
|
||||
{ 54, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCLK */
|
||||
|
||||
{ 8, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCS0 */
|
||||
{ 34, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* MMCCS0 */
|
||||
{ 67, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCS0 */
|
||||
|
||||
{ 9, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCS1 */
|
||||
{ 39, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCS1 */
|
||||
{ 68, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* MMCCS1 */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CPU_XSCALE_PXA270)
|
||||
/*
|
||||
* Configurations of GPIO for PXA27x
|
||||
*/
|
||||
struct pxa2x0_gpioconf pxa27x_com_btuart_gpioconf[] = {
|
||||
{ 42, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BTRXD */
|
||||
{ 43, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* BTTXD */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 44, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BTCTS */
|
||||
{ 45, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* BTRTS */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_com_ffuart_gpioconf[] = {
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 16, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFTXD */
|
||||
{ 37, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFTXD */
|
||||
{ 39, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||
{ 83, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||
{ 99, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFTXD */
|
||||
|
||||
{ 19, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFRXD */
|
||||
{ 33, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 34, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 41, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 53, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 85, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 96, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFRXD */
|
||||
{ 102, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFRXD */
|
||||
|
||||
{ 9, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFCTS */
|
||||
{ 26, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFCTS */
|
||||
{ 35, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFCTS */
|
||||
{ 100, GPIO_CLR | GPIO_ALT_FN_3_IN }, /* FFCTS */
|
||||
|
||||
{ 27, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFRTS */
|
||||
{ 41, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* FFRTS */
|
||||
{ 83, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFRTS */
|
||||
{ 98, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFRTS */
|
||||
|
||||
{ 40, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* FFDTR */
|
||||
{ 82, GPIO_CLR | GPIO_ALT_FN_3_OUT }, /* FFDTR */
|
||||
|
||||
{ 36, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFDCD */
|
||||
|
||||
{ 33, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* FFDSR */
|
||||
{ 37, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFDSR */
|
||||
|
||||
{ 38, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* FFRI */
|
||||
#endif
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_com_hwuart_gpioconf[] = {
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_com_stuart_gpioconf[] = {
|
||||
{ 46, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* STD_RXD */
|
||||
{ 47, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* STD_TXD */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_i2c_gpioconf[] = {
|
||||
{ 117, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SCL */
|
||||
{ 118, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDA */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_i2s_gpioconf[] = {
|
||||
{ 28, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* I2S_BITCLK */
|
||||
{ 29, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* I2S_SDATA_IN */
|
||||
{ 30, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* I2S_SDATA_OUT */
|
||||
{ 31, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* I2S_SYNC */
|
||||
{ 113, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* I2S_SYSCLK */
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_pcic_gpioconf[] = {
|
||||
{ 48, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPOE */
|
||||
{ 49, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPWE */
|
||||
{ 50, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPIOR */
|
||||
{ 51, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPIOW */
|
||||
{ 55, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPREG */
|
||||
{ 56, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* nPWAIT */
|
||||
{ 57, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* nIOIS16 */
|
||||
{ 104, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* pSKTSEL */
|
||||
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 85, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* nPCE1 */
|
||||
{ 86, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* nPCE1 */
|
||||
{ 102, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* nPCE1 */
|
||||
|
||||
{ 54, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* nPCE2 */
|
||||
{ 78, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* nPCE2 */
|
||||
{ 105, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* nPCE2 */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_pxaacu_gpioconf[] = {
|
||||
{ 28, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* BITCLK */
|
||||
{ 30, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* SDATA_OUT */
|
||||
|
||||
#if 0 /* We can select and/or. */
|
||||
{ 31, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* SYNC */
|
||||
{ 94, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* SYNC */
|
||||
|
||||
{ 29, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||
{ 116, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* SDATA_IN0 */
|
||||
|
||||
{ 32, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN1 */
|
||||
{ 99, GPIO_CLR | GPIO_ALT_FN_2_IN }, /* SDATA_IN1 */
|
||||
|
||||
{ 95, GPIO_CLR | GPIO_ALT_FN_1_OUT }, /* RESET_n */
|
||||
{ 113, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* RESET_n */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
struct pxa2x0_gpioconf pxa27x_pxamci_gpioconf[] = {
|
||||
{ 32, GPIO_CLR | GPIO_ALT_FN_2_OUT }, /* MMCLK */
|
||||
{ 112, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* MMCMD */
|
||||
{ 92, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* MMDAT<0> */
|
||||
|
||||
#if 0 /* optional */
|
||||
{ 109, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* MMDAT<1> */
|
||||
{ 110, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* MMDAT<2>/MMCCS<0> */
|
||||
{ 111, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* MMDAT<3>/MMCCS<1> */
|
||||
#endif
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
#endif
|
||||
|
||||
void
|
||||
pxa2x0_gpio_config(struct pxa2x0_gpioconf **conflist)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = 0; conflist[i] != NULL; i++)
|
||||
for (j = 0; conflist[i][j].pin != -1; j++)
|
||||
pxa2x0_gpio_set_function(conflist[i][j].pin,
|
||||
conflist[i][j].value);
|
||||
}
|
||||
|
@ -67,4 +67,31 @@ extern void pxa2x0_gpio_intr_mask(void *);
|
||||
extern void pxa2x0_gpio_intr_unmask(void *);
|
||||
extern void pxa2x0_gpio_set_intr_level(u_int, int);
|
||||
|
||||
|
||||
struct pxa2x0_gpioconf {
|
||||
int pin;
|
||||
u_int value;
|
||||
};
|
||||
void pxa2x0_gpio_config(struct pxa2x0_gpioconf **);
|
||||
|
||||
extern struct pxa2x0_gpioconf pxa25x_com_ffuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_com_stuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_com_btuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_com_hwuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_i2c_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_i2s_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_pcic_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_pxaacu_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa25x_pxamci_gpioconf[];
|
||||
|
||||
extern struct pxa2x0_gpioconf pxa27x_com_ffuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_com_stuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_com_btuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_com_hwuart_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_i2c_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_i2s_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_pcic_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_pxaacu_gpioconf[];
|
||||
extern struct pxa2x0_gpioconf pxa27x_pxamci_gpioconf[];
|
||||
|
||||
#endif /* _PXA2X0_GPIO_H */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pxa2x0_i2c.c,v 1.1 2006/12/17 16:03:33 peter Exp $ */
|
||||
/* $NetBSD: pxa2x0_i2c.c,v 1.2 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
/* $OpenBSD: pxa2x0_i2c.c,v 1.2 2005/05/26 03:52:07 pascoe Exp $ */
|
||||
|
||||
/*
|
||||
@ -18,7 +18,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2c.c,v 1.1 2006/12/17 16:03:33 peter Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2c.c,v 1.2 2007/08/21 11:39:11 kiyohara Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -45,13 +45,6 @@ pxa2x0_i2c_attach_sub(struct pxa2x0_i2c_softc *sc)
|
||||
bus_space_barrier(sc->sc_iot, sc->sc_ioh, 0, sc->sc_size,
|
||||
BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE);
|
||||
|
||||
/*
|
||||
* Configure the alternate functions. The _IN is arbitrary, as the
|
||||
* direction is managed by the I2C unit when comms are in progress.
|
||||
*/
|
||||
pxa2x0_gpio_set_function(117, GPIO_ALT_FN_1_IN); /* SCL */
|
||||
pxa2x0_gpio_set_function(118, GPIO_ALT_FN_1_IN); /* SDA */
|
||||
|
||||
pxa2x0_i2c_init(sc);
|
||||
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pxa2x0_i2s.c,v 1.5 2007/06/26 15:08:42 nonaka Exp $ */
|
||||
/* $NetBSD: pxa2x0_i2s.c,v 1.6 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
/* $OpenBSD: pxa2x0_i2s.c,v 1.7 2006/04/04 11:45:40 pascoe Exp $ */
|
||||
|
||||
/*
|
||||
@ -18,7 +18,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2s.c,v 1.5 2007/06/26 15:08:42 nonaka Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2s.c,v 1.6 2007/08/21 11:39:11 kiyohara Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -82,12 +82,6 @@ pxa2x0_i2s_attach_sub(struct pxa2x0_i2s_softc *sc)
|
||||
bus_space_barrier(sc->sc_iot, sc->sc_ioh, 0, sc->sc_size,
|
||||
BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE);
|
||||
|
||||
pxa2x0_gpio_set_function(28, GPIO_ALT_FN_1_OUT); /* I2S_BITCLK */
|
||||
pxa2x0_gpio_set_function(113, GPIO_ALT_FN_1_OUT); /* I2S_SYSCLK */
|
||||
pxa2x0_gpio_set_function(31, GPIO_ALT_FN_1_OUT); /* I2S_SYNC */
|
||||
pxa2x0_gpio_set_function(30, GPIO_ALT_FN_1_OUT); /* I2S_SDATA_OUT */
|
||||
pxa2x0_gpio_set_function(29, GPIO_ALT_FN_2_IN); /* I2S_SDATA_IN */
|
||||
|
||||
pxa2x0_i2s_init(sc);
|
||||
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: g42xxeb_machdep.c,v 1.10 2006/11/24 22:04:22 wiz Exp $ */
|
||||
/* $NetBSD: g42xxeb_machdep.c,v 1.11 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2004, 2005 Genetec Corporation.
|
||||
@ -261,6 +261,23 @@ bs_protos(bs_notimpl);
|
||||
int comcnspeed = CONSPEED;
|
||||
int comcnmode = CONMODE;
|
||||
|
||||
static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
static struct pxa2x0_gpioconf *g42xxeb_gpioconf[] = {
|
||||
pxa25x_com_btuart_gpioconf,
|
||||
pxa25x_com_ffuart_gpioconf,
|
||||
#if 0
|
||||
pxa25x_com_stuart_gpioconf,
|
||||
pxa25x_pxaacu_gpioconf,
|
||||
#endif
|
||||
boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* void cpu_reboot(int howto, char *bootstr)
|
||||
*
|
||||
@ -498,10 +515,7 @@ initarm(void *arg)
|
||||
|
||||
/* setup GPIO for BTUART, in case bootloader doesn't take care of it */
|
||||
pxa2x0_gpio_bootstrap(G42XXEB_GPIO_VBASE);
|
||||
pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_config(g42xxeb_gpioconf);
|
||||
|
||||
LEDSTEP();
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: gxio.c,v 1.4 2007/04/20 13:00:08 kiyohara Exp $ */
|
||||
/* $NetBSD: gxio.c,v 1.5 2007/08/21 11:39:11 kiyohara Exp $ */
|
||||
/*
|
||||
* Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation.
|
||||
* All rights reserved.
|
||||
@ -31,7 +31,7 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.4 2007/04/20 13:00:08 kiyohara Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.5 2007/08/21 11:39:11 kiyohara Exp $");
|
||||
|
||||
#include "opt_gxio.h"
|
||||
|
||||
@ -52,10 +52,6 @@ __KERNEL_RCSID(0, "$NetBSD: gxio.c,v 1.4 2007/04/20 13:00:08 kiyohara Exp $");
|
||||
#include "locators.h"
|
||||
|
||||
|
||||
struct gpioconf {
|
||||
int pin;
|
||||
u_int value;
|
||||
};
|
||||
struct gxioconf {
|
||||
const char *name;
|
||||
void (*config)(void);
|
||||
@ -82,21 +78,13 @@ CFATTACH_DECL(
|
||||
|
||||
char busheader[MAX_BOOT_STRING];
|
||||
|
||||
struct gpioconf gpioconf[] = {
|
||||
static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
||||
/* Bluetooth module configuration */
|
||||
{ 7, GPIO_OUT | GPIO_SET }, /* power on */
|
||||
{ 12, GPIO_ALT_FN_1_OUT }, /* 32kHz out. required by SingleStone */
|
||||
|
||||
/* AC97 configuration */
|
||||
#if 1
|
||||
/* this configuration set by pxaacu_attach()::pxa2x0_ac97.c */
|
||||
#else
|
||||
/* Don't reorder */
|
||||
{ 31, GPIO_ALT_FN_2_OUT }, /* SYNC */
|
||||
{ 30, GPIO_ALT_FN_2_OUT }, /* SDATA_OUT */
|
||||
{ 28, GPIO_ALT_FN_1_IN }, /* BITCLK */
|
||||
{ 29, GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||
#endif
|
||||
{ 29, GPIO_CLR | GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||
|
||||
/* FFUART configuration : is connected only TXD/RXD */
|
||||
{ 34, GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
@ -104,8 +92,6 @@ struct gpioconf gpioconf[] = {
|
||||
|
||||
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
||||
/* BTUART configuration */
|
||||
{ 42, GPIO_ALT_FN_1_IN }, /* BTRXD */
|
||||
{ 43, GPIO_ALT_FN_2_OUT }, /* BTTXD */
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
#else
|
||||
@ -116,10 +102,6 @@ struct gpioconf gpioconf[] = {
|
||||
{ 45, GPIO_ALT_FN_3_OUT }, /* HWRST */
|
||||
#endif
|
||||
|
||||
/* STUART configuration : is connected only TXD/RXD */
|
||||
{ 46, GPIO_ALT_FN_2_IN }, /* RXD */
|
||||
{ 47, GPIO_ALT_FN_1_OUT }, /* TXD */
|
||||
|
||||
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
||||
/* HWUART configuration */
|
||||
{ 48, GPIO_ALT_FN_1_OUT }, /* HWTXD */
|
||||
@ -220,14 +202,24 @@ gxioprint(void *aux, const char *name)
|
||||
void
|
||||
gxio_config_pin()
|
||||
{
|
||||
int i;
|
||||
struct pxa2x0_gpioconf *gumstix_gpioconf[] = {
|
||||
pxa25x_com_ffuart_gpioconf,
|
||||
pxa25x_com_stuart_gpioconf,
|
||||
#ifndef GXIO_BLUETOOTH_ON_HWUART
|
||||
pxa25x_com_btuart_gpioconf,
|
||||
#endif
|
||||
pxa25x_com_hwuart_gpioconf,
|
||||
pxa25x_i2c_gpioconf,
|
||||
pxa25x_pxaacu_gpioconf,
|
||||
boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/* XXX: turn off for power of bluetooth module */
|
||||
pxa2x0_gpio_set_function(7, GPIO_OUT | GPIO_CLR);
|
||||
delay(100);
|
||||
|
||||
for (i = 0; gpioconf[i].pin != -1; i++)
|
||||
pxa2x0_gpio_set_function(gpioconf[i].pin, gpioconf[i].value);
|
||||
pxa2x0_gpio_config(gumstix_gpioconf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: gxpcic.c,v 1.4 2007/04/20 13:00:08 kiyohara Exp $ */
|
||||
/* $NetBSD: gxpcic.c,v 1.5 2007/08/21 11:39:12 kiyohara Exp $ */
|
||||
/*
|
||||
* Copyright (C) 2005, 2006 WIDE Project and SOUM Corporation.
|
||||
* All rights reserved.
|
||||
@ -78,8 +78,10 @@
|
||||
#include <dev/pcmcia/pcmciavar.h>
|
||||
#include <dev/pcmcia/pcmciachip.h>
|
||||
|
||||
#include <arch/arm/xscale/pxa2x0cpu.h>
|
||||
#include <arch/arm/xscale/pxa2x0var.h>
|
||||
#include <arch/arm/xscale/pxa2x0reg.h>
|
||||
#include <arch/arm/xscale/pxa2x0_gpio.h>
|
||||
#include <arch/arm/xscale/pxa2x0_pcic.h>
|
||||
#include <arch/evbarm/gumstix/gumstixvar.h>
|
||||
|
||||
@ -137,37 +139,22 @@ static struct {
|
||||
static int
|
||||
gxpcic_match(struct device *parent, struct cfdata *cf, void *aux)
|
||||
{
|
||||
struct {
|
||||
int gpio;
|
||||
u_int fn;
|
||||
} pcic_gpiomodes[] = {
|
||||
{ 48, GPIO_ALT_FN_2_OUT }, /* nPOE */
|
||||
{ 49, GPIO_ALT_FN_2_OUT }, /* nPWE */
|
||||
{ 50, GPIO_ALT_FN_2_OUT }, /* nPIOR */
|
||||
{ 51, GPIO_ALT_FN_2_OUT }, /* nPIOW */
|
||||
{ 52, GPIO_ALT_FN_2_OUT }, /* nPCE1 */
|
||||
{ 53, GPIO_ALT_FN_2_OUT }, /* nPCE2 */
|
||||
{ 54, GPIO_ALT_FN_2_OUT }, /* pSKTSEL */
|
||||
{ 55, GPIO_ALT_FN_2_OUT }, /* nPREG */
|
||||
{ 56, GPIO_ALT_FN_1_IN }, /* nPWAIT */
|
||||
{ 57, GPIO_ALT_FN_1_IN }, /* nIOIS16 */
|
||||
{ -1 }
|
||||
};
|
||||
struct pxa2x0_gpioconf *gpioconf;
|
||||
u_int reg;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Check GPIO configuration. If you use these, it is sure already
|
||||
* to have been set by gxio.
|
||||
* to have been set by gxio.
|
||||
*/
|
||||
for (i = 0; pcic_gpiomodes[i].gpio != -1; i++) {
|
||||
reg = pxa2x0_gpio_get_function(pcic_gpiomodes[i].gpio);
|
||||
if (GPIO_FN(reg) != GPIO_FN(pcic_gpiomodes[i].fn) ||
|
||||
GPIO_FN_IS_OUT(reg) != GPIO_FN_IS_OUT(pcic_gpiomodes[i].fn))
|
||||
break;
|
||||
gpioconf = CPU_IS_PXA250 ? pxa25x_pcic_gpioconf :
|
||||
pxa27x_pcic_gpioconf;
|
||||
for (i = 0; gpioconf[i].pin != -1; i++) {
|
||||
reg = pxa2x0_gpio_get_function(gpioconf[i].pin);
|
||||
if (GPIO_FN(reg) != GPIO_FN(gpioconf[i].value) ||
|
||||
GPIO_FN_IS_OUT(reg) != GPIO_FN_IS_OUT(gpioconf[i].value))
|
||||
return (0);
|
||||
}
|
||||
if (pcic_gpiomodes[i].gpio != -1)
|
||||
return 0;
|
||||
|
||||
return 1; /* match */
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: lubbock_machdep.c,v 1.14 2006/11/24 22:04:22 wiz Exp $ */
|
||||
/* $NetBSD: lubbock_machdep.c,v 1.15 2007/08/21 11:39:12 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, 2005 Genetec Corporation. All rights reserved.
|
||||
@ -112,7 +112,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: lubbock_machdep.c,v 1.14 2006/11/24 22:04:22 wiz Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: lubbock_machdep.c,v 1.15 2007/08/21 11:39:12 kiyohara Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_kgdb.h"
|
||||
@ -266,6 +266,26 @@ bs_protos(bs_notimpl);
|
||||
int comcnspeed = CONSPEED;
|
||||
int comcnmode = CONMODE;
|
||||
|
||||
static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
|
||||
{ 29, GPIO_ALT_FN_1_IN }, /* SDATA_IN0 */
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
static struct pxa2x0_gpioconf *lubbock_gpioconf[] = {
|
||||
pxa25x_com_btuart_gpioconf,
|
||||
pxa25x_com_ffuart_gpioconf,
|
||||
#if 0
|
||||
pxa25x_com_stuart_gpioconf,
|
||||
#endif
|
||||
pxa25x_pcic_gpioconf,
|
||||
pxa25x_pxaacu_gpioconf,
|
||||
boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* void cpu_reboot(int howto, char *bootstr)
|
||||
*
|
||||
@ -509,10 +529,7 @@ initarm(void *arg)
|
||||
|
||||
/* setup GPIO for BTUART, in case bootloader doesn't take care of it */
|
||||
pxa2x0_gpio_bootstrap(LUBBOCK_GPIO_VBASE);
|
||||
pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_config(lubbock_gpioconf);
|
||||
|
||||
/* turn on clock to UART block.
|
||||
XXX: this should not be done here. */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: viper_machdep.c,v 1.6 2006/11/24 22:04:22 wiz Exp $ */
|
||||
/* $NetBSD: viper_machdep.c,v 1.7 2007/08/21 11:39:12 kiyohara Exp $ */
|
||||
|
||||
/*
|
||||
* Startup routines for the Arcom Viper. Below you can trace the
|
||||
@ -112,7 +112,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: viper_machdep.c,v 1.6 2006/11/24 22:04:22 wiz Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: viper_machdep.c,v 1.7 2007/08/21 11:39:12 kiyohara Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_kgdb.h"
|
||||
@ -265,6 +265,20 @@ bs_protos(bs_notimpl);
|
||||
int comcnspeed = CONSPEED;
|
||||
int comcnmode = CONMODE;
|
||||
|
||||
static struct pxa2x0_gpioconf boarddep_gpioconf[] = {
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
static struct pxa2x0_gpioconf *viper_gpioconf[] = {
|
||||
pxa25x_com_btuart_gpioconf,
|
||||
pxa25x_com_ffuart_gpioconf,
|
||||
pxa25x_com_stuart_gpioconf,
|
||||
boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* void cpu_reboot(int howto, char *bootstr)
|
||||
*
|
||||
@ -429,10 +443,7 @@ initarm(void *arg)
|
||||
|
||||
/* setup GPIO for BTUART, in case bootloader doesn't take care of it */
|
||||
pxa2x0_gpio_bootstrap(VIPER_GPIO_VBASE);
|
||||
pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_config(viper_gpioconf);
|
||||
|
||||
/* turn on clock to UART block.
|
||||
XXX: this should not be done here. */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.5 2007/06/28 16:07:12 nonaka Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.6 2007/08/21 11:39:12 kiyohara Exp $ */
|
||||
/* $OpenBSD: zaurus_machdep.c,v 1.25 2006/06/20 18:24:04 todd Exp $ */
|
||||
|
||||
/*
|
||||
@ -107,7 +107,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.5 2007/06/28 16:07:12 nonaka Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6 2007/08/21 11:39:12 kiyohara Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_kgdb.h"
|
||||
@ -255,6 +255,64 @@ void process_kernel_args(char *);
|
||||
void kgdb_port_init(void);
|
||||
#endif
|
||||
|
||||
#if defined(CPU_XSCALE_PXA250)
|
||||
static struct pxa2x0_gpioconf pxa25x_boarddep_gpioconf[] = {
|
||||
{ 34, GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 35, GPIO_ALT_FN_1_IN }, /* FFCTS */
|
||||
{ 39, GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||
{ 40, GPIO_ALT_FN_2_OUT }, /* FFDTR */
|
||||
{ 41, GPIO_ALT_FN_2_OUT }, /* FFRTS */
|
||||
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
static struct pxa2x0_gpioconf *pxa25x_zaurus_gpioconf[] = {
|
||||
pxa25x_com_btuart_gpioconf,
|
||||
pxa25x_com_ffuart_gpioconf,
|
||||
pxa25x_com_stuart_gpioconf,
|
||||
pxa25x_boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
#else
|
||||
static struct pxa2x0_gpioconf *pxa25x_zaurus_gpioconf[] = {
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
#if defined(CPU_XSCALE_PXA270)
|
||||
static struct pxa2x0_gpioconf pxa27x_boarddep_gpioconf[] = {
|
||||
{ 34, GPIO_ALT_FN_1_IN }, /* FFRXD */
|
||||
{ 35, GPIO_ALT_FN_1_IN }, /* FFCTS */
|
||||
{ 39, GPIO_ALT_FN_2_OUT }, /* FFTXD */
|
||||
{ 40, GPIO_ALT_FN_2_OUT }, /* FFDTR */
|
||||
{ 41, GPIO_ALT_FN_2_OUT }, /* FFRTS */
|
||||
|
||||
{ 44, GPIO_ALT_FN_1_IN }, /* BTCST */
|
||||
{ 45, GPIO_ALT_FN_2_OUT }, /* BTRST */
|
||||
|
||||
{ 109, GPIO_ALT_FN_1_IN }, /* MMDAT<1> */
|
||||
{ 110, GPIO_ALT_FN_1_IN }, /* MMDAT<2>/MMCCS<0> */
|
||||
{ 111, GPIO_ALT_FN_1_IN }, /* MMDAT<3>/MMCCS<1> */
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
static struct pxa2x0_gpioconf *pxa27x_zaurus_gpioconf[] = {
|
||||
pxa27x_com_btuart_gpioconf,
|
||||
pxa27x_com_ffuart_gpioconf,
|
||||
pxa27x_com_stuart_gpioconf,
|
||||
pxa27x_i2c_gpioconf,
|
||||
pxa27x_i2s_gpioconf,
|
||||
pxa27x_pxamci_gpioconf,
|
||||
pxa27x_boarddep_gpioconf,
|
||||
NULL
|
||||
};
|
||||
#else
|
||||
static struct pxa2x0_gpioconf *pxa27x_zaurus_gpioconf[] = {
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* void cpu_reboot(int howto, char *bootstr)
|
||||
*
|
||||
@ -501,6 +559,7 @@ initarm(void *arg)
|
||||
pv_addr_t kernel_l1pt;
|
||||
paddr_t memstart;
|
||||
psize_t memsize;
|
||||
struct pxa2x0_gpioconf **zaurus_gpioconf;
|
||||
|
||||
/* Get ready for zaurus_restart() */
|
||||
pxa2x0_memctl_bootstrap(PXA2X0_MEMCTL_BASE);
|
||||
@ -540,13 +599,17 @@ initarm(void *arg)
|
||||
* This test will work for now but has to be revised when support
|
||||
* for other models is added.
|
||||
*/
|
||||
if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA27X)
|
||||
if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA27X) {
|
||||
zaurusmod = ZAURUS_C3000;
|
||||
else
|
||||
zaurus_gpioconf = pxa27x_zaurus_gpioconf;
|
||||
} else {
|
||||
zaurusmod = ZAURUS_C860;
|
||||
zaurus_gpioconf = pxa25x_zaurus_gpioconf;
|
||||
}
|
||||
|
||||
/* setup a serial console for very early boot */
|
||||
pxa2x0_gpio_bootstrap(ZAURUS_GPIO_VBASE);
|
||||
pxa2x0_gpio_config(zaurus_gpioconf);
|
||||
pxa2x0_clkman_bootstrap(ZAURUS_CLKMAN_VBASE);
|
||||
if (strcmp(console, "glass") != 0)
|
||||
consinit();
|
||||
@ -1076,23 +1139,12 @@ consinit(void)
|
||||
if (strcmp(console, "ffuart") == 0) {
|
||||
paddr = PXA2X0_FFUART_BASE;
|
||||
cken = CKEN_FFUART;
|
||||
pxa2x0_gpio_set_function(34, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(39, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(35, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(40, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(41, GPIO_ALT_FN_2_OUT);
|
||||
} else if (strcmp(console, "btuart") == 0) {
|
||||
paddr = PXA2X0_BTUART_BASE;
|
||||
cken = CKEN_BTUART;
|
||||
pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT);
|
||||
} else if (strcmp(console, "stuart") == 0) {
|
||||
paddr = PXA2X0_STUART_BASE;
|
||||
cken = CKEN_STUART;
|
||||
pxa2x0_gpio_set_function(46, GPIO_ALT_FN_2_IN);
|
||||
pxa2x0_gpio_set_function(47, GPIO_ALT_FN_1_OUT);
|
||||
irda_on(0);
|
||||
} else
|
||||
#endif
|
||||
@ -1124,23 +1176,12 @@ kgdb_port_init(void)
|
||||
if (strcmp(kgdb_devname, "ffuart") == 0) {
|
||||
paddr = PXA2X0_FFUART_BASE;
|
||||
cken = CKEN_FFUART;
|
||||
pxa2x0_gpio_set_function(34, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(39, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(35, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(40, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(41, GPIO_ALT_FN_2_OUT);
|
||||
} else if (strcmp(kgdb_devname, "btuart") == 0) {
|
||||
paddr = PXA2X0_BTUART_BASE;
|
||||
cken = CKEN_BTUART;
|
||||
pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT);
|
||||
pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN);
|
||||
pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT);
|
||||
} else if (strcmp(kgdb_devname, "stuart") == 0) {
|
||||
paddr = PXA2X0_STUART_BASE;
|
||||
cken = CKEN_STUART;
|
||||
pxa2x0_gpio_set_function(46, GPIO_ALT_FN_2_IN);
|
||||
pxa2x0_gpio_set_function(47, GPIO_ALT_FN_1_OUT);
|
||||
irda_on(0);
|
||||
} else
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user