From 9878bad223610a290e9d7ed9a12ce6fb4020b6da Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 12 Oct 2008 12:04:59 -0700 Subject: [PATCH] --- yaml --- r: 113388 b: refs/heads/master c: 807f4f8cdd5b65a8a5fcfda266c074f6a23818dd h: refs/heads/master v: v3 --- [refs] | 2 +- .../alsa/DocBook/writing-an-alsa-driver.tmpl | 3 +- trunk/Documentation/sparc/sbus_drivers.txt | 309 ---- .../arm/mach-orion5x/include/mach/orion5x.h | 2 + trunk/arch/arm/plat-omap/devices.c | 21 +- trunk/arch/avr32/boards/atngw100/setup.c | 19 +- trunk/arch/avr32/boards/atstk1000/atstk1002.c | 23 +- trunk/arch/avr32/boards/atstk1000/atstk1003.c | 15 +- trunk/arch/avr32/boards/atstk1000/atstk1004.c | 18 +- trunk/arch/avr32/include/asm/atmel-mci.h | 32 +- trunk/arch/avr32/include/asm/byteorder.h | 22 +- trunk/arch/avr32/include/asm/io.h | 8 + trunk/arch/avr32/kernel/process.c | 3 +- trunk/arch/avr32/kernel/setup.c | 19 + trunk/arch/avr32/mach-at32ap/at32ap700x.c | 460 +++--- trunk/arch/avr32/mach-at32ap/clock.c | 52 +- trunk/arch/avr32/mach-at32ap/clock.h | 8 +- .../mach-at32ap/include/mach/at32ap700x.h | 128 ++ .../avr32/mach-at32ap/include/mach/board.h | 2 +- .../arch/avr32/mach-at32ap/include/mach/io.h | 3 +- .../avr32/mach-at32ap/include/mach/portmux.h | 5 +- trunk/arch/avr32/mach-at32ap/pdc.c | 3 +- trunk/arch/avr32/mach-at32ap/pio.c | 63 +- trunk/arch/avr32/oprofile/Makefile | 2 +- trunk/arch/avr32/oprofile/backtrace.c | 81 + trunk/arch/avr32/oprofile/op_model_avr32.c | 4 + trunk/arch/sparc/Kconfig | 26 +- trunk/arch/sparc/include/asm/Kbuild | 2 - trunk/arch/sparc/include/asm/asmmacro.h | 5 - trunk/arch/sparc/include/asm/bpp.h | 73 - trunk/arch/sparc/include/asm/bugs.h | 7 - trunk/arch/sparc/include/asm/cpudata_64.h | 1 - trunk/arch/sparc/include/asm/dma-mapping_32.h | 59 +- trunk/arch/sparc/include/asm/dma.h | 141 +- trunk/arch/sparc/include/asm/dma_32.h | 288 ---- trunk/arch/sparc/include/asm/dma_64.h | 205 --- trunk/arch/sparc/include/asm/ebus.h | 8 - trunk/arch/sparc/include/asm/ebus_32.h | 99 -- trunk/arch/sparc/include/asm/ebus_64.h | 95 -- trunk/arch/sparc/include/asm/ebus_dma.h | 35 + trunk/arch/sparc/include/asm/elf_32.h | 7 +- trunk/arch/sparc/include/asm/fhc.h | 43 +- trunk/arch/sparc/include/asm/floppy_32.h | 16 +- trunk/arch/sparc/include/asm/floppy_64.h | 130 +- trunk/arch/sparc/include/asm/gpio.h | 36 + trunk/arch/sparc/include/asm/io-unit.h | 4 - trunk/arch/sparc/include/asm/io_32.h | 19 +- trunk/arch/sparc/include/asm/io_64.h | 22 +- trunk/arch/sparc/include/asm/iommu_64.h | 3 + trunk/arch/sparc/include/asm/irq_64.h | 1 - trunk/arch/sparc/include/asm/mc146818rtc_64.h | 10 +- trunk/arch/sparc/include/asm/memctrl.h | 9 + trunk/arch/sparc/include/asm/mostek.h | 8 - trunk/arch/sparc/include/asm/mostek_32.h | 171 --- trunk/arch/sparc/include/asm/mostek_64.h | 143 -- trunk/arch/sparc/include/asm/obio.h | 11 - trunk/arch/sparc/include/asm/of_device.h | 2 + trunk/arch/sparc/include/asm/of_platform.h | 3 - trunk/arch/sparc/include/asm/oplib_32.h | 1 - trunk/arch/sparc/include/asm/page_32.h | 5 +- trunk/arch/sparc/include/asm/page_64.h | 2 + trunk/arch/sparc/include/asm/parport.h | 4 +- trunk/arch/sparc/include/asm/pci_32.h | 2 + trunk/arch/sparc/include/asm/pgtable_32.h | 4 - trunk/arch/sparc/include/asm/pgtable_64.h | 2 + trunk/arch/sparc/include/asm/prom.h | 12 + trunk/arch/sparc/include/asm/ptrace_64.h | 3 + trunk/arch/sparc/include/asm/reboot.h | 6 - trunk/arch/sparc/include/asm/rtc.h | 26 - trunk/arch/sparc/include/asm/sbus.h | 8 - trunk/arch/sparc/include/asm/sbus_32.h | 153 -- trunk/arch/sparc/include/asm/sbus_64.h | 190 --- trunk/arch/sparc/include/asm/spinlock_32.h | 2 - trunk/arch/sparc/include/asm/spinlock_64.h | 2 - trunk/arch/sparc/include/asm/sstate.h | 13 - trunk/arch/sparc/include/asm/starfire.h | 1 - trunk/arch/sparc/include/asm/sun4paddr.h | 56 - trunk/arch/sparc/include/asm/sun4prom.h | 83 - trunk/arch/sparc/include/asm/system_32.h | 9 +- trunk/arch/sparc/include/asm/system_64.h | 6 +- trunk/arch/sparc/include/asm/thread_info_32.h | 4 - trunk/arch/sparc/include/asm/timer_32.h | 87 -- trunk/arch/sparc/include/asm/vac-ops.h | 7 - trunk/arch/sparc/include/asm/vfc_ioctls.h | 58 - trunk/arch/sparc/include/asm/visasm.h | 1 + trunk/arch/sparc/kernel/Makefile | 4 +- trunk/arch/sparc/kernel/apc.c | 72 +- trunk/arch/sparc/kernel/auxio.c | 6 +- trunk/arch/sparc/kernel/devices.c | 2 +- trunk/arch/sparc/kernel/dma.c | 227 +++ trunk/arch/sparc/kernel/dma.h | 14 + trunk/arch/sparc/kernel/ebus.c | 393 ----- trunk/arch/sparc/kernel/entry.S | 94 +- trunk/arch/sparc/kernel/head.S | 28 +- trunk/arch/sparc/kernel/idprom.c | 7 - trunk/arch/sparc/kernel/ioport.c | 227 +-- trunk/arch/sparc/kernel/irq.h | 6 - trunk/arch/sparc/kernel/of_device.c | 74 +- trunk/arch/sparc/kernel/pcic.c | 15 +- trunk/arch/sparc/kernel/pmc.c | 59 +- trunk/arch/sparc/kernel/process.c | 2 +- trunk/arch/sparc/kernel/prom.c | 7 +- trunk/arch/sparc/kernel/setup.c | 32 +- trunk/arch/sparc/kernel/sparc_ksyms.c | 25 - trunk/arch/sparc/kernel/sun4c_irq.c | 156 +- trunk/arch/sparc/kernel/sun4d_irq.c | 286 ++-- trunk/arch/sparc/kernel/sun4d_smp.c | 12 +- trunk/arch/sparc/kernel/sun4m_irq.c | 495 +++--- trunk/arch/sparc/kernel/sun4m_smp.c | 4 +- trunk/arch/sparc/kernel/sun4setup.c | 75 - trunk/arch/sparc/kernel/sys_sparc.c | 8 +- trunk/arch/sparc/kernel/tick14.c | 47 - trunk/arch/sparc/kernel/time.c | 382 +---- trunk/arch/sparc/kernel/traps.c | 17 - trunk/arch/sparc/mm/Makefile | 9 +- trunk/arch/sparc/mm/btfixup.c | 6 +- trunk/arch/sparc/mm/fault.c | 2 +- trunk/arch/sparc/mm/init.c | 14 +- trunk/arch/sparc/mm/io-unit.c | 136 +- trunk/arch/sparc/mm/iommu.c | 113 +- trunk/arch/sparc/mm/nosrmmu.c | 59 - trunk/arch/sparc/mm/srmmu.c | 1 - trunk/arch/sparc/mm/sun4c.c | 204 +-- trunk/arch/sparc/prom/Makefile | 2 - trunk/arch/sparc/prom/bootstr.c | 4 - trunk/arch/sparc/prom/console.c | 3 - trunk/arch/sparc/prom/init.c | 12 - trunk/arch/sparc/prom/memory.c | 14 - trunk/arch/sparc/prom/ranges.c | 1 - trunk/arch/sparc/prom/sun4prom.c | 161 -- trunk/arch/sparc64/Kconfig | 23 + trunk/arch/sparc64/Makefile | 2 +- trunk/arch/sparc64/kernel/Makefile | 9 +- trunk/arch/sparc64/kernel/auxio.c | 2 +- trunk/arch/sparc64/kernel/central.c | 617 +++----- trunk/arch/sparc64/kernel/chmc.c | 817 +++++++--- trunk/arch/sparc64/kernel/cpu.c | 208 +-- trunk/arch/sparc64/kernel/ds.c | 4 +- trunk/arch/sparc64/kernel/ebus.c | 299 +--- trunk/arch/sparc64/kernel/entry.h | 7 +- trunk/arch/sparc64/kernel/head.S | 1 + trunk/arch/sparc64/kernel/hvapi.c | 3 - trunk/arch/sparc64/kernel/hvcalls.S | 354 ++--- trunk/arch/sparc64/kernel/irq.c | 1 - trunk/arch/sparc64/kernel/of_device.c | 62 +- trunk/arch/sparc64/kernel/pci.c | 172 +-- trunk/arch/sparc64/kernel/pci_common.c | 8 +- trunk/arch/sparc64/kernel/pci_fire.c | 254 ++-- trunk/arch/sparc64/kernel/pci_impl.h | 27 +- trunk/arch/sparc64/kernel/pci_msi.c | 18 +- trunk/arch/sparc64/kernel/pci_psycho.c | 750 ++------- trunk/arch/sparc64/kernel/pci_sabre.c | 507 ++----- trunk/arch/sparc64/kernel/pci_schizo.c | 368 ++--- trunk/arch/sparc64/kernel/pci_sun4v.c | 197 +-- trunk/arch/sparc64/kernel/pci_sun4v_asm.S | 99 +- trunk/arch/sparc64/kernel/power.c | 55 +- trunk/arch/sparc64/kernel/process.c | 35 - trunk/arch/sparc64/kernel/prom.c | 91 +- trunk/arch/sparc64/kernel/psycho_common.c | 470 ++++++ trunk/arch/sparc64/kernel/psycho_common.h | 48 + trunk/arch/sparc64/kernel/ptrace.c | 38 +- trunk/arch/sparc64/kernel/reboot.c | 53 + trunk/arch/sparc64/kernel/sbus.c | 166 +- trunk/arch/sparc64/kernel/sparc64_ksyms.c | 23 +- trunk/arch/sparc64/kernel/sstate.c | 67 +- trunk/arch/sparc64/kernel/starfire.c | 5 - trunk/arch/sparc64/kernel/sys_sparc32.c | 8 - trunk/arch/sparc64/kernel/syscalls.S | 20 +- trunk/arch/sparc64/kernel/systbls.S | 2 +- trunk/arch/sparc64/kernel/time.c | 1187 ++------------- trunk/arch/sparc64/kernel/traps.c | 69 +- trunk/arch/sparc64/kernel/vio.c | 8 +- trunk/arch/sparc64/kernel/visemul.c | 12 +- trunk/arch/sparc64/mm/fault.c | 37 - trunk/arch/sparc64/mm/init.c | 84 +- trunk/arch/sparc64/mm/init.h | 49 + trunk/arch/sparc64/mm/tlb.c | 2 +- trunk/drivers/acpi/glue.c | 3 +- trunk/drivers/ata/Kconfig | 1 - trunk/drivers/atm/fore200e.c | 410 +++-- trunk/drivers/atm/fore200e.h | 7 +- trunk/drivers/block/sunvdc.c | 4 +- trunk/drivers/char/hw_random/n2-drv.c | 2 +- trunk/drivers/char/rtc.c | 30 +- trunk/drivers/hwmon/Kconfig | 7 + trunk/drivers/hwmon/Makefile | 1 + trunk/drivers/hwmon/ultra45_env.c | 320 ++++ trunk/drivers/input/misc/sparcspkr.c | 4 +- trunk/drivers/input/serio/i8042-sparcio.h | 2 +- trunk/drivers/leds/Kconfig | 8 + trunk/drivers/leds/Makefile | 1 + trunk/drivers/leds/leds-sunfire.c | 273 ++++ trunk/drivers/mmc/Kconfig | 9 +- trunk/drivers/mmc/card/Kconfig | 3 +- trunk/drivers/mmc/card/block.c | 46 +- trunk/drivers/mmc/card/queue.c | 23 +- trunk/drivers/mmc/core/mmc_ops.c | 8 +- trunk/drivers/mmc/core/sdio.c | 52 +- trunk/drivers/mmc/core/sdio_irq.c | 16 +- trunk/drivers/mmc/host/Kconfig | 30 +- trunk/drivers/mmc/host/atmel-mci-regs.h | 6 +- trunk/drivers/mmc/host/atmel-mci.c | 1352 ++++++++++++----- trunk/drivers/mmc/host/mmc_spi.c | 32 +- trunk/drivers/mmc/host/sdhci-pci.c | 3 +- trunk/drivers/mmc/host/sdhci.c | 46 +- trunk/drivers/mmc/host/sdhci.h | 2 + trunk/drivers/mtd/maps/sun_uflash.c | 75 +- trunk/drivers/net/e1000/e1000_main.c | 5 + trunk/drivers/net/myri_sbus.c | 196 ++- trunk/drivers/net/myri_sbus.h | 2 +- trunk/drivers/net/niu.c | 2 +- trunk/drivers/net/smc911x.c | 3 + trunk/drivers/net/sunbmac.c | 204 ++- trunk/drivers/net/sunbmac.h | 4 +- trunk/drivers/net/sunhme.c | 322 ++-- trunk/drivers/net/sunhme.h | 7 +- trunk/drivers/net/sunlance.c | 180 +-- trunk/drivers/net/sunqe.c | 162 +- trunk/drivers/net/sunqe.h | 4 +- trunk/drivers/net/sunvnet.c | 4 +- trunk/drivers/parport/parport_sunbpp.c | 49 +- trunk/drivers/rtc/Kconfig | 32 +- trunk/drivers/rtc/Makefile | 3 + trunk/drivers/rtc/rtc-bq4802.c | 230 +++ trunk/drivers/rtc/rtc-cmos.c | 5 +- trunk/drivers/rtc/rtc-m48t59.c | 68 +- trunk/drivers/rtc/rtc-starfire.c | 120 ++ trunk/drivers/rtc/rtc-sun4v.c | 153 ++ trunk/drivers/sbus/Makefile | 4 - trunk/drivers/sbus/char/Kconfig | 29 +- trunk/drivers/sbus/char/Makefile | 6 - trunk/drivers/sbus/char/bbc_envctrl.c | 121 +- trunk/drivers/sbus/char/bbc_i2c.c | 267 ++-- trunk/drivers/sbus/char/bbc_i2c.h | 75 +- trunk/drivers/sbus/char/bpp.c | 1055 ------------- trunk/drivers/sbus/char/cpwatchdog.c | 858 ----------- trunk/drivers/sbus/char/display7seg.c | 251 +-- trunk/drivers/sbus/char/envctrl.c | 147 +- trunk/drivers/sbus/char/flash.c | 130 +- trunk/drivers/sbus/char/rtc.c | 275 ---- trunk/drivers/sbus/char/uctrl.c | 216 +-- trunk/drivers/sbus/char/vfc.h | 171 --- trunk/drivers/sbus/char/vfc_dev.c | 736 --------- trunk/drivers/sbus/char/vfc_i2c.c | 335 ---- trunk/drivers/sbus/char/vfc_i2c.h | 44 - trunk/drivers/sbus/dvma.c | 136 -- trunk/drivers/sbus/sbus.c | 316 ---- trunk/drivers/scsi/esp_scsi.h | 3 +- trunk/drivers/scsi/qlogicpti.c | 146 +- trunk/drivers/scsi/qlogicpti.h | 2 +- trunk/drivers/scsi/sun_esp.c | 267 ++-- trunk/drivers/serial/sunhv.c | 2 +- trunk/drivers/serial/sunsab.c | 2 +- trunk/drivers/serial/sunsu.c | 2 +- trunk/drivers/serial/sunzilog.c | 2 +- trunk/drivers/video/bw2.c | 2 +- trunk/drivers/video/cg14.c | 2 +- trunk/drivers/video/cg3.c | 2 +- trunk/drivers/video/cg6.c | 38 +- trunk/drivers/video/ffb.c | 2 +- trunk/drivers/video/leo.c | 96 +- trunk/drivers/video/p9100.c | 2 +- trunk/drivers/video/tcx.c | 2 +- trunk/drivers/watchdog/Kconfig | 43 + trunk/drivers/watchdog/Makefile | 7 + trunk/drivers/watchdog/at91sam9_wdt.c | 328 ++++ trunk/drivers/watchdog/cpwd.c | 695 +++++++++ trunk/drivers/watchdog/it87_wdt.c | 725 +++++++++ trunk/drivers/watchdog/omap_wdt.c | 337 ++-- trunk/drivers/watchdog/omap_wdt.h | 28 +- trunk/drivers/watchdog/orion5x_wdt.c | 245 +++ .../char/riowatchdog.c => watchdog/riowd.c} | 236 ++- trunk/drivers/watchdog/w83697ug_wdt.c | 392 +++++ trunk/fs/ioctl.c | 4 + trunk/include/linux/key.h | 1 + trunk/include/linux/mmc/host.h | 2 +- trunk/include/linux/rtc/m48t59.h | 47 +- trunk/include/sound/core.h | 3 - trunk/include/sound/memalloc.h | 2 - trunk/kernel/sysctl.c | 8 +- trunk/net/ipv4/ip_gre.c | 2 +- trunk/net/netfilter/ipvs/Kconfig | 4 +- trunk/sound/core/memalloc.c | 48 +- trunk/sound/sparc/amd7930.c | 85 +- trunk/sound/sparc/cs4231.c | 199 +-- trunk/sound/sparc/dbri.c | 89 +- 286 files changed, 12315 insertions(+), 16081 deletions(-) delete mode 100644 trunk/Documentation/sparc/sbus_drivers.txt create mode 100644 trunk/arch/avr32/oprofile/backtrace.c delete mode 100644 trunk/arch/sparc/include/asm/bpp.h delete mode 100644 trunk/arch/sparc/include/asm/dma_32.h delete mode 100644 trunk/arch/sparc/include/asm/dma_64.h delete mode 100644 trunk/arch/sparc/include/asm/ebus.h delete mode 100644 trunk/arch/sparc/include/asm/ebus_32.h delete mode 100644 trunk/arch/sparc/include/asm/ebus_64.h create mode 100644 trunk/arch/sparc/include/asm/ebus_dma.h create mode 100644 trunk/arch/sparc/include/asm/gpio.h create mode 100644 trunk/arch/sparc/include/asm/memctrl.h delete mode 100644 trunk/arch/sparc/include/asm/mostek.h delete mode 100644 trunk/arch/sparc/include/asm/mostek_32.h delete mode 100644 trunk/arch/sparc/include/asm/mostek_64.h delete mode 100644 trunk/arch/sparc/include/asm/reboot.h delete mode 100644 trunk/arch/sparc/include/asm/rtc.h delete mode 100644 trunk/arch/sparc/include/asm/sbus.h delete mode 100644 trunk/arch/sparc/include/asm/sbus_32.h delete mode 100644 trunk/arch/sparc/include/asm/sbus_64.h delete mode 100644 trunk/arch/sparc/include/asm/sstate.h delete mode 100644 trunk/arch/sparc/include/asm/sun4paddr.h delete mode 100644 trunk/arch/sparc/include/asm/sun4prom.h delete mode 100644 trunk/arch/sparc/include/asm/vfc_ioctls.h create mode 100644 trunk/arch/sparc/kernel/dma.c create mode 100644 trunk/arch/sparc/kernel/dma.h delete mode 100644 trunk/arch/sparc/kernel/ebus.c delete mode 100644 trunk/arch/sparc/kernel/sun4setup.c delete mode 100644 trunk/arch/sparc/mm/nosrmmu.c delete mode 100644 trunk/arch/sparc/prom/sun4prom.c create mode 100644 trunk/arch/sparc64/kernel/psycho_common.c create mode 100644 trunk/arch/sparc64/kernel/psycho_common.h create mode 100644 trunk/arch/sparc64/kernel/reboot.c create mode 100644 trunk/arch/sparc64/mm/init.h create mode 100644 trunk/drivers/hwmon/ultra45_env.c create mode 100644 trunk/drivers/leds/leds-sunfire.c create mode 100644 trunk/drivers/rtc/rtc-bq4802.c create mode 100644 trunk/drivers/rtc/rtc-starfire.c create mode 100644 trunk/drivers/rtc/rtc-sun4v.c delete mode 100644 trunk/drivers/sbus/char/bpp.c delete mode 100644 trunk/drivers/sbus/char/cpwatchdog.c delete mode 100644 trunk/drivers/sbus/char/rtc.c delete mode 100644 trunk/drivers/sbus/char/vfc.h delete mode 100644 trunk/drivers/sbus/char/vfc_dev.c delete mode 100644 trunk/drivers/sbus/char/vfc_i2c.c delete mode 100644 trunk/drivers/sbus/char/vfc_i2c.h delete mode 100644 trunk/drivers/sbus/dvma.c delete mode 100644 trunk/drivers/sbus/sbus.c create mode 100644 trunk/drivers/watchdog/at91sam9_wdt.c create mode 100644 trunk/drivers/watchdog/cpwd.c create mode 100644 trunk/drivers/watchdog/it87_wdt.c create mode 100644 trunk/drivers/watchdog/orion5x_wdt.c rename trunk/drivers/{sbus/char/riowatchdog.c => watchdog/riowd.c} (51%) create mode 100644 trunk/drivers/watchdog/w83697ug_wdt.c diff --git a/[refs] b/[refs] index 45d13addbc6c..833b4c2c2f2d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8daf14cf56816303d64d1a705fcbc389211ba36e +refs/heads/master: 807f4f8cdd5b65a8a5fcfda266c074f6a23818dd diff --git a/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl index b54cb5048dfa..87a7c07ab658 100644 --- a/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl +++ b/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl @@ -5073,8 +5073,7 @@ struct _snd_pcm_runtime { with SNDRV_DMA_TYPE_CONTINUOUS type and the snd_dma_continuous_data(GFP_KERNEL) device pointer, where GFP_KERNEL is the kernel allocation flag to - use. For the SBUS, SNDRV_DMA_TYPE_SBUS and - snd_dma_sbus_data(sbus_dev) are used instead. + use. For the PCI scatter-gather buffers, use SNDRV_DMA_TYPE_DEV_SG with snd_dma_pci_data(pci) diff --git a/trunk/Documentation/sparc/sbus_drivers.txt b/trunk/Documentation/sparc/sbus_drivers.txt deleted file mode 100644 index eb1e28ad8822..000000000000 --- a/trunk/Documentation/sparc/sbus_drivers.txt +++ /dev/null @@ -1,309 +0,0 @@ - - Writing SBUS Drivers - - David S. Miller (davem@redhat.com) - - The SBUS driver interfaces of the Linux kernel have been -revamped completely for 2.4.x for several reasons. Foremost were -performance and complexity concerns. This document details these -new interfaces and how they are used to write an SBUS device driver. - - SBUS drivers need to include to get access -to functions and structures described here. - - Probing and Detection - - Each SBUS device inside the machine is described by a -structure called "struct sbus_dev". Likewise, each SBUS bus -found in the system is described by a "struct sbus_bus". For -each SBUS bus, the devices underneath are hung in a tree-like -fashion off of the bus structure. - - The SBUS device structure contains enough information -for you to implement your device probing algorithm and obtain -the bits necessary to run your device. The most commonly -used members of this structure, and their typical usage, -will be detailed below. - - Here is a piece of skeleton code for performing a device -probe in an SBUS driver under Linux: - - static int __devinit mydevice_probe_one(struct sbus_dev *sdev) - { - struct mysdevice *mp = kzalloc(sizeof(*mp), GFP_KERNEL); - - if (!mp) - return -ENODEV; - - ... - dev_set_drvdata(&sdev->ofdev.dev, mp); - return 0; - ... - } - - static int __devinit mydevice_probe(struct of_device *dev, - const struct of_device_id *match) - { - struct sbus_dev *sdev = to_sbus_device(&dev->dev); - - return mydevice_probe_one(sdev); - } - - static int __devexit mydevice_remove(struct of_device *dev) - { - struct sbus_dev *sdev = to_sbus_device(&dev->dev); - struct mydevice *mp = dev_get_drvdata(&dev->dev); - - return mydevice_remove_one(sdev, mp); - } - - static struct of_device_id mydevice_match[] = { - { - .name = "mydevice", - }, - {}, - }; - - MODULE_DEVICE_TABLE(of, mydevice_match); - - static struct of_platform_driver mydevice_driver = { - .match_table = mydevice_match, - .probe = mydevice_probe, - .remove = __devexit_p(mydevice_remove), - .driver = { - .name = "mydevice", - }, - }; - - static int __init mydevice_init(void) - { - return of_register_driver(&mydevice_driver, &sbus_bus_type); - } - - static void __exit mydevice_exit(void) - { - of_unregister_driver(&mydevice_driver); - } - - module_init(mydevice_init); - module_exit(mydevice_exit); - - The mydevice_match table is a series of entries which -describes what SBUS devices your driver is meant for. In the -simplest case you specify a string for the 'name' field. Every -SBUS device with a 'name' property matching your string will -be passed one-by-one to your .probe method. - - You should store away your device private state structure -pointer in the drvdata area so that you can retrieve it later on -in your .remove method. - - Any memory allocated, registers mapped, IRQs registered, -etc. must be undone by your .remove method so that all resources -of your device are released by the time it returns. - - You should _NOT_ use the for_each_sbus(), for_each_sbusdev(), -and for_all_sbusdev() interfaces. They are deprecated, will be -removed, and no new driver should reference them ever. - - Mapping and Accessing I/O Registers - - Each SBUS device structure contains an array of descriptors -which describe each register set. We abuse struct resource for that. -They each correspond to the "reg" properties provided by the OBP firmware. - - Before you can access your device's registers you must map -them. And later if you wish to shutdown your driver (for module -unload or similar) you must unmap them. You must treat them as -a resource, which you allocate (map) before using and free up -(unmap) when you are done with it. - - The mapping information is stored in an opaque value -typed as an "unsigned long". This is the type of the return value -of the mapping interface, and the arguments to the unmapping -interface. Let's say you want to map the first set of registers. -Perhaps part of your driver software state structure looks like: - - struct mydevice { - unsigned long control_regs; - ... - struct sbus_dev *sdev; - ... - }; - - At initialization time you then use the sbus_ioremap -interface to map in your registers, like so: - - static void init_one_mydevice(struct sbus_dev *sdev) - { - struct mydevice *mp; - ... - - mp->control_regs = sbus_ioremap(&sdev->resource[0], 0, - CONTROL_REGS_SIZE, "mydevice regs"); - if (!mp->control_regs) { - /* Failure, cleanup and return. */ - } - } - - Second argument to sbus_ioremap is an offset for -cranky devices with broken OBP PROM. The sbus_ioremap uses only -a start address and flags from the resource structure. -Therefore it is possible to use the same resource to map -several sets of registers or even to fabricate a resource -structure if driver gets physical address from some private place. -This practice is discouraged though. Use whatever OBP PROM -provided to you. - - And here is how you might unmap these registers later at -driver shutdown or module unload time, using the sbus_iounmap -interface: - - static void mydevice_unmap_regs(struct mydevice *mp) - { - sbus_iounmap(mp->control_regs, CONTROL_REGS_SIZE); - } - - Finally, to actually access your registers there are 6 -interface routines at your disposal. Accesses are byte (8 bit), -word (16 bit), or longword (32 bit) sized. Here they are: - - u8 sbus_readb(unsigned long reg) /* read byte */ - u16 sbus_readw(unsigned long reg) /* read word */ - u32 sbus_readl(unsigned long reg) /* read longword */ - void sbus_writeb(u8 value, unsigned long reg) /* write byte */ - void sbus_writew(u16 value, unsigned long reg) /* write word */ - void sbus_writel(u32 value, unsigned long reg) /* write longword */ - - So, let's say your device has a control register of some sort -at offset zero. The following might implement resetting your device: - - #define CONTROL 0x00UL - - #define CONTROL_RESET 0x00000001 /* Reset hardware */ - - static void mydevice_reset(struct mydevice *mp) - { - sbus_writel(CONTROL_RESET, mp->regs + CONTROL); - } - - Or perhaps there is a data port register at an offset of -16 bytes which allows you to read bytes from a fifo in the device: - - #define DATA 0x10UL - - static u8 mydevice_get_byte(struct mydevice *mp) - { - return sbus_readb(mp->regs + DATA); - } - - It's pretty straightforward, and clueful readers may have -noticed that these interfaces mimick the PCI interfaces of the -Linux kernel. This was not by accident. - - WARNING: - - DO NOT try to treat these opaque register mapping - values as a memory mapped pointer to some structure - which you can dereference. - - It may be memory mapped, it may not be. In fact it - could be a physical address, or it could be the time - of day xor'd with 0xdeadbeef. :-) - - Whatever it is, it's an implementation detail. The - interface was done this way to shield the driver - author from such complexities. - - Doing DVMA - - SBUS devices can perform DMA transactions in a way similar -to PCI but dissimilar to ISA, e.g. DMA masters supply address. -In contrast to PCI, however, that address (a bus address) is -translated by IOMMU before a memory access is performed and therefore -it is virtual. Sun calls this procedure DVMA. - - Linux supports two styles of using SBUS DVMA: "consistent memory" -and "streaming DVMA". CPU view of consistent memory chunk is, well, -consistent with a view of a device. Think of it as an uncached memory. -Typically this way of doing DVMA is not very fast and drivers use it -mostly for control blocks or queues. On some CPUs we cannot flush or -invalidate individual pages or cache lines and doing explicit flushing -over ever little byte in every control block would be wasteful. - -Streaming DVMA is a preferred way to transfer large amounts of data. -This process works in the following way: -1. a CPU stops accessing a certain part of memory, - flushes its caches covering that memory; -2. a device does DVMA accesses, then posts an interrupt; -3. CPU invalidates its caches and starts to access the memory. - -A single streaming DVMA operation can touch several discontiguous -regions of a virtual bus address space. This is called a scatter-gather -DVMA. - -[TBD: Why do not we neither Solaris attempt to map disjoint pages -into a single virtual chunk with the help of IOMMU, so that non SG -DVMA masters would do SG? It'd be very helpful for RAID.] - - In order to perform a consistent DVMA a driver does something -like the following: - - char *mem; /* Address in the CPU space */ - u32 busa; /* Address in the SBus space */ - - mem = (char *) sbus_alloc_consistent(sdev, MYMEMSIZE, &busa); - - Then mem is used when CPU accesses this memory and u32 -is fed to the device so that it can do DVMA. This is typically -done with an sbus_writel() into some device register. - - Do not forget to free the DVMA resources once you are done: - - sbus_free_consistent(sdev, MYMEMSIZE, mem, busa); - - Streaming DVMA is more interesting. First you allocate some -memory suitable for it or pin down some user pages. Then it all works -like this: - - char *mem = argumen1; - unsigned int size = argument2; - u32 busa; /* Address in the SBus space */ - - *mem = 1; /* CPU can access */ - busa = sbus_map_single(sdev, mem, size); - if (busa == 0) ....... - - /* Tell the device to use busa here */ - /* CPU cannot access the memory without sbus_dma_sync_single() */ - - sbus_unmap_single(sdev, busa, size); - if (*mem == 0) .... /* CPU can access again */ - - It is possible to retain mappings and ask the device to -access data again and again without calling sbus_unmap_single. -However, CPU caches must be invalidated with sbus_dma_sync_single -before such access. - -[TBD but what about writeback caches here... do we have any?] - - There is an equivalent set of functions doing the same thing -only with several memory segments at once for devices capable of -scatter-gather transfers. Use the Source, Luke. - - Examples - - drivers/net/sunhme.c - This is a complicated driver which illustrates many concepts -discussed above and plus it handles both PCI and SBUS boards. - - drivers/scsi/esp.c - Check it out for scatter-gather DVMA. - - drivers/sbus/char/bpp.c - A non-DVMA device. - - drivers/net/sunlance.c - Lance driver abuses consistent mappings for data transfer. -It is a nifty trick which we do not particularly recommend... -Just check it out and know that it's legal. diff --git a/trunk/arch/arm/mach-orion5x/include/mach/orion5x.h b/trunk/arch/arm/mach-orion5x/include/mach/orion5x.h index e67c843baa02..9f5ce1ce5840 100644 --- a/trunk/arch/arm/mach-orion5x/include/mach/orion5x.h +++ b/trunk/arch/arm/mach-orion5x/include/mach/orion5x.h @@ -157,9 +157,11 @@ #define CPU_CONF ORION5X_BRIDGE_REG(0x100) #define CPU_CTRL ORION5X_BRIDGE_REG(0x104) #define CPU_RESET_MASK ORION5X_BRIDGE_REG(0x108) +#define WDT_RESET 0x0002 #define CPU_SOFT_RESET ORION5X_BRIDGE_REG(0x10c) #define POWER_MNG_CTRL_REG ORION5X_BRIDGE_REG(0x11C) #define BRIDGE_CAUSE ORION5X_BRIDGE_REG(0x110) +#define WDT_INT_REQ 0x0008 #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) #define BRIDGE_INT_TIMER0 0x0002 #define BRIDGE_INT_TIMER1 0x0004 diff --git a/trunk/arch/arm/plat-omap/devices.c b/trunk/arch/arm/plat-omap/devices.c index a716ecd1db27..97187fa0ae52 100644 --- a/trunk/arch/arm/plat-omap/devices.c +++ b/trunk/arch/arm/plat-omap/devices.c @@ -441,16 +441,8 @@ static inline void omap_init_uwire(void) {} #if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE) -#ifdef CONFIG_ARCH_OMAP24XX -#define OMAP_WDT_BASE 0x48022000 -#else -#define OMAP_WDT_BASE 0xfffeb000 -#endif - static struct resource wdt_resources[] = { { - .start = OMAP_WDT_BASE, - .end = OMAP_WDT_BASE + 0x4f, .flags = IORESOURCE_MEM, }, }; @@ -464,6 +456,19 @@ static struct platform_device omap_wdt_device = { static void omap_init_wdt(void) { + if (cpu_is_omap16xx()) + wdt_resources[0].start = 0xfffeb000; + else if (cpu_is_omap2420()) + wdt_resources[0].start = 0x48022000; /* WDT2 */ + else if (cpu_is_omap2430()) + wdt_resources[0].start = 0x49016000; /* WDT2 */ + else if (cpu_is_omap343x()) + wdt_resources[0].start = 0x48314000; /* WDT2 */ + else + return; + + wdt_resources[0].end = wdt_resources[0].start + 0x4f; + (void) platform_device_register(&omap_wdt_device); } #else diff --git a/trunk/arch/avr32/boards/atngw100/setup.c b/trunk/arch/avr32/boards/atngw100/setup.c index b8286f1ce854..6c54580a66df 100644 --- a/trunk/arch/avr32/boards/atngw100/setup.c +++ b/trunk/arch/avr32/boards/atngw100/setup.c @@ -9,6 +9,7 @@ */ #include #include +#include #include #include #include @@ -53,8 +54,11 @@ static struct spi_board_info spi0_board_info[] __initdata = { }; static struct mci_platform_data __initdata mci0_data = { - .detect_pin = GPIO_PIN_PC(25), - .wp_pin = GPIO_PIN_PE(0), + .slot[0] = { + .bus_width = 4, + .detect_pin = GPIO_PIN_PC(25), + .wp_pin = GPIO_PIN_PE(0), + }, }; /* @@ -190,7 +194,7 @@ static int __init atngw100_init(void) * PB28/EXTINT3 doesn't; it should be SMBALERT# (for PMBus), * but it's not available off-board. */ - at32_select_periph(GPIO_PIN_PB(28), 0, AT32_GPIOF_PULLUP); + at32_select_periph(GPIO_PIOB_BASE, 1 << 28, 0, AT32_GPIOF_PULLUP); at32_select_gpio(i2c_gpio_data.sda_pin, AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); at32_select_gpio(i2c_gpio_data.scl_pin, @@ -204,6 +208,15 @@ postcore_initcall(atngw100_init); static int __init atngw100_arch_init(void) { + /* PB30 is the otherwise unused jumper on the mainboard, with an + * external pullup; the jumper grounds it. Use it however you + * like, including letting U-Boot or Linux tweak boot sequences. + */ + at32_select_gpio(GPIO_PIN_PB(30), 0); + gpio_request(GPIO_PIN_PB(30), "j15"); + gpio_direction_input(GPIO_PIN_PB(30)); + gpio_export(GPIO_PIN_PB(30), false); + /* set_irq_type() after the arch_initcall for EIC has run, and * before the I2C subsystem could try using this IRQ. */ diff --git a/trunk/arch/avr32/boards/atstk1000/atstk1002.c b/trunk/arch/avr32/boards/atstk1000/atstk1002.c index dfc3443e23aa..29e5b51a7fd2 100644 --- a/trunk/arch/avr32/boards/atstk1000/atstk1002.c +++ b/trunk/arch/avr32/boards/atstk1000/atstk1002.c @@ -232,7 +232,7 @@ static void __init atstk1002_setup_extdac(void) goto err_set_clk; } - at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0); + at32_select_periph(GPIO_PIOA_BASE, (1 << 30), GPIO_PERIPH_A, 0); at73c213_data.dac_clk = gclk; err_set_clk: @@ -264,16 +264,20 @@ void __init setup_board(void) #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM +static struct mci_platform_data __initdata mci0_data = { + .slot[0] = { + .bus_width = 4, + /* MMC card detect requires MACB0 *NOT* be used */ #ifdef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM -static struct mci_platform_data __initdata mci0_data = { - .detect_pin = GPIO_PIN_PC(14), /* gpio30/sdcd */ - .wp_pin = GPIO_PIN_PC(15), /* gpio31/sdwp */ -}; -#define MCI_PDATA &mci0_data + .detect_pin = GPIO_PIN_PC(14), /* gpio30/sdcd */ + .wp_pin = GPIO_PIN_PC(15), /* gpio31/sdwp */ #else -#define MCI_PDATA NULL + .detect_pin = -ENODEV, + .wp_pin = -ENODEV, #endif /* SW6 for sd{cd,wp} routing */ + }, +}; #endif /* SW2 for MMC signal routing */ @@ -326,13 +330,14 @@ static int __init atstk1002_init(void) at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); #endif #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM - at32_add_device_mci(0, MCI_PDATA); + at32_add_device_mci(0, &mci0_data); #endif #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM set_hw_addr(at32_add_device_eth(1, ð_data[1])); #else at32_add_device_lcdc(0, &atstk1000_lcdc_data, - fbmem_start, fbmem_size, 0); + fbmem_start, fbmem_size, + ATMEL_LCDC_PRI_24BIT | ATMEL_LCDC_PRI_CONTROL); #endif at32_add_device_usba(0, NULL); #ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM diff --git a/trunk/arch/avr32/boards/atstk1000/atstk1003.c b/trunk/arch/avr32/boards/atstk1000/atstk1003.c index 0cf664174c17..be089d7f37eb 100644 --- a/trunk/arch/avr32/boards/atstk1000/atstk1003.c +++ b/trunk/arch/avr32/boards/atstk1000/atstk1003.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -66,6 +67,16 @@ static struct spi_board_info spi1_board_info[] __initdata = { { } }; #endif +#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM +static struct mci_platform_data __initdata mci0_data = { + .slot[0] = { + .bus_width = 4, + .detect_pin = -ENODEV, + .wp_pin = -ENODEV, + }, +}; +#endif + #ifdef CONFIG_BOARD_ATSTK1000_EXTDAC static void __init atstk1003_setup_extdac(void) { @@ -84,7 +95,7 @@ static void __init atstk1003_setup_extdac(void) goto err_set_clk; } - at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0); + at32_select_periph(GPIO_PIOA_BASE, (1 << 30), GPIO_PERIPH_A, 0); at73c213_data.dac_clk = gclk; err_set_clk: @@ -154,7 +165,7 @@ static int __init atstk1003_init(void) at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); #endif #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM - at32_add_device_mci(0, NULL); + at32_add_device_mci(0, &mci0_data); #endif at32_add_device_usba(0, NULL); #ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM diff --git a/trunk/arch/avr32/boards/atstk1000/atstk1004.c b/trunk/arch/avr32/boards/atstk1000/atstk1004.c index 50a5273e5916..248ef237c167 100644 --- a/trunk/arch/avr32/boards/atstk1000/atstk1004.c +++ b/trunk/arch/avr32/boards/atstk1000/atstk1004.c @@ -21,6 +21,7 @@ #include