Merge tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Jan 2012 22:21:03 +0000 (14:21 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Jan 2012 22:21:03 +0000 (14:21 -0800)
Cleanups on various subarchitectures

Cleanup patches for various ARM platforms and some of their associated
drivers, the bulk of these is for mach-91.

Arnd ended up pulling in the restart branch from Russell in order to
fix up some simple but annoying merge conflicts.

* tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (44 commits)
  arm/at91: fix build of stamp9g20
  ARM: u300: delete memory.h
  MAINTAINERS: add maintainer entry for Picochip picoxcell
  ARM: picoxcell: move io mappings to common.c
  ARM: picoxcell: don't reserve irq_descs
  ARM: picoxcell: remove mach/memory.h
  ARM: at91: delete the pcontrol_g20_defconfig
  arm/tegra: Remove code that's ifndef CONFIG_ARM_GIC
  arm/tegra: remove unused defines
  arm/tegra: fix variable formatting in makefile
  ARM: davinci: vpif: move code to driver core header from platform
  ARM: at91/gpio: fix display of number of irq setuped
  ARM: at91/gpio: drop PIN_BASE
  ARM: at91/udc: use gpio_is_valid to check the gpio
  ARM: at91/ohci: use gpio_is_valid to check the gpio
  ARM: at91/nand: use gpio_is_valid to check the gpio
  ARM: at91/mmc: use gpio_is_valid to check the gpio
  ARM: at91/ide: use gpio_is_valid to check the gpio
  ARM: at91/pata: use gpio_is_valid to check the gpio
  ARM: at91/soc: use gpio_is_valid to check the gpio
  ...

136 files changed:
MAINTAINERS
arch/arm/Kconfig
arch/arm/Kconfig.debug
arch/arm/configs/pcontrol_g20_defconfig [deleted file]
arch/arm/mach-at91/Kconfig
arch/arm/mach-at91/at91cap9.c
arch/arm/mach-at91/at91cap9_devices.c
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91rm9200_devices.c
arch/arm/mach-at91/at91rm9200_time.c
arch/arm/mach-at91/at91sam9260.c
arch/arm/mach-at91/at91sam9260_devices.c
arch/arm/mach-at91/at91sam9261.c
arch/arm/mach-at91/at91sam9261_devices.c
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9263_devices.c
arch/arm/mach-at91/at91sam926x_time.c
arch/arm/mach-at91/at91sam9g45.c
arch/arm/mach-at91/at91sam9g45_devices.c
arch/arm/mach-at91/at91sam9rl.c
arch/arm/mach-at91/at91sam9rl_devices.c
arch/arm/mach-at91/board-1arm.c
arch/arm/mach-at91/board-afeb-9260v1.c
arch/arm/mach-at91/board-cam60.c
arch/arm/mach-at91/board-cap9adk.c
arch/arm/mach-at91/board-carmeva.c
arch/arm/mach-at91/board-cpu9krea.c
arch/arm/mach-at91/board-cpuat91.c
arch/arm/mach-at91/board-csb337.c
arch/arm/mach-at91/board-csb637.c
arch/arm/mach-at91/board-dt.c
arch/arm/mach-at91/board-eb9200.c
arch/arm/mach-at91/board-ecbat91.c
arch/arm/mach-at91/board-eco920.c
arch/arm/mach-at91/board-flexibity.c
arch/arm/mach-at91/board-foxg20.c
arch/arm/mach-at91/board-gsia18s.c
arch/arm/mach-at91/board-kafa.c
arch/arm/mach-at91/board-kb9202.c
arch/arm/mach-at91/board-neocore926.c
arch/arm/mach-at91/board-pcontrol-g20.c
arch/arm/mach-at91/board-picotux200.c
arch/arm/mach-at91/board-qil-a9260.c
arch/arm/mach-at91/board-rm9200dk.c
arch/arm/mach-at91/board-rm9200ek.c
arch/arm/mach-at91/board-rsi-ews.c
arch/arm/mach-at91/board-sam9-l9260.c
arch/arm/mach-at91/board-sam9260ek.c
arch/arm/mach-at91/board-sam9261ek.c
arch/arm/mach-at91/board-sam9263ek.c
arch/arm/mach-at91/board-sam9g20ek.c
arch/arm/mach-at91/board-sam9m10g45ek.c
arch/arm/mach-at91/board-sam9rlek.c
arch/arm/mach-at91/board-snapper9260.c
arch/arm/mach-at91/board-stamp9g20.c
arch/arm/mach-at91/board-usb-a926x.c
arch/arm/mach-at91/board-yl-9200.c
arch/arm/mach-at91/generic.h
arch/arm/mach-at91/gpio.c
arch/arm/mach-at91/include/mach/at91_aic.h
arch/arm/mach-at91/include/mach/at91_dbgu.h
arch/arm/mach-at91/include/mach/at91_pit.h
arch/arm/mach-at91/include/mach/at91_rtc.h
arch/arm/mach-at91/include/mach/at91_shdwc.h
arch/arm/mach-at91/include/mach/at91cap9.h
arch/arm/mach-at91/include/mach/at91rm9200.h
arch/arm/mach-at91/include/mach/at91sam9260.h
arch/arm/mach-at91/include/mach/at91sam9261.h
arch/arm/mach-at91/include/mach/at91sam9263.h
arch/arm/mach-at91/include/mach/at91sam9_smc.h
arch/arm/mach-at91/include/mach/at91sam9g45.h
arch/arm/mach-at91/include/mach/at91sam9rl.h
arch/arm/mach-at91/include/mach/at91x40.h
arch/arm/mach-at91/include/mach/board.h
arch/arm/mach-at91/include/mach/debug-macro.S
arch/arm/mach-at91/include/mach/entry-macro.S
arch/arm/mach-at91/include/mach/gpio.h
arch/arm/mach-at91/include/mach/hardware.h
arch/arm/mach-at91/include/mach/irqs.h
arch/arm/mach-at91/include/mach/timex.h
arch/arm/mach-at91/include/mach/uncompress.h
arch/arm/mach-at91/irq.c
arch/arm/mach-at91/pm.c
arch/arm/mach-at91/sam9_smc.c
arch/arm/mach-at91/sam9_smc.h
arch/arm/mach-at91/setup.c
arch/arm/mach-at91/soc.h
arch/arm/mach-davinci/include/mach/dm646x.h
arch/arm/mach-exynos/common.c
arch/arm/mach-msm/Kconfig
arch/arm/mach-msm/include/mach/debug-macro.S
arch/arm/mach-msm/include/mach/msm_iomap-7x00.h
arch/arm/mach-msm/include/mach/msm_iomap-7x30.h
arch/arm/mach-msm/include/mach/msm_iomap-8960.h
arch/arm/mach-msm/include/mach/msm_iomap-8x50.h
arch/arm/mach-msm/include/mach/msm_iomap-8x60.h
arch/arm/mach-msm/include/mach/msm_iomap.h
arch/arm/mach-msm/include/mach/uncompress.h
arch/arm/mach-msm/io.c
arch/arm/mach-msm/platsmp.c
arch/arm/mach-picoxcell/Makefile
arch/arm/mach-picoxcell/common.c
arch/arm/mach-picoxcell/common.h
arch/arm/mach-picoxcell/include/mach/irqs.h
arch/arm/mach-picoxcell/include/mach/memory.h [deleted file]
arch/arm/mach-picoxcell/io.c [deleted file]
arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/include/mach/entry-macro.S
arch/arm/mach-tegra/irq.c
arch/arm/mach-u300/include/mach/memory.h [deleted file]
arch/arm/mach-u300/u300.c
arch/avr32/boards/atngw100/setup.c
arch/avr32/boards/atstk1000/atstk1002.c
arch/avr32/boards/favr-32/setup.c
arch/avr32/boards/hammerhead/setup.c
arch/avr32/boards/merisc/setup.c
arch/avr32/boards/mimc200/setup.c
arch/avr32/mach-at32ap/at32ap700x.c
arch/avr32/mach-at32ap/include/mach/board.h
drivers/ata/pata_at91.c
drivers/ide/at91_ide.c
drivers/media/video/davinci/vpif.h
drivers/media/video/davinci/vpif_capture.h
drivers/media/video/davinci/vpif_display.h
drivers/mmc/host/at91_mci.c
drivers/mtd/nand/atmel_nand.c
drivers/net/ethernet/cadence/at91_ether.c
drivers/net/ethernet/cadence/at91_ether.h
drivers/net/ethernet/cadence/macb.c
drivers/rtc/rtc-at91rm9200.c
drivers/usb/gadget/at91_udc.c
drivers/usb/host/ohci-at91.c
drivers/watchdog/at91sam9_wdt.c
drivers/watchdog/at91sam9_wdt.h
include/linux/platform_data/macb.h [new file with mode: 0644]
include/media/davinci/vpif_types.h [new file with mode: 0644]

index ba6bd97..0ae41c9 100644 (file)
@@ -5111,6 +5111,15 @@ L:       linux-mtd@lists.infradead.org
 S:     Maintained
 F:     drivers/mtd/devices/phram.c
 
+PICOXCELL SUPPORT
+M:     Jamie Iles <jamie@jamieiles.com>
+L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+T:     git git://github.com/jamieiles/linux-2.6-ji.git
+S:     Supported
+F:     arch/arm/mach-picoxcell
+F:     drivers/*/picoxcell*
+F:     drivers/*/*/picoxcell*
+
 PIN CONTROL SUBSYSTEM
 M:     Linus Walleij <linus.walleij@linaro.org>
 S:     Maintained
index f72e170..3cddfd8 100644 (file)
@@ -658,6 +658,7 @@ config ARCH_PICOXCELL
        select HAVE_SCHED_CLOCK
        select HAVE_TCM
        select NO_IOPORT
+       select SPARSE_IRQ
        select USE_OF
        help
          This enables support for systems based on the Picochip picoXcell
@@ -892,7 +893,6 @@ config ARCH_U300
        select HAVE_MACH_CLKDEV
        select GENERIC_GPIO
        select ARCH_REQUIRE_GPIOLIB
-       select NEED_MACH_MEMORY_H
        help
          Support for ST-Ericsson U300 series mobile platforms.
 
index c5213e7..e0d236d 100644 (file)
@@ -100,6 +100,14 @@ choice
                  Note that the system will appear to hang during boot if there
                  is nothing connected to read from the DCC.
 
+       config AT91_DEBUG_LL_DBGU0
+               bool "Kernel low-level debugging on rm9200, 9260/9g20, 9261/9g10 and 9rl"
+               depends on HAVE_AT91_DBGU0
+
+       config AT91_DEBUG_LL_DBGU1
+               bool "Kernel low-level debugging on 9263, 9g45 and cap9"
+               depends on HAVE_AT91_DBGU1
+
        config DEBUG_FOOTBRIDGE_COM1
                bool "Kernel low-level debugging messages via footbridge 8250 at PCI COM1"
                depends on FOOTBRIDGE
@@ -247,6 +255,43 @@ choice
                  their output to the standard serial port on the RealView
                  PB1176 platform.
 
+       config DEBUG_MSM_UART1
+               bool "Kernel low-level debugging messages via MSM UART1"
+               depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the first serial port on MSM devices.
+
+       config DEBUG_MSM_UART2
+               bool "Kernel low-level debugging messages via MSM UART2"
+               depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the second serial port on MSM devices.
+
+       config DEBUG_MSM_UART3
+               bool "Kernel low-level debugging messages via MSM UART3"
+               depends on ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the third serial port on MSM devices.
+
+       config DEBUG_MSM8660_UART
+               bool "Kernel low-level debugging messages via MSM 8660 UART"
+               depends on ARCH_MSM8X60
+               select MSM_HAS_DEBUG_UART_HS
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the serial port on MSM 8660 devices.
+
+       config DEBUG_MSM8960_UART
+               bool "Kernel low-level debugging messages via MSM 8960 UART"
+               depends on ARCH_MSM8960
+               select MSM_HAS_DEBUG_UART_HS
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the serial port on MSM 8960 devices.
+
 endchoice
 
 config EARLY_PRINTK
diff --git a/arch/arm/configs/pcontrol_g20_defconfig b/arch/arm/configs/pcontrol_g20_defconfig
deleted file mode 100644 (file)
index c75c9fc..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-CONFIG_EXPERIMENTAL=y
-CONFIG_CROSS_COMPILE="/opt/arm-2010q1/bin/arm-none-linux-gnueabi-"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_NAMESPACES=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_EXPERT=y
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_COMPAT_BRK is not set
-CONFIG_SLAB=y
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_LBDAF is not set
-# CONFIG_BLK_DEV_BSG is not set
-CONFIG_DEFAULT_DEADLINE=y
-CONFIG_ARCH_AT91=y
-CONFIG_ARCH_AT91SAM9G20=y
-CONFIG_MACH_PCONTROL_G20=y
-CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200 mem=128M mtdparts=atmel_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) root=/dev/mmcblk0p1 rootwait rw"
-CONFIG_VFP=y
-CONFIG_BINFMT_MISC=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_IPV6 is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_WIRELESS is not set
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_FW_LOADER is not set
-CONFIG_MTD=y
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHRAM=m
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_ATMEL=y
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_ATMEL_TCLIB=y
-CONFIG_EEPROM_AT24=m
-CONFIG_SCSI=m
-# CONFIG_SCSI_PROC_FS is not set
-CONFIG_BLK_DEV_SD=m
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_LOWLEVEL is not set
-CONFIG_NETDEVICES=y
-CONFIG_MACVLAN=m
-CONFIG_TUN=m
-CONFIG_SMSC_PHY=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-CONFIG_MACB=y
-CONFIG_SMSC911X=m
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_WLAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_MPPE=m
-CONFIG_INPUT_POLLDEV=y
-CONFIG_INPUT_SPARSEKMAP=y
-# CONFIG_INPUT_MOUSEDEV is not set
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_EVBUG=m
-# CONFIG_KEYBOARD_ATKBD is not set
-CONFIG_KEYBOARD_GPIO=m
-CONFIG_KEYBOARD_MATRIX=m
-# CONFIG_INPUT_MOUSE is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-# CONFIG_SERIO is not set
-# CONFIG_DEVKMEM is not set
-CONFIG_SERIAL_ATMEL=y
-CONFIG_SERIAL_ATMEL_CONSOLE=y
-CONFIG_SERIAL_MAX3100=m
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_HW_RANDOM is not set
-CONFIG_R3964=m
-CONFIG_I2C=m
-CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_HELPER_AUTO is not set
-CONFIG_I2C_GPIO=m
-CONFIG_SPI=y
-CONFIG_SPI_ATMEL=m
-CONFIG_SPI_SPIDEV=m
-CONFIG_GPIO_SYSFS=y
-CONFIG_W1=m
-CONFIG_W1_MASTER_GPIO=m
-CONFIG_W1_SLAVE_DS2431=m
-# CONFIG_HWMON is not set
-CONFIG_WATCHDOG=y
-CONFIG_AT91SAM9X_WATCHDOG=y
-# CONFIG_MFD_SUPPORT is not set
-# CONFIG_HID_SUPPORT is not set
-CONFIG_USB=y
-# CONFIG_USB_DEVICE_CLASS is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_STORAGE=m
-CONFIG_USB_LIBUSUAL=y
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_GADGET=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_G_HID=m
-CONFIG_MMC=y
-CONFIG_MMC_UNSAFE_RESUME=y
-CONFIG_MMC_ATMELMCI=y
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_GPIO=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_AT91SAM9=y
-CONFIG_AUXDISPLAY=y
-CONFIG_UIO=y
-CONFIG_UIO_PDRV=y
-CONFIG_STAGING=y
-# CONFIG_STAGING_EXCLUDE_BUILD is not set
-CONFIG_IIO=y
-CONFIG_EXT2_FS=y
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_VFAT_FS=y
-CONFIG_TMPFS=y
-CONFIG_JFFS2_FS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V4=y
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_850=y
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_15=y
-CONFIG_NLS_UTF8=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ANSI_CPRNG=y
-# CONFIG_CRYPTO_HW is not set
-CONFIG_CRC_CCITT=y
index d111c3e..4f991f2 100644 (file)
@@ -3,6 +3,12 @@ if ARCH_AT91
 config HAVE_AT91_DATAFLASH_CARD
        bool
 
+config HAVE_AT91_DBGU0
+       bool
+
+config HAVE_AT91_DBGU1
+       bool
+
 config HAVE_AT91_USART3
        bool
 
@@ -21,12 +27,14 @@ config ARCH_AT91RM9200
        bool "AT91RM9200"
        select CPU_ARM920T
        select GENERIC_CLOCKEVENTS
+       select HAVE_AT91_DBGU0
        select HAVE_AT91_USART3
 
 config ARCH_AT91SAM9260
        bool "AT91SAM9260 or AT91SAM9XE"
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
+       select HAVE_AT91_DBGU0
        select HAVE_AT91_USART3
        select HAVE_AT91_USART4
        select HAVE_AT91_USART5
@@ -37,11 +45,13 @@ config ARCH_AT91SAM9261
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
        select HAVE_FB_ATMEL
+       select HAVE_AT91_DBGU0
 
 config ARCH_AT91SAM9G10
        bool "AT91SAM9G10"
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
+       select HAVE_AT91_DBGU0
        select HAVE_FB_ATMEL
 
 config ARCH_AT91SAM9263
@@ -50,6 +60,7 @@ config ARCH_AT91SAM9263
        select GENERIC_CLOCKEVENTS
        select HAVE_FB_ATMEL
        select HAVE_NET_MACB
+       select HAVE_AT91_DBGU1
 
 config ARCH_AT91SAM9RL
        bool "AT91SAM9RL"
@@ -57,11 +68,13 @@ config ARCH_AT91SAM9RL
        select GENERIC_CLOCKEVENTS
        select HAVE_AT91_USART3
        select HAVE_FB_ATMEL
+       select HAVE_AT91_DBGU0
 
 config ARCH_AT91SAM9G20
        bool "AT91SAM9G20"
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
+       select HAVE_AT91_DBGU0
        select HAVE_AT91_USART3
        select HAVE_AT91_USART4
        select HAVE_AT91_USART5
@@ -74,6 +87,7 @@ config ARCH_AT91SAM9G45
        select HAVE_AT91_USART3
        select HAVE_FB_ATMEL
        select HAVE_NET_MACB
+       select HAVE_AT91_DBGU1
 
 config ARCH_AT91CAP9
        bool "AT91CAP9"
@@ -81,6 +95,7 @@ config ARCH_AT91CAP9
        select GENERIC_CLOCKEVENTS
        select HAVE_FB_ATMEL
        select HAVE_NET_MACB
+       select HAVE_AT91_DBGU1
 
 config ARCH_AT91X40
        bool "AT91x40"
@@ -510,8 +525,13 @@ config AT91_TIMER_HZ
 choice
        prompt "Select a UART for early kernel messages"
 
-config AT91_EARLY_DBGU
-       bool "DBGU"
+config AT91_EARLY_DBGU0
+       bool "DBGU on rm9200, 9260/9g20, 9261/9g10 and 9rl"
+       depends on HAVE_AT91_DBGU0
+
+config AT91_EARLY_DBGU1
+       bool "DBGU on 9263, 9g45 and cap9"
+       depends on HAVE_AT91_DBGU1
 
 config AT91_EARLY_USART0
        bool "USART0"
index 2937339..edb879a 100644 (file)
@@ -13,7 +13,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 #include <mach/at91cap9.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -137,7 +136,7 @@ static struct clk pwm_clk = {
        .type           = CLK_TYPE_PERIPHERAL,
 };
 static struct clk macb_clk = {
-       .name           = "macb_clk",
+       .name           = "pclk",
        .pmc_mask       = 1 << AT91CAP9_ID_EMAC,
        .type           = CLK_TYPE_PERIPHERAL,
 };
@@ -210,6 +209,8 @@ static struct clk *periph_clocks[] __initdata = {
 };
 
 static struct clk_lookup periph_clocks_lookups[] = {
+       /* One additional fake clock for macb_hclk */
+       CLKDEV_CON_ID("hclk", &macb_clk),
        CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
        CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
        CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk),
@@ -221,6 +222,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioABCD_clk),
+       CLKDEV_CON_ID("pioB", &pioABCD_clk),
+       CLKDEV_CON_ID("pioC", &pioABCD_clk),
+       CLKDEV_CON_ID("pioD", &pioABCD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -293,23 +298,19 @@ void __init at91cap9_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91cap9_gpio[] = {
+static struct at91_gpio_bank at91cap9_gpio[] __initdata = {
        {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOA,
-               .clock          = &pioABCD_clk,
+               .regbase        = AT91CAP9_BASE_PIOA,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOB,
-               .clock          = &pioABCD_clk,
+               .regbase        = AT91CAP9_BASE_PIOB,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOC,
-               .clock          = &pioABCD_clk,
+               .regbase        = AT91CAP9_BASE_PIOC,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOD,
-               .clock          = &pioABCD_clk,
+               .regbase        = AT91CAP9_BASE_PIOD,
        }
 };
 
@@ -318,12 +319,6 @@ static void at91cap9_restart(char mode, const char *cmd)
        at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
 }
 
-static void at91cap9_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91CAP9 processor initialization
  * -------------------------------------------------------------------- */
@@ -333,10 +328,16 @@ static void __init at91cap9_map_io(void)
        at91_init_sram(0, AT91CAP9_SRAM_BASE, AT91CAP9_SRAM_SIZE);
 }
 
+static void __init at91cap9_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91CAP9_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91CAP9_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91CAP9_BASE_SMC);
+}
+
 static void __init at91cap9_initialize(void)
 {
        arm_pm_restart = at91cap9_restart;
-       pm_power_off = at91cap9_poweroff;
        at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1);
 
        /* Register GPIO subsystem */
@@ -394,6 +395,7 @@ static unsigned int at91cap9_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91cap9_soc = {
        .map_io = at91cap9_map_io,
        .default_irq_priority = at91cap9_default_irq_priority,
+       .ioremap_registers = at91cap9_ioremap_registers,
        .register_clocks = at91cap9_register_clocks,
        .init = at91cap9_initialize,
 };
index adad70d..d298fb7 100644 (file)
@@ -76,7 +76,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
 
        /* Enable VBus control for UHP ports */
        for (i = 0; i < data->ports; i++) {
-               if (data->vbus_pin[i])
+               if (gpio_is_valid(data->vbus_pin[i]))
                        at91_set_gpio_output(data->vbus_pin[i], 0);
        }
 
@@ -179,7 +179,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data)
        usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep);
        memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));
 
-       if (data && data->vbus_pin > 0) {
+       if (data && gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
                usba_udc_data.pdata.vbus_pin = data->vbus_pin;
@@ -200,7 +200,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data) {}
 
 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
 static u64 eth_dmamask = DMA_BIT_MASK(32);
-static struct at91_eth_data eth_data;
+static struct macb_platform_data eth_data;
 
 static struct resource eth_resources[] = {
        [0] = {
@@ -227,12 +227,12 @@ static struct platform_device at91cap9_eth_device = {
        .num_resources  = ARRAY_SIZE(eth_resources),
 };
 
-void __init at91_add_device_eth(struct at91_eth_data *data)
+void __init at91_add_device_eth(struct macb_platform_data *data)
 {
        if (!data)
                return;
 
-       if (data->phy_irq_pin) {
+       if (gpio_is_valid(data->phy_irq_pin)) {
                at91_set_gpio_input(data->phy_irq_pin, 0);
                at91_set_deglitch(data->phy_irq_pin, 1);
        }
@@ -264,7 +264,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data)
        platform_device_register(&at91cap9_eth_device);
 }
 #else
-void __init at91_add_device_eth(struct at91_eth_data *data) {}
+void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
@@ -332,13 +332,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        if (mmc_id == 0) {              /* MCI0 */
@@ -398,8 +398,8 @@ static struct resource nand_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = AT91_BASE_SYS + AT91_ECC,
-               .end    = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
+               .start  = AT91CAP9_BASE_ECC,
+               .end    = AT91CAP9_BASE_ECC + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -425,15 +425,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        nand_data = *data;
@@ -670,8 +670,8 @@ static void __init at91_add_device_tc(void) { }
 
 static struct resource rtt_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT,
-               .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
+               .start  = AT91CAP9_BASE_RTT,
+               .end    = AT91CAP9_BASE_RTT + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -694,10 +694,19 @@ static void __init at91_add_device_rtt(void)
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91CAP9_BASE_WDT,
+               .end    = AT91CAP9_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91cap9_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -807,7 +816,7 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
        at91_set_A_periph(AT91_PIN_PA9, 0);     /* AC97RX */
 
        /* reset */
-       if (data->reset_pin)
+       if (gpio_is_valid(data->reset_pin))
                at91_set_gpio_output(data->reset_pin, 0);
 
        ac97_data = *data;
@@ -1021,8 +1030,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91CAP9_BASE_DBGU,
+               .end    = AT91CAP9_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 430a9fd..99c3174 100644 (file)
@@ -23,6 +23,7 @@
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 static struct map_desc at91rm9200_io_desc[] __initdata = {
        {
@@ -195,6 +196,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
+       CLKDEV_CON_ID("pioD", &pioD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -268,23 +273,19 @@ void __init at91rm9200_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91rm9200_gpio[] = {
+static struct at91_gpio_bank at91rm9200_gpio[] __initdata = {
        {
                .id             = AT91RM9200_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91RM9200_BASE_PIOA,
        }, {
                .id             = AT91RM9200_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91RM9200_BASE_PIOB,
        }, {
                .id             = AT91RM9200_ID_PIOC,
-               .offset         = AT91_PIOC,
-               .clock          = &pioC_clk,
+               .regbase        = AT91RM9200_BASE_PIOC,
        }, {
                .id             = AT91RM9200_ID_PIOD,
-               .offset         = AT91_PIOD,
-               .clock          = &pioD_clk,
+               .regbase        = AT91RM9200_BASE_PIOD,
        }
 };
 
@@ -307,6 +308,10 @@ static void __init at91rm9200_map_io(void)
        iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
 }
 
+static void __init at91rm9200_ioremap_registers(void)
+{
+}
+
 static void __init at91rm9200_initialize(void)
 {
        arm_pm_restart = at91rm9200_restart;
@@ -366,6 +371,7 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91rm9200_soc = {
        .map_io = at91rm9200_map_io,
        .default_irq_priority = at91rm9200_default_irq_priority,
+       .ioremap_registers = at91rm9200_ioremap_registers,
        .register_clocks = at91rm9200_register_clocks,
        .init = at91rm9200_initialize,
 };
index ad93068..18bacec 100644 (file)
@@ -114,11 +114,11 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
        if (!data)
                return;
 
-       if (data->vbus_pin) {
+       if (gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
        }
-       if (data->pullup_pin)
+       if (gpio_is_valid(data->pullup_pin))
                at91_set_gpio_output(data->pullup_pin, 0);
 
        udc_data = *data;
@@ -135,7 +135,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {}
 
 #if defined(CONFIG_ARM_AT91_ETHER) || defined(CONFIG_ARM_AT91_ETHER_MODULE)
 static u64 eth_dmamask = DMA_BIT_MASK(32);
-static struct at91_eth_data eth_data;
+static struct macb_platform_data eth_data;
 
 static struct resource eth_resources[] = {
        [0] = {
@@ -162,12 +162,12 @@ static struct platform_device at91rm9200_eth_device = {
        .num_resources  = ARRAY_SIZE(eth_resources),
 };
 
-void __init at91_add_device_eth(struct at91_eth_data *data)
+void __init at91_add_device_eth(struct macb_platform_data *data)
 {
        if (!data)
                return;
 
-       if (data->phy_irq_pin) {
+       if (gpio_is_valid(data->phy_irq_pin)) {
                at91_set_gpio_input(data->phy_irq_pin, 0);
                at91_set_deglitch(data->phy_irq_pin, 1);
        }
@@ -199,7 +199,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data)
        platform_device_register(&at91rm9200_eth_device);
 }
 #else
-void __init at91_add_device_eth(struct at91_eth_data *data) {}
+void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
@@ -260,7 +260,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
        );
 
        /* input/irq */
-       if (data->irq_pin) {
+       if (gpio_is_valid(data->irq_pin)) {
                at91_set_gpio_input(data->irq_pin, 1);
                at91_set_deglitch(data->irq_pin, 1);
        }
@@ -268,7 +268,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
        at91_set_deglitch(data->det_pin, 1);
 
        /* outputs, initially off */
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
        at91_set_gpio_output(data->rst_pin, 0);
 
@@ -328,13 +328,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        /* CLK */
@@ -419,15 +419,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        );
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        at91_set_A_periph(AT91_PIN_PC1, 0);             /* SMOE */
@@ -665,10 +665,24 @@ static void __init at91_add_device_tc(void) { }
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_RTC_DRV_AT91RM9200) || defined(CONFIG_RTC_DRV_AT91RM9200_MODULE)
+static struct resource rtc_resources[] = {
+       [0] = {
+               .start  = AT91RM9200_BASE_RTC,
+               .end    = AT91RM9200_BASE_RTC + SZ_256 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = AT91_ID_SYS,
+               .end    = AT91_ID_SYS,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
 static struct platform_device at91rm9200_rtc_device = {
        .name           = "at91_rtc",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = rtc_resources,
+       .num_resources  = ARRAY_SIZE(rtc_resources),
 };
 
 static void __init at91_add_device_rtc(void)
@@ -877,8 +891,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91RM9200_BASE_DBGU,
+               .end    = AT91RM9200_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 1dd69c8..a028cdf 100644 (file)
@@ -32,6 +32,8 @@ static unsigned long last_crtr;
 static u32 irqmask;
 static struct clock_event_device clkevt;
 
+#define RM9200_TIMER_LATCH     ((AT91_SLOW_CLOCK + HZ/2) / HZ)
+
 /*
  * The ST_CRTR is updated asynchronously to the master clock ... but
  * the updates as seen by the CPU don't seem to be strictly monotonic.
@@ -74,8 +76,8 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id)
        if (sr & AT91_ST_PITS) {
                u32     crtr = read_CRTR();
 
-               while (((crtr - last_crtr) & AT91_ST_CRTV) >= LATCH) {
-                       last_crtr += LATCH;
+               while (((crtr - last_crtr) & AT91_ST_CRTV) >= RM9200_TIMER_LATCH) {
+                       last_crtr += RM9200_TIMER_LATCH;
                        clkevt.event_handler(&clkevt);
                }
                return IRQ_HANDLED;
@@ -116,7 +118,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
        case CLOCK_EVT_MODE_PERIODIC:
                /* PIT for periodic irqs; fixed rate of 1/HZ */
                irqmask = AT91_ST_PITS;
-               at91_sys_write(AT91_ST_PIMR, LATCH);
+               at91_sys_write(AT91_ST_PIMR, RM9200_TIMER_LATCH);
                break;
        case CLOCK_EVT_MODE_ONESHOT:
                /* ALM for oneshot irqs, set by next_event()
index e76cd49..5e46e4a 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 #include <mach/at91sam9260.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -120,7 +119,7 @@ static struct clk ohci_clk = {
        .type           = CLK_TYPE_PERIPHERAL,
 };
 static struct clk macb_clk = {
-       .name           = "macb_clk",
+       .name           = "pclk",
        .pmc_mask       = 1 << AT91SAM9260_ID_EMAC,
        .type           = CLK_TYPE_PERIPHERAL,
 };
@@ -190,6 +189,8 @@ static struct clk *periph_clocks[] __initdata = {
 };
 
 static struct clk_lookup periph_clocks_lookups[] = {
+       /* One additional fake clock for macb_hclk */
+       CLKDEV_CON_ID("hclk", &macb_clk),
        CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
        CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
        CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
@@ -209,6 +210,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -270,28 +274,19 @@ void __init at91sam9260_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91sam9260_gpio[] = {
+static struct at91_gpio_bank at91sam9260_gpio[] __initdata = {
        {
                .id             = AT91SAM9260_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91SAM9260_BASE_PIOA,
        }, {
                .id             = AT91SAM9260_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91SAM9260_BASE_PIOB,
        }, {
                .id             = AT91SAM9260_ID_PIOC,
-               .offset         = AT91_PIOC,
-               .clock          = &pioC_clk,
+               .regbase        = AT91SAM9260_BASE_PIOC,
        }
 };
 
-static void at91sam9260_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91SAM9260 processor initialization
  * -------------------------------------------------------------------- */
@@ -325,10 +320,16 @@ static void __init at91sam9260_map_io(void)
        }
 }
 
+static void __init at91sam9260_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91SAM9260_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC);
+}
+
 static void __init at91sam9260_initialize(void)
 {
        arm_pm_restart = at91sam9_alt_restart;
-       pm_power_off = at91sam9260_poweroff;
        at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1)
                        | (1 << AT91SAM9260_ID_IRQ2);
 
@@ -381,6 +382,7 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91sam9260_soc = {
        .map_io = at91sam9260_map_io,
        .default_irq_priority = at91sam9260_default_irq_priority,
+       .ioremap_registers = at91sam9260_ioremap_registers,
        .register_clocks = at91sam9260_register_clocks,
        .init = at91sam9260_initialize,
 };
index 629fa97..642ccb6 100644 (file)
@@ -115,7 +115,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
        if (!data)
                return;
 
-       if (data->vbus_pin) {
+       if (gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
        }
@@ -136,7 +136,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {}
 
 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
 static u64 eth_dmamask = DMA_BIT_MASK(32);
-static struct at91_eth_data eth_data;
+static struct macb_platform_data eth_data;
 
 static struct resource eth_resources[] = {
        [0] = {
@@ -163,12 +163,12 @@ static struct platform_device at91sam9260_eth_device = {
        .num_resources  = ARRAY_SIZE(eth_resources),
 };
 
-void __init at91_add_device_eth(struct at91_eth_data *data)
+void __init at91_add_device_eth(struct macb_platform_data *data)
 {
        if (!data)
                return;
 
-       if (data->phy_irq_pin) {
+       if (gpio_is_valid(data->phy_irq_pin)) {
                at91_set_gpio_input(data->phy_irq_pin, 0);
                at91_set_deglitch(data->phy_irq_pin, 1);
        }
@@ -200,7 +200,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data)
        platform_device_register(&at91sam9260_eth_device);
 }
 #else
-void __init at91_add_device_eth(struct at91_eth_data *data) {}
+void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
@@ -243,13 +243,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        /* CLK */
@@ -330,11 +330,11 @@ void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
        for (i = 0; i < ATMCI_MAX_NR_SLOTS; i++) {
                if (data->slot[i].bus_width) {
                        /* input/irq */
-                       if (data->slot[i].detect_pin) {
+                       if (gpio_is_valid(data->slot[i].detect_pin)) {
                                at91_set_gpio_input(data->slot[i].detect_pin, 1);
                                at91_set_deglitch(data->slot[i].detect_pin, 1);
                        }
-                       if (data->slot[i].wp_pin)
+                       if (gpio_is_valid(data->slot[i].wp_pin))
                                at91_set_gpio_input(data->slot[i].wp_pin, 1);
 
                        switch (i) {
@@ -399,8 +399,8 @@ static struct resource nand_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = AT91_BASE_SYS + AT91_ECC,
-               .end    = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
+               .start  = AT91SAM9260_BASE_ECC,
+               .end    = AT91SAM9260_BASE_ECC + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -426,15 +426,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        nand_data = *data;
@@ -714,8 +714,8 @@ static void __init at91_add_device_tc(void) { }
 
 static struct resource rtt_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT,
-               .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
+               .start  = AT91SAM9260_BASE_RTT,
+               .end    = AT91SAM9260_BASE_RTT + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -738,10 +738,19 @@ static void __init at91_add_device_rtt(void)
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91SAM9260_BASE_WDT,
+               .end    = AT91SAM9260_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91sam9260_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -837,8 +846,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91SAM9260_BASE_DBGU,
+               .end    = AT91SAM9260_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
@@ -1281,17 +1290,17 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
 
        at91_sys_write(AT91_MATRIX_EBICSA, csa);
 
-       if (data->rst_pin) {
+       if (gpio_is_valid(data->rst_pin)) {
                at91_set_multi_drive(data->rst_pin, 0);
                at91_set_gpio_output(data->rst_pin, 1);
        }
 
-       if (data->irq_pin) {
+       if (gpio_is_valid(data->irq_pin)) {
                at91_set_gpio_input(data->irq_pin, 0);
                at91_set_deglitch(data->irq_pin, 1);
        }
 
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 0);
                at91_set_deglitch(data->det_pin, 1);
        }
index 19ac7c0..b85b9ea 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 #include <mach/at91sam9261.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -176,6 +175,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -251,28 +253,19 @@ void __init at91sam9261_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91sam9261_gpio[] = {
+static struct at91_gpio_bank at91sam9261_gpio[] __initdata = {
        {
                .id             = AT91SAM9261_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91SAM9261_BASE_PIOA,
        }, {
                .id             = AT91SAM9261_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91SAM9261_BASE_PIOB,
        }, {
                .id             = AT91SAM9261_ID_PIOC,
-               .offset         = AT91_PIOC,
-               .clock          = &pioC_clk,
+               .regbase        = AT91SAM9261_BASE_PIOC,
        }
 };
 
-static void at91sam9261_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91SAM9261 processor initialization
  * -------------------------------------------------------------------- */
@@ -285,10 +278,16 @@ static void __init at91sam9261_map_io(void)
                at91_init_sram(0, AT91SAM9261_SRAM_BASE, AT91SAM9261_SRAM_SIZE);
 }
 
+static void __init at91sam9261_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91SAM9261_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91SAM9261_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91SAM9261_BASE_SMC);
+}
+
 static void __init at91sam9261_initialize(void)
 {
        arm_pm_restart = at91sam9_alt_restart;
-       pm_power_off = at91sam9261_poweroff;
        at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1)
                        | (1 << AT91SAM9261_ID_IRQ2);
 
@@ -341,6 +340,7 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91sam9261_soc = {
        .map_io = at91sam9261_map_io,
        .default_irq_priority = at91sam9261_default_irq_priority,
+       .ioremap_registers = at91sam9261_ioremap_registers,
        .register_clocks = at91sam9261_register_clocks,
        .init = at91sam9261_initialize,
 };
index a178b58..fc59cbd 100644 (file)
@@ -118,7 +118,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
        if (!data)
                return;
 
-       if (data->vbus_pin) {
+       if (gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
        }
@@ -171,13 +171,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        /* CLK */
@@ -240,15 +240,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        at91_set_A_periph(AT91_PIN_PC0, 0);             /* NANDOE */
@@ -600,8 +600,8 @@ static void __init at91_add_device_tc(void) { }
 
 static struct resource rtt_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT,
-               .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
+               .start  = AT91SAM9261_BASE_RTT,
+               .end    = AT91SAM9261_BASE_RTT + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -624,10 +624,19 @@ static void __init at91_add_device_rtt(void)
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91SAM9261_BASE_WDT,
+               .end    = AT91SAM9261_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91sam9261_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -816,8 +825,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91SAM9261_BASE_DBGU,
+               .end    = AT91SAM9261_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 50d0163..79e3669 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 #include <mach/at91sam9263.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -118,7 +117,7 @@ static struct clk pwm_clk = {
        .type           = CLK_TYPE_PERIPHERAL,
 };
 static struct clk macb_clk = {
-       .name           = "macb_clk",
+       .name           = "pclk",
        .pmc_mask       = 1 << AT91SAM9263_ID_EMAC,
        .type           = CLK_TYPE_PERIPHERAL,
 };
@@ -182,6 +181,8 @@ static struct clk *periph_clocks[] __initdata = {
 };
 
 static struct clk_lookup periph_clocks_lookups[] = {
+       /* One additional fake clock for macb_hclk */
+       CLKDEV_CON_ID("hclk", &macb_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
        CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk),
@@ -191,6 +192,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioCDE_clk),
+       CLKDEV_CON_ID("pioD", &pioCDE_clk),
+       CLKDEV_CON_ID("pioE", &pioCDE_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -263,36 +269,25 @@ void __init at91sam9263_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91sam9263_gpio[] = {
+static struct at91_gpio_bank at91sam9263_gpio[] __initdata = {
        {
                .id             = AT91SAM9263_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91SAM9263_BASE_PIOA,
        }, {
                .id             = AT91SAM9263_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91SAM9263_BASE_PIOB,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOC,
-               .clock          = &pioCDE_clk,
+               .regbase        = AT91SAM9263_BASE_PIOC,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOD,
-               .clock          = &pioCDE_clk,
+               .regbase        = AT91SAM9263_BASE_PIOD,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOE,
-               .clock          = &pioCDE_clk,
+               .regbase        = AT91SAM9263_BASE_PIOE,
        }
 };
 
-static void at91sam9263_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91SAM9263 processor initialization
  * -------------------------------------------------------------------- */
@@ -303,10 +298,17 @@ static void __init at91sam9263_map_io(void)
        at91_init_sram(1, AT91SAM9263_SRAM1_BASE, AT91SAM9263_SRAM1_SIZE);
 }
 
+static void __init at91sam9263_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91SAM9263_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91SAM9263_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91SAM9263_BASE_SMC0);
+       at91sam9_ioremap_smc(1, AT91SAM9263_BASE_SMC1);
+}
+
 static void __init at91sam9263_initialize(void)
 {
        arm_pm_restart = at91sam9_alt_restart;
-       pm_power_off = at91sam9263_poweroff;
        at91_extern_irq = (1 << AT91SAM9263_ID_IRQ0) | (1 << AT91SAM9263_ID_IRQ1);
 
        /* Register GPIO subsystem */
@@ -358,6 +360,7 @@ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91sam9263_soc = {
        .map_io = at91sam9263_map_io,
        .default_irq_priority = at91sam9263_default_irq_priority,
+       .ioremap_registers = at91sam9263_ioremap_registers,
        .register_clocks = at91sam9263_register_clocks,
        .init = at91sam9263_initialize,
 };
index d5fbac9..7b46b27 100644 (file)
@@ -70,7 +70,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
 
        /* Enable VBus control for UHP ports */
        for (i = 0; i < data->ports; i++) {
-               if (data->vbus_pin[i])
+               if (gpio_is_valid(data->vbus_pin[i]))
                        at91_set_gpio_output(data->vbus_pin[i], 0);
        }
 
@@ -123,7 +123,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
        if (!data)
                return;
 
-       if (data->vbus_pin) {
+       if (gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
        }
@@ -144,7 +144,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {}
 
 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
 static u64 eth_dmamask = DMA_BIT_MASK(32);
-static struct at91_eth_data eth_data;
+static struct macb_platform_data eth_data;
 
 static struct resource eth_resources[] = {
        [0] = {
@@ -171,12 +171,12 @@ static struct platform_device at91sam9263_eth_device = {
        .num_resources  = ARRAY_SIZE(eth_resources),
 };
 
-void __init at91_add_device_eth(struct at91_eth_data *data)
+void __init at91_add_device_eth(struct macb_platform_data *data)
 {
        if (!data)
                return;
 
-       if (data->phy_irq_pin) {
+       if (gpio_is_valid(data->phy_irq_pin)) {
                at91_set_gpio_input(data->phy_irq_pin, 0);
                at91_set_deglitch(data->phy_irq_pin, 1);
        }
@@ -208,7 +208,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data)
        platform_device_register(&at91sam9263_eth_device);
 }
 #else
-void __init at91_add_device_eth(struct at91_eth_data *data) {}
+void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
@@ -276,13 +276,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        if (mmc_id == 0) {              /* MCI0 */
@@ -430,17 +430,17 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
        }
        at91_sys_write(AT91_MATRIX_EBI0CSA, ebi0_csa);
 
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
 
-       if (data->irq_pin) {
+       if (gpio_is_valid(data->irq_pin)) {
                at91_set_gpio_input(data->irq_pin, 1);
                at91_set_deglitch(data->irq_pin, 1);
        }
 
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                /* initially off */
                at91_set_gpio_output(data->vcc_pin, 0);
 
@@ -473,8 +473,8 @@ static struct resource nand_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = AT91_BASE_SYS + AT91_ECC0,
-               .end    = AT91_BASE_SYS + AT91_ECC0 + SZ_512 - 1,
+               .start  = AT91SAM9263_BASE_ECC0,
+               .end    = AT91SAM9263_BASE_ECC0 + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -500,15 +500,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        nand_data = *data;
@@ -749,7 +749,7 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
        at91_set_A_periph(AT91_PIN_PB3, 0);     /* AC97RX */
 
        /* reset */
-       if (data->reset_pin)
+       if (gpio_is_valid(data->reset_pin))
                at91_set_gpio_output(data->reset_pin, 0);
 
        ac97_data = *data;
@@ -956,8 +956,8 @@ static void __init at91_add_device_tc(void) { }
 
 static struct resource rtt0_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT0,
-               .end    = AT91_BASE_SYS + AT91_RTT0 + SZ_16 - 1,
+               .start  = AT91SAM9263_BASE_RTT0,
+               .end    = AT91SAM9263_BASE_RTT0 + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -971,8 +971,8 @@ static struct platform_device at91sam9263_rtt0_device = {
 
 static struct resource rtt1_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT1,
-               .end    = AT91_BASE_SYS + AT91_RTT1 + SZ_16 - 1,
+               .start  = AT91SAM9263_BASE_RTT1,
+               .end    = AT91SAM9263_BASE_RTT1 + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -996,10 +996,19 @@ static void __init at91_add_device_rtt(void)
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91SAM9263_BASE_WDT,
+               .end    = AT91SAM9263_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91sam9263_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -1196,8 +1205,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91SAM9263_BASE_DBGU,
+               .end    = AT91SAM9263_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 4ba8549..d89ead7 100644 (file)
 
 static u32 pit_cycle;          /* write-once */
 static u32 pit_cnt;            /* access only w/system irq blocked */
+static void __iomem *pit_base_addr __read_mostly;
 
+static inline unsigned int pit_read(unsigned int reg_offset)
+{
+       return __raw_readl(pit_base_addr + reg_offset);
+}
+
+static inline void pit_write(unsigned int reg_offset, unsigned long value)
+{
+       __raw_writel(value, pit_base_addr + reg_offset);
+}
 
 /*
  * Clocksource:  just a monotonic counter of MCK/16 cycles.
@@ -39,7 +49,7 @@ static cycle_t read_pit_clk(struct clocksource *cs)
 
        raw_local_irq_save(flags);
        elapsed = pit_cnt;
-       t = at91_sys_read(AT91_PIT_PIIR);
+       t = pit_read(AT91_PIT_PIIR);
        raw_local_irq_restore(flags);
 
        elapsed += PIT_PICNT(t) * pit_cycle;
@@ -64,8 +74,8 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
        switch (mode) {
        case CLOCK_EVT_MODE_PERIODIC:
                /* update clocksource counter */
-               pit_cnt += pit_cycle * PIT_PICNT(at91_sys_read(AT91_PIT_PIVR));
-               at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN
+               pit_cnt += pit_cycle * PIT_PICNT(pit_read(AT91_PIT_PIVR));
+               pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN
                                | AT91_PIT_PITIEN);
                break;
        case CLOCK_EVT_MODE_ONESHOT:
@@ -74,7 +84,7 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
        case CLOCK_EVT_MODE_SHUTDOWN:
        case CLOCK_EVT_MODE_UNUSED:
                /* disable irq, leaving the clocksource active */
-               at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
+               pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
                break;
        case CLOCK_EVT_MODE_RESUME:
                break;
@@ -103,11 +113,11 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
 
        /* The PIT interrupt may be disabled, and is shared */
        if ((pit_clkevt.mode == CLOCK_EVT_MODE_PERIODIC)
-                       && (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS)) {
+                       && (pit_read(AT91_PIT_SR) & AT91_PIT_PITS)) {
                unsigned nr_ticks;
 
                /* Get number of ticks performed before irq, and ack it */
-               nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR));
+               nr_ticks = PIT_PICNT(pit_read(AT91_PIT_PIVR));
                do {
                        pit_cnt += pit_cycle;
                        pit_clkevt.event_handler(&pit_clkevt);
@@ -129,14 +139,14 @@ static struct irqaction at91sam926x_pit_irq = {
 static void at91sam926x_pit_reset(void)
 {
        /* Disable timer and irqs */
-       at91_sys_write(AT91_PIT_MR, 0);
+       pit_write(AT91_PIT_MR, 0);
 
        /* Clear any pending interrupts, wait for PIT to stop counting */
-       while (PIT_CPIV(at91_sys_read(AT91_PIT_PIVR)) != 0)
+       while (PIT_CPIV(pit_read(AT91_PIT_PIVR)) != 0)
                cpu_relax();
 
        /* Start PIT but don't enable IRQ */
-       at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
+       pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
 }
 
 /*
@@ -178,7 +188,15 @@ static void __init at91sam926x_pit_init(void)
 static void at91sam926x_pit_suspend(void)
 {
        /* Disable timer */
-       at91_sys_write(AT91_PIT_MR, 0);
+       pit_write(AT91_PIT_MR, 0);
+}
+
+void __init at91sam926x_ioremap_pit(u32 addr)
+{
+       pit_base_addr = ioremap(addr, 16);
+
+       if (!pit_base_addr)
+               panic("Impossible to ioremap PIT\n");
 }
 
 struct sys_timer at91sam926x_timer = {
index ff21f7a..7032dd3 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 #include <linux/dma-mapping.h>
 
 #include <asm/irq.h>
 #include <mach/at91sam9g45.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 #include <mach/cpu.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -150,7 +149,7 @@ static struct clk ac97_clk = {
        .type           = CLK_TYPE_PERIPHERAL,
 };
 static struct clk macb_clk = {
-       .name           = "macb_clk",
+       .name           = "pclk",
        .pmc_mask       = 1 << AT91SAM9G45_ID_EMAC,
        .type           = CLK_TYPE_PERIPHERAL,
 };
@@ -209,6 +208,8 @@ static struct clk *periph_clocks[] __initdata = {
 };
 
 static struct clk_lookup periph_clocks_lookups[] = {
+       /* One additional fake clock for macb_hclk */
+       CLKDEV_CON_ID("hclk", &macb_clk),
        /* One additional fake clock for ohci */
        CLKDEV_CON_ID("ohci_clk", &uhphs_clk),
        CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk),
@@ -231,6 +232,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
+       CLKDEV_CON_ID("pioD", &pioDE_clk),
+       CLKDEV_CON_ID("pioE", &pioDE_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -293,27 +299,22 @@ void __init at91sam9g45_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91sam9g45_gpio[] = {
+static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = {
        {
                .id             = AT91SAM9G45_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91SAM9G45_BASE_PIOA,
        }, {
                .id             = AT91SAM9G45_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91SAM9G45_BASE_PIOB,
        }, {
                .id             = AT91SAM9G45_ID_PIOC,
-               .offset         = AT91_PIOC,
-               .clock          = &pioC_clk,
+               .regbase        = AT91SAM9G45_BASE_PIOC,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
-               .offset         = AT91_PIOD,
-               .clock          = &pioDE_clk,
+               .regbase        = AT91SAM9G45_BASE_PIOD,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
-               .offset         = AT91_PIOE,
-               .clock          = &pioDE_clk,
+               .regbase        = AT91SAM9G45_BASE_PIOE,
        }
 };
 
@@ -322,12 +323,6 @@ static void at91sam9g45_restart(char mode, const char *cmd)
        at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
 }
 
-static void at91sam9g45_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91SAM9G45 processor initialization
  * -------------------------------------------------------------------- */
@@ -338,10 +333,16 @@ static void __init at91sam9g45_map_io(void)
        init_consistent_dma_size(SZ_4M);
 }
 
+static void __init at91sam9g45_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91SAM9G45_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91SAM9G45_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91SAM9G45_BASE_SMC);
+}
+
 static void __init at91sam9g45_initialize(void)
 {
        arm_pm_restart = at91sam9g45_restart;
-       pm_power_off = at91sam9g45_poweroff;
        at91_extern_irq = (1 << AT91SAM9G45_ID_IRQ0);
 
        /* Register GPIO subsystem */
@@ -393,6 +394,7 @@ static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91sam9g45_soc = {
        .map_io = at91sam9g45_map_io,
        .default_irq_priority = at91sam9g45_default_irq_priority,
+       .ioremap_registers = at91sam9g45_ioremap_registers,
        .register_clocks = at91sam9g45_register_clocks,
        .init = at91sam9g45_initialize,
 };
index 09a16d6..b7582dd 100644 (file)
@@ -44,8 +44,8 @@ static struct at_dma_platform_data atdma_pdata = {
 
 static struct resource hdmac_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DMA,
-               .end    = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
+               .start  = AT91SAM9G45_BASE_DMA,
+               .end    = AT91SAM9G45_BASE_DMA + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
@@ -120,7 +120,7 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
 
        /* Enable VBus control for UHP ports */
        for (i = 0; i < data->ports; i++) {
-               if (data->vbus_pin[i])
+               if (gpio_is_valid(data->vbus_pin[i]))
                        at91_set_gpio_output(data->vbus_pin[i], 0);
        }
 
@@ -181,7 +181,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
 
        /* Enable VBus control for UHP ports */
        for (i = 0; i < data->ports; i++) {
-               if (data->vbus_pin[i])
+               if (gpio_is_valid(data->vbus_pin[i]))
                        at91_set_gpio_output(data->vbus_pin[i], 0);
        }
 
@@ -263,7 +263,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data)
        usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep);
        memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));
 
-       if (data && data->vbus_pin > 0) {
+       if (data && gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
                usba_udc_data.pdata.vbus_pin = data->vbus_pin;
@@ -284,7 +284,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data) {}
 
 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
 static u64 eth_dmamask = DMA_BIT_MASK(32);
-static struct at91_eth_data eth_data;
+static struct macb_platform_data eth_data;
 
 static struct resource eth_resources[] = {
        [0] = {
@@ -311,12 +311,12 @@ static struct platform_device at91sam9g45_eth_device = {
        .num_resources  = ARRAY_SIZE(eth_resources),
 };
 
-void __init at91_add_device_eth(struct at91_eth_data *data)
+void __init at91_add_device_eth(struct macb_platform_data *data)
 {
        if (!data)
                return;
 
-       if (data->phy_irq_pin) {
+       if (gpio_is_valid(data->phy_irq_pin)) {
                at91_set_gpio_input(data->phy_irq_pin, 0);
                at91_set_deglitch(data->phy_irq_pin, 1);
        }
@@ -348,7 +348,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data)
        platform_device_register(&at91sam9g45_eth_device);
 }
 #else
-void __init at91_add_device_eth(struct at91_eth_data *data) {}
+void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
@@ -449,11 +449,11 @@ void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
 
 
        /* input/irq */
-       if (data->slot[0].detect_pin) {
+       if (gpio_is_valid(data->slot[0].detect_pin)) {
                at91_set_gpio_input(data->slot[0].detect_pin, 1);
                at91_set_deglitch(data->slot[0].detect_pin, 1);
        }
-       if (data->slot[0].wp_pin)
+       if (gpio_is_valid(data->slot[0].wp_pin))
                at91_set_gpio_input(data->slot[0].wp_pin, 1);
 
        if (mmc_id == 0) {              /* MCI0 */
@@ -529,8 +529,8 @@ static struct resource nand_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = AT91_BASE_SYS + AT91_ECC,
-               .end    = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
+               .start  = AT91SAM9G45_BASE_ECC,
+               .end    = AT91SAM9G45_BASE_ECC + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -556,15 +556,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        nand_data = *data;
@@ -859,7 +859,7 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
        at91_set_A_periph(AT91_PIN_PD6, 0);     /* AC97RX */
 
        /* reset */
-       if (data->reset_pin)
+       if (gpio_is_valid(data->reset_pin))
                at91_set_gpio_output(data->reset_pin, 0);
 
        ac97_data = *data;
@@ -1009,10 +1009,24 @@ static void __init at91_add_device_tc(void) { }
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_RTC_DRV_AT91RM9200) || defined(CONFIG_RTC_DRV_AT91RM9200_MODULE)
+static struct resource rtc_resources[] = {
+       [0] = {
+               .start  = AT91SAM9G45_BASE_RTC,
+               .end    = AT91SAM9G45_BASE_RTC + SZ_256 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = AT91_ID_SYS,
+               .end    = AT91_ID_SYS,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
 static struct platform_device at91sam9g45_rtc_device = {
        .name           = "at91_rtc",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = rtc_resources,
+       .num_resources  = ARRAY_SIZE(rtc_resources),
 };
 
 static void __init at91_add_device_rtc(void)
@@ -1081,8 +1095,8 @@ void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data) {}
 
 static struct resource rtt_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT,
-               .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
+               .start  = AT91SAM9G45_BASE_RTT,
+               .end    = AT91SAM9G45_BASE_RTT + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -1133,10 +1147,19 @@ static void __init at91_add_device_trng(void) {}
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91SAM9G45_BASE_WDT,
+               .end    = AT91SAM9G45_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91sam9g45_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -1332,8 +1355,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91SAM9G45_BASE_DBGU,
+               .end    = AT91SAM9G45_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 61cbb46..d6bcb1d 100644 (file)
@@ -10,7 +10,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/pm.h>
 
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 #include <mach/at91sam9rl.h>
 #include <mach/at91_pmc.h>
 #include <mach/at91_rstc.h>
-#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
 #include "clock.h"
+#include "sam9_smc.h"
 
 /* --------------------------------------------------------------------
  *  Clocks
@@ -184,6 +183,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
+       CLKDEV_CON_ID("pioD", &pioD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -243,32 +246,22 @@ void __init at91sam9rl_set_console_clock(int id)
  *  GPIO
  * -------------------------------------------------------------------- */
 
-static struct at91_gpio_bank at91sam9rl_gpio[] = {
+static struct at91_gpio_bank at91sam9rl_gpio[] __initdata = {
        {
                .id             = AT91SAM9RL_ID_PIOA,
-               .offset         = AT91_PIOA,
-               .clock          = &pioA_clk,
+               .regbase        = AT91SAM9RL_BASE_PIOA,
        }, {
                .id             = AT91SAM9RL_ID_PIOB,
-               .offset         = AT91_PIOB,
-               .clock          = &pioB_clk,
+               .regbase        = AT91SAM9RL_BASE_PIOB,
        }, {
                .id             = AT91SAM9RL_ID_PIOC,
-               .offset         = AT91_PIOC,
-               .clock          = &pioC_clk,
+               .regbase        = AT91SAM9RL_BASE_PIOC,
        }, {
                .id             = AT91SAM9RL_ID_PIOD,
-               .offset         = AT91_PIOD,
-               .clock          = &pioD_clk,
+               .regbase        = AT91SAM9RL_BASE_PIOD,
        }
 };
 
-static void at91sam9rl_poweroff(void)
-{
-       at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
-}
-
-
 /* --------------------------------------------------------------------
  *  AT91SAM9RL processor initialization
  * -------------------------------------------------------------------- */
@@ -290,10 +283,16 @@ static void __init at91sam9rl_map_io(void)
        at91_init_sram(0, AT91SAM9RL_SRAM_BASE, sram_size);
 }
 
+static void __init at91sam9rl_ioremap_registers(void)
+{
+       at91_ioremap_shdwc(AT91SAM9RL_BASE_SHDWC);
+       at91sam926x_ioremap_pit(AT91SAM9RL_BASE_PIT);
+       at91sam9_ioremap_smc(0, AT91SAM9RL_BASE_SMC);
+}
+
 static void __init at91sam9rl_initialize(void)
 {
        arm_pm_restart = at91sam9_alt_restart;
-       pm_power_off = at91sam9rl_poweroff;
        at91_extern_irq = (1 << AT91SAM9RL_ID_IRQ0);
 
        /* Register GPIO subsystem */
@@ -345,6 +344,7 @@ static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = {
 struct at91_init_soc __initdata at91sam9rl_soc = {
        .map_io = at91sam9rl_map_io,
        .default_irq_priority = at91sam9rl_default_irq_priority,
+       .ioremap_registers = at91sam9rl_ioremap_registers,
        .register_clocks = at91sam9rl_register_clocks,
        .init = at91sam9rl_initialize,
 };
index 628eb56..61908dc 100644 (file)
@@ -39,8 +39,8 @@ static struct at_dma_platform_data atdma_pdata = {
 
 static struct resource hdmac_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DMA,
-               .end    = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
+               .start  = AT91SAM9RL_BASE_DMA,
+               .end    = AT91SAM9RL_BASE_DMA + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [2] = {
@@ -147,7 +147,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data)
        usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep);
        memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));
 
-       if (data && data->vbus_pin > 0) {
+       if (data && gpio_is_valid(data->vbus_pin)) {
                at91_set_gpio_input(data->vbus_pin, 0);
                at91_set_deglitch(data->vbus_pin, 1);
                usba_udc_data.pdata.vbus_pin = data->vbus_pin;
@@ -201,13 +201,13 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
                return;
 
        /* input/irq */
-       if (data->det_pin) {
+       if (gpio_is_valid(data->det_pin)) {
                at91_set_gpio_input(data->det_pin, 1);
                at91_set_deglitch(data->det_pin, 1);
        }
-       if (data->wp_pin)
+       if (gpio_is_valid(data->wp_pin))
                at91_set_gpio_input(data->wp_pin, 1);
-       if (data->vcc_pin)
+       if (gpio_is_valid(data->vcc_pin))
                at91_set_gpio_output(data->vcc_pin, 0);
 
        /* CLK */
@@ -248,8 +248,8 @@ static struct resource nand_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = AT91_BASE_SYS + AT91_ECC,
-               .end    = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
+               .start  = AT91SAM9RL_BASE_ECC,
+               .end    = AT91SAM9RL_BASE_ECC + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -275,15 +275,15 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
 
        /* enable pin */
-       if (data->enable_pin)
+       if (gpio_is_valid(data->enable_pin))
                at91_set_gpio_output(data->enable_pin, 1);
 
        /* ready/busy pin */
-       if (data->rdy_pin)
+       if (gpio_is_valid(data->rdy_pin))
                at91_set_gpio_input(data->rdy_pin, 1);
 
        /* card detect pin */
-       if (data->det_pin)
+       if (gpio_is_valid(data->det_pin))
                at91_set_gpio_input(data->det_pin, 1);
 
        at91_set_A_periph(AT91_PIN_PB4, 0);             /* NANDOE */
@@ -483,7 +483,7 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
        at91_set_A_periph(AT91_PIN_PD4, 0);     /* AC97RX */
 
        /* reset */
-       if (data->reset_pin)
+       if (gpio_is_valid(data->reset_pin))
                at91_set_gpio_output(data->reset_pin, 0);
 
        ac97_data = *data;
@@ -685,8 +685,8 @@ static void __init at91_add_device_rtc(void) {}
 
 static struct resource rtt_resources[] = {
        {
-               .start  = AT91_BASE_SYS + AT91_RTT,
-               .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
+               .start  = AT91SAM9RL_BASE_RTT,
+               .end    = AT91SAM9RL_BASE_RTT + SZ_16 - 1,
                .flags  = IORESOURCE_MEM,
        }
 };
@@ -709,10 +709,19 @@ static void __init at91_add_device_rtt(void)
  * -------------------------------------------------------------------- */
 
 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
+static struct resource wdt_resources[] = {
+       {
+               .start  = AT91SAM9RL_BASE_WDT,
+               .end    = AT91SAM9RL_BASE_WDT + SZ_16 - 1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct platform_device at91sam9rl_wdt_device = {
        .name           = "at91_wdt",
        .id             = -1,
-       .num_resources  = 0,
+       .resource       = wdt_resources,
+       .num_resources  = ARRAY_SIZE(wdt_resources),
 };
 
 static void __init at91_add_device_watchdog(void)
@@ -908,8 +917,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
 #if defined(CONFIG_SERIAL_ATMEL)
 static struct resource dbgu_resources[] = {
        [0] = {
-               .start  = AT91_BASE_SYS + AT91_DBGU,
-               .end    = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
+               .start  = AT91SAM9RL_BASE_DBGU,
+               .end    = AT91SAM9RL_BASE_DBGU + SZ_512 - 1,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
index 367d5cd..2628384 100644 (file)
@@ -63,13 +63,15 @@ static void __init onearm_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata onearm_eth_data = {
+static struct macb_platform_data __initdata onearm_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata onearm_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata onearm_udc_data = {
index 4282d96..3bb4069 100644 (file)
@@ -75,6 +75,8 @@ static void __init afeb9260_init_early(void)
  */
 static struct at91_usbh_data __initdata afeb9260_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -82,7 +84,7 @@ static struct at91_usbh_data __initdata afeb9260_usbh_data = {
  */
 static struct at91_udc_data __initdata afeb9260_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -103,7 +105,7 @@ static struct spi_board_info afeb9260_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata afeb9260_macb_data = {
+static struct macb_platform_data __initdata afeb9260_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA9,
        .is_rmii        = 0,
 };
@@ -138,6 +140,7 @@ static struct atmel_nand_data __initdata afeb9260_nand_data = {
        .bus_width_16   = 0,
        .parts          = afeb9260_nand_partition,
        .num_parts      = ARRAY_SIZE(afeb9260_nand_partition),
+       .det_pin        = -EINVAL,
 };
 
 
@@ -149,6 +152,7 @@ static struct at91_mmc_data __initdata afeb9260_mmc_data = {
        .wp_pin         = AT91_PIN_PC4,
        .slot_b         = 1,
        .wire4          = 1,
+       .vcc_pin        = -EINVAL,
 };
 
 
@@ -169,6 +173,8 @@ static struct i2c_board_info __initdata afeb9260_i2c_devices[] = {
 static struct at91_cf_data afeb9260_cf_data = {
        .chipselect = 4,
        .irq_pin    = AT91_PIN_PA6,
+       .det_pin        = -EINVAL,
+       .vcc_pin        = -EINVAL,
        .rst_pin    = AT91_PIN_PA7,
        .flags      = AT91_CF_TRUE_IDE,
 };
index f90cfb3..8510e9e 100644 (file)
@@ -62,6 +62,8 @@ static void __init cam60_init_early(void)
  */
 static struct at91_usbh_data __initdata cam60_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 
@@ -115,7 +117,7 @@ static struct spi_board_info cam60_spi_devices[] __initdata = {
 /*
  * MACB Ethernet device
  */
-static struct __initdata at91_eth_data cam60_macb_data = {
+static struct __initdata macb_platform_data cam60_macb_data = {
        .phy_irq_pin    = AT91_PIN_PB5,
        .is_rmii        = 0,
 };
@@ -135,7 +137,7 @@ static struct mtd_partition __initdata cam60_nand_partition[] = {
 static struct atmel_nand_data __initdata cam60_nand_data = {
        .ale            = 21,
        .cle            = 22,
-       // .det_pin     = ... not there
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PA9,
        .enable_pin     = AT91_PIN_PA7,
        .parts          = cam60_nand_partition,
@@ -163,7 +165,7 @@ static struct sam9_smc_config __initdata cam60_nand_smc_config = {
 static void __init cam60_add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &cam60_nand_smc_config);
+       sam9_smc_configure(0, 3, &cam60_nand_smc_config);
 
        at91_add_device_nand(&cam60_nand_data);
 }
index 5dffd3b..ac3de4f 100644 (file)
@@ -70,6 +70,8 @@ static void __init cap9adk_init_early(void)
  */
 static struct at91_usbh_data __initdata cap9adk_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -144,16 +146,17 @@ static struct spi_board_info cap9adk_spi_devices[] = {
  */
 static struct at91_mmc_data __initdata cap9adk_mmc_data = {
        .wire4          = 1,
-//     .det_pin        = ... not connected
-//     .wp_pin         = ... not connected
-//     .vcc_pin        = ... not connected
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata cap9adk_macb_data = {
+static struct macb_platform_data __initdata cap9adk_macb_data = {
+       .phy_irq_pin    = -EINVAL,
        .is_rmii        = 1,
 };
 
@@ -172,8 +175,8 @@ static struct mtd_partition __initdata cap9adk_nand_partitions[] = {
 static struct atmel_nand_data __initdata cap9adk_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
-//     .rdy_pin        = ... not connected
+       .det_pin        = -EINVAL,
+       .rdy_pin        = -EINVAL,
        .enable_pin     = AT91_PIN_PD15,
        .parts          = cap9adk_nand_partitions,
        .num_parts      = ARRAY_SIZE(cap9adk_nand_partitions),
@@ -212,7 +215,7 @@ static void __init cap9adk_add_device_nand(void)
                cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &cap9adk_nand_smc_config);
+       sam9_smc_configure(0, 3, &cap9adk_nand_smc_config);
 
        at91_add_device_nand(&cap9adk_nand_data);
 }
@@ -282,7 +285,7 @@ static __init void cap9adk_add_device_nor(void)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V);
 
        /* configure chip-select 0 (NOR) */
-       sam9_smc_configure(0, &cap9adk_nor_smc_config);
+       sam9_smc_configure(0, 0, &cap9adk_nor_smc_config);
 
        platform_device_register(&cap9adk_nor_flash);
 }
@@ -351,7 +354,7 @@ static struct atmel_lcdfb_info __initdata cap9adk_lcdc_data;
  * AC97
  */
 static struct ac97c_platform_data cap9adk_ac97_data = {
-//     .reset_pin      = ... not connected
+       .reset_pin      = -EINVAL,
 };
 
 
index 774c87f..59d9cf9 100644 (file)
@@ -57,13 +57,15 @@ static void __init carmeva_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata carmeva_eth_data = {
+static struct macb_platform_data __initdata carmeva_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata carmeva_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata carmeva_udc_data = {
@@ -75,8 +77,8 @@ static struct at91_udc_data __initdata carmeva_udc_data = {
 // static struct at91_cf_data __initdata carmeva_cf_data = {
 //     .det_pin        = AT91_PIN_PB0,
 //     .rst_pin        = AT91_PIN_PC5,
-       // .irq_pin     = ... not connected
-       // .vcc_pin     = ... always powered
+       // .irq_pin     = -EINVAL,
+       // .vcc_pin     = -EINVAL,
 // };
 
 static struct at91_mmc_data __initdata carmeva_mmc_data = {
@@ -84,6 +86,7 @@ static struct at91_mmc_data __initdata carmeva_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PB10,
        .wp_pin         = AT91_PIN_PC14,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct spi_board_info carmeva_spi_devices[] = {
index fc885a4..9ab3d1e 100644 (file)
@@ -86,6 +86,8 @@ static void __init cpu9krea_init_early(void)
  */
 static struct at91_usbh_data __initdata cpu9krea_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -93,13 +95,14 @@ static struct at91_usbh_data __initdata cpu9krea_usbh_data = {
  */
 static struct at91_udc_data __initdata cpu9krea_udc_data = {
        .vbus_pin       = AT91_PIN_PC8,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata cpu9krea_macb_data = {
+static struct macb_platform_data __initdata cpu9krea_macb_data = {
+       .phy_irq_pin    = -EINVAL,
        .is_rmii        = 1,
 };
 
@@ -112,6 +115,7 @@ static struct atmel_nand_data __initdata cpu9krea_nand_data = {
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
        .bus_width_16   = 0,
+       .det_pin        = -EINVAL,
 };
 
 #ifdef CONFIG_MACH_CPU9260
@@ -156,7 +160,7 @@ static struct sam9_smc_config __initdata cpu9krea_nand_smc_config = {
 
 static void __init cpu9krea_add_device_nand(void)
 {
-       sam9_smc_configure(3, &cpu9krea_nand_smc_config);
+       sam9_smc_configure(0, 3, &cpu9krea_nand_smc_config);
        at91_add_device_nand(&cpu9krea_nand_data);
 }
 
@@ -238,7 +242,7 @@ static __init void cpu9krea_add_device_nor(void)
        at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_VDDIOMSEL_3_3V);
 
        /* configure chip-select 0 (NOR) */
-       sam9_smc_configure(0, &cpu9krea_nor_smc_config);
+       sam9_smc_configure(0, 0, &cpu9krea_nor_smc_config);
 
        platform_device_register(&cpu9krea_nor_flash);
 }
@@ -337,6 +341,8 @@ static struct at91_mmc_data __initdata cpu9krea_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
        .det_pin        = AT91_PIN_PA29,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 static void __init cpu9krea_board_init(void)
index d35e65b..368e142 100644 (file)
@@ -82,12 +82,15 @@ static void __init cpuat91_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata cpuat91_eth_data = {
+static struct macb_platform_data __initdata cpuat91_eth_data = {
+       .phy_irq_pin    = -EINVAL,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata cpuat91_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata cpuat91_udc_data = {
@@ -98,6 +101,8 @@ static struct at91_udc_data __initdata cpuat91_udc_data = {
 static struct at91_mmc_data __initdata cpuat91_mmc_data = {
        .det_pin        = AT91_PIN_PC2,
        .wire4          = 1,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct physmap_flash_data cpuat91_flash_data = {
index c393666..1a1547b 100644 (file)
@@ -58,18 +58,20 @@ static void __init csb337_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata csb337_eth_data = {
+static struct macb_platform_data __initdata csb337_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC2,
        .is_rmii        = 0,
 };
 
 static struct at91_usbh_data __initdata csb337_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata csb337_udc_data = {
-       // this has no VBUS sensing pin
        .pullup_pin     = AT91_PIN_PA24,
+       .vbus_pin       = -EINVAL,
 };
 
 static struct i2c_board_info __initdata csb337_i2c_devices[] = {
@@ -98,6 +100,7 @@ static struct at91_mmc_data __initdata csb337_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
        .wp_pin         = AT91_PIN_PD6,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct spi_board_info csb337_spi_devices[] = {
index 586100e..f650bf3 100644 (file)
@@ -52,13 +52,15 @@ static void __init csb637_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata csb637_eth_data = {
+static struct macb_platform_data __initdata csb637_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC0,
        .is_rmii        = 0,
 };
 
 static struct at91_usbh_data __initdata csb637_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata csb637_udc_data = {
index 0b7d327..bb6b434 100644 (file)
@@ -50,6 +50,7 @@ static void __init ek_init_early(void)
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC8,
        .enable_pin     = AT91_PIN_PC14,
 };
@@ -82,7 +83,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
index 45db7a3..d302ca3 100644 (file)
@@ -60,13 +60,15 @@ static void __init eb9200_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata eb9200_eth_data = {
+static struct macb_platform_data __initdata eb9200_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata eb9200_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata eb9200_udc_data = {
@@ -75,15 +77,18 @@ static struct at91_udc_data __initdata eb9200_udc_data = {
 };
 
 static struct at91_cf_data __initdata eb9200_cf_data = {
+       .irq_pin        = -EINVAL,
        .det_pin        = AT91_PIN_PB0,
+       .vcc_pin        = -EINVAL,
        .rst_pin        = AT91_PIN_PC5,
-       // .irq_pin     = ... not connected
-       // .vcc_pin     = ... always powered
 };
 
 static struct at91_mmc_data __initdata eb9200_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct i2c_board_info __initdata eb9200_i2c_devices[] = {
index 2f9c16d..69966ce 100644 (file)
@@ -64,18 +64,23 @@ static void __init ecb_at91init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata ecb_at91eth_data = {
+static struct macb_platform_data __initdata ecb_at91eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 0,
 };
 
 static struct at91_usbh_data __initdata ecb_at91usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_mmc_data __initdata ecb_at91mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 
index 8252c72..07ef35b 100644 (file)
@@ -47,13 +47,15 @@ static void __init eco920_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata eco920_eth_data = {
+static struct macb_platform_data __initdata eco920_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC2,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata eco920_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata eco920_udc_data = {
@@ -64,6 +66,9 @@ static struct at91_udc_data __initdata eco920_udc_data = {
 static struct at91_mmc_data __initdata eco920_mmc_data = {
        .slot_b         = 0,
        .wire4          = 0,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct physmap_flash_data eco920_flash_data = {
index 4c3f65d..eec02cd 100644 (file)
@@ -52,12 +52,14 @@ static void __init flexibity_init_early(void)
 /* USB Host port */
 static struct at91_usbh_data __initdata flexibity_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /* USB Device port */
 static struct at91_udc_data __initdata flexibity_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 /* SPI devices */
@@ -76,6 +78,7 @@ static struct at91_mmc_data __initdata flexibity_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PC9,
        .wp_pin         = AT91_PIN_PC4,
+       .vcc_pin        = -EINVAL,
 };
 
 /* LEDs */
index f27d1a7..caf017f 100644 (file)
@@ -106,6 +106,8 @@ static void __init foxg20_init_early(void)
  */
 static struct at91_usbh_data __initdata foxg20_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -113,7 +115,7 @@ static struct at91_usbh_data __initdata foxg20_usbh_data = {
  */
 static struct at91_udc_data __initdata foxg20_udc_data = {
        .vbus_pin       = AT91_PIN_PC6,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -135,7 +137,7 @@ static struct spi_board_info foxg20_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata foxg20_macb_data = {
+static struct macb_platform_data __initdata foxg20_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA7,
        .is_rmii        = 1,
 };
@@ -147,6 +149,9 @@ static struct at91_eth_data __initdata foxg20_macb_data = {
 static struct at91_mmc_data __initdata foxg20_mmc_data = {
        .slot_b         = 1,
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 
index 2e95949..230e719 100644 (file)
@@ -80,6 +80,8 @@ static void __init gsia18s_init_early(void)
  */
 static struct at91_usbh_data __initdata usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -87,13 +89,13 @@ static struct at91_usbh_data __initdata usbh_data = {
  */
 static struct at91_udc_data __initdata udc_data = {
        .vbus_pin       = AT91_PIN_PA22,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata macb_data = {
+static struct macb_platform_data __initdata macb_data = {
        .phy_irq_pin    = AT91_PIN_PA28,
        .is_rmii        = 1,
 };
@@ -530,6 +532,7 @@ static struct i2c_board_info __initdata gsia18s_i2c_devices[] = {
 static struct at91_cf_data __initdata gsia18s_cf1_data = {
        .irq_pin        = AT91_PIN_PA27,
        .det_pin        = AT91_PIN_PB30,
+       .vcc_pin        = -EINVAL,
        .rst_pin        = AT91_PIN_PB31,
        .chipselect     = 5,
        .flags          = AT91_CF_TRUE_IDE,
index 3bae73e..efde1b2 100644 (file)
@@ -61,13 +61,15 @@ static void __init kafa_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata kafa_eth_data = {
+static struct macb_platform_data __initdata kafa_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 0,
 };
 
 static struct at91_usbh_data __initdata kafa_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata kafa_udc_data = {
index e61351f..d75a4a2 100644 (file)
@@ -69,13 +69,15 @@ static void __init kb9202_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata kb9202_eth_data = {
+static struct macb_platform_data __initdata kb9202_eth_data = {
        .phy_irq_pin    = AT91_PIN_PB29,
        .is_rmii        = 0,
 };
 
 static struct at91_usbh_data __initdata kb9202_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata kb9202_udc_data = {
@@ -87,6 +89,8 @@ static struct at91_mmc_data __initdata kb9202_mmc_data = {
        .det_pin        = AT91_PIN_PB2,
        .slot_b         = 0,
        .wire4          = 1,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 static struct mtd_partition __initdata kb9202_nand_partition[] = {
@@ -100,7 +104,7 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = {
 static struct atmel_nand_data __initdata kb9202_nand_data = {
        .ale            = 22,
        .cle            = 21,
-       // .det_pin     = ... not there
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC29,
        .enable_pin     = AT91_PIN_PC28,
        .parts          = kb9202_nand_partition,
index ef816c1..3f8617c 100644 (file)
@@ -72,6 +72,7 @@ static void __init neocore926_init_early(void)
 static struct at91_usbh_data __initdata neocore926_usbh_data = {
        .ports          = 2,
        .vbus_pin       = { AT91_PIN_PA24, AT91_PIN_PA21 },
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -79,7 +80,7 @@ static struct at91_usbh_data __initdata neocore926_usbh_data = {
  */
 static struct at91_udc_data __initdata neocore926_udc_data = {
        .vbus_pin       = AT91_PIN_PA25,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -149,13 +150,14 @@ static struct at91_mmc_data __initdata neocore926_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PE18,
        .wp_pin         = AT91_PIN_PE19,
+       .vcc_pin        = -EINVAL,
 };
 
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata neocore926_macb_data = {
+static struct macb_platform_data __initdata neocore926_macb_data = {
        .phy_irq_pin    = AT91_PIN_PE31,
        .is_rmii        = 1,
 };
@@ -190,6 +192,7 @@ static struct atmel_nand_data __initdata neocore926_nand_data = {
        .enable_pin             = AT91_PIN_PD15,
        .parts                  = neocore926_nand_partition,
        .num_parts              = ARRAY_SIZE(neocore926_nand_partition),
+       .det_pin                = -EINVAL,
 };
 
 static struct sam9_smc_config __initdata neocore926_nand_smc_config = {
@@ -213,7 +216,7 @@ static struct sam9_smc_config __initdata neocore926_nand_smc_config = {
 static void __init neocore926_add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &neocore926_nand_smc_config);
+       sam9_smc_configure(0, 3, &neocore926_nand_smc_config);
 
        at91_add_device_nand(&neocore926_nand_data);
 }
index 49e3f69..b4a12fc 100644 (file)
@@ -96,9 +96,9 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
 static void __init add_device_pcontrol(void)
 {
        /* configure chip-select 4 (IO compatible to 8051  X4 ) */
-       sam9_smc_configure(4, &pcontrol_smc_config[0]);
+       sam9_smc_configure(0, 4, &pcontrol_smc_config[0]);
        /* configure chip-select 7 (FerroRAM 256KiBx16bit MR2A16A  D4 ) */
-       sam9_smc_configure(7, &pcontrol_smc_config[1]);
+       sam9_smc_configure(0, 7, &pcontrol_smc_config[1]);
 }
 
 
@@ -107,6 +107,8 @@ static void __init add_device_pcontrol(void)
  */
 static struct at91_usbh_data __initdata usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 
@@ -122,7 +124,7 @@ static struct at91_udc_data __initdata pcontrol_g20_udc_data = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata macb_data = {
+static struct macb_platform_data __initdata macb_data = {
        .phy_irq_pin    = AT91_PIN_PA28,
        .is_rmii        = 1,
 };
index 0a8fe6a..ab024fa 100644 (file)
@@ -60,13 +60,15 @@ static void __init picotux200_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata picotux200_eth_data = {
+static struct macb_platform_data __initdata picotux200_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata picotux200_usbh_data = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_mmc_data __initdata picotux200_mmc_data = {
@@ -74,6 +76,7 @@ static struct at91_mmc_data __initdata picotux200_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
        .wp_pin         = AT91_PIN_PA17,
+       .vcc_pin        = -EINVAL,
 };
 
 #define PICOTUX200_FLASH_BASE  AT91_CHIPSELECT_0
index 07421bd..e029d22 100644 (file)
@@ -77,6 +77,8 @@ static void __init ek_init_early(void)
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -84,7 +86,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 /*
@@ -104,7 +106,7 @@ static struct spi_board_info ek_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA31,
        .is_rmii        = 1,
 };
@@ -133,7 +135,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
        .parts          = ek_nand_partition,
@@ -161,7 +163,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 static void __init ek_add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -172,9 +174,9 @@ static void __init ek_add_device_nand(void)
 static struct at91_mmc_data __initdata ek_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
-//     .det_pin        = ... not connected
-//     .wp_pin         = ... not connected
-//     .vcc_pin        = ... not connected
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 /*
@@ -251,7 +253,7 @@ static void __init ek_board_init(void)
        /* LEDs */
        at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
        /* shutdown controller, wakeup button (5 msec low) */
-       at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
+       at91_shdwc_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
                                | AT91_SHDW_RTTWKEN);
 }
 
index 80a8c9c..782f379 100644 (file)
@@ -65,13 +65,15 @@ static void __init dk_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata dk_eth_data = {
+static struct macb_platform_data __initdata dk_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata dk_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata dk_udc_data = {
@@ -80,16 +82,19 @@ static struct at91_udc_data __initdata dk_udc_data = {
 };
 
 static struct at91_cf_data __initdata dk_cf_data = {
+       .irq_pin        = -EINVAL,
        .det_pin        = AT91_PIN_PB0,
+       .vcc_pin        = -EINVAL,
        .rst_pin        = AT91_PIN_PC5,
-       // .irq_pin     = ... not connected
-       // .vcc_pin     = ... always powered
 };
 
 #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD
 static struct at91_mmc_data __initdata dk_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 #endif
 
@@ -143,7 +148,7 @@ static struct atmel_nand_data __initdata dk_nand_data = {
        .cle            = 21,
        .det_pin        = AT91_PIN_PB1,
        .rdy_pin        = AT91_PIN_PC2,
-       // .enable_pin  = ... not there
+       .enable_pin     = -EINVAL,
        .parts          = dk_nand_partition,
        .num_parts      = ARRAY_SIZE(dk_nand_partition),
 };
index 99fd7f8..ef7c12a 100644 (file)
@@ -65,13 +65,15 @@ static void __init ek_init_early(void)
        at91_set_serial_console(0);
 }
 
-static struct at91_eth_data __initdata ek_eth_data = {
+static struct macb_platform_data __initdata ek_eth_data = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
 
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata ek_udc_data = {
@@ -85,6 +87,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
        .wp_pin         = AT91_PIN_PA17,
+       .vcc_pin        = -EINVAL,
 };
 #endif
 
index e927df0..af0750f 100644 (file)
@@ -60,7 +60,7 @@ static void __init rsi_ews_init_early(void)
 /*
  * Ethernet
  */
-static struct at91_eth_data rsi_ews_eth_data __initdata = {
+static struct macb_platform_data rsi_ews_eth_data __initdata = {
        .phy_irq_pin    = AT91_PIN_PC4,
        .is_rmii        = 1,
 };
@@ -70,6 +70,8 @@ static struct at91_eth_data rsi_ews_eth_data __initdata = {
  */
 static struct at91_usbh_data rsi_ews_usbh_data __initdata = {
        .ports          = 1,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
index 072d53a..84bce58 100644 (file)
@@ -72,6 +72,8 @@ static void __init ek_init_early(void)
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -79,7 +81,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -109,7 +111,7 @@ static struct spi_board_info ek_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA7,
        .is_rmii        = 0,
 };
@@ -134,7 +136,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
        .parts          = ek_nand_partition,
@@ -162,7 +164,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 static void __init ek_add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -176,7 +178,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PC8,
        .wp_pin         = AT91_PIN_PC4,
-//     .vcc_pin        = ... not connected
+       .vcc_pin        = -EINVAL,
 };
 
 static void __init ek_board_init(void)
index 4f10181..be8233b 100644 (file)
@@ -75,6 +75,8 @@ static void __init ek_init_early(void)
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -82,7 +84,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -151,7 +153,7 @@ static struct spi_board_info ek_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA7,
        .is_rmii        = 1,
 };
@@ -176,7 +178,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
        .parts          = ek_nand_partition,
@@ -211,7 +213,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -223,9 +225,9 @@ static void __init ek_add_device_nand(void)
 static struct at91_mmc_data __initdata ek_mmc_data = {
        .slot_b         = 1,
        .wire4          = 1,
-//     .det_pin        = ... not connected
-//     .wp_pin         = ... not connected
-//     .vcc_pin        = ... not connected
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 
index b005b73..4089507 100644 (file)
@@ -131,7 +131,7 @@ static struct sam9_smc_config __initdata dm9000_smc_config = {
 static void __init ek_add_device_dm9000(void)
 {
        /* Configure chip-select 2 (DM9000) */
-       sam9_smc_configure(2, &dm9000_smc_config);
+       sam9_smc_configure(0, 2, &dm9000_smc_config);
 
        /* Configure Reset signal as output */
        at91_set_gpio_output(AT91_PIN_PC10, 0);
@@ -151,6 +151,8 @@ static void __init ek_add_device_dm9000(void) {}
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 
@@ -159,7 +161,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PB29,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -182,7 +184,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 22,
        .cle            = 21,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC15,
        .enable_pin     = AT91_PIN_PC14,
        .parts          = ek_nand_partition,
@@ -217,7 +219,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -345,6 +347,9 @@ static struct spi_board_info ek_spi_devices[] = {
  */
 static struct at91_mmc_data __initdata ek_mmc_data = {
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 #endif /* CONFIG_SPI_ATMEL_* */
index bccdcf2..29f6605 100644 (file)
@@ -74,6 +74,7 @@ static void __init ek_init_early(void)
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
        .vbus_pin       = { AT91_PIN_PA24, AT91_PIN_PA21 },
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -81,7 +82,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PA25,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -151,14 +152,14 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PE18,
        .wp_pin         = AT91_PIN_PE19,
-//     .vcc_pin        = ... not connected
+       .vcc_pin        = -EINVAL,
 };
 
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PE31,
        .is_rmii        = 1,
 };
@@ -183,7 +184,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PA22,
        .enable_pin     = AT91_PIN_PD15,
        .parts          = ek_nand_partition,
@@ -218,7 +219,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -353,6 +354,7 @@ static void __init ek_add_device_buttons(void) {}
  * reset_pin is not connected: NRST
  */
 static struct ac97c_platform_data ek_ac97_data = {
+       .reset_pin      = -EINVAL,
 };
 
 
index 64fc75c..843d628 100644 (file)
@@ -86,6 +86,8 @@ static void __init ek_init_early(void)
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -93,7 +95,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PC5,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
@@ -123,7 +125,7 @@ static struct spi_board_info ek_spi_devices[] = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA7,
        .is_rmii        = 1,
 };
@@ -163,6 +165,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
        .cle            = 22,
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
+       .det_pin        = -EINVAL,
        .parts          = ek_nand_partition,
        .num_parts      = ARRAY_SIZE(ek_nand_partition),
 };
@@ -195,7 +198,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -210,6 +213,7 @@ static struct mci_platform_data __initdata ek_mmc_data = {
        .slot[1] = {
                .bus_width      = 4,
                .detect_pin     = AT91_PIN_PC9,
+               .wp_pin         = -EINVAL,
        },
 
 };
@@ -218,6 +222,8 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
        .slot_b         = 1,    /* Only one slot so use slot B */
        .wire4          = 1,
        .det_pin        = AT91_PIN_PC9,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 #endif
 
@@ -227,6 +233,7 @@ static void __init ek_add_device_mmc(void)
        if (ek_have_2mmc()) {
                ek_mmc_data.slot[0].bus_width = 4;
                ek_mmc_data.slot[0].detect_pin = AT91_PIN_PC2;
+               ek_mmc_data.slot[0].wp_pin = -1;
        }
        at91_add_device_mci(0, &ek_mmc_data);
 #else
index 92de912..ea0d1b9 100644 (file)
@@ -69,6 +69,7 @@ static void __init ek_init_early(void)
 static struct at91_usbh_data __initdata ek_usbh_hs_data = {
        .ports          = 2,
        .vbus_pin       = {AT91_PIN_PD1, AT91_PIN_PD3},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 
@@ -100,6 +101,7 @@ static struct mci_platform_data __initdata mci0_data = {
        .slot[0] = {
                .bus_width      = 4,
                .detect_pin     = AT91_PIN_PD10,
+               .wp_pin         = -EINVAL,
        },
 };
 
@@ -115,7 +117,7 @@ static struct mci_platform_data __initdata mci1_data = {
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PD5,
        .is_rmii        = 1,
 };
@@ -143,6 +145,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
        .cle            = 22,
        .rdy_pin        = AT91_PIN_PC8,
        .enable_pin     = AT91_PIN_PC14,
+       .det_pin        = -EINVAL,
        .parts          = ek_nand_partition,
        .num_parts      = ARRAY_SIZE(ek_nand_partition),
 };
@@ -175,7 +178,7 @@ static void __init ek_add_device_nand(void)
                ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -330,6 +333,7 @@ static void __init ek_add_device_buttons(void) {}
  * reset_pin is not connected: NRST
  */
 static struct ac97c_platform_data ek_ac97_data = {
+       .reset_pin      = -EINVAL,
 };
 
 
index b2b7482..c1366d0 100644 (file)
@@ -67,8 +67,8 @@ static struct usba_platform_data __initdata ek_usba_udc_data = {
 static struct at91_mmc_data __initdata ek_mmc_data = {
        .wire4          = 1,
        .det_pin        = AT91_PIN_PA15,
-//     .wp_pin         = ... not connected
-//     .vcc_pin        = ... not connected
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 
@@ -91,7 +91,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PD17,
        .enable_pin     = AT91_PIN_PB6,
        .parts          = ek_nand_partition,
@@ -119,7 +119,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 static void __init ek_add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &ek_nand_smc_config);
+       sam9_smc_configure(0, 3, &ek_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -204,6 +204,7 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
  * reset_pin is not connected: NRST
  */
 static struct ac97c_platform_data ek_ac97_data = {
+       .reset_pin      = -EINVAL,
 };
 
 
index 0df01c6..4770db0 100644 (file)
@@ -57,15 +57,19 @@ static void __init snapper9260_init_early(void)
 
 static struct at91_usbh_data __initdata snapper9260_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 static struct at91_udc_data __initdata snapper9260_udc_data = {
        .vbus_pin               = SNAPPER9260_IO_EXP_GPIO(5),
        .vbus_active_low        = 1,
        .vbus_polled            = 1,
+       .pullup_pin             = -EINVAL,
 };
 
-static struct at91_eth_data snapper9260_macb_data = {
+static struct macb_platform_data snapper9260_macb_data = {
+       .phy_irq_pin    = -EINVAL,
        .is_rmii        = 1,
 };
 
@@ -104,6 +108,8 @@ static struct atmel_nand_data __initdata snapper9260_nand_data = {
        .parts          = snapper9260_nand_partitions,
        .num_parts      = ARRAY_SIZE(snapper9260_nand_partitions),
        .bus_width_16   = 0,
+       .enable_pin     = -EINVAL,
+       .det_pin        = -EINVAL,
 };
 
 static struct sam9_smc_config __initdata snapper9260_nand_smc_config = {
@@ -149,7 +155,7 @@ static struct i2c_board_info __initdata snapper9260_i2c_devices[] = {
 static void __init snapper9260_add_device_nand(void)
 {
        at91_set_A_periph(AT91_PIN_PC14, 0);
-       sam9_smc_configure(3, &snapper9260_nand_smc_config);
+       sam9_smc_configure(0, 3, &snapper9260_nand_smc_config);
        at91_add_device_nand(&snapper9260_nand_data);
 }
 
index 936e5fd..72eb3b4 100644 (file)
@@ -85,6 +85,7 @@ static struct atmel_nand_data __initdata nand_data = {
        .rdy_pin        = AT91_PIN_PC13,
        .enable_pin     = AT91_PIN_PC14,
        .bus_width_16   = 0,
+       .det_pin        = -EINVAL,
 };
 
 static struct sam9_smc_config __initdata nand_smc_config = {
@@ -108,7 +109,7 @@ static struct sam9_smc_config __initdata nand_smc_config = {
 static void __init add_device_nand(void)
 {
        /* configure chip-select 3 (NAND) */
-       sam9_smc_configure(3, &nand_smc_config);
+       sam9_smc_configure(0, 3, &nand_smc_config);
 
        at91_add_device_nand(&nand_data);
 }
@@ -122,12 +123,17 @@ static void __init add_device_nand(void)
 static struct mci_platform_data __initdata mmc_data = {
        .slot[0] = {
                .bus_width      = 4,
+               .detect_pin     = -1,
+               .wp_pin         = -1,
        },
 };
 #else
 static struct at91_mmc_data __initdata mmc_data = {
        .slot_b         = 0,
        .wire4          = 1,
+       .det_pin        = -EINVAL,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 #endif
 
@@ -137,6 +143,8 @@ static struct at91_mmc_data __initdata mmc_data = {
  */
 static struct at91_usbh_data __initdata usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 
@@ -145,19 +153,19 @@ static struct at91_usbh_data __initdata usbh_data = {
  */
 static struct at91_udc_data __initdata portuxg20_udc_data = {
        .vbus_pin       = AT91_PIN_PC7,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 static struct at91_udc_data __initdata stamp9g20evb_udc_data = {
        .vbus_pin       = AT91_PIN_PA22,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata macb_data = {
+static struct macb_platform_data __initdata macb_data = {
        .phy_irq_pin    = AT91_PIN_PA28,
        .is_rmii        = 1,
 };
index 0a20bab..26c36fc 100644 (file)
@@ -66,6 +66,8 @@ static void __init ek_init_early(void)
  */
 static struct at91_usbh_data __initdata ek_usbh_data = {
        .ports          = 2,
+       .vbus_pin       = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -73,7 +75,7 @@ static struct at91_usbh_data __initdata ek_usbh_data = {
  */
 static struct at91_udc_data __initdata ek_udc_data = {
        .vbus_pin       = AT91_PIN_PB11,
-       .pullup_pin     = 0,            /* pull-up driven by UDC */
+       .pullup_pin     = -EINVAL,              /* pull-up driven by UDC */
 };
 
 static void __init ek_add_device_udc(void)
@@ -146,7 +148,7 @@ static void __init ek_add_device_spi(void)
 /*
  * MACB Ethernet device
  */
-static struct at91_eth_data __initdata ek_macb_data = {
+static struct macb_platform_data __initdata ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PE31,
        .is_rmii        = 1,
 };
@@ -193,7 +195,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
 static struct atmel_nand_data __initdata ek_nand_data = {
        .ale            = 21,
        .cle            = 22,
-//     .det_pin        = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PA22,
        .enable_pin     = AT91_PIN_PD15,
        .parts          = ek_nand_partition,
@@ -245,9 +247,9 @@ static void __init ek_add_device_nand(void)
 
        /* configure chip-select 3 (NAND) */
        if (machine_is_usb_a9g20())
-               sam9_smc_configure(3, &usb_a9g20_nand_smc_config);
+               sam9_smc_configure(0, 3, &usb_a9g20_nand_smc_config);
        else
-               sam9_smc_configure(3, &usb_a9260_nand_smc_config);
+               sam9_smc_configure(0, 3, &usb_a9260_nand_smc_config);
 
        at91_add_device_nand(&ek_nand_data);
 }
@@ -344,7 +346,7 @@ static void __init ek_board_init(void)
                /* I2C */
                at91_add_device_i2c(NULL, 0);
                /* shutdown controller, wakeup button (5 msec low) */
-               at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10)
+               at91_shdwc_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10)
                                | AT91_SHDW_WKMODE0_LOW
                                | AT91_SHDW_RTTWKEN);
        }
index 12a3f95..bbd553e 100644 (file)
@@ -110,7 +110,7 @@ static struct gpio_led yl9200_leds[] = {
 /*
  * Ethernet
  */
-static struct at91_eth_data __initdata yl9200_eth_data = {
+static struct macb_platform_data __initdata yl9200_eth_data = {
        .phy_irq_pin            = AT91_PIN_PB28,
        .is_rmii                = 1,
 };
@@ -120,6 +120,8 @@ static struct at91_eth_data __initdata yl9200_eth_data = {
  */
 static struct at91_usbh_data __initdata yl9200_usbh_data = {
        .ports                  = 1,    /* PQFP version of AT91RM9200 */
+       .vbus_pin               = {-EINVAL, -EINVAL},
+       .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
 /*
@@ -137,8 +139,9 @@ static struct at91_udc_data __initdata yl9200_udc_data = {
  */
 static struct at91_mmc_data __initdata yl9200_mmc_data = {
        .det_pin        = AT91_PIN_PB9,
-       // .wp_pin      = ... not connected
        .wire4          = 1,
+       .wp_pin         = -EINVAL,
+       .vcc_pin        = -EINVAL,
 };
 
 /*
@@ -175,7 +178,7 @@ static struct mtd_partition __initdata yl9200_nand_partition[] = {
 static struct atmel_nand_data __initdata yl9200_nand_data = {
        .ale            = 6,
        .cle            = 7,
-       // .det_pin     = ... not connected
+       .det_pin        = -EINVAL,
        .rdy_pin        = AT91_PIN_PC14,        /* R/!B (Sheet10) */
        .enable_pin     = AT91_PIN_PC15,        /* !CE  (Sheet10) */
        .parts          = yl9200_nand_partition,
index 7f4503b..4866b81 100644 (file)
@@ -29,6 +29,7 @@ extern void __init at91_aic_init(unsigned int priority[]);
  /* Timer */
 struct sys_timer;
 extern struct sys_timer at91rm9200_timer;
+extern void at91sam926x_ioremap_pit(u32 addr);
 extern struct sys_timer at91sam926x_timer;
 extern struct sys_timer at91x40_timer;
 
@@ -59,14 +60,16 @@ extern void at91_irq_resume(void);
 /* reset */
 extern void at91sam9_alt_restart(char, const char *);
 
+/* shutdown */
+extern void at91_ioremap_shdwc(u32 base_addr);
+
  /* GPIO */
 #define AT91RM9200_PQFP                3       /* AT91RM9200 PQFP package has 3 banks */
 #define AT91RM9200_BGA         4       /* AT91RM9200 BGA package has 4 banks */
 
 struct at91_gpio_bank {
        unsigned short id;              /* peripheral ID */
-       unsigned long offset;           /* offset from system peripheral base */
-       struct clk *clock;              /* associated clock */
+       unsigned long regbase;          /* offset from system peripheral base */
 };
 extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks);
 extern void __init at91_gpio_irq_setup(void);
index 224e9e2..74d6783 100644 (file)
@@ -29,8 +29,9 @@
 struct at91_gpio_chip {
        struct gpio_chip        chip;
        struct at91_gpio_chip   *next;          /* Bank sharing same clock */
-       struct at91_gpio_bank   *bank;          /* Bank definition */
+       int                     id;             /* ID of register bank */
        void __iomem            *regbase;       /* Base of register bank */
+       struct clk              *clock;         /* associated clock */
 };
 
 #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip)
@@ -58,18 +59,17 @@ static int at91_gpiolib_direction_input(struct gpio_chip *chip,
        }
 
 static struct at91_gpio_chip gpio_chip[] = {
-       AT91_GPIO_CHIP("A", 0x00 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("B", 0x20 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("C", 0x40 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("D", 0x60 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("E", 0x80 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioA", 0x00, 32),
+       AT91_GPIO_CHIP("pioB", 0x20, 32),
+       AT91_GPIO_CHIP("pioC", 0x40, 32),
+       AT91_GPIO_CHIP("pioD", 0x60, 32),
+       AT91_GPIO_CHIP("pioE", 0x80, 32),
 };
 
 static int gpio_banks;
 
 static inline void __iomem *pin_to_controller(unsigned pin)
 {
-       pin -= PIN_BASE;
        pin /= 32;
        if (likely(pin < gpio_banks))
                return gpio_chip[pin].regbase;
@@ -79,7 +79,6 @@ static inline void __iomem *pin_to_controller(unsigned pin)
 
 static inline unsigned pin_to_mask(unsigned pin)
 {
-       pin -= PIN_BASE;
        return 1 << (pin % 32);
 }
 
@@ -274,8 +273,9 @@ static u32 backups[MAX_GPIO_BANKS];
 
 static int gpio_irq_set_wake(struct irq_data *d, unsigned state)
 {
-       unsigned        mask = pin_to_mask(d->irq);
-       unsigned        bank = (d->irq - PIN_BASE) / 32;
+       unsigned        pin = irq_to_gpio(d->irq);
+       unsigned        mask = pin_to_mask(pin);
+       unsigned        bank = pin / 32;
 
        if (unlikely(bank >= MAX_GPIO_BANKS))
                return -EINVAL;
@@ -285,7 +285,7 @@ static int gpio_irq_set_wake(struct irq_data *d, unsigned state)
        else
                wakeups[bank] &= ~mask;
 
-       irq_set_irq_wake(gpio_chip[bank].bank->id, state);
+       irq_set_irq_wake(gpio_chip[bank].id, state);
 
        return 0;
 }
@@ -302,7 +302,7 @@ void at91_gpio_suspend(void)
                __raw_writel(wakeups[i], pio + PIO_IER);
 
                if (!wakeups[i])
-                       clk_disable(gpio_chip[i].bank->clock);
+                       clk_disable(gpio_chip[i].clock);
                else {
 #ifdef CONFIG_PM_DEBUG
                        printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]);
@@ -319,7 +319,7 @@ void at91_gpio_resume(void)
                void __iomem    *pio = gpio_chip[i].regbase;
 
                if (!wakeups[i])
-                       clk_enable(gpio_chip[i].bank->clock);
+                       clk_enable(gpio_chip[i].clock);
 
                __raw_writel(wakeups[i], pio + PIO_IDR);
                __raw_writel(backups[i], pio + PIO_IER);
@@ -344,8 +344,9 @@ void at91_gpio_resume(void)
 
 static void gpio_irq_mask(struct irq_data *d)
 {
-       void __iomem    *pio = pin_to_controller(d->irq);
-       unsigned        mask = pin_to_mask(d->irq);
+       unsigned        pin = irq_to_gpio(d->irq);
+       void __iomem    *pio = pin_to_controller(pin);
+       unsigned        mask = pin_to_mask(pin);
 
        if (pio)
                __raw_writel(mask, pio + PIO_IDR);
@@ -353,8 +354,9 @@ static void gpio_irq_mask(struct irq_data *d)
 
 static void gpio_irq_unmask(struct irq_data *d)
 {
-       void __iomem    *pio = pin_to_controller(d->irq);
-       unsigned        mask = pin_to_mask(d->irq);
+       unsigned        pin = irq_to_gpio(d->irq);
+       void __iomem    *pio = pin_to_controller(pin);
+       unsigned        mask = pin_to_mask(pin);
 
        if (pio)
                __raw_writel(mask, pio + PIO_IER);
@@ -382,7 +384,7 @@ static struct irq_chip gpio_irqchip = {
 
 static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)
 {
-       unsigned        pin;
+       unsigned        irq_pin;
        struct irq_data *idata = irq_desc_get_irq_data(desc);
        struct irq_chip *chip = irq_data_get_irq_chip(idata);
        struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(idata);
@@ -405,12 +407,12 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)
                        continue;
                }
 
-               pin = at91_gpio->chip.base;
+               irq_pin = gpio_to_irq(at91_gpio->chip.base);
 
                while (isr) {
                        if (isr & 1)
-                               generic_handle_irq(pin);
-                       pin++;
+                               generic_handle_irq(irq_pin);
+                       irq_pin++;
                        isr >>= 1;
                }
        }
@@ -438,7 +440,7 @@ static int at91_gpio_show(struct seq_file *s, void *unused)
                seq_printf(s, "%i:\t", j);
 
                for (bank = 0; bank < gpio_banks; bank++) {
-                       unsigned        pin  = PIN_BASE + (32 * bank) + j;
+                       unsigned        pin  = (32 * bank) + j;
                        void __iomem    *pio = pin_to_controller(pin);
                        unsigned        mask = pin_to_mask(pin);
 
@@ -491,27 +493,28 @@ static struct lock_class_key gpio_lock_class;
  */
 void __init at91_gpio_irq_setup(void)
 {
-       unsigned                pioc, pin;
+       unsigned                pioc, irq = gpio_to_irq(0);
        struct at91_gpio_chip   *this, *prev;
 
-       for (pioc = 0, pin = PIN_BASE, this = gpio_chip, prev = NULL;
+       for (pioc = 0, this = gpio_chip, prev = NULL;
                        pioc++ < gpio_banks;
                        prev = this, this++) {
-               unsigned        id = this->bank->id;
+               unsigned        id = this->id;
                unsigned        i;
 
                __raw_writel(~0, this->regbase + PIO_IDR);
 
-               for (i = 0, pin = this->chip.base; i < 32; i++, pin++) {
-                       irq_set_lockdep_class(pin, &gpio_lock_class);
+               for (i = 0, irq = gpio_to_irq(this->chip.base); i < 32;
+                    i++, irq++) {
+                       irq_set_lockdep_class(irq, &gpio_lock_class);
 
                        /*
                         * Can use the "simple" and not "edge" handler since it's
                         * shorter, and the AIC handles interrupts sanely.
                         */
-                       irq_set_chip_and_handler(pin, &gpio_irqchip,
+                       irq_set_chip_and_handler(irq, &gpio_irqchip,
                                                 handle_simple_irq);
-                       set_irq_flags(pin, IRQF_VALID);
+                       set_irq_flags(irq, IRQF_VALID);
                }
 
                /* The toplevel handler handles one bank of GPIOs, except
@@ -524,7 +527,7 @@ void __init at91_gpio_irq_setup(void)
                irq_set_chip_data(id, this);
                irq_set_chained_handler(id, gpio_irq_handler);
        }
-       pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, gpio_banks);
+       pr_info("AT91: %d gpio irqs in %d banks\n", irq - gpio_to_irq(0), gpio_banks);
 }
 
 /* gpiolib support */
@@ -612,16 +615,26 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
        for (i = 0; i < nr_banks; i++) {
                at91_gpio = &gpio_chip[i];
 
-               at91_gpio->bank = &data[i];
-               at91_gpio->chip.base = PIN_BASE + i * 32;
-               at91_gpio->regbase = at91_gpio->bank->offset +
-                       (void __iomem *)AT91_VA_BASE_SYS;
+               at91_gpio->id = data[i].id;
+               at91_gpio->chip.base = i * 32;
+
+               at91_gpio->regbase = ioremap(data[i].regbase, 512);
+               if (!at91_gpio->regbase) {
+                       pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", i);
+                       continue;
+               }
+
+               at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label);
+               if (!at91_gpio->clock) {
+                       pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", i);
+                       continue;
+               }
 
                /* enable PIO controller's clock */
-               clk_enable(at91_gpio->bank->clock);
+               clk_enable(at91_gpio->clock);
 
                /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */
-               if (last && last->bank->id == at91_gpio->bank->id)
+               if (last && last->id == at91_gpio->id)
                        last->next = at91_gpio;
                last = at91_gpio;
 
index 0356679..3045781 100644 (file)
 #ifndef AT91_AIC_H
 #define AT91_AIC_H
 
-#define AT91_AIC_SMR(n)                (AT91_AIC + ((n) * 4))  /* Source Mode Registers 0-31 */
+#ifndef __ASSEMBLY__
+extern void __iomem *at91_aic_base;
+
+#define at91_aic_read(field) \
+       __raw_readl(at91_aic_base + field)
+
+#define at91_aic_write(field, value) \
+       __raw_writel(value, at91_aic_base + field);
+#else
+.extern at91_aic_base
+#endif
+
+#define AT91_AIC_SMR(n)                ((n) * 4)               /* Source Mode Registers 0-31 */
 #define                AT91_AIC_PRIOR          (7 << 0)                /* Priority Level */
 #define                AT91_AIC_SRCTYPE        (3 << 5)                /* Interrupt Source Type */
 #define                        AT91_AIC_SRCTYPE_LOW            (0 << 5)
 #define                        AT91_AIC_SRCTYPE_HIGH           (2 << 5)
 #define                        AT91_AIC_SRCTYPE_RISING         (3 << 5)
 
-#define AT91_AIC_SVR(n)                (AT91_AIC + 0x80 + ((n) * 4))   /* Source Vector Registers 0-31 */
-#define AT91_AIC_IVR           (AT91_AIC + 0x100)      /* Interrupt Vector Register */
-#define AT91_AIC_FVR           (AT91_AIC + 0x104)      /* Fast Interrupt Vector Register */
-#define AT91_AIC_ISR           (AT91_AIC + 0x108)      /* Interrupt Status Register */
+#define AT91_AIC_SVR(n)                (0x80 + ((n) * 4))      /* Source Vector Registers 0-31 */
+#define AT91_AIC_IVR           0x100                   /* Interrupt Vector Register */
+#define AT91_AIC_FVR           0x104                   /* Fast Interrupt Vector Register */
+#define AT91_AIC_ISR           0x108                   /* Interrupt Status Register */
 #define                AT91_AIC_IRQID          (0x1f << 0)             /* Current Interrupt Identifier */
 
-#define AT91_AIC_IPR           (AT91_AIC + 0x10c)      /* Interrupt Pending Register */
-#define AT91_AIC_IMR           (AT91_AIC + 0x110)      /* Interrupt Mask Register */
-#define AT91_AIC_CISR          (AT91_AIC + 0x114)      /* Core Interrupt Status Register */
+#define AT91_AIC_IPR           0x10c                   /* Interrupt Pending Register */
+#define AT91_AIC_IMR           0x110                   /* Interrupt Mask Register */
+#define AT91_AIC_CISR          0x114                   /* Core Interrupt Status Register */
 #define                AT91_AIC_NFIQ           (1 << 0)                /* nFIQ Status */
 #define                AT91_AIC_NIRQ           (1 << 1)                /* nIRQ Status */
 
-#define AT91_AIC_IECR          (AT91_AIC + 0x120)      /* Interrupt Enable Command Register */
-#define AT91_AIC_IDCR          (AT91_AIC + 0x124)      /* Interrupt Disable Command Register */
-#define AT91_AIC_ICCR          (AT91_AIC + 0x128)      /* Interrupt Clear Command Register */
-#define AT91_AIC_ISCR          (AT91_AIC + 0x12c)      /* Interrupt Set Command Register */
-#define AT91_AIC_EOICR         (AT91_AIC + 0x130)      /* End of Interrupt Command Register */
-#define AT91_AIC_SPU           (AT91_AIC + 0x134)      /* Spurious Interrupt Vector Register */
-#define AT91_AIC_DCR           (AT91_AIC + 0x138)      /* Debug Control Register */
+#define AT91_AIC_IECR          0x120                   /* Interrupt Enable Command Register */
+#define AT91_AIC_IDCR          0x124                   /* Interrupt Disable Command Register */
+#define AT91_AIC_ICCR          0x128                   /* Interrupt Clear Command Register */
+#define AT91_AIC_ISCR          0x12c                   /* Interrupt Set Command Register */
+#define AT91_AIC_EOICR         0x130                   /* End of Interrupt Command Register */
+#define AT91_AIC_SPU           0x134                   /* Spurious Interrupt Vector Register */
+#define AT91_AIC_DCR           0x138                   /* Debug Control Register */
 #define                AT91_AIC_DCR_PROT       (1 << 0)                /* Protection Mode */
 #define                AT91_AIC_DCR_GMSK       (1 << 1)                /* General Mask */
 
-#define AT91_AIC_FFER          (AT91_AIC + 0x140)      /* Fast Forcing Enable Register [SAM9 only] */
-#define AT91_AIC_FFDR          (AT91_AIC + 0x144)      /* Fast Forcing Disable Register [SAM9 only] */
-#define AT91_AIC_FFSR          (AT91_AIC + 0x148)      /* Fast Forcing Status Register [SAM9 only] */
+#define AT91_AIC_FFER          0x140                   /* Fast Forcing Enable Register [SAM9 only] */
+#define AT91_AIC_FFDR          0x144                   /* Fast Forcing Disable Register [SAM9 only] */
+#define AT91_AIC_FFSR          0x148                   /* Fast Forcing Status Register [SAM9 only] */
 
 #endif
index dbfe455..2aa0c5e 100644 (file)
@@ -19,7 +19,7 @@
 #define dbgu_readl(dbgu, field) \
        __raw_readl(AT91_VA_BASE_SYS + dbgu + AT91_DBGU_ ## field)
 
-#ifdef AT91_DBGU
+#if !defined(CONFIG_ARCH_AT91X40)
 #define AT91_DBGU_CR           (0x00)  /* Control Register */
 #define AT91_DBGU_MR           (0x04)  /* Mode Register */
 #define AT91_DBGU_IER          (0x08)  /* Interrupt Enable Register */
index 974d0bd..d1f80ad 100644 (file)
 #ifndef AT91_PIT_H
 #define AT91_PIT_H
 
-#define AT91_PIT_MR            (AT91_PIT + 0x00)       /* Mode Register */
+#define AT91_PIT_MR            0x00                    /* Mode Register */
 #define                AT91_PIT_PITIEN         (1 << 25)               /* Timer Interrupt Enable */
 #define                AT91_PIT_PITEN          (1 << 24)               /* Timer Enabled */
 #define                AT91_PIT_PIV            (0xfffff)               /* Periodic Interval Value */
 
-#define AT91_PIT_SR            (AT91_PIT + 0x04)       /* Status Register */
+#define AT91_PIT_SR            0x04                    /* Status Register */
 #define                AT91_PIT_PITS           (1 << 0)                /* Timer Status */
 
-#define AT91_PIT_PIVR          (AT91_PIT + 0x08)       /* Periodic Interval Value Register */
-#define AT91_PIT_PIIR          (AT91_PIT + 0x0c)       /* Periodic Interval Image Register */
+#define AT91_PIT_PIVR          0x08                    /* Periodic Interval Value Register */
+#define AT91_PIT_PIIR          0x0c                    /* Periodic Interval Image Register */
 #define                AT91_PIT_PICNT          (0xfff << 20)           /* Interval Counter */
 #define                AT91_PIT_CPIV           (0xfffff)               /* Inverval Value */
 
index e56f470..da1945e 100644 (file)
@@ -16,7 +16,7 @@
 #ifndef AT91_RTC_H
 #define AT91_RTC_H
 
-#define        AT91_RTC_CR             (AT91_RTC + 0x00)       /* Control Register */
+#define        AT91_RTC_CR             0x00                    /* Control Register */
 #define                AT91_RTC_UPDTIM         (1 <<  0)               /* Update Request Time Register */
 #define                AT91_RTC_UPDCAL         (1 <<  1)               /* Update Request Calendar Register */
 #define                AT91_RTC_TIMEVSEL       (3 <<  8)               /* Time Event Selection */
 #define                        AT91_RTC_CALEVSEL_MONTH         (1 << 16)
 #define                        AT91_RTC_CALEVSEL_YEAR          (2 << 16)
 
-#define        AT91_RTC_MR             (AT91_RTC + 0x04)       /* Mode Register */
+#define        AT91_RTC_MR             0x04                    /* Mode Register */
 #define                        AT91_RTC_HRMOD          (1 <<  0)               /* 12/24 Hour Mode */
 
-#define        AT91_RTC_TIMR           (AT91_RTC + 0x08)       /* Time Register */
+#define        AT91_RTC_TIMR           0x08                    /* Time Register */
 #define                AT91_RTC_SEC            (0x7f <<  0)            /* Current Second */
 #define                AT91_RTC_MIN            (0x7f <<  8)            /* Current Minute */
 #define                AT91_RTC_HOUR           (0x3f << 16)            /* Current Hour */
 #define                AT91_RTC_AMPM           (1    << 22)            /* Ante Meridiem Post Meridiem Indicator */
 
-#define        AT91_RTC_CALR           (AT91_RTC + 0x0c)       /* Calendar Register */
+#define        AT91_RTC_CALR           0x0c                    /* Calendar Register */
 #define                AT91_RTC_CENT           (0x7f <<  0)            /* Current Century */
 #define                AT91_RTC_YEAR           (0xff <<  8)            /* Current Year */
 #define                AT91_RTC_MONTH          (0x1f << 16)            /* Current Month */
 #define                AT91_RTC_DAY            (7    << 21)            /* Current Day */
 #define                AT91_RTC_DATE           (0x3f << 24)            /* Current Date */
 
-#define        AT91_RTC_TIMALR         (AT91_RTC + 0x10)       /* Time Alarm Register */
+#define        AT91_RTC_TIMALR         0x10                    /* Time Alarm Register */
 #define                AT91_RTC_SECEN          (1 <<  7)               /* Second Alarm Enable */
 #define                AT91_RTC_MINEN          (1 << 15)               /* Minute Alarm Enable */
 #define                AT91_RTC_HOUREN         (1 << 23)               /* Hour Alarm Enable */
 
-#define        AT91_RTC_CALALR         (AT91_RTC + 0x14)       /* Calendar Alarm Register */
+#define        AT91_RTC_CALALR         0x14                    /* Calendar Alarm Register */
 #define                AT91_RTC_MTHEN          (1 << 23)               /* Month Alarm Enable */
 #define                AT91_RTC_DATEEN         (1 << 31)               /* Date Alarm Enable */
 
-#define        AT91_RTC_SR             (AT91_RTC + 0x18)       /* Status Register */
+#define        AT91_RTC_SR             0x18                    /* Status Register */
 #define                AT91_RTC_ACKUPD         (1 <<  0)               /* Acknowledge for Update */
 #define                AT91_RTC_ALARM          (1 <<  1)               /* Alarm Flag */
 #define                AT91_RTC_SECEV          (1 <<  2)               /* Second Event */
 #define                AT91_RTC_TIMEV          (1 <<  3)               /* Time Event */
 #define                AT91_RTC_CALEV          (1 <<  4)               /* Calendar Event */
 
-#define        AT91_RTC_SCCR           (AT91_RTC + 0x1c)       /* Status Clear Command Register */
-#define        AT91_RTC_IER            (AT91_RTC + 0x20)       /* Interrupt Enable Register */
-#define        AT91_RTC_IDR            (AT91_RTC + 0x24)       /* Interrupt Disable Register */
-#define        AT91_RTC_IMR            (AT91_RTC + 0x28)       /* Interrupt Mask Register */
+#define        AT91_RTC_SCCR           0x1c                    /* Status Clear Command Register */
+#define        AT91_RTC_IER            0x20                    /* Interrupt Enable Register */
+#define        AT91_RTC_IDR            0x24                    /* Interrupt Disable Register */
+#define        AT91_RTC_IMR            0x28                    /* Interrupt Mask Register */
 
-#define        AT91_RTC_VER            (AT91_RTC + 0x2c)       /* Valid Entry Register */
+#define        AT91_RTC_VER            0x2c                    /* Valid Entry Register */
 #define                AT91_RTC_NVTIM          (1 <<  0)               /* Non valid Time */
 #define                AT91_RTC_NVCAL          (1 <<  1)               /* Non valid Calendar */
 #define                AT91_RTC_NVTIMALR       (1 <<  2)               /* Non valid Time Alarm */
index c4ce07e..1d4fe82 100644 (file)
 #ifndef AT91_SHDWC_H
 #define AT91_SHDWC_H
 
-#define AT91_SHDW_CR           (AT91_SHDWC + 0x00)     /* Shut Down Control Register */
+#ifndef __ASSEMBLY__
+extern void __iomem *at91_shdwc_base;
+
+#define at91_shdwc_read(field) \
+       __raw_readl(at91_shdwc_base + field)
+
+#define at91_shdwc_write(field, value) \
+       __raw_writel(value, at91_shdwc_base + field);
+#endif
+
+#define AT91_SHDW_CR           0x00                    /* Shut Down Control Register */
 #define                AT91_SHDW_SHDW          (1    << 0)             /* Shut Down command */
 #define                AT91_SHDW_KEY           (0xa5 << 24)            /* KEY Password */
 
-#define AT91_SHDW_MR           (AT91_SHDWC + 0x04)     /* Shut Down Mode Register */
+#define AT91_SHDW_MR           0x04                    /* Shut Down Mode Register */
 #define                AT91_SHDW_WKMODE0       (3 << 0)                /* Wake-up 0 Mode Selection */
 #define                        AT91_SHDW_WKMODE0_NONE          0
 #define                        AT91_SHDW_WKMODE0_HIGH          1
@@ -30,7 +40,7 @@
 #define                        AT91_SHDW_CPTWK0_(x)    ((x) << 4)
 #define                AT91_SHDW_RTTWKEN       (1   << 16)             /* Real Time Timer Wake-up Enable */
 
-#define AT91_SHDW_SR           (AT91_SHDWC + 0x08)     /* Shut Down Status Register */
+#define AT91_SHDW_SR           0x08                    /* Shut Down Status Register */
 #define                AT91_SHDW_WAKEUP0       (1 <<  0)               /* Wake-up 0 Status */
 #define                AT91_SHDW_RTTWK         (1 << 16)               /* Real-time Timer Wake-up */
 #define                AT91_SHDW_RTCWK         (1 << 17)               /* Real-time Clock Wake-up [SAM9RL] */
index c5df1e8..4c0e2f6 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_ECC       (0xffffe200 - AT91_BASE_SYS)
 #define AT91_BCRAMC    (0xffffe400 - AT91_BASE_SYS)
 #define AT91_DDRSDRC0  (0xffffe600 - AT91_BASE_SYS)
-#define AT91_SMC       (0xffffe800 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffea00 - AT91_BASE_SYS)
-#define AT91_CCFG      (0xffffeb10 - AT91_BASE_SYS)
-#define AT91_DMA       (0xffffec00 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (cpu_is_at91cap9_revB() ?       \
                        (0xfffffd50 - AT91_BASE_SYS) :  \
                        (0xfffffd60 - AT91_BASE_SYS))
 
+#define AT91CAP9_BASE_ECC      0xffffe200
+#define AT91CAP9_BASE_DMA      0xffffec00
+#define AT91CAP9_BASE_SMC      0xffffe800
+#define AT91CAP9_BASE_DBGU     AT91_BASE_DBGU1
+#define AT91CAP9_BASE_PIOA     0xfffff200
+#define AT91CAP9_BASE_PIOB     0xfffff400
+#define AT91CAP9_BASE_PIOC     0xfffff600
+#define AT91CAP9_BASE_PIOD     0xfffff800
+#define AT91CAP9_BASE_SHDWC    0xfffffd10
+#define AT91CAP9_BASE_RTT      0xfffffd20
+#define AT91CAP9_BASE_PIT      0xfffffd30
+#define AT91CAP9_BASE_WDT      0xfffffd40
+
 #define AT91_USART0    AT91CAP9_BASE_US0
 #define AT91_USART1    AT91CAP9_BASE_US1
 #define AT91_USART2    AT91CAP9_BASE_US2
index e4037b5..bacb511 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)    /* Advanced Interrupt Controller */
-#define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)    /* Debug Unit */
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)    /* PIO Controller A */
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)    /* PIO Controller B */
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)    /* PIO Controller C */
-#define AT91_PIOD      (0xfffffa00 - AT91_BASE_SYS)    /* PIO Controller D */
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)    /* Power Management Controller */
 #define AT91_ST                (0xfffffd00 - AT91_BASE_SYS)    /* System Timer */
-#define AT91_RTC       (0xfffffe00 - AT91_BASE_SYS)    /* Real-Time Clock */
 #define AT91_MC                (0xffffff00 - AT91_BASE_SYS)    /* Memory Controllers */
 
+#define AT91RM9200_BASE_DBGU   AT91_BASE_DBGU0 /* Debug Unit */
+#define AT91RM9200_BASE_PIOA   0xfffff400      /* PIO Controller A */
+#define AT91RM9200_BASE_PIOB   0xfffff600      /* PIO Controller B */
+#define AT91RM9200_BASE_PIOC   0xfffff800      /* PIO Controller C */
+#define AT91RM9200_BASE_PIOD   0xfffffa00      /* PIO Controller D */
+#define AT91RM9200_BASE_RTC    0xfffffe00      /* Real-Time Clock */
+
 #define AT91_USART0    AT91RM9200_BASE_US0
 #define AT91_USART1    AT91RM9200_BASE_US1
 #define AT91_USART2    AT91RM9200_BASE_US2
index 9a79116..f937c47 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_ECC       (0xffffe800 - AT91_BASE_SYS)
 #define AT91_SDRAMC0   (0xffffea00 - AT91_BASE_SYS)
-#define AT91_SMC       (0xffffec00 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffee00 - AT91_BASE_SYS)
-#define AT91_CCFG      (0xffffef10 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd50 - AT91_BASE_SYS)
 
+#define AT91SAM9260_BASE_ECC   0xffffe800
+#define AT91SAM9260_BASE_SMC   0xffffec00
+#define AT91SAM9260_BASE_DBGU  AT91_BASE_DBGU0
+#define AT91SAM9260_BASE_PIOA  0xfffff400
+#define AT91SAM9260_BASE_PIOB  0xfffff600
+#define AT91SAM9260_BASE_PIOC  0xfffff800
+#define AT91SAM9260_BASE_SHDWC 0xfffffd10
+#define AT91SAM9260_BASE_RTT   0xfffffd20
+#define AT91SAM9260_BASE_PIT   0xfffffd30
+#define AT91SAM9260_BASE_WDT   0xfffffd40
+
 #define AT91_USART0    AT91SAM9260_BASE_US0
 #define AT91_USART1    AT91SAM9260_BASE_US1
 #define AT91_USART2    AT91SAM9260_BASE_US2
index ce59620..175604e 100644 (file)
  * System Peripherals (offset from AT91_BASE_SYS)
  */
 #define AT91_SDRAMC0   (0xffffea00 - AT91_BASE_SYS)
-#define AT91_SMC       (0xffffec00 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffee00 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd50 - AT91_BASE_SYS)
 
+#define AT91SAM9261_BASE_SMC   0xffffec00
+#define AT91SAM9261_BASE_DBGU  AT91_BASE_DBGU0
+#define AT91SAM9261_BASE_PIOA  0xfffff400
+#define AT91SAM9261_BASE_PIOB  0xfffff600
+#define AT91SAM9261_BASE_PIOC  0xfffff800
+#define AT91SAM9261_BASE_SHDWC 0xfffffd10
+#define AT91SAM9261_BASE_RTT   0xfffffd20
+#define AT91SAM9261_BASE_PIT   0xfffffd30
+#define AT91SAM9261_BASE_WDT   0xfffffd40
+
 #define AT91_USART0    AT91SAM9261_BASE_US0
 #define AT91_USART1    AT91SAM9261_BASE_US1
 #define AT91_USART2    AT91SAM9261_BASE_US2
index f1b9296..80c9150 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_ECC0      (0xffffe000 - AT91_BASE_SYS)
 #define AT91_SDRAMC0   (0xffffe200 - AT91_BASE_SYS)
-#define AT91_SMC0      (0xffffe400 - AT91_BASE_SYS)
-#define AT91_ECC1      (0xffffe600 - AT91_BASE_SYS)
 #define AT91_SDRAMC1   (0xffffe800 - AT91_BASE_SYS)
-#define AT91_SMC1      (0xffffea00 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffec00 - AT91_BASE_SYS)
-#define AT91_CCFG      (0xffffed10 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOE      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT0      (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
-#define AT91_RTT1      (0xfffffd50 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
 
+#define AT91SAM9263_BASE_ECC0  0xffffe000
+#define AT91SAM9263_BASE_SMC0  0xffffe400
+#define AT91SAM9263_BASE_ECC1  0xffffe600
+#define AT91SAM9263_BASE_SMC1  0xffffea00
+#define AT91SAM9263_BASE_DBGU  AT91_BASE_DBGU1
+#define AT91SAM9263_BASE_PIOA  0xfffff200
+#define AT91SAM9263_BASE_PIOB  0xfffff400
+#define AT91SAM9263_BASE_PIOC  0xfffff600
+#define AT91SAM9263_BASE_PIOD  0xfffff800
+#define AT91SAM9263_BASE_PIOE  0xfffffa00
+#define AT91SAM9263_BASE_SHDWC 0xfffffd10
+#define AT91SAM9263_BASE_RTT0  0xfffffd20
+#define AT91SAM9263_BASE_PIT   0xfffffd30
+#define AT91SAM9263_BASE_WDT   0xfffffd40
+#define AT91SAM9263_BASE_RTT1  0xfffffd50
+
 #define AT91_USART0    AT91SAM9263_BASE_US0
 #define AT91_USART1    AT91SAM9263_BASE_US1
 #define AT91_USART2    AT91SAM9263_BASE_US2
index 57de620..eb18a70 100644 (file)
@@ -16,7 +16,9 @@
 #ifndef AT91SAM9_SMC_H
 #define AT91SAM9_SMC_H
 
-#define AT91_SMC_SETUP(n)      (AT91_SMC + 0x00 + ((n)*0x10))  /* Setup Register for CS n */
+#include <mach/cpu.h>
+
+#define AT91_SMC_SETUP         0x00                            /* Setup Register for CS n */
 #define                AT91_SMC_NWESETUP       (0x3f << 0)                     /* NWE Setup Length */
 #define                        AT91_SMC_NWESETUP_(x)   ((x) << 0)
 #define                AT91_SMC_NCS_WRSETUP    (0x3f << 8)                     /* NCS Setup Length in Write Access */
@@ -26,7 +28,7 @@
 #define                AT91_SMC_NCS_RDSETUP    (0x3f << 24)                    /* NCS Setup Length in Read Access */
 #define                        AT91_SMC_NCS_RDSETUP_(x)        ((x) << 24)
 
-#define AT91_SMC_PULSE(n)      (AT91_SMC + 0x04 + ((n)*0x10))  /* Pulse Register for CS n */
+#define AT91_SMC_PULSE         0x04                            /* Pulse Register for CS n */
 #define                AT91_SMC_NWEPULSE       (0x7f <<  0)                    /* NWE Pulse Length */
 #define                        AT91_SMC_NWEPULSE_(x)   ((x) << 0)
 #define                AT91_SMC_NCS_WRPULSE    (0x7f <<  8)                    /* NCS Pulse Length in Write Access */
 #define                AT91_SMC_NCS_RDPULSE    (0x7f << 24)                    /* NCS Pulse Length in Read Access */
 #define                        AT91_SMC_NCS_RDPULSE_(x)((x) << 24)
 
-#define AT91_SMC_CYCLE(n)      (AT91_SMC + 0x08 + ((n)*0x10))  /* Cycle Register for CS n */
+#define AT91_SMC_CYCLE         0x08                            /* Cycle Register for CS n */
 #define                AT91_SMC_NWECYCLE       (0x1ff << 0 )                   /* Total Write Cycle Length */
 #define                        AT91_SMC_NWECYCLE_(x)   ((x) << 0)
 #define                AT91_SMC_NRDCYCLE       (0x1ff << 16)                   /* Total Read Cycle Length */
 #define                        AT91_SMC_NRDCYCLE_(x)   ((x) << 16)
 
-#define AT91_SMC_MODE(n)       (AT91_SMC + 0x0c + ((n)*0x10))  /* Mode Register for CS n */
+#define AT91_SMC_MODE          0x0c                            /* Mode Register for CS n */
 #define                AT91_SMC_READMODE       (1 <<  0)                       /* Read Mode */
 #define                AT91_SMC_WRITEMODE      (1 <<  1)                       /* Write Mode */
 #define                AT91_SMC_EXNWMODE       (3 <<  4)                       /* NWAIT Mode */
 #define                        AT91_SMC_PS_16                  (2 << 28)
 #define                        AT91_SMC_PS_32                  (3 << 28)
 
-#if defined(AT91_SMC1)         /* The AT91SAM9263 has 2 Static Memory contollers */
-#define AT91_SMC1_SETUP(n)     (AT91_SMC1 + 0x00 + ((n)*0x10)) /* Setup Register for CS n */
-#define AT91_SMC1_PULSE(n)     (AT91_SMC1 + 0x04 + ((n)*0x10)) /* Pulse Register for CS n */
-#define AT91_SMC1_CYCLE(n)     (AT91_SMC1 + 0x08 + ((n)*0x10)) /* Cycle Register for CS n */
-#define AT91_SMC1_MODE(n)      (AT91_SMC1 + 0x0c + ((n)*0x10)) /* Mode Register for CS n */
-#endif
-
 #endif
index 406bb64..f0c23c9 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_ECC       (0xffffe200 - AT91_BASE_SYS)
 #define AT91_DDRSDRC1  (0xffffe400 - AT91_BASE_SYS)
 #define AT91_DDRSDRC0  (0xffffe600 - AT91_BASE_SYS)
-#define AT91_SMC       (0xffffe800 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffea00 - AT91_BASE_SYS)
-#define AT91_DMA       (0xffffec00 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOE      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
-#define AT91_RTC       (0xfffffdb0 - AT91_BASE_SYS)
+
+#define AT91SAM9G45_BASE_ECC   0xffffe200
+#define AT91SAM9G45_BASE_DMA   0xffffec00
+#define AT91SAM9G45_BASE_SMC   0xffffe800
+#define AT91SAM9G45_BASE_DBGU  AT91_BASE_DBGU1
+#define AT91SAM9G45_BASE_PIOA  0xfffff200
+#define AT91SAM9G45_BASE_PIOB  0xfffff400
+#define AT91SAM9G45_BASE_PIOC  0xfffff600
+#define AT91SAM9G45_BASE_PIOD  0xfffff800
+#define AT91SAM9G45_BASE_PIOE  0xfffffa00
+#define AT91SAM9G45_BASE_SHDWC 0xfffffd10
+#define AT91SAM9G45_BASE_RTT   0xfffffd20
+#define AT91SAM9G45_BASE_PIT   0xfffffd30
+#define AT91SAM9G45_BASE_WDT   0xfffffd40
+#define AT91SAM9G45_BASE_RTC   0xfffffdb0
 
 #define AT91_USART0    AT91SAM9G45_BASE_US0
 #define AT91_USART1    AT91SAM9G45_BASE_US1
index 1aabacd..2bb359e 100644 (file)
 /*
  * System Peripherals (offset from AT91_BASE_SYS)
  */
-#define AT91_DMA       (0xffffe600 - AT91_BASE_SYS)
-#define AT91_ECC       (0xffffe800 - AT91_BASE_SYS)
 #define AT91_SDRAMC0   (0xffffea00 - AT91_BASE_SYS)
-#define AT91_SMC       (0xffffec00 - AT91_BASE_SYS)
 #define AT91_MATRIX    (0xffffee00 - AT91_BASE_SYS)
-#define AT91_CCFG      (0xffffef10 - AT91_BASE_SYS)
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
-#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
-#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
-#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
-#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_SCKCR     (0xfffffd50 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
-#define AT91_RTC       (0xfffffe00 - AT91_BASE_SYS)
+
+#define AT91SAM9RL_BASE_DMA    0xffffe600
+#define AT91SAM9RL_BASE_ECC    0xffffe800
+#define AT91SAM9RL_BASE_SMC    0xffffec00
+#define AT91SAM9RL_BASE_DBGU   AT91_BASE_DBGU0
+#define AT91SAM9RL_BASE_PIOA   0xfffff400
+#define AT91SAM9RL_BASE_PIOB   0xfffff600
+#define AT91SAM9RL_BASE_PIOC   0xfffff800
+#define AT91SAM9RL_BASE_PIOD   0xfffffa00
+#define AT91SAM9RL_BASE_SHDWC  0xfffffd10
+#define AT91SAM9RL_BASE_RTT    0xfffffd20
+#define AT91SAM9RL_BASE_PIT    0xfffffd30
+#define AT91SAM9RL_BASE_WDT    0xfffffd40
+#define AT91SAM9RL_BASE_RTC    0xfffffe00
 
 #define AT91_USART0    AT91SAM9RL_BASE_US0
 #define AT91_USART1    AT91SAM9RL_BASE_US1
index a152ff8..a57829f 100644 (file)
@@ -40,7 +40,6 @@
 #define AT91_PIOA      (0xffff0000 - AT91_BASE_SYS)    /* PIO Controller A */
 #define AT91_PS                (0xffff4000 - AT91_BASE_SYS)    /* Power Save */
 #define AT91_WD                (0xffff8000 - AT91_BASE_SYS)    /* Watchdog Timer */
-#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)    /* Advanced Interrupt Controller */
 
 /*
  * The AT91x40 series doesn't have a debug unit like the other AT91 parts.
index eac92e9..d0b377b 100644 (file)
 #include <linux/atmel-mci.h>
 #include <sound/atmel-ac97c.h>
 #include <linux/serial.h>
+#include <linux/platform_data/macb.h>
 
  /* USB Device */
 struct at91_udc_data {
-       u8      vbus_pin;               /* high == host powering us */
+       int     vbus_pin;               /* high == host powering us */
        u8      vbus_active_low;        /* vbus polarity */
        u8      vbus_polled;            /* Use polling, not interrupt */
-       u8      pullup_pin;             /* active == D+ pulled up */
+       int     pullup_pin;             /* active == D+ pulled up */
        u8      pullup_active_low;      /* true == pullup_pin is active low */
 };
 extern void __init at91_add_device_udc(struct at91_udc_data *data);
@@ -56,10 +57,10 @@ extern void __init at91_add_device_usba(struct usba_platform_data *data);
 
  /* Compact Flash */
 struct at91_cf_data {
-       u8      irq_pin;                /* I/O IRQ */
-       u8      det_pin;                /* Card detect */
-       u8      vcc_pin;                /* power switching */
-       u8      rst_pin;                /* card reset */
+       int     irq_pin;                /* I/O IRQ */
+       int     det_pin;                /* Card detect */
+       int     vcc_pin;                /* power switching */
+       int     rst_pin;                /* card reset */
        u8      chipselect;             /* EBI Chip Select number */
        u8      flags;
 #define AT91_CF_TRUE_IDE       0x01
@@ -70,37 +71,26 @@ extern void __init at91_add_device_cf(struct at91_cf_data *data);
  /* MMC / SD */
   /* at91_mci platform config */
 struct at91_mmc_data {
-       u8              det_pin;        /* card detect IRQ */
+       int             det_pin;        /* card detect IRQ */
        unsigned        slot_b:1;       /* uses Slot B */
        unsigned        wire4:1;        /* (SD) supports DAT0..DAT3 */
-       u8              wp_pin;         /* (SD) writeprotect detect */
-       u8              vcc_pin;        /* power switching (high == on) */
+       int             wp_pin;         /* (SD) writeprotect detect */
+       int             vcc_pin;        /* power switching (high == on) */
 };
 extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
 
   /* atmel-mci platform config */
 extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data);
 
- /* Ethernet (EMAC & MACB) */
-struct at91_eth_data {
-       u32             phy_mask;
-       u8              phy_irq_pin;    /* PHY IRQ */
-       u8              is_rmii;        /* using RMII interface? */
-};
-extern void __init at91_add_device_eth(struct at91_eth_data *data);
-
-#if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) \
-       || defined(CONFIG_ARCH_AT91SAM9G45)
-#define eth_platform_data      at91_eth_data
-#endif
+extern void __init at91_add_device_eth(struct macb_platform_data *data);
 
  /* USB Host */
 struct at91_usbh_data {
        u8              ports;          /* number of ports on root hub */
-       u8              vbus_pin[2];    /* port power-control pin */
+       int             vbus_pin[2];    /* port power-control pin */
        u8              vbus_pin_inverted;
        u8              overcurrent_supported;
-       u8              overcurrent_pin[2];
+       int             overcurrent_pin[2];
        u8              overcurrent_status[2];
        u8              overcurrent_changed[2];
 };
@@ -110,9 +100,9 @@ extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data);
 
  /* NAND / SmartMedia */
 struct atmel_nand_data {
-       u8              enable_pin;     /* chip enable */
-       u8              det_pin;        /* card detect */
-       u8              rdy_pin;        /* ready/busy */
+       int             enable_pin;     /* chip enable */
+       int             det_pin;        /* card detect */
+       int             rdy_pin;        /* ready/busy */
        u8              rdy_pin_active_low;     /* rdy_pin value is inverted */
        u8              ale;            /* address line number connected to ALE */
        u8              cle;            /* address line number connected to CLE */
index 0ed8648..c6bb9e2 100644 (file)
 #include <mach/hardware.h>
 #include <mach/at91_dbgu.h>
 
+#if defined(CONFIG_AT91_DEBUG_LL_DBGU0)
+#define AT91_DBGU AT91_BASE_DBGU0
+#else
+#define AT91_DBGU AT91_BASE_DBGU1
+#endif
+
        .macro  addruart, rp, rv, tmp
-       ldr     \rp, =(AT91_BASE_SYS + AT91_DBGU)       @ System peripherals (phys address)
-       ldr     \rv, =(AT91_VA_BASE_SYS + AT91_DBGU)    @ System peripherals (virt address)
+       ldr     \rp, =AT91_DBGU                         @ System peripherals (phys address)
+       ldr     \rv, =AT91_IO_P2V(AT91_DBGU)            @ System peripherals (virt address)
        .endm
 
        .macro  senduart,rd,rx
index 7ab68f9..423eea0 100644 (file)
        .endm
 
        .macro  get_irqnr_preamble, base, tmp
-       ldr     \base, =(AT91_VA_BASE_SYS + AT91_AIC)           @ base virtual address of AIC peripheral
+       ldr     \base, =at91_aic_base           @ base virtual address of AIC peripheral
+       ldr     \base, [\base]
        .endm
 
        .macro  arch_ret_to_user, tmp1, tmp2
        .endm
 
        .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
-       ldr     \irqnr, [\base, #(AT91_AIC_IVR - AT91_AIC)]     @ read IRQ vector register: de-asserts nIRQ to processor (and clears interrupt)
-       ldr     \irqstat, [\base, #(AT91_AIC_ISR - AT91_AIC)]   @ read interrupt source number
-       teq     \irqstat, #0                                    @ ISR is 0 when no current interrupt, or spurious interrupt
-       streq   \tmp, [\base, #(AT91_AIC_EOICR - AT91_AIC)]     @ not going to be handled further, then ACK it now.
+       ldr     \irqnr, [\base, #AT91_AIC_IVR]          @ read IRQ vector register: de-asserts nIRQ to processor (and clears interrupt)
+       ldr     \irqstat, [\base, #AT91_AIC_ISR]        @ read interrupt source number
+       teq     \irqstat, #0                            @ ISR is 0 when no current interrupt, or spurious interrupt
+       streq   \tmp, [\base, #AT91_AIC_EOICR]          @ not going to be handled further, then ACK it now.
        .endm
 
index 2b9a1f5..e3fd225 100644 (file)
 #include <linux/kernel.h>
 #include <asm/irq.h>
 
-#define PIN_BASE               NR_AIC_IRQS
-
 #define MAX_GPIO_BANKS         5
-#define NR_BUILTIN_GPIO                (PIN_BASE + (MAX_GPIO_BANKS * 32))
+#define NR_BUILTIN_GPIO                (MAX_GPIO_BANKS * 32)
 
 /* these pin numbers double as IRQ numbers, like AT91xxx_ID_* values */
 
-#define        AT91_PIN_PA0    (PIN_BASE + 0x00 + 0)
-#define        AT91_PIN_PA1    (PIN_BASE + 0x00 + 1)
-#define        AT91_PIN_PA2    (PIN_BASE + 0x00 + 2)
-#define        AT91_PIN_PA3    (PIN_BASE + 0x00 + 3)
-#define        AT91_PIN_PA4    (PIN_BASE + 0x00 + 4)
-#define        AT91_PIN_PA5    (PIN_BASE + 0x00 + 5)
-#define        AT91_PIN_PA6    (PIN_BASE + 0x00 + 6)
-#define        AT91_PIN_PA7    (PIN_BASE + 0x00 + 7)
-#define        AT91_PIN_PA8    (PIN_BASE + 0x00 + 8)
-#define        AT91_PIN_PA9    (PIN_BASE + 0x00 + 9)
-#define        AT91_PIN_PA10   (PIN_BASE + 0x00 + 10)
-#define        AT91_PIN_PA11   (PIN_BASE + 0x00 + 11)
-#define        AT91_PIN_PA12   (PIN_BASE + 0x00 + 12)
-#define        AT91_PIN_PA13   (PIN_BASE + 0x00 + 13)
-#define        AT91_PIN_PA14   (PIN_BASE + 0x00 + 14)
-#define        AT91_PIN_PA15   (PIN_BASE + 0x00 + 15)
-#define        AT91_PIN_PA16   (PIN_BASE + 0x00 + 16)
-#define        AT91_PIN_PA17   (PIN_BASE + 0x00 + 17)
-#define        AT91_PIN_PA18   (PIN_BASE + 0x00 + 18)
-#define        AT91_PIN_PA19   (PIN_BASE + 0x00 + 19)
-#define        AT91_PIN_PA20   (PIN_BASE + 0x00 + 20)
-#define        AT91_PIN_PA21   (PIN_BASE + 0x00 + 21)
-#define        AT91_PIN_PA22   (PIN_BASE + 0x00 + 22)
-#define        AT91_PIN_PA23   (PIN_BASE + 0x00 + 23)
-#define        AT91_PIN_PA24   (PIN_BASE + 0x00 + 24)
-#define        AT91_PIN_PA25   (PIN_BASE + 0x00 + 25)
-#define        AT91_PIN_PA26   (PIN_BASE + 0x00 + 26)
-#define        AT91_PIN_PA27   (PIN_BASE + 0x00 + 27)
-#define        AT91_PIN_PA28   (PIN_BASE + 0x00 + 28)
-#define        AT91_PIN_PA29   (PIN_BASE + 0x00 + 29)
-#define        AT91_PIN_PA30   (PIN_BASE + 0x00 + 30)
-#define        AT91_PIN_PA31   (PIN_BASE + 0x00 + 31)
-
-#define        AT91_PIN_PB0    (PIN_BASE + 0x20 + 0)
-#define        AT91_PIN_PB1    (PIN_BASE + 0x20 + 1)
-#define        AT91_PIN_PB2    (PIN_BASE + 0x20 + 2)
-#define        AT91_PIN_PB3    (PIN_BASE + 0x20 + 3)
-#define        AT91_PIN_PB4    (PIN_BASE + 0x20 + 4)
-#define        AT91_PIN_PB5    (PIN_BASE + 0x20 + 5)
-#define        AT91_PIN_PB6    (PIN_BASE + 0x20 + 6)
-#define        AT91_PIN_PB7    (PIN_BASE + 0x20 + 7)
-#define        AT91_PIN_PB8    (PIN_BASE + 0x20 + 8)
-#define        AT91_PIN_PB9    (PIN_BASE + 0x20 + 9)
-#define        AT91_PIN_PB10   (PIN_BASE + 0x20 + 10)
-#define        AT91_PIN_PB11   (PIN_BASE + 0x20 + 11)
-#define        AT91_PIN_PB12   (PIN_BASE + 0x20 + 12)
-#define        AT91_PIN_PB13   (PIN_BASE + 0x20 + 13)
-#define        AT91_PIN_PB14   (PIN_BASE + 0x20 + 14)
-#define        AT91_PIN_PB15   (PIN_BASE + 0x20 + 15)
-#define        AT91_PIN_PB16   (PIN_BASE + 0x20 + 16)
-#define        AT91_PIN_PB17   (PIN_BASE + 0x20 + 17)
-#define        AT91_PIN_PB18   (PIN_BASE + 0x20 + 18)
-#define        AT91_PIN_PB19   (PIN_BASE + 0x20 + 19)
-#define        AT91_PIN_PB20   (PIN_BASE + 0x20 + 20)
-#define        AT91_PIN_PB21   (PIN_BASE + 0x20 + 21)
-#define        AT91_PIN_PB22   (PIN_BASE + 0x20 + 22)
-#define        AT91_PIN_PB23   (PIN_BASE + 0x20 + 23)
-#define        AT91_PIN_PB24   (PIN_BASE + 0x20 + 24)
-#define        AT91_PIN_PB25   (PIN_BASE + 0x20 + 25)
-#define        AT91_PIN_PB26   (PIN_BASE + 0x20 + 26)
-#define        AT91_PIN_PB27   (PIN_BASE + 0x20 + 27)
-#define        AT91_PIN_PB28   (PIN_BASE + 0x20 + 28)
-#define        AT91_PIN_PB29   (PIN_BASE + 0x20 + 29)
-#define        AT91_PIN_PB30   (PIN_BASE + 0x20 + 30)
-#define        AT91_PIN_PB31   (PIN_BASE + 0x20 + 31)
-
-#define        AT91_PIN_PC0    (PIN_BASE + 0x40 + 0)
-#define        AT91_PIN_PC1    (PIN_BASE + 0x40 + 1)
-#define        AT91_PIN_PC2    (PIN_BASE + 0x40 + 2)
-#define        AT91_PIN_PC3    (PIN_BASE + 0x40 + 3)
-#define        AT91_PIN_PC4    (PIN_BASE + 0x40 + 4)
-#define        AT91_PIN_PC5    (PIN_BASE + 0x40 + 5)
-#define        AT91_PIN_PC6    (PIN_BASE + 0x40 + 6)
-#define        AT91_PIN_PC7    (PIN_BASE + 0x40 + 7)
-#define        AT91_PIN_PC8    (PIN_BASE + 0x40 + 8)
-#define        AT91_PIN_PC9    (PIN_BASE + 0x40 + 9)
-#define        AT91_PIN_PC10   (PIN_BASE + 0x40 + 10)
-#define        AT91_PIN_PC11   (PIN_BASE + 0x40 + 11)
-#define        AT91_PIN_PC12   (PIN_BASE + 0x40 + 12)
-#define        AT91_PIN_PC13   (PIN_BASE + 0x40 + 13)
-#define        AT91_PIN_PC14   (PIN_BASE + 0x40 + 14)
-#define        AT91_PIN_PC15   (PIN_BASE + 0x40 + 15)
-#define        AT91_PIN_PC16   (PIN_BASE + 0x40 + 16)
-#define        AT91_PIN_PC17   (PIN_BASE + 0x40 + 17)
-#define        AT91_PIN_PC18   (PIN_BASE + 0x40 + 18)
-#define        AT91_PIN_PC19   (PIN_BASE + 0x40 + 19)
-#define        AT91_PIN_PC20   (PIN_BASE + 0x40 + 20)
-#define        AT91_PIN_PC21   (PIN_BASE + 0x40 + 21)
-#define        AT91_PIN_PC22   (PIN_BASE + 0x40 + 22)
-#define        AT91_PIN_PC23   (PIN_BASE + 0x40 + 23)
-#define        AT91_PIN_PC24   (PIN_BASE + 0x40 + 24)
-#define        AT91_PIN_PC25   (PIN_BASE + 0x40 + 25)
-#define        AT91_PIN_PC26   (PIN_BASE + 0x40 + 26)
-#define        AT91_PIN_PC27   (PIN_BASE + 0x40 + 27)
-#define        AT91_PIN_PC28   (PIN_BASE + 0x40 + 28)
-#define        AT91_PIN_PC29   (PIN_BASE + 0x40 + 29)
-#define        AT91_PIN_PC30   (PIN_BASE + 0x40 + 30)
-#define        AT91_PIN_PC31   (PIN_BASE + 0x40 + 31)
-
-#define        AT91_PIN_PD0    (PIN_BASE + 0x60 + 0)
-#define        AT91_PIN_PD1    (PIN_BASE + 0x60 + 1)
-#define        AT91_PIN_PD2    (PIN_BASE + 0x60 + 2)
-#define        AT91_PIN_PD3    (PIN_BASE + 0x60 + 3)
-#define        AT91_PIN_PD4    (PIN_BASE + 0x60 + 4)
-#define        AT91_PIN_PD5    (PIN_BASE + 0x60 + 5)
-#define        AT91_PIN_PD6    (PIN_BASE + 0x60 + 6)
-#define        AT91_PIN_PD7    (PIN_BASE + 0x60 + 7)
-#define        AT91_PIN_PD8    (PIN_BASE + 0x60 + 8)
-#define        AT91_PIN_PD9    (PIN_BASE + 0x60 + 9)
-#define        AT91_PIN_PD10   (PIN_BASE + 0x60 + 10)
-#define        AT91_PIN_PD11   (PIN_BASE + 0x60 + 11)
-#define        AT91_PIN_PD12   (PIN_BASE + 0x60 + 12)
-#define        AT91_PIN_PD13   (PIN_BASE + 0x60 + 13)
-#define        AT91_PIN_PD14   (PIN_BASE + 0x60 + 14)
-#define        AT91_PIN_PD15   (PIN_BASE + 0x60 + 15)
-#define        AT91_PIN_PD16   (PIN_BASE + 0x60 + 16)
-#define        AT91_PIN_PD17   (PIN_BASE + 0x60 + 17)
-#define        AT91_PIN_PD18   (PIN_BASE + 0x60 + 18)
-#define        AT91_PIN_PD19   (PIN_BASE + 0x60 + 19)
-#define        AT91_PIN_PD20   (PIN_BASE + 0x60 + 20)
-#define        AT91_PIN_PD21   (PIN_BASE + 0x60 + 21)
-#define        AT91_PIN_PD22   (PIN_BASE + 0x60 + 22)
-#define        AT91_PIN_PD23   (PIN_BASE + 0x60 + 23)
-#define        AT91_PIN_PD24   (PIN_BASE + 0x60 + 24)
-#define        AT91_PIN_PD25   (PIN_BASE + 0x60 + 25)
-#define        AT91_PIN_PD26   (PIN_BASE + 0x60 + 26)
-#define        AT91_PIN_PD27   (PIN_BASE + 0x60 + 27)
-#define        AT91_PIN_PD28   (PIN_BASE + 0x60 + 28)
-#define        AT91_PIN_PD29   (PIN_BASE + 0x60 + 29)
-#define        AT91_PIN_PD30   (PIN_BASE + 0x60 + 30)
-#define        AT91_PIN_PD31   (PIN_BASE + 0x60 + 31)
-
-#define        AT91_PIN_PE0    (PIN_BASE + 0x80 + 0)
-#define        AT91_PIN_PE1    (PIN_BASE + 0x80 + 1)
-#define        AT91_PIN_PE2    (PIN_BASE + 0x80 + 2)
-#define        AT91_PIN_PE3    (PIN_BASE + 0x80 + 3)
-#define        AT91_PIN_PE4    (PIN_BASE + 0x80 + 4)
-#define        AT91_PIN_PE5    (PIN_BASE + 0x80 + 5)
-#define        AT91_PIN_PE6    (PIN_BASE + 0x80 + 6)
-#define        AT91_PIN_PE7    (PIN_BASE + 0x80 + 7)
-#define        AT91_PIN_PE8    (PIN_BASE + 0x80 + 8)
-#define        AT91_PIN_PE9    (PIN_BASE + 0x80 + 9)
-#define        AT91_PIN_PE10   (PIN_BASE + 0x80 + 10)
-#define        AT91_PIN_PE11   (PIN_BASE + 0x80 + 11)
-#define        AT91_PIN_PE12   (PIN_BASE + 0x80 + 12)
-#define        AT91_PIN_PE13   (PIN_BASE + 0x80 + 13)
-#define        AT91_PIN_PE14   (PIN_BASE + 0x80 + 14)
-#define        AT91_PIN_PE15   (PIN_BASE + 0x80 + 15)
-#define        AT91_PIN_PE16   (PIN_BASE + 0x80 + 16)
-#define        AT91_PIN_PE17   (PIN_BASE + 0x80 + 17)
-#define        AT91_PIN_PE18   (PIN_BASE + 0x80 + 18)
-#define        AT91_PIN_PE19   (PIN_BASE + 0x80 + 19)
-#define        AT91_PIN_PE20   (PIN_BASE + 0x80 + 20)
-#define        AT91_PIN_PE21   (PIN_BASE + 0x80 + 21)
-#define        AT91_PIN_PE22   (PIN_BASE + 0x80 + 22)
-#define        AT91_PIN_PE23   (PIN_BASE + 0x80 + 23)
-#define        AT91_PIN_PE24   (PIN_BASE + 0x80 + 24)
-#define        AT91_PIN_PE25   (PIN_BASE + 0x80 + 25)
-#define        AT91_PIN_PE26   (PIN_BASE + 0x80 + 26)
-#define        AT91_PIN_PE27   (PIN_BASE + 0x80 + 27)
-#define        AT91_PIN_PE28   (PIN_BASE + 0x80 + 28)
-#define        AT91_PIN_PE29   (PIN_BASE + 0x80 + 29)
-#define        AT91_PIN_PE30   (PIN_BASE + 0x80 + 30)
-#define        AT91_PIN_PE31   (PIN_BASE + 0x80 + 31)
+#define        AT91_PIN_PA0    (0x00 + 0)
+#define        AT91_PIN_PA1    (0x00 + 1)
+#define        AT91_PIN_PA2    (0x00 + 2)
+#define        AT91_PIN_PA3    (0x00 + 3)
+#define        AT91_PIN_PA4    (0x00 + 4)
+#define        AT91_PIN_PA5    (0x00 + 5)
+#define        AT91_PIN_PA6    (0x00 + 6)
+#define        AT91_PIN_PA7    (0x00 + 7)
+#define        AT91_PIN_PA8    (0x00 + 8)
+#define        AT91_PIN_PA9    (0x00 + 9)
+#define        AT91_PIN_PA10   (0x00 + 10)
+#define        AT91_PIN_PA11   (0x00 + 11)
+#define        AT91_PIN_PA12   (0x00 + 12)
+#define        AT91_PIN_PA13   (0x00 + 13)
+#define        AT91_PIN_PA14   (0x00 + 14)
+#define        AT91_PIN_PA15   (0x00 + 15)
+#define        AT91_PIN_PA16   (0x00 + 16)
+#define        AT91_PIN_PA17   (0x00 + 17)
+#define        AT91_PIN_PA18   (0x00 + 18)
+#define        AT91_PIN_PA19   (0x00 + 19)
+#define        AT91_PIN_PA20   (0x00 + 20)
+#define        AT91_PIN_PA21   (0x00 + 21)
+#define        AT91_PIN_PA22   (0x00 + 22)
+#define        AT91_PIN_PA23   (0x00 + 23)
+#define        AT91_PIN_PA24   (0x00 + 24)
+#define        AT91_PIN_PA25   (0x00 + 25)
+#define        AT91_PIN_PA26   (0x00 + 26)
+#define        AT91_PIN_PA27   (0x00 + 27)
+#define        AT91_PIN_PA28   (0x00 + 28)
+#define        AT91_PIN_PA29   (0x00 + 29)
+#define        AT91_PIN_PA30   (0x00 + 30)
+#define        AT91_PIN_PA31   (0x00 + 31)
+
+#define        AT91_PIN_PB0    (0x20 + 0)
+#define        AT91_PIN_PB1    (0x20 + 1)
+#define        AT91_PIN_PB2    (0x20 + 2)
+#define        AT91_PIN_PB3    (0x20 + 3)
+#define        AT91_PIN_PB4    (0x20 + 4)
+#define        AT91_PIN_PB5    (0x20 + 5)
+#define        AT91_PIN_PB6    (0x20 + 6)
+#define        AT91_PIN_PB7    (0x20 + 7)
+#define        AT91_PIN_PB8    (0x20 + 8)
+#define        AT91_PIN_PB9    (0x20 + 9)
+#define        AT91_PIN_PB10   (0x20 + 10)
+#define        AT91_PIN_PB11   (0x20 + 11)
+#define        AT91_PIN_PB12   (0x20 + 12)
+#define        AT91_PIN_PB13   (0x20 + 13)
+#define        AT91_PIN_PB14   (0x20 + 14)
+#define        AT91_PIN_PB15   (0x20 + 15)
+#define        AT91_PIN_PB16   (0x20 + 16)
+#define        AT91_PIN_PB17   (0x20 + 17)
+#define        AT91_PIN_PB18   (0x20 + 18)
+#define        AT91_PIN_PB19   (0x20 + 19)
+#define        AT91_PIN_PB20   (0x20 + 20)
+#define        AT91_PIN_PB21   (0x20 + 21)
+#define        AT91_PIN_PB22   (0x20 + 22)
+#define        AT91_PIN_PB23   (0x20 + 23)
+#define        AT91_PIN_PB24   (0x20 + 24)
+#define        AT91_PIN_PB25   (0x20 + 25)
+#define        AT91_PIN_PB26   (0x20 + 26)
+#define        AT91_PIN_PB27   (0x20 + 27)
+#define        AT91_PIN_PB28   (0x20 + 28)
+#define        AT91_PIN_PB29   (0x20 + 29)
+#define        AT91_PIN_PB30   (0x20 + 30)
+#define        AT91_PIN_PB31   (0x20 + 31)
+
+#define        AT91_PIN_PC0    (0x40 + 0)
+#define        AT91_PIN_PC1    (0x40 + 1)
+#define        AT91_PIN_PC2    (0x40 + 2)
+#define        AT91_PIN_PC3    (0x40 + 3)
+#define        AT91_PIN_PC4    (0x40 + 4)
+#define        AT91_PIN_PC5    (0x40 + 5)
+#define        AT91_PIN_PC6    (0x40 + 6)
+#define        AT91_PIN_PC7    (0x40 + 7)
+#define        AT91_PIN_PC8    (0x40 + 8)
+#define        AT91_PIN_PC9    (0x40 + 9)
+#define        AT91_PIN_PC10   (0x40 + 10)
+#define        AT91_PIN_PC11   (0x40 + 11)
+#define        AT91_PIN_PC12   (0x40 + 12)
+#define        AT91_PIN_PC13   (0x40 + 13)
+#define        AT91_PIN_PC14   (0x40 + 14)
+#define        AT91_PIN_PC15   (0x40 + 15)
+#define        AT91_PIN_PC16   (0x40 + 16)
+#define        AT91_PIN_PC17   (0x40 + 17)
+#define        AT91_PIN_PC18   (0x40 + 18)
+#define        AT91_PIN_PC19   (0x40 + 19)
+#define        AT91_PIN_PC20   (0x40 + 20)
+#define        AT91_PIN_PC21   (0x40 + 21)
+#define        AT91_PIN_PC22   (0x40 + 22)
+#define        AT91_PIN_PC23   (0x40 + 23)
+#define        AT91_PIN_PC24   (0x40 + 24)
+#define        AT91_PIN_PC25   (0x40 + 25)
+#define        AT91_PIN_PC26   (0x40 + 26)
+#define        AT91_PIN_PC27   (0x40 + 27)
+#define        AT91_PIN_PC28   (0x40 + 28)
+#define        AT91_PIN_PC29   (0x40 + 29)
+#define        AT91_PIN_PC30   (0x40 + 30)
+#define        AT91_PIN_PC31   (0x40 + 31)
+
+#define        AT91_PIN_PD0    (0x60 + 0)
+#define        AT91_PIN_PD1    (0x60 + 1)
+#define        AT91_PIN_PD2    (0x60 + 2)
+#define        AT91_PIN_PD3    (0x60 + 3)
+#define        AT91_PIN_PD4    (0x60 + 4)
+#define        AT91_PIN_PD5    (0x60 + 5)
+#define        AT91_PIN_PD6    (0x60 + 6)
+#define        AT91_PIN_PD7    (0x60 + 7)
+#define        AT91_PIN_PD8    (0x60 + 8)
+#define        AT91_PIN_PD9    (0x60 + 9)
+#define        AT91_PIN_PD10   (0x60 + 10)
+#define        AT91_PIN_PD11   (0x60 + 11)
+#define        AT91_PIN_PD12   (0x60 + 12)
+#define        AT91_PIN_PD13   (0x60 + 13)
+#define        AT91_PIN_PD14   (0x60 + 14)
+#define        AT91_PIN_PD15   (0x60 + 15)
+#define        AT91_PIN_PD16   (0x60 + 16)
+#define        AT91_PIN_PD17   (0x60 + 17)
+#define        AT91_PIN_PD18   (0x60 + 18)
+#define        AT91_PIN_PD19   (0x60 + 19)
+#define        AT91_PIN_PD20   (0x60 + 20)
+#define        AT91_PIN_PD21   (0x60 + 21)
+#define        AT91_PIN_PD22   (0x60 + 22)
+#define        AT91_PIN_PD23   (0x60 + 23)
+#define        AT91_PIN_PD24   (0x60 + 24)
+#define        AT91_PIN_PD25   (0x60 + 25)
+#define        AT91_PIN_PD26   (0x60 + 26)
+#define        AT91_PIN_PD27   (0x60 + 27)
+#define        AT91_PIN_PD28   (0x60 + 28)
+#define        AT91_PIN_PD29   (0x60 + 29)
+#define        AT91_PIN_PD30   (0x60 + 30)
+#define        AT91_PIN_PD31   (0x60 + 31)
+
+#define        AT91_PIN_PE0    (0x80 + 0)
+#define        AT91_PIN_PE1    (0x80 + 1)
+#define        AT91_PIN_PE2    (0x80 + 2)
+#define        AT91_PIN_PE3    (0x80 + 3)
+#define        AT91_PIN_PE4    (0x80 + 4)
+#define        AT91_PIN_PE5    (0x80 + 5)
+#define        AT91_PIN_PE6    (0x80 + 6)
+#define        AT91_PIN_PE7    (0x80 + 7)
+#define        AT91_PIN_PE8    (0x80 + 8)
+#define        AT91_PIN_PE9    (0x80 + 9)
+#define        AT91_PIN_PE10   (0x80 + 10)
+#define        AT91_PIN_PE11   (0x80 + 11)
+#define        AT91_PIN_PE12   (0x80 + 12)
+#define        AT91_PIN_PE13   (0x80 + 13)
+#define        AT91_PIN_PE14   (0x80 + 14)
+#define        AT91_PIN_PE15   (0x80 + 15)
+#define        AT91_PIN_PE16   (0x80 + 16)
+#define        AT91_PIN_PE17   (0x80 + 17)
+#define        AT91_PIN_PE18   (0x80 + 18)
+#define        AT91_PIN_PE19   (0x80 + 19)
+#define        AT91_PIN_PE20   (0x80 + 20)
+#define        AT91_PIN_PE21   (0x80 + 21)
+#define        AT91_PIN_PE22   (0x80 + 22)
+#define        AT91_PIN_PE23   (0x80 + 23)
+#define        AT91_PIN_PE24   (0x80 + 24)
+#define        AT91_PIN_PE25   (0x80 + 25)
+#define        AT91_PIN_PE26   (0x80 + 26)
+#define        AT91_PIN_PE27   (0x80 + 27)
+#define        AT91_PIN_PE28   (0x80 + 28)
+#define        AT91_PIN_PE29   (0x80 + 29)
+#define        AT91_PIN_PE30   (0x80 + 30)
+#define        AT91_PIN_PE31   (0x80 + 31)
 
 #ifndef __ASSEMBLY__
 /* setup setup routines, called from board init or driver probe() */
@@ -215,8 +213,8 @@ extern void at91_gpio_resume(void);
 
 #include <asm/errno.h>
 
-#define gpio_to_irq(gpio) (gpio)
-#define irq_to_gpio(irq)  (irq)
+#define gpio_to_irq(gpio) (gpio + NR_AIC_IRQS)
+#define irq_to_gpio(irq)  (irq - NR_AIC_IRQS)
 
 #endif /* __ASSEMBLY__ */
 
index 483478d..2d0e4e9 100644 (file)
 
 #include <asm/sizes.h>
 
+/* DBGU base */
+/* rm9200, 9260/9g20, 9261/9g10, 9rl */
+#define AT91_BASE_DBGU0        0xfffff200
+/* 9263, 9g45, cap9 */
+#define AT91_BASE_DBGU1        0xffffee00
+
 #if defined(CONFIG_ARCH_AT91RM9200)
 #include <mach/at91rm9200.h>
 #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)
 #define AT91_BASE_SYS  0xffffc000
 #endif
 
+/*
+ * On all at91 have the Advanced Interrupt Controller starts at address
+ * 0xfffff000
+ */
+#define AT91_AIC       0xfffff000
+
 /*
  * Peripheral identifiers/interrupts.
  */
index 36bd55f..ac8b7df 100644 (file)
@@ -31,7 +31,7 @@
  * Acknowledge interrupt with AIC after interrupt has been handled.
  *   (by kernel/irq.c)
  */
-#define irq_finish(irq) do { at91_sys_write(AT91_AIC_EOICR, 0); } while (0)
+#define irq_finish(irq) do { at91_aic_write(AT91_AIC_EOICR, 0); } while (0)
 
 
 /*
index 85820ad..5e917a6 100644 (file)
 
 #include <mach/hardware.h>
 
-#if defined(CONFIG_ARCH_AT91RM9200)
+#ifdef CONFIG_ARCH_AT91X40
 
-#define CLOCK_TICK_RATE                (AT91_SLOW_CLOCK)
-
-#elif defined(CONFIG_ARCH_AT91SAM9260)
-
-#if defined(CONFIG_MACH_USB_A9260) || defined(CONFIG_MACH_QIL_A9260)
-#define AT91SAM9_MASTER_CLOCK  90000000
-#else
-#define AT91SAM9_MASTER_CLOCK  99300000
-#endif
-
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9261)
-
-#define AT91SAM9_MASTER_CLOCK  99300000
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9G10)
-
-#define AT91SAM9_MASTER_CLOCK  133000000
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9263)
-
-#if defined(CONFIG_MACH_USB_A9263)
-#define AT91SAM9_MASTER_CLOCK  90000000
-#else
-#define AT91SAM9_MASTER_CLOCK  99959500
-#endif
-
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9RL)
-
-#define AT91SAM9_MASTER_CLOCK  100000000
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9G20)
+#define AT91X40_MASTER_CLOCK   40000000
+#define CLOCK_TICK_RATE                (AT91X40_MASTER_CLOCK)
 
-#if defined(CONFIG_MACH_USB_A9G20)
-#define AT91SAM9_MASTER_CLOCK  133000000
 #else
-#define AT91SAM9_MASTER_CLOCK  132096000
-#endif
-
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91SAM9G45)
 
-#define AT91SAM9_MASTER_CLOCK  133333333
-#define CLOCK_TICK_RATE                (AT91SAM9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91CAP9)
-
-#define AT91CAP9_MASTER_CLOCK  100000000
-#define CLOCK_TICK_RATE                (AT91CAP9_MASTER_CLOCK/16)
-
-#elif defined(CONFIG_ARCH_AT91X40)
-
-#define AT91X40_MASTER_CLOCK   40000000
-#define CLOCK_TICK_RATE                (AT91X40_MASTER_CLOCK)
+#define CLOCK_TICK_RATE                12345678
 
 #endif
 
-#endif
+#endif /* __ASM_ARCH_TIMEX_H */
index 18bdcde..0234fd9 100644 (file)
 #include <linux/io.h>
 #include <linux/atmel_serial.h>
 
-#if defined(CONFIG_AT91_EARLY_DBGU)
-#define UART_OFFSET (AT91_DBGU + AT91_BASE_SYS)
+#if defined(CONFIG_AT91_EARLY_DBGU0)
+#define UART_OFFSET AT91_BASE_DBGU0
+#elif defined(CONFIG_AT91_EARLY_DBGU1)
+#define UART_OFFSET AT91_BASE_DBGU1
 #elif defined(CONFIG_AT91_EARLY_USART0)
 #define UART_OFFSET AT91_USART0
 #elif defined(CONFIG_AT91_EARLY_USART1)
index 9665265..be6b639 100644 (file)
 #include <asm/mach/irq.h>
 #include <asm/mach/map.h>
 
+void __iomem *at91_aic_base;
 
 static void at91_aic_mask_irq(struct irq_data *d)
 {
        /* Disable interrupt on AIC */
-       at91_sys_write(AT91_AIC_IDCR, 1 << d->irq);
+       at91_aic_write(AT91_AIC_IDCR, 1 << d->irq);
 }
 
 static void at91_aic_unmask_irq(struct irq_data *d)
 {
        /* Enable interrupt on AIC */
-       at91_sys_write(AT91_AIC_IECR, 1 << d->irq);
+       at91_aic_write(AT91_AIC_IECR, 1 << d->irq);
 }
 
 unsigned int at91_extern_irq;
@@ -77,8 +78,8 @@ static int at91_aic_set_type(struct irq_data *d, unsigned type)
                return -EINVAL;
        }
 
-       smr = at91_sys_read(AT91_AIC_SMR(d->irq)) & ~AT91_AIC_SRCTYPE;
-       at91_sys_write(AT91_AIC_SMR(d->irq), smr | srctype);
+       smr = at91_aic_read(AT91_AIC_SMR(d->irq)) & ~AT91_AIC_SRCTYPE;
+       at91_aic_write(AT91_AIC_SMR(d->irq), smr | srctype);
        return 0;
 }
 
@@ -102,15 +103,15 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value)
 
 void at91_irq_suspend(void)
 {
-       backups = at91_sys_read(AT91_AIC_IMR);
-       at91_sys_write(AT91_AIC_IDCR, backups);
-       at91_sys_write(AT91_AIC_IECR, wakeups);
+       backups = at91_aic_read(AT91_AIC_IMR);
+       at91_aic_write(AT91_AIC_IDCR, backups);
+       at91_aic_write(AT91_AIC_IECR, wakeups);
 }
 
 void at91_irq_resume(void)
 {
-       at91_sys_write(AT91_AIC_IDCR, wakeups);
-       at91_sys_write(AT91_AIC_IECR, backups);
+       at91_aic_write(AT91_AIC_IDCR, wakeups);
+       at91_aic_write(AT91_AIC_IECR, backups);
 }
 
 #else
@@ -133,34 +134,39 @@ void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])
 {
        unsigned int i;
 
+       at91_aic_base = ioremap(AT91_AIC, 512);
+
+       if (!at91_aic_base)
+               panic("Impossible to ioremap AT91_AIC\n");
+
        /*
         * The IVR is used by macro get_irqnr_and_base to read and verify.
         * The irq number is NR_AIC_IRQS when a spurious interrupt has occurred.
         */
        for (i = 0; i < NR_AIC_IRQS; i++) {
                /* Put irq number in Source Vector Register: */
-               at91_sys_write(AT91_AIC_SVR(i), i);
+               at91_aic_write(AT91_AIC_SVR(i), i);
                /* Active Low interrupt, with the specified priority */
-               at91_sys_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]);
+               at91_aic_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]);
 
                irq_set_chip_and_handler(i, &at91_aic_chip, handle_level_irq);
                set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
 
                /* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */
                if (i < 8)
-                       at91_sys_write(AT91_AIC_EOICR, 0);
+                       at91_aic_write(AT91_AIC_EOICR, 0);
        }
 
        /*
         * Spurious Interrupt ID in Spurious Vector Register is NR_AIC_IRQS
         * When there is no current interrupt, the IRQ Vector Register reads the value stored in AIC_SPU
         */
-       at91_sys_write(AT91_AIC_SPU, NR_AIC_IRQS);
+       at91_aic_write(AT91_AIC_SPU, NR_AIC_IRQS);
 
        /* No debugging in AIC: Debug (Protect) Control Register */
-       at91_sys_write(AT91_AIC_DCR, 0);
+       at91_aic_write(AT91_AIC_DCR, 0);
 
        /* Disable and clear all interrupts initially */
-       at91_sys_write(AT91_AIC_IDCR, 0xFFFFFFFF);
-       at91_sys_write(AT91_AIC_ICCR, 0xFFFFFFFF);
+       at91_aic_write(AT91_AIC_IDCR, 0xFFFFFFFF);
+       at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF);
 }
index 7046158..62ad955 100644 (file)
@@ -34,7 +34,7 @@
 /*
  * Show the reason for the previous system reset.
  */
-#if defined(AT91_SHDWC)
+#if defined(AT91_RSTC)
 
 #include <mach/at91_rstc.h>
 #include <mach/at91_shdwc.h>
@@ -58,8 +58,11 @@ static void __init show_reset_status(void)
        char *reason, *r2 = reset;
        u32 reset_type, wake_type;
 
+       if (!at91_shdwc_base)
+               return;
+
        reset_type = at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_RSTTYP;
-       wake_type = at91_sys_read(AT91_SHDW_SR);
+       wake_type = at91_shdwc_read(AT91_SHDW_SR);
 
        switch (reset_type) {
        case AT91_RSTC_RSTTYP_GENERAL:
@@ -215,7 +218,7 @@ static int at91_pm_enter(suspend_state_t state)
                                        | (1 << AT91_ID_FIQ)
                                        | (1 << AT91_ID_SYS)
                                        | (at91_extern_irq))
-                               & at91_sys_read(AT91_AIC_IMR),
+                               & at91_aic_read(AT91_AIC_IMR),
                        state);
 
        switch (state) {
@@ -283,7 +286,7 @@ static int at91_pm_enter(suspend_state_t state)
        }
 
        pr_debug("AT91: PM - wakeup %08x\n",
-                       at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
+                       at91_aic_read(AT91_AIC_IPR) & at91_aic_read(AT91_AIC_IMR));
 
 error:
        target_state = PM_SUSPEND_ON;
index 5eab6aa..8294783 100644 (file)
 
 #include <linux/module.h>
 #include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 
 #include <mach/at91sam9_smc.h>
 
 #include "sam9_smc.h"
 
-void __init sam9_smc_configure(int cs, struct sam9_smc_config* config)
+
+#define AT91_SMC_CS(id, n)     (smc_base_addr[id] + ((n) * 0x10))
+
+static void __iomem *smc_base_addr[2];
+
+static void __init sam9_smc_cs_configure(void __iomem *base, struct sam9_smc_config* config)
 {
+
        /* Setup register */
-       at91_sys_write(AT91_SMC_SETUP(cs),
-                 AT91_SMC_NWESETUP_(config->nwe_setup)
-               | AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
-               | AT91_SMC_NRDSETUP_(config->nrd_setup)
-               | AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup)
-       );
+       __raw_writel(AT91_SMC_NWESETUP_(config->nwe_setup)
+                  | AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
+                  | AT91_SMC_NRDSETUP_(config->nrd_setup)
+                  | AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup),
+                  base + AT91_SMC_SETUP);
 
        /* Pulse register */
-       at91_sys_write(AT91_SMC_PULSE(cs),
-                 AT91_SMC_NWEPULSE_(config->nwe_pulse)
-               | AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
-                | AT91_SMC_NRDPULSE_(config->nrd_pulse)
-               | AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse)
-       );
+       __raw_writel(AT91_SMC_NWEPULSE_(config->nwe_pulse)
+                  | AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
+                  | AT91_SMC_NRDPULSE_(config->nrd_pulse)
+                  | AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse),
+                  base + AT91_SMC_PULSE);
 
        /* Cycle register */
-       at91_sys_write(AT91_SMC_CYCLE(cs),
-                 AT91_SMC_NWECYCLE_(config->write_cycle)
-               | AT91_SMC_NRDCYCLE_(config->read_cycle)
-       );
+       __raw_writel(AT91_SMC_NWECYCLE_(config->write_cycle)
+                  | AT91_SMC_NRDCYCLE_(config->read_cycle),
+                  base + AT91_SMC_CYCLE);
 
        /* Mode register */
-       at91_sys_write(AT91_SMC_MODE(cs),
-                 config->mode
-               | AT91_SMC_TDF_(config->tdf_cycles)
-       );
+       __raw_writel(config->mode
+                  | AT91_SMC_TDF_(config->tdf_cycles),
+                  base + AT91_SMC_MODE);
+}
+
+void __init sam9_smc_configure(int id, int cs, struct sam9_smc_config* config)
+{
+       sam9_smc_cs_configure(AT91_SMC_CS(id, cs), config);
+}
+
+void __init at91sam9_ioremap_smc(int id, u32 addr)
+{
+       if (id > 1) {
+               pr_warn("%s: id > 2\n", __func__);
+               return;
+       }
+       smc_base_addr[id] = ioremap(addr, 512);
+       if (!smc_base_addr[id])
+               pr_warn("Impossible to ioremap smc.%d 0x%x\n", id, addr);
 }
index bf72cfb..039c5ce 100644 (file)
@@ -30,4 +30,5 @@ struct sam9_smc_config {
        u8 tdf_cycles:4;
 };
 
-extern void __init sam9_smc_configure(int cs, struct sam9_smc_config* config);
+extern void __init sam9_smc_configure(int id, int cs, struct sam9_smc_config* config);
+extern void __init at91sam9_ioremap_smc(int id, u32 addr);
index cf98a8f..8bdcc3c 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/module.h>
 #include <linux/io.h>
 #include <linux/mm.h>
+#include <linux/pm.h>
 
 #include <asm/mach/map.h>
 
@@ -15,6 +16,7 @@
 #include <mach/cpu.h>
 #include <mach/at91_dbgu.h>
 #include <mach/at91_pmc.h>
+#include <mach/at91_shdwc.h>
 
 #include "soc.h"
 #include "generic.h"
@@ -73,9 +75,6 @@ static struct map_desc at91_io_desc __initdata = {
        .type           = MT_DEVICE,
 };
 
-#define AT91_DBGU0     0xfffff200
-#define AT91_DBGU1     0xffffee00
-
 static void __init soc_detect(u32 dbgu_base)
 {
        u32 cidr, socid;
@@ -248,9 +247,9 @@ void __init at91_map_io(void)
        at91_soc_initdata.type = AT91_SOC_NONE;
        at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
 
-       soc_detect(AT91_DBGU0);
+       soc_detect(AT91_BASE_DBGU0);
        if (!at91_soc_is_detected())
-               soc_detect(AT91_DBGU1);
+               soc_detect(AT91_BASE_DBGU1);
 
        if (!at91_soc_is_detected())
                panic("AT91: Impossible to detect the SOC type");
@@ -267,8 +266,25 @@ void __init at91_map_io(void)
                at91_boot_soc.map_io();
 }
 
+void __iomem *at91_shdwc_base = NULL;
+
+static void at91sam9_poweroff(void)
+{
+       at91_shdwc_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
+}
+
+void __init at91_ioremap_shdwc(u32 base_addr)
+{
+       at91_shdwc_base = ioremap(base_addr, 16);
+       if (!at91_shdwc_base)
+               panic("Impossible to ioremap at91_shdwc_base\n");
+       pm_power_off = at91sam9_poweroff;
+}
+
 void __init at91_initialize(unsigned long main_clock)
 {
+       at91_boot_soc.ioremap_registers();
+
        /* Init clock subsystem */
        at91_clock_init(main_clock);
 
index 21ed881..4588ae6 100644 (file)
@@ -7,6 +7,7 @@
 struct at91_init_soc {
        unsigned int *default_irq_priority;
        void (*map_io)(void);
+       void (*ioremap_registers)(void);
        void (*register_clocks)(void);
        void (*init)(void);
 };
index 2a00fe5..a8ee6c9 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/i2c.h>
 #include <linux/videodev2.h>
 #include <linux/davinci_emac.h>
+#include <media/davinci/vpif_types.h>
 
 #define DM646X_EMAC_BASE               (0x01C80000)
 #define DM646X_EMAC_MDIO_BASE          (DM646X_EMAC_BASE + 0x4000)
@@ -34,58 +35,6 @@ int __init dm646x_init_edma(struct edma_rsv_info *rsv);
 
 void dm646x_video_init(void);
 
-enum vpif_if_type {
-       VPIF_IF_BT656,
-       VPIF_IF_BT1120,
-       VPIF_IF_RAW_BAYER
-};
-
-struct vpif_interface {
-       enum vpif_if_type if_type;
-       unsigned hd_pol:1;
-       unsigned vd_pol:1;
-       unsigned fid_pol:1;
-};
-
-struct vpif_subdev_info {
-       const char *name;
-       struct i2c_board_info board_info;
-       u32 input;
-       u32 output;
-       unsigned can_route:1;
-       struct vpif_interface vpif_if;
-};
-
-struct vpif_display_config {
-       int (*set_clock)(int, int);
-       struct vpif_subdev_info *subdevinfo;
-       int subdev_count;
-       const char **output;
-       int output_count;
-       const char *card_name;
-};
-
-struct vpif_input {
-       struct v4l2_input input;
-       const char *subdev_name;
-};
-
-#define VPIF_CAPTURE_MAX_CHANNELS      2
-
-struct vpif_capture_chan_config {
-       const struct vpif_input *inputs;
-       int input_count;
-};
-
-struct vpif_capture_config {
-       int (*setup_input_channel_mode)(int);
-       int (*setup_input_path)(int, const char *);
-       struct vpif_capture_chan_config chan_config[VPIF_CAPTURE_MAX_CHANNELS];
-       struct vpif_subdev_info *subdev_info;
-       int subdev_count;
-       const char *card_name;
-};
-
 void dm646x_setup_vpif(struct vpif_display_config *,
                       struct vpif_capture_config *);
 
index b6ac6ee..647c843 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/serial_core.h>
 
 #include <asm/proc-fns.h>
+#include <asm/exception.h>
 #include <asm/hardware/cache-l2x0.h>
 #include <asm/hardware/gic.h>
 #include <asm/mach/map.h>
@@ -43,8 +44,6 @@
 
 #include "common.h"
 
-unsigned int gic_bank_offset __read_mostly;
-
 static const char name_exynos4210[] = "EXYNOS4210";
 static const char name_exynos4212[] = "EXYNOS4212";
 static const char name_exynos4412[] = "EXYNOS4412";
@@ -386,27 +385,14 @@ static void __init combiner_init(unsigned int combiner_nr, void __iomem *base,
        }
 }
 
-static void exynos4_gic_irq_fix_base(struct irq_data *d)
-{
-       struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
-
-       gic_data->cpu_base = S5P_VA_GIC_CPU +
-                           (gic_bank_offset * smp_processor_id());
-
-       gic_data->dist_base = S5P_VA_GIC_DIST +
-                           (gic_bank_offset * smp_processor_id());
-}
-
 void __init exynos4_init_irq(void)
 {
        int irq;
+       unsigned int gic_bank_offset;
 
        gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000;
 
-       gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
-       gic_arch_extn.irq_eoi = exynos4_gic_irq_fix_base;
-       gic_arch_extn.irq_unmask = exynos4_gic_irq_fix_base;
-       gic_arch_extn.irq_mask = exynos4_gic_irq_fix_base;
+       gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset);
 
        for (irq = 0; irq < MAX_COMBINER_NR; irq++) {
 
index e6beaff..1cd40ad 100644 (file)
@@ -13,7 +13,6 @@ config ARCH_MSM7X00A
        select CPU_V6
        select GPIO_MSM_V1
        select MSM_PROC_COMM
-       select HAS_MSM_DEBUG_UART_PHYS
 
 config ARCH_MSM7X30
        bool "MSM7x30"
@@ -25,7 +24,6 @@ config ARCH_MSM7X30
        select MSM_GPIOMUX
        select GPIO_MSM_V1
        select MSM_PROC_COMM
-       select HAS_MSM_DEBUG_UART_PHYS
 
 config ARCH_QSD8X50
        bool "QSD8X50"
@@ -37,7 +35,6 @@ config ARCH_QSD8X50
        select MSM_GPIOMUX
        select GPIO_MSM_V1
        select MSM_PROC_COMM
-       select HAS_MSM_DEBUG_UART_PHYS
 
 config ARCH_MSM8X60
        bool "MSM8X60"
@@ -63,6 +60,9 @@ config ARCH_MSM8960
 
 endchoice
 
+config MSM_HAS_DEBUG_UART_HS
+       bool
+
 config MSM_SOC_REV_A
        bool
 config  ARCH_MSM_SCORPIONMP
@@ -74,9 +74,6 @@ config  ARCH_MSM_ARM11
 config  ARCH_MSM_SCORPION
        bool
 
-config HAS_MSM_DEBUG_UART_PHYS
-       bool
-
 config  MSM_VIC
        bool
 
@@ -153,32 +150,6 @@ config MACH_MSM8960_RUMI3
 
 endmenu
 
-config MSM_DEBUG_UART
-       int
-       default 1 if MSM_DEBUG_UART1
-       default 2 if MSM_DEBUG_UART2
-       default 3 if MSM_DEBUG_UART3
-
-if HAS_MSM_DEBUG_UART_PHYS
-choice
-       prompt "Debug UART"
-
-       default MSM_DEBUG_UART_NONE
-
-       config MSM_DEBUG_UART_NONE
-               bool "None"
-
-       config MSM_DEBUG_UART1
-               bool "UART1"
-
-       config MSM_DEBUG_UART2
-               bool "UART2"
-
-       config MSM_DEBUG_UART3
-               bool "UART3"
-endchoice
-endif
-
 config MSM_SMD_PKG3
        bool
 
index 2dc73cc..3ffd866 100644 (file)
@@ -1,6 +1,7 @@
-/* arch/arm/mach-msm7200/include/mach/debug-macro.S
+/*
  *
  * Copyright (C) 2007 Google, Inc.
+ * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
  * Author: Brian Swetland <swetland@google.com>
  *
  * This software is licensed under the terms of the GNU General Public
  *
  */
 
-
-
 #include <mach/hardware.h>
 #include <mach/msm_iomap.h>
 
-#if defined(CONFIG_HAS_MSM_DEBUG_UART_PHYS) && !defined(CONFIG_MSM_DEBUG_UART_NONE)
        .macro  addruart, rp, rv, tmp
+#ifdef MSM_DEBUG_UART_PHYS
        ldr     \rp, =MSM_DEBUG_UART_PHYS
        ldr     \rv, =MSM_DEBUG_UART_BASE
+#endif
        .endm
 
-       .macro  senduart,rd,rx
+       .macro  senduart, rd, rx
+#ifdef CONFIG_MSM_HAS_DEBUG_UART_HS
+       @ Write the 1 character to UARTDM_TF
+       str     \rd, [\rx, #0x70]
+#else
        teq     \rx, #0
        strne   \rd, [\rx, #0x0C]
+#endif
        .endm
 
-       .macro  waituart,rd,rx
+       .macro  waituart, rd, rx
+#ifdef CONFIG_MSM_HAS_DEBUG_UART_HS
+       @ check for TX_EMT in UARTDM_SR
+       ldr     \rd, [\rx, #0x08]
+       tst     \rd, #0x08
+       bne     1002f
+       @ wait for TXREADY in UARTDM_ISR
+1001:  ldr     \rd, [\rx, #0x14]
+       tst     \rd, #0x80
+       beq     1001b
+1002:
+       @ Clear TX_READY by writing to the UARTDM_CR register
+       mov     \rd, #0x300
+       str     \rd, [\rx, #0x10]
+       @ Write 0x1 to NCF register
+       mov     \rd, #0x1
+       str     \rd, [\rx, #0x40]
+       @ UARTDM reg. Read to induce delay
+       ldr     \rd, [\rx, #0x08]
+#else
        @ wait for TX_READY
 1001:  ldr     \rd, [\rx, #0x08]
        tst     \rd, #0x04
        beq     1001b
-       .endm
-#else
-       .macro  addruart, rp, rv, tmp
-       mov     \rv, #0xff000000
-       orr     \rv, \rv, #0x00f00000
-       .endm
-
-       .macro  senduart,rd,rx
-       .endm
-
-       .macro  waituart,rd,rx
-       .endm
 #endif
+       .endm
 
-       .macro  busyuart,rd,rx
+       .macro  busyuart, rd, rx
        .endm
index 94fe9fe..8af4612 100644 (file)
 #define MSM_UART3_PHYS        0xA9C00000
 #define MSM_UART3_SIZE        SZ_4K
 
-#ifdef CONFIG_MSM_DEBUG_UART
-#define MSM_DEBUG_UART_BASE   0xE1000000
-#if CONFIG_MSM_DEBUG_UART == 1
-#define MSM_DEBUG_UART_PHYS   MSM_UART1_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 2
-#define MSM_DEBUG_UART_PHYS   MSM_UART2_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 3
-#define MSM_DEBUG_UART_PHYS   MSM_UART3_PHYS
-#endif
-#define MSM_DEBUG_UART_SIZE   SZ_4K
-#endif
-
 #define MSM_SDC1_PHYS         0xA0400000
 #define MSM_SDC1_SIZE         SZ_4K
 
index 3769444..198202c 100644 (file)
 #define MSM_UART3_PHYS        0xACC00000
 #define MSM_UART3_SIZE        SZ_4K
 
-#ifdef CONFIG_MSM_DEBUG_UART
-#define MSM_DEBUG_UART_BASE   0xE1000000
-#if CONFIG_MSM_DEBUG_UART == 1
-#define MSM_DEBUG_UART_PHYS   MSM_UART1_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 2
-#define MSM_DEBUG_UART_PHYS   MSM_UART2_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 3
-#define MSM_DEBUG_UART_PHYS   MSM_UART3_PHYS
-#endif
-#define MSM_DEBUG_UART_SIZE   SZ_4K
-#endif
-
 #define MSM_MDC_BASE         IOMEM(0xE0200000)
 #define MSM_MDC_PHYS         0xAA500000
 #define MSM_MDC_SIZE         SZ_1M
index 3c9d960..800b557 100644 (file)
@@ -45,4 +45,9 @@
 #define MSM8960_TMR0_PHYS      0x0208A000
 #define MSM8960_TMR0_SIZE      SZ_4K
 
+#ifdef CONFIG_DEBUG_MSM8960_UART
+#define MSM_DEBUG_UART_BASE    0xE1040000
+#define MSM_DEBUG_UART_PHYS    0x16440000
+#endif
+
 #endif
index d67cd73..0faa894 100644 (file)
 #define MSM_UART3_PHYS        0xA9C00000
 #define MSM_UART3_SIZE        SZ_4K
 
-#ifdef CONFIG_MSM_DEBUG_UART
-#define MSM_DEBUG_UART_BASE   0xE1000000
-#if CONFIG_MSM_DEBUG_UART == 1
-#define MSM_DEBUG_UART_PHYS   MSM_UART1_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 2
-#define MSM_DEBUG_UART_PHYS   MSM_UART2_PHYS
-#elif CONFIG_MSM_DEBUG_UART == 3
-#define MSM_DEBUG_UART_PHYS   MSM_UART3_PHYS
-#endif
-#define MSM_DEBUG_UART_SIZE   SZ_4K
-#endif
-
 #define MSM_MDC_BASE         IOMEM(0xE0200000)
 #define MSM_MDC_PHYS         0xAA500000
 #define MSM_MDC_SIZE         SZ_1M
index 3b19b8f..54e12ca 100644 (file)
@@ -62,4 +62,9 @@
 #define MSM8X60_TMR0_PHYS      0x02040000
 #define MSM8X60_TMR0_SIZE      SZ_4K
 
+#ifdef CONFIG_DEBUG_MSM8660_UART
+#define MSM_DEBUG_UART_BASE    0xE1040000
+#define MSM_DEBUG_UART_PHYS    0x19C40000
+#endif
+
 #endif
index 4ded152..90682f4 100644 (file)
 
 #include "msm_iomap-8960.h"
 
+#define MSM_DEBUG_UART_SIZE    SZ_4K
+#if defined(CONFIG_DEBUG_MSM_UART1)
+#define MSM_DEBUG_UART_BASE    0xE1000000
+#define MSM_DEBUG_UART_PHYS    MSM_UART1_PHYS
+#elif defined(CONFIG_DEBUG_MSM_UART2)
+#define MSM_DEBUG_UART_BASE    0xE1000000
+#define MSM_DEBUG_UART_PHYS    MSM_UART2_PHYS
+#elif defined(CONFIG_DEBUG_MSM_UART3)
+#define MSM_DEBUG_UART_BASE    0xE1000000
+#define MSM_DEBUG_UART_PHYS    MSM_UART3_PHYS
+#endif
+
 /* Virtual addresses shared across all MSM targets. */
 #define MSM_CSR_BASE           IOMEM(0xE0001000)
 #define MSM_QGIC_DIST_BASE     IOMEM(0xF0000000)
index d94292c..169a840 100644 (file)
@@ -1,6 +1,6 @@
-/* arch/arm/mach-msm/include/mach/uncompress.h
- *
+/*
  * Copyright (C) 2007 Google, Inc.
+ * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
  *
  * This software is licensed under the terms of the GNU General Public
  * License version 2, as published by the Free Software Foundation, and
  */
 
 #ifndef __ASM_ARCH_MSM_UNCOMPRESS_H
+#define __ASM_ARCH_MSM_UNCOMPRESS_H
+
+#include <asm/processor.h>
+#include <mach/msm_iomap.h>
+
+#define UART_CSR      (*(volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x08))
+#define UART_TF       (*(volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x0c))
 
-#include "hardware.h"
-#include "linux/io.h"
-#include "mach/msm_iomap.h"
+#define UART_DM_SR    (*((volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x08)))
+#define UART_DM_CR    (*((volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x10)))
+#define UART_DM_ISR   (*((volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x14)))
+#define UART_DM_NCHAR (*((volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x40)))
+#define UART_DM_TF    (*((volatile uint32_t *)(MSM_DEBUG_UART_PHYS + 0x70)))
 
 static void putc(int c)
 {
 #if defined(MSM_DEBUG_UART_PHYS)
-       unsigned base = MSM_DEBUG_UART_PHYS;
-       while (!(readl(base + 0x08) & 0x04)) ;
-       writel(c, base + 0x0c);
+#ifdef CONFIG_MSM_HAS_DEBUG_UART_HS
+       /*
+        * Wait for TX_READY to be set; but skip it if we have a
+        * TX underrun.
+        */
+       if (UART_DM_SR & 0x08)
+               while (!(UART_DM_ISR & 0x80))
+                       cpu_relax();
+
+       UART_DM_CR = 0x300;
+       UART_DM_NCHAR = 0x1;
+       UART_DM_TF = c;
+#else
+       while (!(UART_CSR & 0x04))
+               cpu_relax();
+       UART_TF = c;
+#endif
 #endif
 }
 
index 8759ecf..578b04e 100644 (file)
@@ -47,7 +47,8 @@ static struct map_desc msm_io_desc[] __initdata = {
        MSM_CHIP_DEVICE(GPIO1, MSM7X00),
        MSM_CHIP_DEVICE(GPIO2, MSM7X00),
        MSM_DEVICE(CLK_CTL),
-#ifdef CONFIG_MSM_DEBUG_UART
+#if defined(CONFIG_DEBUG_MSM_UART1) || defined(CONFIG_DEBUG_MSM_UART2) || \
+       defined(CONFIG_DEBUG_MSM_UART3)
        MSM_DEVICE(DEBUG_UART),
 #endif
 #ifdef CONFIG_ARCH_MSM7X30
@@ -84,7 +85,8 @@ static struct map_desc qsd8x50_io_desc[] __initdata = {
        MSM_DEVICE(SCPLL),
        MSM_DEVICE(AD5),
        MSM_DEVICE(MDC),
-#ifdef CONFIG_MSM_DEBUG_UART
+#if defined(CONFIG_DEBUG_MSM_UART1) || defined(CONFIG_DEBUG_MSM_UART2) || \
+       defined(CONFIG_DEBUG_MSM_UART3)
        MSM_DEVICE(DEBUG_UART),
 #endif
        {
@@ -109,6 +111,9 @@ static struct map_desc msm8x60_io_desc[] __initdata = {
        MSM_CHIP_DEVICE(TMR0, MSM8X60),
        MSM_DEVICE(ACC),
        MSM_DEVICE(GCC),
+#ifdef CONFIG_DEBUG_MSM8660_UART
+       MSM_DEVICE(DEBUG_UART),
+#endif
 };
 
 void __init msm_map_msm8x60_io(void)
@@ -123,6 +128,9 @@ static struct map_desc msm8960_io_desc[] __initdata = {
        MSM_CHIP_DEVICE(QGIC_CPU, MSM8960),
        MSM_CHIP_DEVICE(TMR, MSM8960),
        MSM_CHIP_DEVICE(TMR0, MSM8960),
+#ifdef CONFIG_DEBUG_MSM8960_UART
+       MSM_DEVICE(DEBUG_UART),
+#endif
 };
 
 void __init msm_map_msm8960_io(void)
@@ -146,7 +154,8 @@ static struct map_desc msm7x30_io_desc[] __initdata = {
        MSM_DEVICE(SAW),
        MSM_DEVICE(GCC),
        MSM_DEVICE(TCSR),
-#ifdef CONFIG_MSM_DEBUG_UART
+#if defined(CONFIG_DEBUG_MSM_UART1) || defined(CONFIG_DEBUG_MSM_UART2) || \
+       defined(CONFIG_DEBUG_MSM_UART3)
        MSM_DEVICE(DEBUG_UART),
 #endif
        {
index fdec58a..0b3e357 100644 (file)
@@ -79,7 +79,7 @@ static __cpuinit void prepare_cold_cpu(unsigned int cpu)
        ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup),
                                SCM_FLAG_COLDBOOT_CPU1);
        if (ret == 0) {
-               void *sc1_base_ptr;
+               void __iomem *sc1_base_ptr;
                sc1_base_ptr = ioremap_nocache(0x00902000, SZ_4K*2);
                if (sc1_base_ptr) {
                        writel(0, sc1_base_ptr + VDD_SC1_ARRAY_CLAMP_GFS_CTL);
index c550b63..e5ec4a8 100644 (file)
@@ -1,3 +1,2 @@
 obj-y  := common.o
 obj-y  += time.o
-obj-y  += io.o
index ad871bd..febee47 100644 (file)
 
 #include <asm/mach/arch.h>
 #include <asm/hardware/vic.h>
+#include <asm/mach/map.h>
 
 #include <mach/map.h>
 #include <mach/picoxcell_soc.h>
 
 #include "common.h"
 
+static struct map_desc io_map __initdata = {
+       .virtual        = PHYS_TO_IO(PICOXCELL_PERIPH_BASE),
+       .pfn            = __phys_to_pfn(PICOXCELL_PERIPH_BASE),
+       .length         = PICOXCELL_PERIPH_LENGTH,
+       .type           = MT_DEVICE,
+};
+
+static void __init picoxcell_map_io(void)
+{
+       iotable_init(&io_map, 1);
+}
+
 static void __init picoxcell_init_machine(void)
 {
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
@@ -45,7 +58,7 @@ static void __init picoxcell_init_irq(void)
 
 DT_MACHINE_START(PICOXCELL, "Picochip picoXcell")
        .map_io         = picoxcell_map_io,
-       .nr_irqs        = ARCH_NR_IRQS,
+       .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = picoxcell_init_irq,
        .handle_irq     = vic_handle_irq,
        .timer          = &picoxcell_timer,
index 5263f0f..83d55ab 100644 (file)
@@ -13,6 +13,5 @@
 #include <asm/mach/time.h>
 
 extern struct sys_timer picoxcell_timer;
-extern void picoxcell_map_io(void);
 
 #endif /* __PICOXCELL_COMMON_H__ */
index 4d13ed9..59eac1e 100644 (file)
@@ -1,8 +1,6 @@
 /*
  * Copyright (c) 2011 Picochip Ltd., Jamie Iles
  *
- * This file contains the hardware definitions of the picoXcell SoC devices.
- *
  * 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
 #ifndef __MACH_IRQS_H
 #define __MACH_IRQS_H
 
-#define ARCH_NR_IRQS                   64
-#define NR_IRQS                                (128 + ARCH_NR_IRQS)
-
-#define IRQ_VIC0_BASE                  0
-#define IRQ_VIC1_BASE                  32
+/* We dynamically allocate our irq_desc's. */
+#define NR_IRQS                                0
 
 #endif /* __MACH_IRQS_H */
diff --git a/arch/arm/mach-picoxcell/include/mach/memory.h b/arch/arm/mach-picoxcell/include/mach/memory.h
deleted file mode 100644 (file)
index 40a8c17..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/* empty */
diff --git a/arch/arm/mach-picoxcell/io.c b/arch/arm/mach-picoxcell/io.c
deleted file mode 100644 (file)
index 39e9b9e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2011 Picochip Ltd., Jamie Iles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * All enquiries to support@picochip.com
- */
-#include <linux/io.h>
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/of.h>
-
-#include <asm/mach/map.h>
-
-#include <mach/map.h>
-#include <mach/picoxcell_soc.h>
-
-#include "common.h"
-
-void __init picoxcell_map_io(void)
-{
-       struct map_desc io_map = {
-               .virtual        = PHYS_TO_IO(PICOXCELL_PERIPH_BASE),
-               .pfn            = __phys_to_pfn(PICOXCELL_PERIPH_BASE),
-               .length         = PICOXCELL_PERIPH_LENGTH,
-               .type           = MT_DEVICE,
-       };
-
-       iotable_init(&io_map, 1);
-}
index 91a07e1..5be8e9e 100644 (file)
@@ -18,20 +18,20 @@ obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o
 obj-$(CONFIG_TEGRA_PCI)                        += pcie.o
 obj-$(CONFIG_USB_SUPPORT)              += usb_phy.o
 
-obj-${CONFIG_MACH_HARMONY}              += board-harmony.o
-obj-${CONFIG_MACH_HARMONY}              += board-harmony-pinmux.o
-obj-${CONFIG_MACH_HARMONY}              += board-harmony-pcie.o
-obj-${CONFIG_MACH_HARMONY}              += board-harmony-power.o
+obj-$(CONFIG_MACH_HARMONY)              += board-harmony.o
+obj-$(CONFIG_MACH_HARMONY)              += board-harmony-pinmux.o
+obj-$(CONFIG_MACH_HARMONY)              += board-harmony-pcie.o
+obj-$(CONFIG_MACH_HARMONY)              += board-harmony-power.o
 
-obj-${CONFIG_MACH_PAZ00}               += board-paz00.o
-obj-${CONFIG_MACH_PAZ00}               += board-paz00-pinmux.o
+obj-$(CONFIG_MACH_PAZ00)               += board-paz00.o
+obj-$(CONFIG_MACH_PAZ00)               += board-paz00-pinmux.o
 
-obj-${CONFIG_MACH_SEABOARD}             += board-seaboard.o
-obj-${CONFIG_MACH_SEABOARD}             += board-seaboard-pinmux.o
+obj-$(CONFIG_MACH_SEABOARD)             += board-seaboard.o
+obj-$(CONFIG_MACH_SEABOARD)             += board-seaboard-pinmux.o
 
-obj-${CONFIG_MACH_TEGRA_DT}             += board-dt.o
-obj-${CONFIG_MACH_TEGRA_DT}             += board-harmony-pinmux.o
-obj-${CONFIG_MACH_TEGRA_DT}             += board-seaboard-pinmux.o
+obj-$(CONFIG_MACH_TEGRA_DT)             += board-dt.o
+obj-$(CONFIG_MACH_TEGRA_DT)             += board-harmony-pinmux.o
+obj-$(CONFIG_MACH_TEGRA_DT)             += board-seaboard-pinmux.o
 
-obj-${CONFIG_MACH_TRIMSLICE}            += board-trimslice.o
-obj-${CONFIG_MACH_TRIMSLICE}            += board-trimslice-pinmux.o
+obj-$(CONFIG_MACH_TRIMSLICE)            += board-trimslice.o
+obj-$(CONFIG_MACH_TRIMSLICE)            += board-trimslice-pinmux.o
index ac11262..e577cfe 100644 (file)
 
        .macro  arch_ret_to_user, tmp1, tmp2
        .endm
-
-#if !defined(CONFIG_ARM_GIC)
-       /* legacy interrupt controller for AP16 */
-
-       .macro  get_irqnr_preamble, base, tmp
-       @ enable imprecise aborts
-       cpsie   a
-       @ EVP base at 0xf010f000
-       mov \base, #0xf0000000
-       orr \base, #0x00100000
-       orr \base, #0x0000f000
-       .endm
-
-       .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
-       ldr \irqnr, [\base, #0x20]      @ EVT_IRQ_STS
-       cmp \irqnr, #0x80
-       .endm
-#endif
index 4956c3c..8ad82af 100644 (file)
 
 #include "board.h"
 
-#define INT_SYS_NR     (INT_GPIO_BASE - INT_PRI_BASE)
-#define INT_SYS_SZ     (INT_SEC_BASE - INT_PRI_BASE)
-#define PPI_NR         ((INT_SYS_NR+INT_SYS_SZ-1)/INT_SYS_SZ)
-
 #define ICTLR_CPU_IEP_VFIQ     0x08
 #define ICTLR_CPU_IEP_FIR      0x14
 #define ICTLR_CPU_IEP_FIR_SET  0x18
diff --git a/arch/arm/mach-u300/include/mach/memory.h b/arch/arm/mach-u300/include/mach/memory.h
deleted file mode 100644 (file)
index c808f34..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- *
- * arch/arm/mach-u300/include/mach/memory.h
- *
- *
- * Copyright (C) 2007-2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * Memory virtual/physical mapping constants.
- * Author: Linus Walleij <linus.walleij@stericsson.com>
- * Author: Jonas Aaberg <jonas.aberg@stericsson.com>
- */
-
-#ifndef __MACH_MEMORY_H
-#define __MACH_MEMORY_H
-
-#define PLAT_PHYS_OFFSET       UL(0x48000000)
-#define BOOT_PARAMS_OFFSET     0x100
-
-#endif
index def45bd..f30c69d 100644 (file)
@@ -47,7 +47,7 @@ static void __init u300_init_machine(void)
 
 MACHINE_START(U300, MACH_U300_STRING)
        /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */
-       .atag_offset    = BOOT_PARAMS_OFFSET,
+       .atag_offset    = 0x100,
        .map_io         = u300_map_io,
        .init_irq       = u300_init_irq,
        .handle_irq     = vic_handle_irq,
index 1f17bde..7c756fb 100644 (file)
@@ -109,7 +109,7 @@ struct eth_addr {
        u8 addr[6];
 };
 static struct eth_addr __initdata hw_addr[2];
-static struct eth_platform_data __initdata eth_data[2];
+static struct macb_platform_data __initdata eth_data[2];
 
 static struct spi_board_info spi0_board_info[] __initdata = {
        {
index 4643ff5..c56ddac 100644 (file)
@@ -105,7 +105,7 @@ struct eth_addr {
 };
 
 static struct eth_addr __initdata hw_addr[2];
-static struct eth_platform_data __initdata eth_data[2] = {
+static struct macb_platform_data __initdata eth_data[2] = {
        {
                /*
                 * The MDIO pullups on STK1000 are a bit too weak for
index 86fab77..27bd6fb 100644 (file)
@@ -50,7 +50,7 @@ struct eth_addr {
        u8 addr[6];
 };
 static struct eth_addr __initdata hw_addr[1];
-static struct eth_platform_data __initdata eth_data[1] = {
+static struct macb_platform_data __initdata eth_data[1] = {
        {
                .phy_mask       = ~(1U << 1),
        },
index da14fbd..9d1efd1 100644 (file)
@@ -102,7 +102,7 @@ struct eth_addr {
 };
 
 static struct eth_addr __initdata hw_addr[1];
-static struct eth_platform_data __initdata eth_data[1];
+static struct macb_platform_data __initdata eth_data[1];
 
 /*
  * The next two functions should go away as the boot loader is
index e61bc94..ed137e3 100644 (file)
@@ -52,7 +52,7 @@ struct eth_addr {
 };
 
 static struct eth_addr __initdata hw_addr[2];
-static struct eth_platform_data __initdata eth_data[2];
+static struct macb_platform_data __initdata eth_data[2];
 
 static int ads7846_get_pendown_state_PB26(void)
 {
index c4da5cb..05358aa 100644 (file)
@@ -86,7 +86,7 @@ struct eth_addr {
        u8 addr[6];
 };
 static struct eth_addr __initdata hw_addr[2];
-static struct eth_platform_data __initdata eth_data[2];
+static struct macb_platform_data __initdata eth_data[2];
 
 static struct spi_eeprom eeprom_25lc010 = {
                .name = "25lc010",
index 7fbf0dc..402a7bb 100644 (file)
@@ -1067,7 +1067,7 @@ void __init at32_setup_serial_console(unsigned int usart_id)
  * -------------------------------------------------------------------- */
 
 #ifdef CONFIG_CPU_AT32AP7000
-static struct eth_platform_data macb0_data;
+static struct macb_platform_data macb0_data;
 static struct resource macb0_resource[] = {
        PBMEM(0xfff01800),
        IRQ(25),
@@ -1076,7 +1076,7 @@ DEFINE_DEV_DATA(macb, 0);
 DEV_CLK(hclk, macb0, hsb, 8);
 DEV_CLK(pclk, macb0, pbb, 6);
 
-static struct eth_platform_data macb1_data;
+static struct macb_platform_data macb1_data;
 static struct resource macb1_resource[] = {
        PBMEM(0xfff01c00),
        IRQ(26),
@@ -1086,7 +1086,7 @@ DEV_CLK(hclk, macb1, hsb, 9);
 DEV_CLK(pclk, macb1, pbb, 7);
 
 struct platform_device *__init
-at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
+at32_add_device_eth(unsigned int id, struct macb_platform_data *data)
 {
        struct platform_device *pdev;
        u32 pin_mask;
@@ -1163,7 +1163,7 @@ at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
                return NULL;
        }
 
-       memcpy(pdev->dev.platform_data, data, sizeof(struct eth_platform_data));
+       memcpy(pdev->dev.platform_data, data, sizeof(struct macb_platform_data));
        platform_device_register(pdev);
 
        return pdev;
index 5d7ffca..67b111c 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <linux/types.h>
 #include <linux/serial.h>
+#include <linux/platform_data/macb.h>
 
 #define GPIO_PIN_NONE  (-1)
 
@@ -42,12 +43,8 @@ struct atmel_uart_data {
 void at32_map_usart(unsigned int hw_id, unsigned int line, int flags);
 struct platform_device *at32_add_device_usart(unsigned int id);
 
-struct eth_platform_data {
-       u32     phy_mask;
-       u8      is_rmii;
-};
 struct platform_device *
-at32_add_device_eth(unsigned int id, struct eth_platform_data *data);
+at32_add_device_eth(unsigned int id, struct macb_platform_data *data);
 
 struct spi_board_info;
 struct platform_device *
index a76f24a..5249e6d 100644 (file)
@@ -360,7 +360,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
        ap->flags |= ATA_FLAG_SLAVE_POSS;
        ap->pio_mask = ATA_PIO4;
 
-       if (!irq) {
+       if (!gpio_is_valid(irq)) {
                ap->flags |= ATA_FLAG_PIO_POLLING;
                ata_port_desc(ap, "no IRQ, using PIO polling");
        }
@@ -414,8 +414,8 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
 
        host->private_data = info;
 
-       ret = ata_host_activate(host, irq ? gpio_to_irq(irq) : 0,
-                       irq ? ata_sff_interrupt : NULL,
+       return ata_host_activate(host, gpio_is_valid(irq) ? gpio_to_irq(irq) : 0,
+                       gpio_is_valid(irq) ? ata_sff_interrupt : NULL,
                        irq_flags, &pata_at91_sht);
 
        if (!ret)
index 6dede8f..41d4155 100644 (file)
@@ -314,7 +314,7 @@ static int __init at91_ide_probe(struct platform_device *pdev)
        apply_timings(board->chipselect, 0, ide_timing_find_mode(XFER_PIO_0), 0);
 
        /* with GPIO interrupt we have to do quirks in handler */
-       if (board->irq_pin >= PIN_BASE)
+       if (gpio_is_valid(board->irq_pin))
                host->irq_handler = at91_irq_handler;
 
        host->ports[0]->select_data = board->chipselect;
index 10550bd..25036cb 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/videodev2.h>
 #include <mach/hardware.h>
 #include <mach/dm646x.h>
+#include <media/davinci/vpif_types.h>
 
 /* Maximum channel allowed */
 #define VPIF_NUM_CHANNELS              (4)
index 064550f..a693d4e 100644 (file)
@@ -27,7 +27,7 @@
 #include <media/v4l2-device.h>
 #include <media/videobuf-core.h>
 #include <media/videobuf-dma-contig.h>
-#include <mach/dm646x.h>
+#include <media/davinci/vpif_types.h>
 
 #include "vpif.h"
 
index 5d1936d..56879d1 100644 (file)
@@ -22,6 +22,7 @@
 #include <media/v4l2-device.h>
 #include <media/videobuf-core.h>
 #include <media/videobuf-dma-contig.h>
+#include <media/davinci/vpif_types.h>
 
 #include "vpif.h"
 
index a8b4d2a..f437c3e 100644 (file)
@@ -741,7 +741,7 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
        at91_mci_write(host, AT91_MCI_MR, (at91_mci_read(host, AT91_MCI_MR) & ~AT91_MCI_CLKDIV) | clkdiv);
 
        /* maybe switch power to the card */
-       if (host->board->vcc_pin) {
+       if (gpio_is_valid(host->board->vcc_pin)) {
                switch (ios->power_mode) {
                        case MMC_POWER_OFF:
                                gpio_set_value(host->board->vcc_pin, 0);
@@ -897,7 +897,7 @@ static int at91_mci_get_ro(struct mmc_host *mmc)
 {
        struct at91mci_host *host = mmc_priv(mmc);
 
-       if (host->board->wp_pin)
+       if (gpio_is_valid(host->board->wp_pin))
                return !!gpio_get_value(host->board->wp_pin);
        /*
         * Board doesn't support read only detection; let the mmc core
@@ -991,21 +991,21 @@ static int __init at91_mci_probe(struct platform_device *pdev)
         * Reserve GPIOs ... board init code makes sure these pins are set
         * up as GPIOs with the right direction (input, except for vcc)
         */
-       if (host->board->det_pin) {
+       if (gpio_is_valid(host->board->det_pin)) {
                ret = gpio_request(host->board->det_pin, "mmc_detect");
                if (ret < 0) {
                        dev_dbg(&pdev->dev, "couldn't claim card detect pin\n");
                        goto fail4b;
                }
        }
-       if (host->board->wp_pin) {
+       if (gpio_is_valid(host->board->wp_pin)) {
                ret = gpio_request(host->board->wp_pin, "mmc_wp");
                if (ret < 0) {
                        dev_dbg(&pdev->dev, "couldn't claim wp sense pin\n");
                        goto fail4;
                }
        }
-       if (host->board->vcc_pin) {
+       if (gpio_is_valid(host->board->vcc_pin)) {
                ret = gpio_request(host->board->vcc_pin, "mmc_vcc");
                if (ret < 0) {
                        dev_dbg(&pdev->dev, "couldn't claim vcc switch pin\n");
@@ -1057,7 +1057,7 @@ static int __init at91_mci_probe(struct platform_device *pdev)
        /*
         * Add host to MMC layer
         */
-       if (host->board->det_pin) {
+       if (gpio_is_valid(host->board->det_pin)) {
                host->present = !gpio_get_value(host->board->det_pin);
        }
        else
@@ -1068,7 +1068,7 @@ static int __init at91_mci_probe(struct platform_device *pdev)
        /*
         * monitor card insertion/removal if we can
         */
-       if (host->board->det_pin) {
+       if (gpio_is_valid(host->board->det_pin)) {
                ret = request_irq(gpio_to_irq(host->board->det_pin),
                                at91_mmc_det_irq, 0, mmc_hostname(mmc), host);
                if (ret)
@@ -1087,13 +1087,13 @@ fail0:
 fail1:
        clk_put(host->mci_clk);
 fail2:
-       if (host->board->vcc_pin)
+       if (gpio_is_valid(host->board->vcc_pin))
                gpio_free(host->board->vcc_pin);
 fail3:
-       if (host->board->wp_pin)
+       if (gpio_is_valid(host->board->wp_pin))
                gpio_free(host->board->wp_pin);
 fail4:
-       if (host->board->det_pin)
+       if (gpio_is_valid(host->board->det_pin))
                gpio_free(host->board->det_pin);
 fail4b:
        if (host->buffer)
@@ -1125,7 +1125,7 @@ static int __exit at91_mci_remove(struct platform_device *pdev)
                dma_free_coherent(&pdev->dev, MCI_BUFSIZE,
                                host->buffer, host->physical_address);
 
-       if (host->board->det_pin) {
+       if (gpio_is_valid(host->board->det_pin)) {
                if (device_can_wakeup(&pdev->dev))
                        free_irq(gpio_to_irq(host->board->det_pin), host);
                device_init_wakeup(&pdev->dev, 0);
@@ -1140,9 +1140,9 @@ static int __exit at91_mci_remove(struct platform_device *pdev)
        clk_disable(host->mci_clk);                     /* Disable the peripheral clock */
        clk_put(host->mci_clk);
 
-       if (host->board->vcc_pin)
+       if (gpio_is_valid(host->board->vcc_pin))
                gpio_free(host->board->vcc_pin);
-       if (host->board->wp_pin)
+       if (gpio_is_valid(host->board->wp_pin))
                gpio_free(host->board->wp_pin);
 
        iounmap(host->baseaddr);
@@ -1163,7 +1163,7 @@ static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
        struct at91mci_host *host = mmc_priv(mmc);
        int ret = 0;
 
-       if (host->board->det_pin && device_may_wakeup(&pdev->dev))
+       if (gpio_is_valid(host->board->det_pin) && device_may_wakeup(&pdev->dev))
                enable_irq_wake(host->board->det_pin);
 
        if (mmc)
@@ -1178,7 +1178,7 @@ static int at91_mci_resume(struct platform_device *pdev)
        struct at91mci_host *host = mmc_priv(mmc);
        int ret = 0;
 
-       if (host->board->det_pin && device_may_wakeup(&pdev->dev))
+       if (gpio_is_valid(host->board->det_pin) && device_may_wakeup(&pdev->dev))
                disable_irq_wake(host->board->det_pin);
 
        if (mmc)
index 23e5d77..4dd056e 100644 (file)
@@ -113,7 +113,7 @@ static int cpu_has_dma(void)
  */
 static void atmel_nand_enable(struct atmel_nand_host *host)
 {
-       if (host->board->enable_pin)
+       if (gpio_is_valid(host->board->enable_pin))
                gpio_set_value(host->board->enable_pin, 0);
 }
 
@@ -122,7 +122,7 @@ static void atmel_nand_enable(struct atmel_nand_host *host)
  */
 static void atmel_nand_disable(struct atmel_nand_host *host)
 {
-       if (host->board->enable_pin)
+       if (gpio_is_valid(host->board->enable_pin))
                gpio_set_value(host->board->enable_pin, 1);
 }
 
@@ -492,7 +492,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
        nand_chip->IO_ADDR_W = host->io_base;
        nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;
 
-       if (host->board->rdy_pin)
+       if (gpio_is_valid(host->board->rdy_pin))
                nand_chip->dev_ready = atmel_nand_device_ready;
 
        regs = platform_get_resource(pdev, IORESOURCE_MEM, 1);
@@ -530,7 +530,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, host);
        atmel_nand_enable(host);
 
-       if (host->board->det_pin) {
+       if (gpio_is_valid(host->board->det_pin)) {
                if (gpio_get_value(host->board->det_pin)) {
                        printk(KERN_INFO "No SmartMedia card inserted.\n");
                        res = -ENXIO;
index 56624d3..dfeb46c 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/skbuff.h>
 #include <linux/dma-mapping.h>
 #include <linux/ethtool.h>
+#include <linux/platform_data/macb.h>
 #include <linux/platform_device.h>
 #include <linux/clk.h>
 #include <linux/gfp.h>
@@ -984,7 +985,7 @@ static const struct net_device_ops at91ether_netdev_ops = {
 static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_address,
                        struct platform_device *pdev, struct clk *ether_clk)
 {
-       struct at91_eth_data *board_data = pdev->dev.platform_data;
+       struct macb_platform_data *board_data = pdev->dev.platform_data;
        struct net_device *dev;
        struct at91_private *lp;
        unsigned int val;
index 353f4da..3725fbb 100644 (file)
@@ -85,7 +85,9 @@ struct recv_desc_bufs
 struct at91_private
 {
        struct mii_if_info mii;                 /* ethtool support */
-       struct at91_eth_data board_data;        /* board-specific configuration */
+       struct macb_platform_data board_data;   /* board-specific
+                                                * configuration (shared with
+                                                * macb for common data */
        struct clk *ether_clk;                  /* clock */
 
        /* PHY */
index a437b46..aa1d597 100644 (file)
@@ -8,6 +8,7 @@
  * published by the Free Software Foundation.
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 #include <linux/clk.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/dma-mapping.h>
+#include <linux/platform_data/macb.h>
 #include <linux/platform_device.h>
 #include <linux/phy.h>
 
-#include <mach/board.h>
-#include <mach/cpu.h>
-
 #include "macb.h"
 
 #define RX_BUFFER_SIZE         128
@@ -84,7 +83,7 @@ static void __init macb_get_hwaddr(struct macb *bp)
        if (is_valid_ether_addr(addr)) {
                memcpy(bp->dev->dev_addr, addr, sizeof(addr));
        } else {
-               dev_info(&bp->pdev->dev, "invalid hw address, using random\n");
+               netdev_info(bp->dev, "invalid hw address, using random\n");
                random_ether_addr(bp->dev->dev_addr);
        }
 }
@@ -178,11 +177,12 @@ static void macb_handle_link_change(struct net_device *dev)
 
        if (status_change) {
                if (phydev->link)
-                       printk(KERN_INFO "%s: link up (%d/%s)\n",
-                              dev->name, phydev->speed,
-                              DUPLEX_FULL == phydev->duplex ? "Full":"Half");
+                       netdev_info(dev, "link up (%d/%s)\n",
+                                   phydev->speed,
+                                   phydev->duplex == DUPLEX_FULL ?
+                                   "Full" : "Half");
                else
-                       printk(KERN_INFO "%s: link down\n", dev->name);
+                       netdev_info(dev, "link down\n");
        }
 }
 
@@ -191,12 +191,12 @@ static int macb_mii_probe(struct net_device *dev)
 {
        struct macb *bp = netdev_priv(dev);
        struct phy_device *phydev;
-       struct eth_platform_data *pdata;
+       struct macb_platform_data *pdata;
        int ret;
 
        phydev = phy_find_first(bp->mii_bus);
        if (!phydev) {
-               printk (KERN_ERR "%s: no PHY found\n", dev->name);
+               netdev_err(dev, "no PHY found\n");
                return -1;
        }
 
@@ -209,7 +209,7 @@ static int macb_mii_probe(struct net_device *dev)
                                 PHY_INTERFACE_MODE_RMII :
                                 PHY_INTERFACE_MODE_MII);
        if (ret) {
-               printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
+               netdev_err(dev, "Could not attach to PHY\n");
                return ret;
        }
 
@@ -228,7 +228,7 @@ static int macb_mii_probe(struct net_device *dev)
 
 static int macb_mii_init(struct macb *bp)
 {
-       struct eth_platform_data *pdata;
+       struct macb_platform_data *pdata;
        int err = -ENXIO, i;
 
        /* Enable management port */
@@ -303,14 +303,13 @@ static void macb_tx(struct macb *bp)
        status = macb_readl(bp, TSR);
        macb_writel(bp, TSR, status);
 
-       dev_dbg(&bp->pdev->dev, "macb_tx status = %02lx\n",
-               (unsigned long)status);
+       netdev_dbg(bp->dev, "macb_tx status = %02lx\n", (unsigned long)status);
 
        if (status & (MACB_BIT(UND) | MACB_BIT(TSR_RLE))) {
                int i;
-               printk(KERN_ERR "%s: TX %s, resetting buffers\n",
-                       bp->dev->name, status & MACB_BIT(UND) ?
-                       "underrun" : "retry limit exceeded");
+               netdev_err(bp->dev, "TX %s, resetting buffers\n",
+                          status & MACB_BIT(UND) ?
+                          "underrun" : "retry limit exceeded");
 
                /* Transfer ongoing, disable transmitter, to avoid confusion */
                if (status & MACB_BIT(TGO))
@@ -369,8 +368,8 @@ static void macb_tx(struct macb *bp)
                if (!(bufstat & MACB_BIT(TX_USED)))
                        break;
 
-               dev_dbg(&bp->pdev->dev, "skb %u (data %p) TX complete\n",
-                       tail, skb->data);
+               netdev_dbg(bp->dev, "skb %u (data %p) TX complete\n",
+                          tail, skb->data);
                dma_unmap_single(&bp->pdev->dev, rp->mapping, skb->len,
                                 DMA_TO_DEVICE);
                bp->stats.tx_packets++;
@@ -395,8 +394,8 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
 
        len = MACB_BFEXT(RX_FRMLEN, bp->rx_ring[last_frag].ctrl);
 
-       dev_dbg(&bp->pdev->dev, "macb_rx_frame frags %u - %u (len %u)\n",
-               first_frag, last_frag, len);
+       netdev_dbg(bp->dev, "macb_rx_frame frags %u - %u (len %u)\n",
+                  first_frag, last_frag, len);
 
        skb = dev_alloc_skb(len + RX_OFFSET);
        if (!skb) {
@@ -437,8 +436,8 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
 
        bp->stats.rx_packets++;
        bp->stats.rx_bytes += len;
-       dev_dbg(&bp->pdev->dev, "received skb of length %u, csum: %08x\n",
-               skb->len, skb->csum);
+       netdev_dbg(bp->dev, "received skb of length %u, csum: %08x\n",
+                  skb->len, skb->csum);
        netif_receive_skb(skb);
 
        return 0;
@@ -515,8 +514,8 @@ static int macb_poll(struct napi_struct *napi, int budget)
 
        work_done = 0;
 
-       dev_dbg(&bp->pdev->dev, "poll: status = %08lx, budget = %d\n",
-               (unsigned long)status, budget);
+       netdev_dbg(bp->dev, "poll: status = %08lx, budget = %d\n",
+                  (unsigned long)status, budget);
 
        work_done = macb_rx(bp, budget);
        if (work_done < budget) {
@@ -565,8 +564,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
                        macb_writel(bp, IDR, MACB_RX_INT_FLAGS);
 
                        if (napi_schedule_prep(&bp->napi)) {
-                               dev_dbg(&bp->pdev->dev,
-                                       "scheduling RX softirq\n");
+                               netdev_dbg(bp->dev, "scheduling RX softirq\n");
                                __napi_schedule(&bp->napi);
                        }
                }
@@ -587,11 +585,11 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
 
                if (status & MACB_BIT(HRESP)) {
                        /*
-                        * TODO: Reset the hardware, and maybe move the printk
-                        * to a lower-priority context as well (work queue?)
+                        * TODO: Reset the hardware, and maybe move the
+                        * netdev_err to a lower-priority context as well
+                        * (work queue?)
                         */
-                       printk(KERN_ERR "%s: DMA bus error: HRESP not OK\n",
-                              dev->name);
+                       netdev_err(dev, "DMA bus error: HRESP not OK\n");
                }
 
                status = macb_readl(bp, ISR);
@@ -626,16 +624,12 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
        unsigned long flags;
 
 #ifdef DEBUG
-       int i;
-       dev_dbg(&bp->pdev->dev,
-               "start_xmit: len %u head %p data %p tail %p end %p\n",
-               skb->len, skb->head, skb->data,
-               skb_tail_pointer(skb), skb_end_pointer(skb));
-       dev_dbg(&bp->pdev->dev,
-               "data:");
-       for (i = 0; i < 16; i++)
-               printk(" %02x", (unsigned int)skb->data[i]);
-       printk("\n");
+       netdev_dbg(bp->dev,
+                  "start_xmit: len %u head %p data %p tail %p end %p\n",
+                  skb->len, skb->head, skb->data,
+                  skb_tail_pointer(skb), skb_end_pointer(skb));
+       print_hex_dump(KERN_DEBUG, "data: ", DUMP_PREFIX_OFFSET, 16, 1,
+                      skb->data, 16, true);
 #endif
 
        len = skb->len;
@@ -645,21 +639,20 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
        if (TX_BUFFS_AVAIL(bp) < 1) {
                netif_stop_queue(dev);
                spin_unlock_irqrestore(&bp->lock, flags);
-               dev_err(&bp->pdev->dev,
-                       "BUG! Tx Ring full when queue awake!\n");
-               dev_dbg(&bp->pdev->dev, "tx_head = %u, tx_tail = %u\n",
-                       bp->tx_head, bp->tx_tail);
+               netdev_err(bp->dev, "BUG! Tx Ring full when queue awake!\n");
+               netdev_dbg(bp->dev, "tx_head = %u, tx_tail = %u\n",
+                          bp->tx_head, bp->tx_tail);
                return NETDEV_TX_BUSY;
        }
 
        entry = bp->tx_head;
-       dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry);
+       netdev_dbg(bp->dev, "Allocated ring entry %u\n", entry);
        mapping = dma_map_single(&bp->pdev->dev, skb->data,
                                 len, DMA_TO_DEVICE);
        bp->tx_skb[entry].skb = skb;
        bp->tx_skb[entry].mapping = mapping;
-       dev_dbg(&bp->pdev->dev, "Mapped skb data %p to DMA addr %08lx\n",
-               skb->data, (unsigned long)mapping);
+       netdev_dbg(bp->dev, "Mapped skb data %p to DMA addr %08lx\n",
+                  skb->data, (unsigned long)mapping);
 
        ctrl = MACB_BF(TX_FRMLEN, len);
        ctrl |= MACB_BIT(TX_LAST);
@@ -723,27 +716,27 @@ static int macb_alloc_consistent(struct macb *bp)
                                         &bp->rx_ring_dma, GFP_KERNEL);
        if (!bp->rx_ring)
                goto out_err;
-       dev_dbg(&bp->pdev->dev,
-               "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
-               size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
+       netdev_dbg(bp->dev,
+                  "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
+                  size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
 
        size = TX_RING_BYTES;
        bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
                                         &bp->tx_ring_dma, GFP_KERNEL);
        if (!bp->tx_ring)
                goto out_err;
-       dev_dbg(&bp->pdev->dev,
-               "Allocated TX ring of %d bytes at %08lx (mapped %p)\n",
-               size, (unsigned long)bp->tx_ring_dma, bp->tx_ring);
+       netdev_dbg(bp->dev,
+                  "Allocated TX ring of %d bytes at %08lx (mapped %p)\n",
+                  size, (unsigned long)bp->tx_ring_dma, bp->tx_ring);
 
        size = RX_RING_SIZE * RX_BUFFER_SIZE;
        bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size,
                                            &bp->rx_buffers_dma, GFP_KERNEL);
        if (!bp->rx_buffers)
                goto out_err;
-       dev_dbg(&bp->pdev->dev,
-               "Allocated RX buffers of %d bytes at %08lx (mapped %p)\n",
-               size, (unsigned long)bp->rx_buffers_dma, bp->rx_buffers);
+       netdev_dbg(bp->dev,
+                  "Allocated RX buffers of %d bytes at %08lx (mapped %p)\n",
+                  size, (unsigned long)bp->rx_buffers_dma, bp->rx_buffers);
 
        return 0;
 
@@ -954,7 +947,7 @@ static int macb_open(struct net_device *dev)
        struct macb *bp = netdev_priv(dev);
        int err;
 
-       dev_dbg(&bp->pdev->dev, "open\n");
+       netdev_dbg(bp->dev, "open\n");
 
        /* if the phy is not yet register, retry later*/
        if (!bp->phy_dev)
@@ -965,9 +958,8 @@ static int macb_open(struct net_device *dev)
 
        err = macb_alloc_consistent(bp);
        if (err) {
-               printk(KERN_ERR
-                      "%s: Unable to allocate DMA memory (error %d)\n",
-                      dev->name, err);
+               netdev_err(dev, "Unable to allocate DMA memory (error %d)\n",
+                          err);
                return err;
        }
 
@@ -1119,7 +1111,7 @@ static const struct net_device_ops macb_netdev_ops = {
 
 static int __init macb_probe(struct platform_device *pdev)
 {
-       struct eth_platform_data *pdata;
+       struct macb_platform_data *pdata;
        struct resource *regs;
        struct net_device *dev;
        struct macb *bp;
@@ -1152,28 +1144,19 @@ static int __init macb_probe(struct platform_device *pdev)
 
        spin_lock_init(&bp->lock);
 
-#if defined(CONFIG_ARCH_AT91)
-       bp->pclk = clk_get(&pdev->dev, "macb_clk");
+       bp->pclk = clk_get(&pdev->dev, "pclk");
        if (IS_ERR(bp->pclk)) {
                dev_err(&pdev->dev, "failed to get macb_clk\n");
                goto err_out_free_dev;
        }
        clk_enable(bp->pclk);
-#else
-       bp->pclk = clk_get(&pdev->dev, "pclk");
-       if (IS_ERR(bp->pclk)) {
-               dev_err(&pdev->dev, "failed to get pclk\n");
-               goto err_out_free_dev;
-       }
+
        bp->hclk = clk_get(&pdev->dev, "hclk");
        if (IS_ERR(bp->hclk)) {
                dev_err(&pdev->dev, "failed to get hclk\n");
                goto err_out_put_pclk;
        }
-
-       clk_enable(bp->pclk);
        clk_enable(bp->hclk);
-#endif
 
        bp->regs = ioremap(regs->start, resource_size(regs));
        if (!bp->regs) {
@@ -1185,9 +1168,8 @@ static int __init macb_probe(struct platform_device *pdev)
        dev->irq = platform_get_irq(pdev, 0);
        err = request_irq(dev->irq, macb_interrupt, 0, dev->name, dev);
        if (err) {
-               printk(KERN_ERR
-                      "%s: Unable to request IRQ %d (error %d)\n",
-                      dev->name, dev->irq, err);
+               dev_err(&pdev->dev, "Unable to request IRQ %d (error %d)\n",
+                       dev->irq, err);
                goto err_out_iounmap;
        }
 
@@ -1239,13 +1221,12 @@ static int __init macb_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, dev);
 
-       printk(KERN_INFO "%s: Atmel MACB at 0x%08lx irq %d (%pM)\n",
-              dev->name, dev->base_addr, dev->irq, dev->dev_addr);
+       netdev_info(dev, "Atmel MACB at 0x%08lx irq %d (%pM)\n",
+               dev->base_addr, dev->irq, dev->dev_addr);
 
        phydev = bp->phy_dev;
-       printk(KERN_INFO "%s: attached PHY driver [%s] "
-               "(mii_bus:phy_addr=%s, irq=%d)\n", dev->name,
-               phydev->drv->name, dev_name(&phydev->dev), phydev->irq);
+       netdev_info(dev, "attached PHY driver [%s] (mii_bus:phy_addr=%s, irq=%d)\n",
+                   phydev->drv->name, dev_name(&phydev->dev), phydev->irq);
 
        return 0;
 
@@ -1256,14 +1237,10 @@ err_out_free_irq:
 err_out_iounmap:
        iounmap(bp->regs);
 err_out_disable_clocks:
-#ifndef CONFIG_ARCH_AT91
        clk_disable(bp->hclk);
        clk_put(bp->hclk);
-#endif
        clk_disable(bp->pclk);
-#ifndef CONFIG_ARCH_AT91
 err_out_put_pclk:
-#endif
        clk_put(bp->pclk);
 err_out_free_dev:
        free_netdev(dev);
@@ -1289,10 +1266,8 @@ static int __exit macb_remove(struct platform_device *pdev)
                unregister_netdev(dev);
                free_irq(dev->irq, dev);
                iounmap(bp->regs);
-#ifndef CONFIG_ARCH_AT91
                clk_disable(bp->hclk);
                clk_put(bp->hclk);
-#endif
                clk_disable(bp->pclk);
                clk_put(bp->pclk);
                free_netdev(dev);
@@ -1310,9 +1285,7 @@ static int macb_suspend(struct platform_device *pdev, pm_message_t state)
 
        netif_device_detach(netdev);
 
-#ifndef CONFIG_ARCH_AT91
        clk_disable(bp->hclk);
-#endif
        clk_disable(bp->pclk);
 
        return 0;
@@ -1324,9 +1297,7 @@ static int macb_resume(struct platform_device *pdev)
        struct macb *bp = netdev_priv(netdev);
 
        clk_enable(bp->pclk);
-#ifndef CONFIG_ARCH_AT91
        clk_enable(bp->hclk);
-#endif
 
        netif_device_attach(netdev);
 
index e39b77a..dc474bc 100644 (file)
 
 #include <mach/at91_rtc.h>
 
+#define at91_rtc_read(field) \
+       __raw_readl(at91_rtc_regs + field)
+#define at91_rtc_write(field, val) \
+       __raw_writel((val), at91_rtc_regs + field)
 
 #define AT91_RTC_EPOCH         1900UL  /* just like arch/arm/common/rtctime.c */
 
 static DECLARE_COMPLETION(at91_rtc_updated);
 static unsigned int at91_alarm_year = AT91_RTC_EPOCH;
+static void __iomem *at91_rtc_regs;
+static int irq;
 
 /*
  * Decode time/date into rtc_time structure
@@ -48,10 +54,10 @@ static void at91_rtc_decodetime(unsigned int timereg, unsigned int calreg,
 
        /* must read twice in case it changes */
        do {
-               time = at91_sys_read(timereg);
-               date = at91_sys_read(calreg);
-       } while ((time != at91_sys_read(timereg)) ||
-                       (date != at91_sys_read(calreg)));
+               time = at91_rtc_read(timereg);
+               date = at91_rtc_read(calreg);
+       } while ((time != at91_rtc_read(timereg)) ||
+                       (date != at91_rtc_read(calreg)));
 
        tm->tm_sec  = bcd2bin((time & AT91_RTC_SEC) >> 0);
        tm->tm_min  = bcd2bin((time & AT91_RTC_MIN) >> 8);
@@ -98,19 +104,19 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
                tm->tm_hour, tm->tm_min, tm->tm_sec);
 
        /* Stop Time/Calendar from counting */
-       cr = at91_sys_read(AT91_RTC_CR);
-       at91_sys_write(AT91_RTC_CR, cr | AT91_RTC_UPDCAL | AT91_RTC_UPDTIM);
+       cr = at91_rtc_read(AT91_RTC_CR);
+       at91_rtc_write(AT91_RTC_CR, cr | AT91_RTC_UPDCAL | AT91_RTC_UPDTIM);
 
-       at91_sys_write(AT91_RTC_IER, AT91_RTC_ACKUPD);
+       at91_rtc_write(AT91_RTC_IER, AT91_RTC_ACKUPD);
        wait_for_completion(&at91_rtc_updated); /* wait for ACKUPD interrupt */
-       at91_sys_write(AT91_RTC_IDR, AT91_RTC_ACKUPD);
+       at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD);
 
-       at91_sys_write(AT91_RTC_TIMR,
+       at91_rtc_write(AT91_RTC_TIMR,
                          bin2bcd(tm->tm_sec) << 0
                        | bin2bcd(tm->tm_min) << 8
                        | bin2bcd(tm->tm_hour) << 16);
 
-       at91_sys_write(AT91_RTC_CALR,
+       at91_rtc_write(AT91_RTC_CALR,
                          bin2bcd((tm->tm_year + 1900) / 100)   /* century */
                        | bin2bcd(tm->tm_year % 100) << 8       /* year */
                        | bin2bcd(tm->tm_mon + 1) << 16         /* tm_mon starts at zero */
@@ -118,8 +124,8 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
                        | bin2bcd(tm->tm_mday) << 24);
 
        /* Restart Time/Calendar */
-       cr = at91_sys_read(AT91_RTC_CR);
-       at91_sys_write(AT91_RTC_CR, cr & ~(AT91_RTC_UPDCAL | AT91_RTC_UPDTIM));
+       cr = at91_rtc_read(AT91_RTC_CR);
+       at91_rtc_write(AT91_RTC_CR, cr & ~(AT91_RTC_UPDCAL | AT91_RTC_UPDTIM));
 
        return 0;
 }
@@ -135,7 +141,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
        tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year);
        tm->tm_year = at91_alarm_year - 1900;
 
-       alrm->enabled = (at91_sys_read(AT91_RTC_IMR) & AT91_RTC_ALARM)
+       alrm->enabled = (at91_rtc_read(AT91_RTC_IMR) & AT91_RTC_ALARM)
                        ? 1 : 0;
 
        pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
@@ -160,20 +166,20 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
        tm.tm_min = alrm->time.tm_min;
        tm.tm_sec = alrm->time.tm_sec;
 
-       at91_sys_write(AT91_RTC_IDR, AT91_RTC_ALARM);
-       at91_sys_write(AT91_RTC_TIMALR,
+       at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM);
+       at91_rtc_write(AT91_RTC_TIMALR,
                  bin2bcd(tm.tm_sec) << 0
                | bin2bcd(tm.tm_min) << 8
                | bin2bcd(tm.tm_hour) << 16
                | AT91_RTC_HOUREN | AT91_RTC_MINEN | AT91_RTC_SECEN);
-       at91_sys_write(AT91_RTC_CALALR,
+       at91_rtc_write(AT91_RTC_CALALR,
                  bin2bcd(tm.tm_mon + 1) << 16          /* tm_mon starts at zero */
                | bin2bcd(tm.tm_mday) << 24
                | AT91_RTC_DATEEN | AT91_RTC_MTHEN);
 
        if (alrm->enabled) {
-               at91_sys_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
-               at91_sys_write(AT91_RTC_IER, AT91_RTC_ALARM);
+               at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
+               at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM);
        }
 
        pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
@@ -188,10 +194,10 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
        pr_debug("%s(): cmd=%08x\n", __func__, enabled);
 
        if (enabled) {
-               at91_sys_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
-               at91_sys_write(AT91_RTC_IER, AT91_RTC_ALARM);
+               at91_rtc_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
+               at91_rtc_write(AT91_RTC_IER, AT91_RTC_ALARM);
        } else
-               at91_sys_write(AT91_RTC_IDR, AT91_RTC_ALARM);
+               at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ALARM);
 
        return 0;
 }
@@ -200,7 +206,7 @@ static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
  */
 static int at91_rtc_proc(struct device *dev, struct seq_file *seq)
 {
-       unsigned long imr = at91_sys_read(AT91_RTC_IMR);
+       unsigned long imr = at91_rtc_read(AT91_RTC_IMR);
 
        seq_printf(seq, "update_IRQ\t: %s\n",
                        (imr & AT91_RTC_ACKUPD) ? "yes" : "no");
@@ -220,7 +226,7 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id)
        unsigned int rtsr;
        unsigned long events = 0;
 
-       rtsr = at91_sys_read(AT91_RTC_SR) & at91_sys_read(AT91_RTC_IMR);
+       rtsr = at91_rtc_read(AT91_RTC_SR) & at91_rtc_read(AT91_RTC_IMR);
        if (rtsr) {             /* this interrupt is shared!  Is it ours? */
                if (rtsr & AT91_RTC_ALARM)
                        events |= (RTC_AF | RTC_IRQF);
@@ -229,7 +235,7 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id)
                if (rtsr & AT91_RTC_ACKUPD)
                        complete(&at91_rtc_updated);
 
-               at91_sys_write(AT91_RTC_SCCR, rtsr);    /* clear status reg */
+               at91_rtc_write(AT91_RTC_SCCR, rtsr);    /* clear status reg */
 
                rtc_update_irq(rtc, 1, events);
 
@@ -256,22 +262,41 @@ static const struct rtc_class_ops at91_rtc_ops = {
 static int __init at91_rtc_probe(struct platform_device *pdev)
 {
        struct rtc_device *rtc;
-       int ret;
+       struct resource *regs;
+       int ret = 0;
 
-       at91_sys_write(AT91_RTC_CR, 0);
-       at91_sys_write(AT91_RTC_MR, 0);         /* 24 hour mode */
+       regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!regs) {
+               dev_err(&pdev->dev, "no mmio resource defined\n");
+               return -ENXIO;
+       }
+
+       irq = platform_get_irq(pdev, 0);
+       if (irq < 0) {
+               dev_err(&pdev->dev, "no irq resource defined\n");
+               return -ENXIO;
+       }
+
+       at91_rtc_regs = ioremap(regs->start, resource_size(regs));
+       if (!at91_rtc_regs) {
+               dev_err(&pdev->dev, "failed to map registers, aborting.\n");
+               return -ENOMEM;
+       }
+
+       at91_rtc_write(AT91_RTC_CR, 0);
+       at91_rtc_write(AT91_RTC_MR, 0);         /* 24 hour mode */
 
        /* Disable all interrupts */
-       at91_sys_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM |
+       at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM |
                                        AT91_RTC_SECEV | AT91_RTC_TIMEV |
                                        AT91_RTC_CALEV);
 
-       ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt,
+       ret = request_irq(irq, at91_rtc_interrupt,
                                IRQF_SHARED,
                                "at91_rtc", pdev);
        if (ret) {
                printk(KERN_ERR "at91_rtc: IRQ %d already in use.\n",
-                               AT91_ID_SYS);
+                               irq);
                return ret;
        }
 
@@ -284,7 +309,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
        rtc = rtc_device_register(pdev->name, &pdev->dev,
                                &at91_rtc_ops, THIS_MODULE);
        if (IS_ERR(rtc)) {
-               free_irq(AT91_ID_SYS, pdev);
+               free_irq(irq, pdev);
                return PTR_ERR(rtc);
        }
        platform_set_drvdata(pdev, rtc);
@@ -301,10 +326,10 @@ static int __exit at91_rtc_remove(struct platform_device *pdev)
        struct rtc_device *rtc = platform_get_drvdata(pdev);
 
        /* Disable all interrupts */
-       at91_sys_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM |
+       at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM |
                                        AT91_RTC_SECEV | AT91_RTC_TIMEV |
                                        AT91_RTC_CALEV);
-       free_irq(AT91_ID_SYS, pdev);
+       free_irq(irq, pdev);
 
        rtc_device_unregister(rtc);
        platform_set_drvdata(pdev, NULL);
@@ -323,13 +348,13 @@ static int at91_rtc_suspend(struct device *dev)
        /* this IRQ is shared with DBGU and other hardware which isn't
         * necessarily doing PM like we are...
         */
-       at91_rtc_imr = at91_sys_read(AT91_RTC_IMR)
+       at91_rtc_imr = at91_rtc_read(AT91_RTC_IMR)
                        & (AT91_RTC_ALARM|AT91_RTC_SECEV);
        if (at91_rtc_imr) {
                if (device_may_wakeup(dev))
-                       enable_irq_wake(AT91_ID_SYS);
+                       enable_irq_wake(irq);
                else
-                       at91_sys_write(AT91_RTC_IDR, at91_rtc_imr);
+                       at91_rtc_write(AT91_RTC_IDR, at91_rtc_imr);
        }
        return 0;
 }
@@ -338,9 +363,9 @@ static int at91_rtc_resume(struct device *dev)
 {
        if (at91_rtc_imr) {
                if (device_may_wakeup(dev))
-                       disable_irq_wake(AT91_ID_SYS);
+                       disable_irq_wake(irq);
                else
-                       at91_sys_write(AT91_RTC_IER, at91_rtc_imr);
+                       at91_rtc_write(AT91_RTC_IER, at91_rtc_imr);
        }
        return 0;
 }
index ac41f71..143a725 100644 (file)
@@ -1748,7 +1748,7 @@ static int __init at91udc_probe(struct platform_device *pdev)
 
        /* rm9200 needs manual D+ pullup; off by default */
        if (cpu_is_at91rm9200()) {
-               if (udc->board.pullup_pin <= 0) {
+               if (gpio_is_valid(udc->board.pullup_pin)) {
                        DBG("no D+ pullup?\n");
                        retval = -ENODEV;
                        goto fail0;
@@ -1815,7 +1815,7 @@ static int __init at91udc_probe(struct platform_device *pdev)
                DBG("request irq %d failed\n", udc->udp_irq);
                goto fail1;
        }
-       if (udc->board.vbus_pin > 0) {
+       if (gpio_is_valid(udc->board.vbus_pin)) {
                retval = gpio_request(udc->board.vbus_pin, "udc_vbus");
                if (retval < 0) {
                        DBG("request vbus pin failed\n");
@@ -1859,10 +1859,10 @@ static int __init at91udc_probe(struct platform_device *pdev)
        INFO("%s version %s\n", driver_name, DRIVER_VERSION);
        return 0;
 fail4:
-       if (udc->board.vbus_pin > 0 && !udc->board.vbus_polled)
+       if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled)
                free_irq(udc->board.vbus_pin, udc);
 fail3:
-       if (udc->board.vbus_pin > 0)
+       if (gpio_is_valid(udc->board.vbus_pin))
                gpio_free(udc->board.vbus_pin);
 fail2:
        free_irq(udc->udp_irq, udc);
@@ -1897,7 +1897,7 @@ static int __exit at91udc_remove(struct platform_device *pdev)
 
        device_init_wakeup(&pdev->dev, 0);
        remove_debug_file(udc);
-       if (udc->board.vbus_pin > 0) {
+       if (gpio_is_valid(udc->board.vbus_pin)) {
                free_irq(udc->board.vbus_pin, udc);
                gpio_free(udc->board.vbus_pin);
        }
@@ -1941,7 +1941,7 @@ static int at91udc_suspend(struct platform_device *pdev, pm_message_t mesg)
                enable_irq_wake(udc->udp_irq);
 
        udc->active_suspend = wake;
-       if (udc->board.vbus_pin > 0 && !udc->board.vbus_polled && wake)
+       if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled && wake)
                enable_irq_wake(udc->board.vbus_pin);
        return 0;
 }
@@ -1951,7 +1951,7 @@ static int at91udc_resume(struct platform_device *pdev)
        struct at91_udc *udc = platform_get_drvdata(pdev);
        unsigned long   flags;
 
-       if (udc->board.vbus_pin > 0 && !udc->board.vbus_polled &&
+       if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled &&
            udc->active_suspend)
                disable_irq_wake(udc->board.vbus_pin);
 
index 95a9fec..5df0b0e 100644 (file)
@@ -223,7 +223,7 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
        if (port < 0 || port >= 2)
                return;
 
-       if (pdata->vbus_pin[port] <= 0)
+       if (!gpio_is_valid(pdata->vbus_pin[port]))
                return;
 
        gpio_set_value(pdata->vbus_pin[port], !pdata->vbus_pin_inverted ^ enable);
@@ -234,7 +234,7 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
        if (port < 0 || port >= 2)
                return -EINVAL;
 
-       if (pdata->vbus_pin[port] <= 0)
+       if (!gpio_is_valid(pdata->vbus_pin[port]))
                return -EINVAL;
 
        return gpio_get_value(pdata->vbus_pin[port]) ^ !pdata->vbus_pin_inverted;
@@ -465,7 +465,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 
        if (pdata) {
                for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
-                       if (pdata->vbus_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->vbus_pin[i]))
                                continue;
                        gpio_request(pdata->vbus_pin[i], "ohci_vbus");
                        ohci_at91_usb_set_power(pdata, i, 1);
@@ -474,7 +474,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
                for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
                        int ret;
 
-                       if (pdata->overcurrent_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->overcurrent_pin[i]))
                                continue;
                        gpio_request(pdata->overcurrent_pin[i], "ohci_overcurrent");
 
@@ -499,14 +499,14 @@ static int ohci_hcd_at91_drv_remove(struct platform_device *pdev)
 
        if (pdata) {
                for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
-                       if (pdata->vbus_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->vbus_pin[i]))
                                continue;
                        ohci_at91_usb_set_power(pdata, i, 0);
                        gpio_free(pdata->vbus_pin[i]);
                }
 
                for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
-                       if (pdata->overcurrent_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->overcurrent_pin[i]))
                                continue;
                        free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev);
                        gpio_free(pdata->overcurrent_pin[i]);
index 87445b2..0056256 100644 (file)
 
 #define DRV_NAME "AT91SAM9 Watchdog"
 
+#define wdt_read(field) \
+       __raw_readl(at91wdt_private.base + field)
+#define wdt_write(field, val) \
+       __raw_writel((val), at91wdt_private.base + field)
+
 /* AT91SAM9 watchdog runs a 12bit counter @ 256Hz,
  * use this to convert a watchdog
  * value from/to milliseconds.
@@ -63,6 +68,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started "
 static void at91_ping(unsigned long data);
 
 static struct {
+       void __iomem *base;
        unsigned long next_heartbeat;   /* the next_heartbeat for the timer */
        unsigned long open;
        char expect_close;
@@ -77,7 +83,7 @@ static struct {
  */
 static inline void at91_wdt_reset(void)
 {
-       at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
+       wdt_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
 }
 
 /*
@@ -132,7 +138,7 @@ static int at91_wdt_settimeout(unsigned int timeout)
        unsigned int mr;
 
        /* Check if disabled */
-       mr = at91_sys_read(AT91_WDT_MR);
+       mr = wdt_read(AT91_WDT_MR);
        if (mr & AT91_WDT_WDDIS) {
                printk(KERN_ERR DRV_NAME": sorry, watchdog is disabled\n");
                return -EIO;
@@ -149,7 +155,7 @@ static int at91_wdt_settimeout(unsigned int timeout)
                | AT91_WDT_WDDBGHLT     /* disabled in debug mode */
                | AT91_WDT_WDD          /* restart at any time */
                | (timeout & AT91_WDT_WDV);  /* timer value */
-       at91_sys_write(AT91_WDT_MR, reg);
+       wdt_write(AT91_WDT_MR, reg);
 
        return 0;
 }
@@ -248,12 +254,22 @@ static struct miscdevice at91wdt_miscdev = {
 
 static int __init at91wdt_probe(struct platform_device *pdev)
 {
+       struct resource *r;
        int res;
 
        if (at91wdt_miscdev.parent)
                return -EBUSY;
        at91wdt_miscdev.parent = &pdev->dev;
 
+       r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!r)
+               return -ENODEV;
+       at91wdt_private.base = ioremap(r->start, resource_size(r));
+       if (!at91wdt_private.base) {
+               dev_err(&pdev->dev, "failed to map registers, aborting.\n");
+               return -ENOMEM;
+       }
+
        /* Set watchdog */
        res = at91_wdt_settimeout(ms_to_ticks(WDT_HW_TIMEOUT * 1000));
        if (res)
index 757f9ca..c6fbb2e 100644 (file)
 #ifndef AT91_WDT_H
 #define AT91_WDT_H
 
-#define AT91_WDT_CR            (AT91_WDT + 0x00)       /* Watchdog Control Register */
+#define AT91_WDT_CR            0x00                    /* Watchdog Control Register */
 #define                AT91_WDT_WDRSTT         (1    << 0)             /* Restart */
 #define                AT91_WDT_KEY            (0xa5 << 24)            /* KEY Password */
 
-#define AT91_WDT_MR            (AT91_WDT + 0x04)       /* Watchdog Mode Register */
+#define AT91_WDT_MR            0x04                    /* Watchdog Mode Register */
 #define                AT91_WDT_WDV            (0xfff << 0)            /* Counter Value */
 #define                AT91_WDT_WDFIEN         (1     << 12)           /* Fault Interrupt Enable */
 #define                AT91_WDT_WDRSTEN        (1     << 13)           /* Reset Processor */
@@ -30,7 +30,7 @@
 #define                AT91_WDT_WDDBGHLT       (1     << 28)           /* Debug Halt */
 #define                AT91_WDT_WDIDLEHLT      (1     << 29)           /* Idle Halt */
 
-#define AT91_WDT_SR            (AT91_WDT + 0x08)       /* Watchdog Status Register */
+#define AT91_WDT_SR            0x08                    /* Watchdog Status Register */
 #define                AT91_WDT_WDUNF          (1 << 0)                /* Watchdog Underflow */
 #define                AT91_WDT_WDERR          (1 << 1)                /* Watchdog Error */
 
diff --git a/include/linux/platform_data/macb.h b/include/linux/platform_data/macb.h
new file mode 100644 (file)
index 0000000..b081c72
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2004-2006 Atmel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __MACB_PDATA_H__
+#define __MACB_PDATA_H__
+
+struct macb_platform_data {
+       u32             phy_mask;
+       int             phy_irq_pin;    /* PHY IRQ */
+       u8              is_rmii;        /* using RMII interface? */
+};
+
+#endif /* __MACB_PDATA_H__ */
diff --git a/include/media/davinci/vpif_types.h b/include/media/davinci/vpif_types.h
new file mode 100644 (file)
index 0000000..9929b05
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 Texas Instruments Inc
+ *
+ * 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 version 2.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef _VPIF_TYPES_H
+#define _VPIF_TYPES_H
+
+#define VPIF_CAPTURE_MAX_CHANNELS      2
+
+enum vpif_if_type {
+       VPIF_IF_BT656,
+       VPIF_IF_BT1120,
+       VPIF_IF_RAW_BAYER
+};
+
+struct vpif_interface {
+       enum vpif_if_type if_type;
+       unsigned hd_pol:1;
+       unsigned vd_pol:1;
+       unsigned fid_pol:1;
+};
+
+struct vpif_subdev_info {
+       const char *name;
+       struct i2c_board_info board_info;
+       u32 input;
+       u32 output;
+       unsigned can_route:1;
+       struct vpif_interface vpif_if;
+};
+
+struct vpif_display_config {
+       int (*set_clock)(int, int);
+       struct vpif_subdev_info *subdevinfo;
+       int subdev_count;
+       const char **output;
+       int output_count;
+       const char *card_name;
+};
+
+struct vpif_input {
+       struct v4l2_input input;
+       const char *subdev_name;
+};
+
+struct vpif_capture_chan_config {
+       const struct vpif_input *inputs;
+       int input_count;
+};
+
+struct vpif_capture_config {
+       int (*setup_input_channel_mode)(int);
+       int (*setup_input_path)(int, const char *);
+       struct vpif_capture_chan_config chan_config[VPIF_CAPTURE_MAX_CHANNELS];
+       struct vpif_subdev_info *subdev_info;
+       int subdev_count;
+       const char *card_name;
+};
+#endif /* _VPIF_TYPES_H */