[patch v3 10/10] efikamx: add reset
Uwe Kleine-König
u.kleine-koenig at pengutronix.de
Wed Oct 27 03:36:29 EDT 2010
On Tue, Oct 26, 2010 at 10:07:33PM +0200, Arnaud Patard wrote:
> The efikamx board is using a gpio to reset the board so add support
> for it
>
> Signed-off-by: Arnaud Patard <arnaud.patard at rtp-net.org>
> Index: linux-2.6-submit/arch/arm/mach-mx5/board-mx51_efikamx.c
> ===================================================================
> --- linux-2.6-submit.orig/arch/arm/mach-mx5/board-mx51_efikamx.c 2010-10-20 18:30:58.000000000 +0200
> +++ linux-2.6-submit/arch/arm/mach-mx5/board-mx51_efikamx.c 2010-10-20 18:31:00.000000000 +0200
> @@ -57,6 +57,9 @@
> #define EFIKAMX_SPI_CS0 (3*32 + 24)
> #define EFIKAMX_SPI_CS1 (3*32 + 25)
>
> +#define EFIKAMX_RESET1_1 (2*32 + 2)
> +#define EFIKAMX_RESET (0*32 + 4)
Maybe add a comment here about the difference. When I first read that
it looked strange.
> +
> /* the pci ids pin have pull up. they're driven low according to board id */
> #define MX51_PAD_PCBID0 IOMUX_PAD(0x518, 0x130, 3, 0x0, 0, PAD_CTL_PUS_100K_UP)
> #define MX51_PAD_PCBID1 IOMUX_PAD(0x51C, 0x134, 3, 0x0, 0, PAD_CTL_PUS_100K_UP)
> @@ -112,6 +115,10 @@
> MX51_PAD_CSPI1_SS1__GPIO_4_25,
> MX51_PAD_CSPI1_RDY__ECSPI1_RDY,
> MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK,
> +
> + /* reset */
> + MX51_PAD_DI1_PIN13__GPIO_3_2,
> + MX51_PAD_GPIO_1_4__GPIO_1_4,
> };
>
> /* Serial ports */
> @@ -306,6 +313,14 @@
> .num_chipselect = ARRAY_SIZE(mx51_efikamx_spi_cs),
> };
>
> +void mx51_efikamx_reset(void)
> +{
> + if (system_rev == 0x11)
> + gpio_direction_output(EFIKAMX_RESET1_1, 0);
> + else
> + gpio_direction_output(EFIKAMX_RESET, 0);
> +}
> +
> static void __init mxc_board_init(void)
> {
> mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads,
> @@ -327,6 +342,11 @@
> spi_register_board_info(mx51_efikamx_spi_board_info,
> ARRAY_SIZE(mx51_efikamx_spi_board_info));
> imx51_add_ecspi(0, &mx51_efikamx_spi_pdata);
> +
> + if (system_rev == 0x11)
> + gpio_request(EFIKAMX_RESET1_1, "reset");
> + else
> + gpio_request(EFIKAMX_RESET, "reset");
gpio_direction_output(..., 1)?
> }
>
> static void __init mx51_efikamx_timer_init(void)
> Index: linux-2.6-submit/arch/arm/plat-mxc/include/mach/common.h
> ===================================================================
> --- linux-2.6-submit.orig/arch/arm/plat-mxc/include/mach/common.h 2010-10-20 18:30:27.000000000 +0200
> +++ linux-2.6-submit/arch/arm/plat-mxc/include/mach/common.h 2010-10-20 18:31:00.000000000 +0200
> @@ -50,5 +50,5 @@
> extern void mxc91231_power_off(void);
> extern void mxc91231_arch_reset(int, const char *);
> extern void mxc91231_prepare_idle(void);
> -
> +extern void mx51_efikamx_reset(void);
> #endif
> Index: linux-2.6-submit/arch/arm/plat-mxc/system.c
> ===================================================================
> --- linux-2.6-submit.orig/arch/arm/plat-mxc/system.c 2010-10-20 18:30:27.000000000 +0200
> +++ linux-2.6-submit/arch/arm/plat-mxc/system.c 2010-10-20 18:31:00.000000000 +0200
> @@ -26,6 +26,7 @@
> #include <mach/common.h>
> #include <asm/proc-fns.h>
> #include <asm/system.h>
> +#include <asm/mach-types.h>
>
> static void __iomem *wdog_base;
>
> @@ -42,6 +43,11 @@
> return;
> }
> #endif
> +#ifdef CONFIG_MACH_MX51_EFIKAMX
> + if (machine_is_mx51_efikamx())
> + mx51_efikamx_reset();
> +#endif
Depending on how fast the reset occurs mx51_efikamx_reset returns and
the processor continues to execute the watchdog reset. Is this
intended?
> +
> if (cpu_is_mx1()) {
> wcr_enable = (1 << 0);
> } else {
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
More information about the linux-arm-kernel
mailing list