[PATCH] ep93xx: Add support for Snapper CL15 module

H Hartley Sweeten hartleys at visionengravers.com
Tue Feb 9 22:07:13 EST 2010


On Tuesday, February 09, 2010 7:55 PM, Ryan Mallon wrote:
> Updated version: Added support for command line NAND partitions, and
> specify defaults partitions directly in nand_chip descriptor rather than
> using set_parts callback.
> 
> Signed-off-by: Ryan Mallon <ryan at bluewatersys.com>

You need a proper commit message but other than that I'm happy with this.

Acked-by: H Hartley Sweeten <hsweeten at visionengravers.com>

> ---
> 
> diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig
> index 9167c3d..5121ce4 100644
> --- a/arch/arm/mach-ep93xx/Kconfig
> +++ b/arch/arm/mach-ep93xx/Kconfig
> @@ -161,6 +161,13 @@ config MACH_MICRO9S
>  	  Say 'Y' here if you want your kernel to support the
>  	  Contec Micro9-Slim board.
>  
> +config MACH_SNAPPER_CL15
> +	bool "Support Bluewater Systems Snapper CL15 Module"
> +	depends on EP93XX_SDCE0_PHYS_OFFSET
> +	help
> +	  Say 'Y' here if you want your kernel to support the Bluewater
> +	  Systems Snapper CL15 Module.
> +
>  config MACH_TS72XX
>  	bool "Support Technologic Systems TS-72xx SBC"
>  	depends on EP93XX_SDCE3_SYNC_PHYS_OFFSET
> diff --git a/arch/arm/mach-ep93xx/Makefile b/arch/arm/mach-ep93xx/Makefile
> index eae6199..556028c 100644
> --- a/arch/arm/mach-ep93xx/Makefile
> +++ b/arch/arm/mach-ep93xx/Makefile
> @@ -10,4 +10,5 @@ obj-$(CONFIG_MACH_ADSSPHERE)	+= adssphere.o
>  obj-$(CONFIG_MACH_EDB93XX)	+= edb93xx.o
>  obj-$(CONFIG_MACH_GESBC9312)	+= gesbc9312.o
>  obj-$(CONFIG_MACH_MICRO9)	+= micro9.o
> +obj-$(CONFIG_MACH_SNAPPER_CL15)	+= snappercl15.o
>  obj-$(CONFIG_MACH_TS72XX)	+= ts72xx.o
> diff --git a/arch/arm/mach-ep93xx/snappercl15.c b/arch/arm/mach-ep93xx/snappercl15.c
> new file mode 100644
> index 0000000..51134b0
> --- /dev/null
> +++ b/arch/arm/mach-ep93xx/snappercl15.c
> @@ -0,0 +1,172 @@
> +/*
> + * arch/arm/mach-ep93xx/snappercl15.c
> + * Bluewater Systems Snapper CL15 system module
> + *
> + * Copyright (C) 2009 Bluewater Systems Ltd
> + * Author: Ryan Mallon <ryan at bluewatersys.com>
> + *
> + * NAND code adapted from driver by:
> + *   Andre Renaud <andre at bluewatersys.com>
> + *   James R. McKaskill
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or (at
> + * your option) any later version.
> + *
> + */
> +
> +#include <linux/platform_device.h>
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/io.h>
> +#include <linux/gpio.h>
> +#include <linux/i2c.h>
> +#include <linux/i2c-gpio.h>
> +#include <linux/fb.h>
> +
> +#include <linux/mtd/partitions.h>
> +#include <linux/mtd/nand.h>
> +
> +#include <mach/hardware.h>
> +#include <mach/fb.h>
> +
> +#include <asm/mach-types.h>
> +#include <asm/mach/arch.h>
> +
> +#define SNAPPERCL15_NAND_BASE	(EP93XX_CS7_PHYS_BASE + SZ_16M)
> +
> +#define SNAPPERCL15_NAND_WPN	(1 << 8)  /* Write protect (active low) */
> +#define SNAPPERCL15_NAND_ALE	(1 << 9)  /* Address latch */
> +#define SNAPPERCL15_NAND_CLE	(1 << 10) /* Command latch */
> +#define SNAPPERCL15_NAND_CEN	(1 << 11) /* Chip enable (active low) */
> +#define SNAPPERCL15_NAND_RDY	(1 << 14) /* Device ready */
> +
> +#define NAND_CTRL_ADDR(chip) 	(chip->IO_ADDR_W + 0x40)
> +
> +static void snappercl15_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
> +				      unsigned int ctrl)
> +{
> +	struct nand_chip *chip = mtd->priv;
> +	static u16 nand_state = SNAPPERCL15_NAND_WPN;
> +	u16 set;
> +
> +	if (ctrl & NAND_CTRL_CHANGE) {
> +		set = SNAPPERCL15_NAND_CEN | SNAPPERCL15_NAND_WPN;
> +
> +		if (ctrl & NAND_NCE)
> +			set &= ~SNAPPERCL15_NAND_CEN;
> +		if (ctrl & NAND_CLE)
> +			set |= SNAPPERCL15_NAND_CLE;
> +		if (ctrl & NAND_ALE)
> +			set |= SNAPPERCL15_NAND_ALE;
> +
> +		nand_state &= ~(SNAPPERCL15_NAND_CEN |
> +				SNAPPERCL15_NAND_CLE |
> +				SNAPPERCL15_NAND_ALE);
> +		nand_state |= set;
> +		__raw_writew(nand_state, NAND_CTRL_ADDR(chip));
> +	}
> +
> +	if (cmd != NAND_CMD_NONE)
> +		__raw_writew((cmd & 0xff) | nand_state, chip->IO_ADDR_W);
> +}
> +
> +static int snappercl15_nand_dev_ready(struct mtd_info *mtd)
> +{
> +	struct nand_chip *chip = mtd->priv;
> +
> +	return !!(__raw_readw(NAND_CTRL_ADDR(chip)) & SNAPPERCL15_NAND_RDY);
> +}
> +
> +static const char *snappercl15_nand_part_probes[] = {"cmdlinepart", NULL};
> +
> +static struct mtd_partition snappercl15_nand_parts[] = {
> +	{
> +		.name		= "Kernel",
> +		.offset		= 0,
> +		.size		= SZ_2M,
> +	},
> +	{
> +		.name		= "Filesystem",
> +		.offset		= MTDPART_OFS_APPEND,
> +		.size		= MTDPART_SIZ_FULL,
> +	},
> +};
> +
> +static struct platform_nand_data snappercl15_nand_data = {
> +	.chip = {
> +		.nr_chips		= 1,
> +		.part_probe_types	= snappercl15_nand_part_probes,
> +		.partitions		= snappercl15_nand_parts,
> +		.nr_partitions		= ARRAY_SIZE(snappercl15_nand_parts),
> +		.options		= NAND_NO_AUTOINCR,
> +		.chip_delay		= 25,
> +	},
> +	.ctrl = {
> +		.dev_ready		= snappercl15_nand_dev_ready,
> +		.cmd_ctrl		= snappercl15_nand_cmd_ctrl,
> +	},
> +};
> +
> +static struct resource snappercl15_nand_resource[] = {
> +	{
> +		.start		= SNAPPERCL15_NAND_BASE,
> +		.end		= SNAPPERCL15_NAND_BASE + SZ_4K - 1,
> +		.flags		= IORESOURCE_MEM,
> +	},
> +};
> +
> +static struct platform_device snappercl15_nand_device = {
> +	.name			= "gen_nand",
> +	.id			= -1,
> +	.dev.platform_data	= &snappercl15_nand_data,
> +	.resource		= snappercl15_nand_resource,
> +	.num_resources		= ARRAY_SIZE(snappercl15_nand_resource),
> +};
> +
> +static struct ep93xx_eth_data snappercl15_eth_data = {
> +	.phy_id			= 1,
> +};
> +
> +static struct i2c_gpio_platform_data snappercl15_i2c_gpio_data = {
> +	.sda_pin		= EP93XX_GPIO_LINE_EEDAT,
> +	.sda_is_open_drain	= 0,
> +	.scl_pin		= EP93XX_GPIO_LINE_EECLK,
> +	.scl_is_open_drain	= 0,
> +	.udelay			= 0,
> +	.timeout		= 0,
> +};
> +
> +static struct i2c_board_info __initdata snappercl15_i2c_data[] = {
> +	{
> +		/* Audio codec */
> +		I2C_BOARD_INFO("tlv320aic23", 0x1a),
> +	},
> +};
> +
> +static struct ep93xxfb_mach_info snappercl15_fb_info = {
> +	.num_modes		= EP93XXFB_USE_MODEDB,
> +	.bpp			= 16,
> +};
> +
> +static void __init snappercl15_init_machine(void)
> +{
> +	ep93xx_init_devices();
> +	ep93xx_register_eth(&snappercl15_eth_data, 1);
> +	ep93xx_register_i2c(&snappercl15_i2c_gpio_data, snappercl15_i2c_data,
> +			    ARRAY_SIZE(snappercl15_i2c_data));
> +	ep93xx_register_fb(&snappercl15_fb_info);
> +	platform_device_register(&snappercl15_nand_device);
> +}
> +
> +MACHINE_START(SNAPPER_CL15, "Bluewater Systems Snapper CL15")
> +	/* Maintainer: Ryan Mallon <ryan at bluewatersys.com> */
> +	.phys_io	= EP93XX_APB_PHYS_BASE,
> +	.io_pg_offst	= ((EP93XX_APB_VIRT_BASE) >> 18) & 0xfffc,
> +	.boot_params	= EP93XX_SDCE0_PHYS_BASE + 0x100,
> +	.map_io		= ep93xx_map_io,
> +	.init_irq	= ep93xx_init_irq,
> +	.timer 		= &ep93xx_timer,
> +	.init_machine	= snappercl15_init_machine,
> +MACHINE_END
> 
> 



More information about the linux-arm-kernel mailing list