From: Arnd Bergmann <arnd@kernel.org>
To: Krzysztof Kozlowski <krzk@kernel.org>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
Linus Walleij <linusw@kernel.org>,
Russell King <linux@armlinux.org.uk>
Cc: Drew Fustini <fustini@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Rob Herring <robh@kernel.org>, Conor Dooley <conor+dt@kernel.org>,
Liviu Dudau <liviu.dudau@arm.com>,
Sudeep Holla <sudeep.holla@kernel.org>,
Lorenzo Pieralisi <lpieralisi@kernel.org>,
Frank Li <Frank.Li@nxp.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Vladimir Zapolskiy <vz@mleia.com>, Stefan Agner <stefan@agner.ch>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
Andreas Kemnade <andreas@kemnade.info>,
Kevin Hilman <khilman@baylibre.com>,
Roger Quadros <rogerq@kernel.org>,
Tony Lindgren <tony@atomide.com>,
Nicolas Ferre <nicolas.ferre@microchip.com>,
Claudiu Beznea <claudiu.beznea@tuxon.dev>,
Andrew Lunn <andrew@lunn.ch>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Gregory Clement <gregory.clement@bootlin.com>,
Robert Jarzmik <robert.jarzmik@free.fr>,
Kristoffer Ericson <kristoffer.ericson@gmail.com>,
Ethan Nelson-Moore <enelsonmoore@gmail.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Alexander Sverdlin <alexander.sverdlin@siemens.com>,
Shawn Guo <shawnguo@kernel.org>,
Karl Mehltretter <kmehltretter@gmail.com>,
"David Hildenbrand (Arm)" <david@kernel.org>,
Nicolas Pitre <npitre@baylibre.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-stm32@st-md-mailman.stormreply.com,
linux-omap@vger.kernel.org, Daniel Mack <daniel@zonque.org>,
Haojian Zhuang <haojian.zhuang@gmail.com>,
Bartosz Golaszewski <brgl@kernel.org>
Subject: [PATCH 04/13] ARM: remove legacy pxa board files
Date: Tue, 8 Sep 2026 17:27:54 +0200 [thread overview]
Message-ID: <20260908152808.3928630-5-arnd@kernel.org> (raw)
In-Reply-To: <20260908152808.3928630-1-arnd@kernel.org>
From: Arnd Bergmann <arnd@arndb.de>
The PXA platform supports devicetree based booting, but still has a
few traditional board files, which were left as a starting point for a
possible conversion to devicetree during the last mass purge of board
files in 2022.
None of these boards were actually converted, so drop support for these
now, along with the 'scoop' support chip that was used on some PDAs that
are no longer usable now.
The only remaining board support is for the "Raumfeld" speaker system
based on PXA300 SoC, though basic support for PXA250 and PXA270 is still
there and may work with external dts files.
Cc: Daniel Mack <daniel@zonque.org>
Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Linus Walleij <linusw@kernel.org>
Cc: Bartosz Golaszewski <brgl@kernel.org>
Cc: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
arch/arm/boot/compressed/Makefile | 4 -
arch/arm/boot/compressed/head-sharpsl.S | 151 ---
arch/arm/common/Kconfig | 6 -
arch/arm/common/Makefile | 2 -
arch/arm/common/scoop.c | 269 -----
arch/arm/common/sharpsl_param.c | 63 --
arch/arm/configs/am200epdkit_defconfig | 91 --
arch/arm/configs/spitz_defconfig | 237 -----
arch/arm/include/asm/hardware/scoop.h | 67 --
arch/arm/include/asm/mach/sharpsl_param.h | 33 -
arch/arm/mach-pxa/Kconfig | 89 --
arch/arm/mach-pxa/Makefile | 8 -
arch/arm/mach-pxa/am200epd.c | 395 -------
arch/arm/mach-pxa/am300epd.c | 296 ------
arch/arm/mach-pxa/devices.c | 705 -------------
arch/arm/mach-pxa/devices.h | 68 --
arch/arm/mach-pxa/generic.h | 5 -
arch/arm/mach-pxa/gumstix.c | 237 -----
arch/arm/mach-pxa/gumstix.h | 89 --
arch/arm/mach-pxa/pxa25x.c | 59 --
arch/arm/mach-pxa/pxa27x.c | 77 --
arch/arm/mach-pxa/pxa300.c | 1 -
arch/arm/mach-pxa/pxa320.c | 1 -
arch/arm/mach-pxa/pxa3xx.c | 6 -
arch/arm/mach-pxa/sharpsl_pm.c | 941 -----------------
arch/arm/mach-pxa/sharpsl_pm.h | 108 --
arch/arm/mach-pxa/spitz.c | 1174 ---------------------
arch/arm/mach-pxa/spitz.h | 185 ----
arch/arm/mach-pxa/spitz_pm.c | 257 -----
29 files changed, 5624 deletions(-)
delete mode 100644 arch/arm/boot/compressed/head-sharpsl.S
delete mode 100644 arch/arm/common/scoop.c
delete mode 100644 arch/arm/common/sharpsl_param.c
delete mode 100644 arch/arm/configs/am200epdkit_defconfig
delete mode 100644 arch/arm/configs/spitz_defconfig
delete mode 100644 arch/arm/include/asm/hardware/scoop.h
delete mode 100644 arch/arm/include/asm/mach/sharpsl_param.h
delete mode 100644 arch/arm/mach-pxa/am200epd.c
delete mode 100644 arch/arm/mach-pxa/am300epd.c
delete mode 100644 arch/arm/mach-pxa/devices.h
delete mode 100644 arch/arm/mach-pxa/gumstix.c
delete mode 100644 arch/arm/mach-pxa/gumstix.h
delete mode 100644 arch/arm/mach-pxa/sharpsl_pm.c
delete mode 100644 arch/arm/mach-pxa/sharpsl_pm.h
delete mode 100644 arch/arm/mach-pxa/spitz.c
delete mode 100644 arch/arm/mach-pxa/spitz.h
delete mode 100644 arch/arm/mach-pxa/spitz_pm.c
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 32def10f5e03..232b646bfd26 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -29,10 +29,6 @@ ifeq ($(CONFIG_CPU_XSCALE),y)
OBJS += head-xscale.o
endif
-ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y)
-OBJS += head-sharpsl.o
-endif
-
ifeq ($(CONFIG_CPU_ENDIAN_BE32),y)
ifeq ($(CONFIG_CPU_CP15),y)
OBJS += big-endian.o
diff --git a/arch/arm/boot/compressed/head-sharpsl.S b/arch/arm/boot/compressed/head-sharpsl.S
deleted file mode 100644
index 992e784500fa..000000000000
--- a/arch/arm/boot/compressed/head-sharpsl.S
+++ /dev/null
@@ -1,151 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * linux/arch/arm/boot/compressed/head-sharpsl.S
- *
- * Copyright (C) 2004-2005 Richard Purdie <rpurdie@rpsys.net>
- *
- * Sharp's bootloader doesn't pass any kind of machine ID
- * so we have to figure out the machine for ourselves...
- *
- * Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)
- * Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),
- * Akita (SL-C1000) and Borzoi (SL-C3100).
- *
- */
-
-#include <linux/linkage.h>
-#include <asm/mach-types.h>
-
-#ifndef CONFIG_PXA_SHARPSL
-#error What am I doing here...
-#endif
-
- .section ".start", "ax"
-
-__SharpSL_start:
-
-/* Check for TC6393 - if found we have a Tosa */
- ldr r7, .TOSAID
- mov r1, #0x10000000 @ Base address of TC6393 chip
- mov r6, #0x03
- ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x0003
- cmp r6, r3
- beq .SHARPEND @ Success -> tosa
-
-/* Check for pxa270 - if found, branch */
- mrc p15, 0, r4, c0, c0 @ Get Processor ID
- and r4, r4, #0xffffff00
- ldr r3, .PXA270ID
- cmp r4, r3
- beq .PXA270
-
-/* Check for w100 - if not found we have a Poodle */
- ldr r1, .W100ADDR @ Base address of w100 chip + regs offset
-
- mov r6, #0x31 @ Load Magic Init value
- str r6, [r1, #0x280] @ to SCRATCH_UMSK
- mov r5, #0x3000
-.W100LOOP:
- subs r5, r5, #1
- bne .W100LOOP
- mov r6, #0x30 @ Load 2nd Magic Init value
- str r6, [r1, #0x280] @ to SCRATCH_UMSK
-
- ldr r6, [r1, #0] @ Load Chip ID
- ldr r3, .W100ID
- ldr r7, .POODLEID
- cmp r6, r3
- bne .SHARPEND @ We have no w100 - Poodle
-
-/* Check for pxa250 - if found we have a Corgi */
- ldr r7, .CORGIID
- ldr r3, .PXA255ID
- cmp r4, r3
- blo .SHARPEND @ We have a PXA250 - Corgi
-
-/* Check for 64MiB flash - if found we have a Shepherd */
- bl get_flash_ids
- ldr r7, .SHEPHERDID
- cmp r3, #0x76 @ 64MiB flash
- beq .SHARPEND @ We have Shepherd
-
-/* Must be a Husky */
- ldr r7, .HUSKYID @ Must be Husky
- b .SHARPEND
-
-.PXA270:
-/* Check for 16MiB flash - if found we have Spitz */
- bl get_flash_ids
- ldr r7, .SPITZID
- cmp r3, #0x73 @ 16MiB flash
- beq .SHARPEND @ We have Spitz
-
-/* Check for a second SCOOP chip - if found we have Borzoi */
- ldr r1, .SCOOP2ADDR
- ldr r7, .BORZOIID
- mov r6, #0x0140
- strh r6, [r1]
- ldrh r6, [r1]
- cmp r6, #0x0140
- beq .SHARPEND @ We have Borzoi
-
-/* Must be Akita */
- ldr r7, .AKITAID
- b .SHARPEND @ We have Borzoi
-
-.PXA255ID:
- .word 0x69052d00 @ PXA255 Processor ID
-.PXA270ID:
- .word 0x69054100 @ PXA270 Processor ID
-.W100ID:
- .word 0x57411002 @ w100 Chip ID
-.W100ADDR:
- .word 0x08010000 @ w100 Chip ID Reg Address
-.SCOOP2ADDR:
- .word 0x08800040
-.POODLEID:
- .word MACH_TYPE_POODLE
-.CORGIID:
- .word MACH_TYPE_CORGI
-.SHEPHERDID:
- .word MACH_TYPE_SHEPHERD
-.HUSKYID:
- .word MACH_TYPE_HUSKY
-.TOSAID:
- .word MACH_TYPE_TOSA
-.SPITZID:
- .word MACH_TYPE_SPITZ
-.AKITAID:
- .word MACH_TYPE_AKITA
-.BORZOIID:
- .word MACH_TYPE_BORZOI
-
-/*
- * Return: r2 - NAND Manufacturer ID
- * r3 - NAND Chip ID
- * Corrupts: r1
- */
-get_flash_ids:
- mov r1, #0x0c000000 @ Base address of NAND chip
- ldrb r3, [r1, #24] @ Load FLASHCTL
- bic r3, r3, #0x11 @ SET NCE
- orr r3, r3, #0x0a @ SET CLR + FLWP
- strb r3, [r1, #24] @ Save to FLASHCTL
- mov r2, #0x90 @ Command "readid"
- strb r2, [r1, #20] @ Save to FLASHIO
- bic r3, r3, #2 @ CLR CLE
- orr r3, r3, #4 @ SET ALE
- strb r3, [r1, #24] @ Save to FLASHCTL
- mov r2, #0 @ Address 0x00
- strb r2, [r1, #20] @ Save to FLASHIO
- bic r3, r3, #4 @ CLR ALE
- strb r3, [r1, #24] @ Save to FLASHCTL
-.fids1:
- ldrb r3, [r1, #24] @ Load FLASHCTL
- tst r3, #32 @ Is chip ready?
- beq .fids1
- ldrb r2, [r1, #20] @ NAND Manufacturer ID
- ldrb r3, [r1, #20] @ NAND Chip ID
- mov pc, lr
-
-.SHARPEND:
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
index d72dccf6f3c2..cf75be68d05c 100644
--- a/arch/arm/common/Kconfig
+++ b/arch/arm/common/Kconfig
@@ -1,9 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
config KRAIT_L2_ACCESSORS
bool
-
-config SHARP_PARAM
- bool
-
-config SHARP_SCOOP
- bool
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
index e1bcc250874f..1935b23700b0 100644
--- a/arch/arm/common/Makefile
+++ b/arch/arm/common/Makefile
@@ -6,8 +6,6 @@
obj-y += firmware.o
obj-$(CONFIG_KRAIT_L2_ACCESSORS) += krait-l2-accessors.o
-obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
-obj-$(CONFIG_SHARP_SCOOP) += scoop.o
obj-$(CONFIG_CPU_V7) += secure_cntvoff.o
obj-$(CONFIG_MCPM) += mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o
CFLAGS_REMOVE_mcpm_entry.o = -pg
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c
deleted file mode 100644
index 90474994757c..000000000000
--- a/arch/arm/common/scoop.c
+++ /dev/null
@@ -1,269 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Support code for the SCOOP interface found on various Sharp PDAs
- *
- * Copyright (c) 2004 Richard Purdie
- *
- * Based on code written by Sharp/Lineo for 2.4 kernels
- */
-
-#include <linux/device.h>
-#include <linux/gpio/driver.h>
-#include <linux/string.h>
-#include <linux/slab.h>
-#include <linux/platform_device.h>
-#include <linux/export.h>
-#include <linux/io.h>
-#include <asm/hardware/scoop.h>
-
-/* PCMCIA to Scoop linkage
-
- There is no easy way to link multiple scoop devices into one
- single entity for the pxa2xx_pcmcia device so this structure
- is used which is setup by the platform code.
-
- This file is never modular so this symbol is always
- accessile to the board support files.
-*/
-struct scoop_pcmcia_config *platform_scoop_config;
-EXPORT_SYMBOL(platform_scoop_config);
-
-struct scoop_dev {
- void __iomem *base;
- struct gpio_chip gpio;
- spinlock_t scoop_lock;
- unsigned short suspend_clr;
- unsigned short suspend_set;
- u32 scoop_gpwr;
-};
-
-void reset_scoop(struct device *dev)
-{
- struct scoop_dev *sdev = dev_get_drvdata(dev);
-
- iowrite16(0x0100, sdev->base + SCOOP_MCR); /* 00 */
- iowrite16(0x0000, sdev->base + SCOOP_CDR); /* 04 */
- iowrite16(0x0000, sdev->base + SCOOP_CCR); /* 10 */
- iowrite16(0x0000, sdev->base + SCOOP_IMR); /* 18 */
- iowrite16(0x00FF, sdev->base + SCOOP_IRM); /* 14 */
- iowrite16(0x0000, sdev->base + SCOOP_ISR); /* 1C */
- iowrite16(0x0000, sdev->base + SCOOP_IRM);
-}
-
-static void __scoop_gpio_set(struct scoop_dev *sdev,
- unsigned offset, int value)
-{
- unsigned short gpwr;
-
- gpwr = ioread16(sdev->base + SCOOP_GPWR);
- if (value)
- gpwr |= 1 << (offset + 1);
- else
- gpwr &= ~(1 << (offset + 1));
- iowrite16(gpwr, sdev->base + SCOOP_GPWR);
-}
-
-static int scoop_gpio_set(struct gpio_chip *chip, unsigned int offset,
- int value)
-{
- struct scoop_dev *sdev = gpiochip_get_data(chip);
- unsigned long flags;
-
- spin_lock_irqsave(&sdev->scoop_lock, flags);
-
- __scoop_gpio_set(sdev, offset, value);
-
- spin_unlock_irqrestore(&sdev->scoop_lock, flags);
-
- return 0;
-}
-
-static int scoop_gpio_get(struct gpio_chip *chip, unsigned offset)
-{
- struct scoop_dev *sdev = gpiochip_get_data(chip);
-
- /* XXX: I'm unsure, but it seems so */
- return !!(ioread16(sdev->base + SCOOP_GPRR) & (1 << (offset + 1)));
-}
-
-static int scoop_gpio_direction_input(struct gpio_chip *chip,
- unsigned offset)
-{
- struct scoop_dev *sdev = gpiochip_get_data(chip);
- unsigned long flags;
- unsigned short gpcr;
-
- spin_lock_irqsave(&sdev->scoop_lock, flags);
-
- gpcr = ioread16(sdev->base + SCOOP_GPCR);
- gpcr &= ~(1 << (offset + 1));
- iowrite16(gpcr, sdev->base + SCOOP_GPCR);
-
- spin_unlock_irqrestore(&sdev->scoop_lock, flags);
-
- return 0;
-}
-
-static int scoop_gpio_direction_output(struct gpio_chip *chip,
- unsigned offset, int value)
-{
- struct scoop_dev *sdev = gpiochip_get_data(chip);
- unsigned long flags;
- unsigned short gpcr;
-
- spin_lock_irqsave(&sdev->scoop_lock, flags);
-
- __scoop_gpio_set(sdev, offset, value);
-
- gpcr = ioread16(sdev->base + SCOOP_GPCR);
- gpcr |= 1 << (offset + 1);
- iowrite16(gpcr, sdev->base + SCOOP_GPCR);
-
- spin_unlock_irqrestore(&sdev->scoop_lock, flags);
-
- return 0;
-}
-
-unsigned short read_scoop_reg(struct device *dev, unsigned short reg)
-{
- struct scoop_dev *sdev = dev_get_drvdata(dev);
- return ioread16(sdev->base + reg);
-}
-
-void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data)
-{
- struct scoop_dev *sdev = dev_get_drvdata(dev);
- iowrite16(data, sdev->base + reg);
-}
-
-EXPORT_SYMBOL(reset_scoop);
-EXPORT_SYMBOL(read_scoop_reg);
-EXPORT_SYMBOL(write_scoop_reg);
-
-#ifdef CONFIG_PM
-static void check_scoop_reg(struct scoop_dev *sdev)
-{
- unsigned short mcr;
-
- mcr = ioread16(sdev->base + SCOOP_MCR);
- if ((mcr & 0x100) == 0)
- iowrite16(0x0101, sdev->base + SCOOP_MCR);
-}
-
-static int scoop_suspend(struct platform_device *dev, pm_message_t state)
-{
- struct scoop_dev *sdev = platform_get_drvdata(dev);
-
- check_scoop_reg(sdev);
- sdev->scoop_gpwr = ioread16(sdev->base + SCOOP_GPWR);
- iowrite16((sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set, sdev->base + SCOOP_GPWR);
-
- return 0;
-}
-
-static int scoop_resume(struct platform_device *dev)
-{
- struct scoop_dev *sdev = platform_get_drvdata(dev);
-
- check_scoop_reg(sdev);
- iowrite16(sdev->scoop_gpwr, sdev->base + SCOOP_GPWR);
-
- return 0;
-}
-#else
-#define scoop_suspend NULL
-#define scoop_resume NULL
-#endif
-
-static int scoop_probe(struct platform_device *pdev)
-{
- struct scoop_dev *devptr;
- struct scoop_config *inf;
- struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- int ret;
-
- if (!mem)
- return -EINVAL;
-
- devptr = kzalloc_obj(struct scoop_dev);
- if (!devptr)
- return -ENOMEM;
-
- spin_lock_init(&devptr->scoop_lock);
-
- inf = pdev->dev.platform_data;
- devptr->base = ioremap(mem->start, resource_size(mem));
-
- if (!devptr->base) {
- ret = -ENOMEM;
- goto err_ioremap;
- }
-
- platform_set_drvdata(pdev, devptr);
-
- printk("Sharp Scoop Device found at 0x%08x -> 0x%8p\n",(unsigned int)mem->start, devptr->base);
-
- iowrite16(0x0140, devptr->base + SCOOP_MCR);
- reset_scoop(&pdev->dev);
- iowrite16(0x0000, devptr->base + SCOOP_CPR);
- iowrite16(inf->io_dir & 0xffff, devptr->base + SCOOP_GPCR);
- iowrite16(inf->io_out & 0xffff, devptr->base + SCOOP_GPWR);
-
- devptr->suspend_clr = inf->suspend_clr;
- devptr->suspend_set = inf->suspend_set;
-
- devptr->gpio.base = -1;
-
- if (inf->gpio_base != 0) {
- devptr->gpio.label = dev_name(&pdev->dev);
- devptr->gpio.base = inf->gpio_base;
- devptr->gpio.ngpio = 12; /* PA11 = 0, PA12 = 1, etc. up to PA22 = 11 */
- devptr->gpio.set = scoop_gpio_set;
- devptr->gpio.get = scoop_gpio_get;
- devptr->gpio.direction_input = scoop_gpio_direction_input;
- devptr->gpio.direction_output = scoop_gpio_direction_output;
-
- ret = gpiochip_add_data(&devptr->gpio, devptr);
- if (ret)
- goto err_gpio;
- }
-
- return 0;
-
-err_gpio:
- platform_set_drvdata(pdev, NULL);
-err_ioremap:
- iounmap(devptr->base);
- kfree(devptr);
-
- return ret;
-}
-
-static void scoop_remove(struct platform_device *pdev)
-{
- struct scoop_dev *sdev = platform_get_drvdata(pdev);
-
- if (sdev->gpio.base != -1)
- gpiochip_remove(&sdev->gpio);
-
- platform_set_drvdata(pdev, NULL);
- iounmap(sdev->base);
- kfree(sdev);
-}
-
-static struct platform_driver scoop_driver = {
- .probe = scoop_probe,
- .remove = scoop_remove,
- .suspend = scoop_suspend,
- .resume = scoop_resume,
- .driver = {
- .name = "sharp-scoop",
- },
-};
-
-static int __init scoop_init(void)
-{
- return platform_driver_register(&scoop_driver);
-}
-
-subsys_initcall(scoop_init);
diff --git a/arch/arm/common/sharpsl_param.c b/arch/arm/common/sharpsl_param.c
deleted file mode 100644
index 1ca26c063f80..000000000000
--- a/arch/arm/common/sharpsl_param.c
+++ /dev/null
@@ -1,63 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Hardware parameter area specific to Sharp SL series devices
- *
- * Copyright (c) 2005 Richard Purdie
- *
- * Based on Sharp's 2.4 kernel patches
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/string.h>
-#include <asm/mach/sharpsl_param.h>
-#include <asm/page.h>
-
-/*
- * Certain hardware parameters determined at the time of device manufacture,
- * typically including LCD parameters are loaded by the bootloader at the
- * address PARAM_BASE. As the kernel will overwrite them, we need to store
- * them early in the boot process, then pass them to the appropriate drivers.
- * Not all devices use all parameters but the format is common to all.
- */
-#ifdef CONFIG_ARCH_SA1100
-#define PARAM_BASE 0xe8ffc000
-#define param_start(x) (void *)(x)
-#else
-#define PARAM_BASE 0xa0000a00
-#define param_start(x) __va(x)
-#endif
-#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a )
-
-#define COMADJ_MAGIC MAGIC_CHG('C','M','A','D')
-#define UUID_MAGIC MAGIC_CHG('U','U','I','D')
-#define TOUCH_MAGIC MAGIC_CHG('T','U','C','H')
-#define AD_MAGIC MAGIC_CHG('B','V','A','D')
-#define PHAD_MAGIC MAGIC_CHG('P','H','A','D')
-
-struct sharpsl_param_info sharpsl_param;
-EXPORT_SYMBOL(sharpsl_param);
-
-void sharpsl_save_param(void)
-{
- struct sharpsl_param_info *params = param_start(PARAM_BASE);
-
- memcpy(&sharpsl_param, params, sizeof(*params));
-
- if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
- sharpsl_param.comadj=-1;
-
- if (sharpsl_param.phad_keyword != PHAD_MAGIC)
- sharpsl_param.phadadj=-1;
-
- if (sharpsl_param.uuid_keyword != UUID_MAGIC)
- sharpsl_param.uuid[0]=-1;
-
- if (sharpsl_param.touch_keyword != TOUCH_MAGIC)
- sharpsl_param.touch_xp=-1;
-
- if (sharpsl_param.adadj_keyword != AD_MAGIC)
- sharpsl_param.adadj=-1;
-}
-
-
diff --git a/arch/arm/configs/am200epdkit_defconfig b/arch/arm/configs/am200epdkit_defconfig
deleted file mode 100644
index 61beac88e863..000000000000
--- a/arch/arm/configs/am200epdkit_defconfig
+++ /dev/null
@@ -1,91 +0,0 @@
-CONFIG_LOCALVERSION="gum"
-CONFIG_SYSVIPC=y
-CONFIG_PREEMPT=y
-CONFIG_EXPERT=y
-# CONFIG_EPOLL is not set
-# CONFIG_SHMEM is not set
-# CONFIG_ARCH_MULTI_V7 is not set
-CONFIG_ARCH_PXA=y
-CONFIG_ARCH_GUMSTIX=y
-CONFIG_ATAGS=y
-CONFIG_CMDLINE="console=ttyS0,115200n8 root=1f01 rootfstype=jffs2"
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_SWAP is not set
-# CONFIG_VM_EVENT_COUNTERS is not set
-CONFIG_NET=y
-CONFIG_PACKET=m
-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_DIAG is not set
-# CONFIG_IPV6 is not set
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_PCCARD=y
-CONFIG_MTD=y
-CONFIG_MTD_BLOCK=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_CFI_I2 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PXA2XX=y
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_SD=m
-# CONFIG_BLK_DEV_BSG is not set
-CONFIG_ATA=m
-CONFIG_PATA_PCMCIA=m
-CONFIG_NETDEVICES=y
-CONFIG_SMC91X=m
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-# CONFIG_HW_RANDOM is not set
-# CONFIG_HWMON is not set
-CONFIG_WATCHDOG=y
-CONFIG_SA1100_WATCHDOG=m
-CONFIG_FB=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_PARAMETERS=y
-CONFIG_FB_MBX=m
-CONFIG_FB_VIRTUAL=m
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_SOUND=m
-CONFIG_SND=m
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_VERBOSE_PROCFS is not set
-CONFIG_SND_PXA2XX_AC97=m
-CONFIG_USB_GADGET=y
-CONFIG_USB_ETH=m
-CONFIG_MMC=y
-CONFIG_MMC_PXA=y
-# CONFIG_DNOTIFY is not set
-CONFIG_VFAT_FS=y
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_RUBIN=y
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_ISO8859_1=y
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DETECT_SOFTLOCKUP is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_PREEMPT is not set
-CONFIG_DEBUG_USER=y
diff --git a/arch/arm/configs/spitz_defconfig b/arch/arm/configs/spitz_defconfig
deleted file mode 100644
index c7cf089001bf..000000000000
--- a/arch/arm/configs/spitz_defconfig
+++ /dev/null
@@ -1,237 +0,0 @@
-CONFIG_SYSVIPC=y
-CONFIG_PREEMPT=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EXPERT=y
-CONFIG_PROFILING=y
-# CONFIG_ARCH_MULTI_V7 is not set
-CONFIG_ARCH_PXA=y
-CONFIG_PXA_SHARPSL=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_BORZOI=y
-CONFIG_ATAGS=y
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 debug"
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_BINFMT_MISC=m
-CONFIG_PM=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_SYN_COOKIES=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_RAW=m
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_PXA2XX=y
-CONFIG_MTD=y
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_BLOCK=y
-CONFIG_MTD_ROM=y
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_RAW_NAND=y
-CONFIG_MTD_NAND_SHARPSL=y
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-CONFIG_CHR_DEV_SG=m
-# CONFIG_BLK_DEV_BSG is not set
-CONFIG_ATA=y
-CONFIG_PATA_PCMCIA=y
-CONFIG_NETDEVICES=y
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PPP=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_ASYNC=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_NET_PCMCIA=y
-CONFIG_INPUT_FF_MEMLESS=m
-# CONFIG_INPUT_MOUSEDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_INPUT_MOUSE is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-# CONFIG_SERIO is not set
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SPI=y
-CONFIG_SPI_PXA2XX=y
-CONFIG_FB=y
-CONFIG_FB_PXA=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_CORGI=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_HID_A4TECH=m
-CONFIG_HID_APPLE=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_HID_PETALYNX=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB=m
-CONFIG_USB_MON=m
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_STORAGE=m
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_GADGET=m
-CONFIG_USB_GADGET_DUMMY_HCD=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_MMC=y
-CONFIG_MMC_PXA=y
-CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-CONFIG_EXT4_FS=y
-# CONFIG_EXT4_FS_XATTR is not set
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_TMPFS=y
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_RUBIN=y
-CONFIG_CRAMFS=m
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V4=y
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_NFS_V4=m
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_UTF8=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_BENCHMARK=m
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_FTRACE is not set
diff --git a/arch/arm/include/asm/hardware/scoop.h b/arch/arm/include/asm/hardware/scoop.h
deleted file mode 100644
index 505453315287..000000000000
--- a/arch/arm/include/asm/hardware/scoop.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Definitions for the SCOOP interface found on various Sharp PDAs
- *
- * Copyright (c) 2004 Richard Purdie
- */
-
-#define SCOOP_MCR 0x00
-#define SCOOP_CDR 0x04
-#define SCOOP_CSR 0x08
-#define SCOOP_CPR 0x0C
-#define SCOOP_CCR 0x10
-#define SCOOP_IRR 0x14
-#define SCOOP_IRM 0x14
-#define SCOOP_IMR 0x18
-#define SCOOP_ISR 0x1C
-#define SCOOP_GPCR 0x20
-#define SCOOP_GPWR 0x24
-#define SCOOP_GPRR 0x28
-
-#define SCOOP_CPR_OUT (1 << 7)
-#define SCOOP_CPR_SD_3V (1 << 2)
-#define SCOOP_CPR_CF_XV (1 << 1)
-#define SCOOP_CPR_CF_3V (1 << 0)
-
-#define SCOOP_GPCR_PA22 (1 << 12)
-#define SCOOP_GPCR_PA21 (1 << 11)
-#define SCOOP_GPCR_PA20 (1 << 10)
-#define SCOOP_GPCR_PA19 (1 << 9)
-#define SCOOP_GPCR_PA18 (1 << 8)
-#define SCOOP_GPCR_PA17 (1 << 7)
-#define SCOOP_GPCR_PA16 (1 << 6)
-#define SCOOP_GPCR_PA15 (1 << 5)
-#define SCOOP_GPCR_PA14 (1 << 4)
-#define SCOOP_GPCR_PA13 (1 << 3)
-#define SCOOP_GPCR_PA12 (1 << 2)
-#define SCOOP_GPCR_PA11 (1 << 1)
-
-struct scoop_config {
- unsigned short io_out;
- unsigned short io_dir;
- unsigned short suspend_clr;
- unsigned short suspend_set;
- int gpio_base;
-};
-
-/* Structure for linking scoop devices to PCMCIA sockets */
-struct scoop_pcmcia_dev {
- struct device *dev; /* Pointer to this socket's scoop device */
- int irq; /* irq for socket */
- int cd_irq;
- const char *cd_irq_str;
- unsigned char keep_vs;
- unsigned char keep_rd;
-};
-
-struct scoop_pcmcia_config {
- struct scoop_pcmcia_dev *devs;
- int num_devs;
- void (*power_ctrl)(struct device *scoop, unsigned short cpr, int nr);
-};
-
-extern struct scoop_pcmcia_config *platform_scoop_config;
-
-void reset_scoop(struct device *dev);
-unsigned short read_scoop_reg(struct device *dev, unsigned short reg);
-void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data);
diff --git a/arch/arm/include/asm/mach/sharpsl_param.h b/arch/arm/include/asm/mach/sharpsl_param.h
deleted file mode 100644
index 700a377c20bf..000000000000
--- a/arch/arm/include/asm/mach/sharpsl_param.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Hardware parameter area specific to Sharp SL series devices
- *
- * Copyright (c) 2005 Richard Purdie
- *
- * Based on Sharp's 2.4 kernel patches
- */
-
-struct sharpsl_param_info {
- unsigned int comadj_keyword;
- unsigned int comadj;
-
- unsigned int uuid_keyword;
- unsigned char uuid[16];
-
- unsigned int touch_keyword;
- unsigned int touch_xp;
- unsigned int touch_yp;
- unsigned int touch_xd;
- unsigned int touch_yd;
-
- unsigned int adadj_keyword;
- unsigned int adadj;
-
- unsigned int phad_keyword;
- unsigned int phadadj;
-} __attribute__((packed));
-
-
-extern struct sharpsl_param_info sharpsl_param;
-extern void sharpsl_save_param(void);
-
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 2fb29b9ef744..354e3dc17776 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -50,77 +50,6 @@ config MACH_PXA3XX_DT
the device tree. Needn't select any other machine while
MACH_PXA3XX_DT is enabled.
-if ATAGS
-
-comment "Legacy board files"
-
-config ARCH_GUMSTIX
- bool "Gumstix XScale 255 boards (DEPRECATED)"
- select PXA25x
- help
- Say Y here if you intend to run this kernel on
- Basix, Connex, ws-200ax, ws-400ax systems
-
- Support for this machine will go away in early 2027,
- unless it gets converted to device tree.
-
-choice
- prompt "Gumstix Carrier/Expansion Board"
- depends on ARCH_GUMSTIX
-
-config GUMSTIX_AM200EPD
- bool "Enable AM200EPD board support"
-
-config GUMSTIX_AM300EPD
- bool "Enable AM300EPD board support"
-
-endchoice
-
-config PXA_SHARPSL
- bool "SHARP Zaurus SL-5600, SL-C7xx and SL-Cxx00 Models (DEPRECATED)"
- select SHARP_PARAM
- select SHARP_SCOOP
- help
- Say Y here if you intend to run this kernel on a
- Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi),
- SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita),
- SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
- handheld computer.
-
- Support for these machines will go away in early 2027,
- unless they get converted to device tree.
-
-config PXA_SHARPSL_DETECT_MACH_ID
- bool "Detect machine ID at run-time in the decompressor"
- depends on PXA_SHARPSL
- help
- Say Y here if you want the zImage decompressor to detect
- the Zaurus machine ID at run-time. For latest kexec-based
- boot loader, this is not necessary.
-
-config MACH_AKITA
- bool "Enable Sharp SL-1000 (Akita) Support"
- depends on PXA_SHARPSL
- select I2C
- select I2C_PXA
- select MACH_SPITZ
- select PXA27x
- select PXA_SHARP_Cxx00
-
-config MACH_SPITZ
- bool "Enable Sharp Zaurus SL-3000 (Spitz) Support"
- depends on PXA_SHARPSL
- select PXA27x
- select PXA_SHARP_Cxx00
-
-config MACH_BORZOI
- bool "Enable Sharp Zaurus SL-3100 (Borzoi) Support"
- depends on PXA_SHARPSL
- select PXA27x
- select PXA_SHARP_Cxx00
-
-endif # ATAGS
-
config PXA25x
bool
select CPU_XSCALE
@@ -157,22 +86,4 @@ config CPU_PXA320
help
PXA320 (codename Monahans-P)
-config PXA_SHARP_Cxx00
- bool
- select SHARPSL_PM
- help
- Enable common support for Sharp Cxx00 models
-
-config SHARPSL_PM
- bool
- select APM_EMULATION
- select SHARPSL_PM_MAX1111
-
-config SHARPSL_PM_MAX1111
- bool
- select HWMON
- select SENSORS_MAX1111
- select SPI
- select SPI_MASTER
-
endif
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index faccdd356482..3bc3b2e56afe 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -22,11 +22,3 @@ obj-$(CONFIG_CPU_PXA320) += pxa320.o
obj-$(CONFIG_MACH_PXA25X_DT) += pxa-dt.o
obj-$(CONFIG_MACH_PXA27X_DT) += pxa-dt.o
obj-$(CONFIG_MACH_PXA3XX_DT) += pxa-dt.o
-
-# 3rd Party Dev Platforms
-obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
-obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
-obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
-
-# End-user Products
-obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o sharpsl_pm.o spitz_pm.o
diff --git a/arch/arm/mach-pxa/am200epd.c b/arch/arm/mach-pxa/am200epd.c
deleted file mode 100644
index 4814f3cfe775..000000000000
--- a/arch/arm/mach-pxa/am200epd.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * am200epd.c -- Platform device for AM200 EPD kit
- *
- * Copyright (C) 2008, Jaya Kumar
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive for
- * more details.
- *
- * Layout is based on skeletonfb.c by James Simmons and Geert Uytterhoeven.
- *
- * This work was made possible by help and equipment support from E-Ink
- * Corporation. http://support.eink.com/community
- *
- * This driver is written to be used with the Metronome display controller.
- * on the AM200 EPD prototype kit/development kit with an E-Ink 800x600
- * Vizplex EPD on a Gumstix board using the Lyre interface board.
- *
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/irq.h>
-#include <linux/gpio/legacy.h>
-
-#include "pxa25x.h"
-#include "gumstix.h"
-#include <linux/platform_data/video-pxafb.h>
-
-#include "generic.h"
-
-#include <video/metronomefb.h>
-
-static unsigned int panel_type = 6;
-static struct platform_device *am200_device;
-static struct metronome_board am200_board;
-
-static struct pxafb_mode_info am200_fb_mode_9inch7 = {
- .pixclock = 40000,
- .xres = 1200,
- .yres = 842,
- .bpp = 16,
- .hsync_len = 2,
- .left_margin = 2,
- .right_margin = 2,
- .vsync_len = 1,
- .upper_margin = 2,
- .lower_margin = 25,
- .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-};
-
-static struct pxafb_mode_info am200_fb_mode_8inch = {
- .pixclock = 40000,
- .xres = 1088,
- .yres = 791,
- .bpp = 16,
- .hsync_len = 28,
- .left_margin = 8,
- .right_margin = 30,
- .vsync_len = 8,
- .upper_margin = 10,
- .lower_margin = 8,
- .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-};
-
-static struct pxafb_mode_info am200_fb_mode_6inch = {
- .pixclock = 40189,
- .xres = 832,
- .yres = 622,
- .bpp = 16,
- .hsync_len = 28,
- .left_margin = 34,
- .right_margin = 34,
- .vsync_len = 25,
- .upper_margin = 0,
- .lower_margin = 2,
- .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-};
-
-static struct pxafb_mach_info am200_fb_info = {
- .modes = &am200_fb_mode_6inch,
- .num_modes = 1,
- .lcd_conn = LCD_TYPE_COLOR_TFT | LCD_PCLK_EDGE_FALL |
- LCD_AC_BIAS_FREQ(24),
-};
-
-/* register offsets for gpio control */
-#define LED_GPIO_PIN 51
-#define STDBY_GPIO_PIN 48
-#define RST_GPIO_PIN 49
-#define RDY_GPIO_PIN 32
-#define ERR_GPIO_PIN 17
-#define PCBPWR_GPIO_PIN 16
-static int gpios[] = { LED_GPIO_PIN , STDBY_GPIO_PIN , RST_GPIO_PIN,
- RDY_GPIO_PIN, ERR_GPIO_PIN, PCBPWR_GPIO_PIN };
-static char *gpio_names[] = { "LED" , "STDBY" , "RST", "RDY", "ERR", "PCBPWR" };
-
-static int am200_init_gpio_regs(struct metronomefb_par *par)
-{
- int i;
- int err;
-
- for (i = 0; i < ARRAY_SIZE(gpios); i++) {
- err = gpio_request(gpios[i], gpio_names[i]);
- if (err) {
- dev_err(&am200_device->dev, "failed requesting "
- "gpio %s, err=%d\n", gpio_names[i], err);
- goto err_req_gpio;
- }
- }
-
- gpio_direction_output(LED_GPIO_PIN, 0);
- gpio_direction_output(STDBY_GPIO_PIN, 0);
- gpio_direction_output(RST_GPIO_PIN, 0);
-
- gpio_direction_input(RDY_GPIO_PIN);
- gpio_direction_input(ERR_GPIO_PIN);
-
- gpio_direction_output(PCBPWR_GPIO_PIN, 0);
-
- return 0;
-
-err_req_gpio:
- while (--i >= 0)
- gpio_free(gpios[i]);
-
- return err;
-}
-
-static void am200_cleanup(struct metronomefb_par *par)
-{
- int i;
-
- free_irq(PXA_GPIO_TO_IRQ(RDY_GPIO_PIN), par);
-
- for (i = 0; i < ARRAY_SIZE(gpios); i++)
- gpio_free(gpios[i]);
-}
-
-static int am200_share_video_mem(struct fb_info *info)
-{
- /* rough check if this is our desired fb and not something else */
- if ((info->var.xres != am200_fb_info.modes->xres)
- || (info->var.yres != am200_fb_info.modes->yres))
- return 0;
-
- /* we've now been notified that we have our new fb */
- am200_board.metromem = info->screen_base;
- am200_board.host_fbinfo = info;
-
- /* try to refcount host drv since we are the consumer after this */
- if (!try_module_get(info->fbops->owner))
- return -ENODEV;
-
- return 0;
-}
-
-static int am200_unshare_video_mem(struct fb_info *info)
-{
- dev_dbg(&am200_device->dev, "ENTER %s\n", __func__);
-
- if (info != am200_board.host_fbinfo)
- return 0;
-
- module_put(am200_board.host_fbinfo->fbops->owner);
- return 0;
-}
-
-static int am200_fb_notifier_callback(struct notifier_block *self,
- unsigned long event, void *data)
-{
- struct fb_event *evdata = data;
- struct fb_info *info = evdata->info;
-
- dev_dbg(&am200_device->dev, "ENTER %s\n", __func__);
-
- if (event == FB_EVENT_FB_REGISTERED)
- return am200_share_video_mem(info);
- else if (event == FB_EVENT_FB_UNREGISTERED)
- return am200_unshare_video_mem(info);
-
- return 0;
-}
-
-static struct notifier_block am200_fb_notif = {
- .notifier_call = am200_fb_notifier_callback,
-};
-
-/* this gets called as part of our init. these steps must be done now so
- * that we can use pxa_set_fb_info */
-static void __init am200_presetup_fb(void)
-{
- int fw;
- int fh;
- int padding_size;
- int totalsize;
-
- switch (panel_type) {
- case 6:
- am200_fb_info.modes = &am200_fb_mode_6inch;
- break;
- case 8:
- am200_fb_info.modes = &am200_fb_mode_8inch;
- break;
- case 97:
- am200_fb_info.modes = &am200_fb_mode_9inch7;
- break;
- default:
- dev_err(&am200_device->dev, "invalid panel_type selection,"
- " setting to 6\n");
- am200_fb_info.modes = &am200_fb_mode_6inch;
- break;
- }
-
- /* the frame buffer is divided as follows:
- command | CRC | padding
- 16kb waveform data | CRC | padding
- image data | CRC
- */
-
- fw = am200_fb_info.modes->xres;
- fh = am200_fb_info.modes->yres;
-
- /* waveform must be 16k + 2 for checksum */
- am200_board.wfm_size = roundup(16*1024 + 2, fw);
-
- padding_size = PAGE_SIZE + (4 * fw);
-
- /* total is 1 cmd , 1 wfm, padding and image */
- totalsize = fw + am200_board.wfm_size + padding_size + (fw*fh);
-
- /* save this off because we're manipulating fw after this and
- * we'll need it when we're ready to setup the framebuffer */
- am200_board.fw = fw;
- am200_board.fh = fh;
-
- /* the reason we do this adjustment is because we want to acquire
- * more framebuffer memory without imposing custom awareness on the
- * underlying pxafb driver */
- am200_fb_info.modes->yres = DIV_ROUND_UP(totalsize, fw);
-
- /* we divide since we told the LCD controller we're 16bpp */
- am200_fb_info.modes->xres /= 2;
-
- pxa_set_fb_info(NULL, &am200_fb_info);
-
-}
-
-/* this gets called by metronomefb as part of its init, in our case, we
- * have already completed initial framebuffer init in presetup_fb so we
- * can just setup the fb access pointers */
-static int am200_setup_fb(struct metronomefb_par *par)
-{
- int fw;
- int fh;
-
- fw = am200_board.fw;
- fh = am200_board.fh;
-
- /* metromem was set up by the notifier in share_video_mem so now
- * we can use its value to calculate the other entries */
- par->metromem_cmd = (struct metromem_cmd *) am200_board.metromem;
- par->metromem_wfm = am200_board.metromem + fw;
- par->metromem_img = par->metromem_wfm + am200_board.wfm_size;
- par->metromem_img_csum = (u16 *) (par->metromem_img + (fw * fh));
- par->metromem_dma = am200_board.host_fbinfo->fix.smem_start;
-
- return 0;
-}
-
-static int am200_get_panel_type(void)
-{
- return panel_type;
-}
-
-static irqreturn_t am200_handle_irq(int irq, void *dev_id)
-{
- struct metronomefb_par *par = dev_id;
-
- wake_up_interruptible(&par->waitq);
- return IRQ_HANDLED;
-}
-
-static int am200_setup_irq(struct fb_info *info)
-{
- int ret;
-
- ret = request_irq(PXA_GPIO_TO_IRQ(RDY_GPIO_PIN), am200_handle_irq,
- IRQF_TRIGGER_FALLING, "AM200", info->par);
- if (ret)
- dev_err(&am200_device->dev, "request_irq failed: %d\n", ret);
-
- return ret;
-}
-
-static void am200_set_rst(struct metronomefb_par *par, int state)
-{
- gpio_set_value(RST_GPIO_PIN, state);
-}
-
-static void am200_set_stdby(struct metronomefb_par *par, int state)
-{
- gpio_set_value(STDBY_GPIO_PIN, state);
-}
-
-static int am200_wait_event(struct metronomefb_par *par)
-{
- return wait_event_timeout(par->waitq, gpio_get_value(RDY_GPIO_PIN), HZ);
-}
-
-static int am200_wait_event_intr(struct metronomefb_par *par)
-{
- return wait_event_interruptible_timeout(par->waitq,
- gpio_get_value(RDY_GPIO_PIN), HZ);
-}
-
-static struct metronome_board am200_board = {
- .owner = THIS_MODULE,
- .setup_irq = am200_setup_irq,
- .setup_io = am200_init_gpio_regs,
- .setup_fb = am200_setup_fb,
- .set_rst = am200_set_rst,
- .set_stdby = am200_set_stdby,
- .met_wait_event = am200_wait_event,
- .met_wait_event_intr = am200_wait_event_intr,
- .get_panel_type = am200_get_panel_type,
- .cleanup = am200_cleanup,
-};
-
-static unsigned long am200_pin_config[] __initdata = {
- GPIO51_GPIO,
- GPIO49_GPIO,
- GPIO48_GPIO,
- GPIO32_GPIO,
- GPIO17_GPIO,
- GPIO16_GPIO,
-};
-
-int __init am200_init(void)
-{
- int ret;
-
- /*
- * Before anything else, we request notification for any fb
- * creation events.
- *
- * FIXME: This is terrible and needs to be nuked. The notifier is used
- * to get at the fb base address from the boot splash fb driver, which
- * is then passed to metronomefb. Instaed of metronomfb or this board
- * support file here figuring this out on their own.
- *
- * See also the #ifdef in fbmem.c.
- */
- fb_register_client(&am200_fb_notif);
-
- pxa2xx_mfp_config(ARRAY_AND_SIZE(am200_pin_config));
-
- /* request our platform independent driver */
- request_module("metronomefb");
-
- am200_device = platform_device_alloc("metronomefb", -1);
- if (!am200_device)
- return -ENOMEM;
-
- /* the am200_board that will be seen by metronomefb is a copy */
- platform_device_add_data(am200_device, &am200_board,
- sizeof(am200_board));
-
- /* this _add binds metronomefb to am200. metronomefb refcounts am200 */
- ret = platform_device_add(am200_device);
-
- if (ret) {
- platform_device_put(am200_device);
- fb_unregister_client(&am200_fb_notif);
- return ret;
- }
-
- am200_presetup_fb();
-
- return 0;
-}
-
-module_param(panel_type, uint, 0);
-MODULE_PARM_DESC(panel_type, "Select the panel type: 6, 8, 97");
-
-MODULE_DESCRIPTION("board driver for am200 metronome epd kit");
-MODULE_AUTHOR("Jaya Kumar");
-MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-pxa/am300epd.c b/arch/arm/mach-pxa/am300epd.c
deleted file mode 100644
index 435fb72da7de..000000000000
--- a/arch/arm/mach-pxa/am300epd.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * am300epd.c -- Platform device for AM300 EPD kit
- *
- * Copyright (C) 2008, Jaya Kumar
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive for
- * more details.
- *
- * This work was made possible by help and equipment support from E-Ink
- * Corporation. http://support.eink.com/community
- *
- * This driver is written to be used with the Broadsheet display controller.
- * on the AM300 EPD prototype kit/development kit with an E-Ink 800x600
- * Vizplex EPD on a Gumstix board using the Broadsheet interface board.
- *
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/irq.h>
-#include <linux/gpio/legacy.h>
-
-#include "gumstix.h"
-#include "mfp-pxa25x.h"
-#include "irqs.h"
-#include <linux/platform_data/video-pxafb.h>
-
-#include "generic.h"
-
-#include <video/broadsheetfb.h>
-
-static unsigned int panel_type = 6;
-static struct platform_device *am300_device;
-static struct broadsheet_board am300_board;
-
-static unsigned long am300_pin_config[] __initdata = {
- GPIO16_GPIO,
- GPIO17_GPIO,
- GPIO32_GPIO,
- GPIO48_GPIO,
- GPIO49_GPIO,
- GPIO51_GPIO,
- GPIO74_GPIO,
- GPIO75_GPIO,
- GPIO76_GPIO,
- GPIO77_GPIO,
-
- /* this is the 16-bit hdb bus 58-73 */
- GPIO58_GPIO,
- GPIO59_GPIO,
- GPIO60_GPIO,
- GPIO61_GPIO,
-
- GPIO62_GPIO,
- GPIO63_GPIO,
- GPIO64_GPIO,
- GPIO65_GPIO,
-
- GPIO66_GPIO,
- GPIO67_GPIO,
- GPIO68_GPIO,
- GPIO69_GPIO,
-
- GPIO70_GPIO,
- GPIO71_GPIO,
- GPIO72_GPIO,
- GPIO73_GPIO,
-};
-
-/* register offsets for gpio control */
-#define PWR_GPIO_PIN 16
-#define CFG_GPIO_PIN 17
-#define RDY_GPIO_PIN 32
-#define DC_GPIO_PIN 48
-#define RST_GPIO_PIN 49
-#define LED_GPIO_PIN 51
-#define RD_GPIO_PIN 74
-#define WR_GPIO_PIN 75
-#define CS_GPIO_PIN 76
-#define IRQ_GPIO_PIN 77
-
-/* hdb bus */
-#define DB0_GPIO_PIN 58
-#define DB15_GPIO_PIN 73
-
-static int gpios[] = { PWR_GPIO_PIN, CFG_GPIO_PIN, RDY_GPIO_PIN, DC_GPIO_PIN,
- RST_GPIO_PIN, RD_GPIO_PIN, WR_GPIO_PIN, CS_GPIO_PIN,
- IRQ_GPIO_PIN, LED_GPIO_PIN };
-static char *gpio_names[] = { "PWR", "CFG", "RDY", "DC", "RST", "RD", "WR",
- "CS", "IRQ", "LED" };
-
-static int am300_wait_event(struct broadsheetfb_par *par)
-{
- /* todo: improve err recovery */
- wait_event(par->waitq, gpio_get_value(RDY_GPIO_PIN));
- return 0;
-}
-
-static int am300_init_gpio_regs(struct broadsheetfb_par *par)
-{
- int i;
- int err;
- char dbname[8];
-
- for (i = 0; i < ARRAY_SIZE(gpios); i++) {
- err = gpio_request(gpios[i], gpio_names[i]);
- if (err) {
- dev_err(&am300_device->dev, "failed requesting "
- "gpio %s, err=%d\n", gpio_names[i], err);
- goto err_req_gpio;
- }
- }
-
- /* we also need to take care of the hdb bus */
- for (i = DB0_GPIO_PIN; i <= DB15_GPIO_PIN; i++) {
- sprintf(dbname, "DB%d", i);
- err = gpio_request(i, dbname);
- if (err) {
- dev_err(&am300_device->dev, "failed requesting "
- "gpio %d, err=%d\n", i, err);
- goto err_req_gpio2;
- }
- }
-
- /* setup the outputs and init values */
- gpio_direction_output(PWR_GPIO_PIN, 0);
- gpio_direction_output(CFG_GPIO_PIN, 1);
- gpio_direction_output(DC_GPIO_PIN, 0);
- gpio_direction_output(RD_GPIO_PIN, 1);
- gpio_direction_output(WR_GPIO_PIN, 1);
- gpio_direction_output(CS_GPIO_PIN, 1);
- gpio_direction_output(RST_GPIO_PIN, 0);
-
- /* setup the inputs */
- gpio_direction_input(RDY_GPIO_PIN);
- gpio_direction_input(IRQ_GPIO_PIN);
-
- /* start the hdb bus as an input */
- for (i = DB0_GPIO_PIN; i <= DB15_GPIO_PIN; i++)
- gpio_direction_output(i, 0);
-
- /* go into command mode */
- gpio_set_value(CFG_GPIO_PIN, 1);
- gpio_set_value(RST_GPIO_PIN, 0);
- msleep(10);
- gpio_set_value(RST_GPIO_PIN, 1);
- msleep(10);
- am300_wait_event(par);
-
- return 0;
-
-err_req_gpio2:
- while (--i >= DB0_GPIO_PIN)
- gpio_free(i);
- i = ARRAY_SIZE(gpios);
-err_req_gpio:
- while (--i >= 0)
- gpio_free(gpios[i]);
-
- return err;
-}
-
-static int am300_init_board(struct broadsheetfb_par *par)
-{
- return am300_init_gpio_regs(par);
-}
-
-static void am300_cleanup(struct broadsheetfb_par *par)
-{
- int i;
-
- free_irq(PXA_GPIO_TO_IRQ(RDY_GPIO_PIN), par);
-
- for (i = 0; i < ARRAY_SIZE(gpios); i++)
- gpio_free(gpios[i]);
-
- for (i = DB0_GPIO_PIN; i <= DB15_GPIO_PIN; i++)
- gpio_free(i);
-
-}
-
-static u16 am300_get_hdb(struct broadsheetfb_par *par)
-{
- u16 res = 0;
- int i;
-
- for (i = 0; i <= (DB15_GPIO_PIN - DB0_GPIO_PIN) ; i++)
- res |= (gpio_get_value(DB0_GPIO_PIN + i)) ? (1 << i) : 0;
-
- return res;
-}
-
-static void am300_set_hdb(struct broadsheetfb_par *par, u16 data)
-{
- int i;
-
- for (i = 0; i <= (DB15_GPIO_PIN - DB0_GPIO_PIN) ; i++)
- gpio_set_value(DB0_GPIO_PIN + i, (data >> i) & 0x01);
-}
-
-
-static void am300_set_ctl(struct broadsheetfb_par *par, unsigned char bit,
- u8 state)
-{
- switch (bit) {
- case BS_CS:
- gpio_set_value(CS_GPIO_PIN, state);
- break;
- case BS_DC:
- gpio_set_value(DC_GPIO_PIN, state);
- break;
- case BS_WR:
- gpio_set_value(WR_GPIO_PIN, state);
- break;
- }
-}
-
-static int am300_get_panel_type(void)
-{
- return panel_type;
-}
-
-static irqreturn_t am300_handle_irq(int irq, void *dev_id)
-{
- struct broadsheetfb_par *par = dev_id;
-
- wake_up(&par->waitq);
- return IRQ_HANDLED;
-}
-
-static int am300_setup_irq(struct fb_info *info)
-{
- int ret;
- struct broadsheetfb_par *par = info->par;
-
- ret = request_irq(PXA_GPIO_TO_IRQ(RDY_GPIO_PIN), am300_handle_irq,
- IRQF_TRIGGER_RISING, "AM300", par);
- if (ret)
- dev_err(&am300_device->dev, "request_irq failed: %d\n", ret);
-
- return ret;
-}
-
-static struct broadsheet_board am300_board = {
- .owner = THIS_MODULE,
- .init = am300_init_board,
- .cleanup = am300_cleanup,
- .set_hdb = am300_set_hdb,
- .get_hdb = am300_get_hdb,
- .set_ctl = am300_set_ctl,
- .wait_for_rdy = am300_wait_event,
- .get_panel_type = am300_get_panel_type,
- .setup_irq = am300_setup_irq,
-};
-
-int __init am300_init(void)
-{
- int ret;
-
- pxa2xx_mfp_config(ARRAY_AND_SIZE(am300_pin_config));
-
- /* request our platform independent driver */
- request_module("broadsheetfb");
-
- am300_device = platform_device_alloc("broadsheetfb", -1);
- if (!am300_device)
- return -ENOMEM;
-
- /* the am300_board that will be seen by broadsheetfb is a copy */
- platform_device_add_data(am300_device, &am300_board,
- sizeof(am300_board));
-
- ret = platform_device_add(am300_device);
-
- if (ret) {
- platform_device_put(am300_device);
- return ret;
- }
-
- return 0;
-}
-
-module_param(panel_type, uint, 0);
-MODULE_PARM_DESC(panel_type, "Select the panel type: 37, 6, 97");
-
-MODULE_DESCRIPTION("board driver for am300 epd kit");
-MODULE_AUTHOR("Jaya Kumar");
-MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index edad956a1483..c2a2469a003a 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -1,715 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
-#include <linux/module.h>
-#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
-#include <linux/clkdev.h>
-#include <linux/clk-provider.h>
-#include <linux/dma-mapping.h>
-#include <linux/dmaengine.h>
-#include <linux/gpio-pxa.h>
-#include <linux/platform_data/i2c-pxa.h>
-#include <linux/soc/pxa/cpu.h>
-#include <linux/platform_data/video-pxafb.h>
-#include <linux/platform_data/mmc-pxamci.h>
#include "irqs.h"
-#include <linux/platform_data/usb-ohci-pxa27x.h>
-#include <linux/platform_data/mmp_dma.h>
-
-#include "mfp-pxa2xx.h"
#include "regs-ost.h"
#include "reset.h"
-#include "devices.h"
-#include "generic.h"
-
-void __init pxa_register_device(struct platform_device *dev, void *data)
-{
- int ret;
-
- dev->dev.platform_data = data;
-
- ret = platform_device_register(dev);
- if (ret)
- dev_err(&dev->dev, "unable to register device: %d\n", ret);
-}
-
-static struct resource pxa_resource_pmu = {
- .start = IRQ_PMU,
- .end = IRQ_PMU,
- .flags = IORESOURCE_IRQ,
-};
-
-struct platform_device pxa_device_pmu = {
- .name = "xscale-pmu",
- .id = -1,
- .resource = &pxa_resource_pmu,
- .num_resources = 1,
-};
-
-static const struct resource pxamci_resources[] = {
- [0] = {
- .start = 0x41100000,
- .end = 0x41100fff,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_MMC,
- .end = IRQ_MMC,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-void __init pxa_set_mci_info(const struct pxamci_platform_data *info,
- const struct property_entry *props)
-{
- const struct platform_device_info mci_info = {
- .name = "pxa2xx-mci",
- .id = 0,
- .res = pxamci_resources,
- .num_res = ARRAY_SIZE(pxamci_resources),
- .data = info,
- .size_data = sizeof(*info),
- .dma_mask = 0xffffffffUL,
- .properties = props,
- };
- struct platform_device *mci_dev;
- int err;
-
- mci_dev = platform_device_register_full(&mci_info);
- err = PTR_ERR_OR_ZERO(mci_dev);
- if (err)
- pr_err("Unable to create mci device: %d\n", err);
-}
-
-static struct resource pxa2xx_udc_resources[] = {
- [0] = {
- .start = 0x40600000,
- .end = 0x4060ffff,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_USB,
- .end = IRQ_USB,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static u64 udc_dma_mask = ~(u32)0;
-
-struct platform_device pxa25x_device_udc = {
- .name = "pxa25x-udc",
- .id = -1,
- .resource = pxa2xx_udc_resources,
- .num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
- .dev = {
- .dma_mask = &udc_dma_mask,
- }
-};
-
-struct platform_device pxa27x_device_udc = {
- .name = "pxa27x-udc",
- .id = -1,
- .resource = pxa2xx_udc_resources,
- .num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
- .dev = {
- .dma_mask = &udc_dma_mask,
- }
-};
-
-static struct resource pxafb_resources[] = {
- [0] = {
- .start = 0x44000000,
- .end = 0x4400ffff,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_LCD,
- .end = IRQ_LCD,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static u64 fb_dma_mask = ~(u64)0;
-
-struct platform_device pxa_device_fb = {
- .name = "pxa2xx-fb",
- .id = -1,
- .dev = {
- .dma_mask = &fb_dma_mask,
- .coherent_dma_mask = 0xffffffff,
- },
- .num_resources = ARRAY_SIZE(pxafb_resources),
- .resource = pxafb_resources,
-};
-
-void __init pxa_set_fb_info(struct device *parent, struct pxafb_mach_info *info)
-{
- pxa_device_fb.dev.parent = parent;
- pxa_register_device(&pxa_device_fb, info);
-}
-
-static struct resource pxa_resource_ffuart[] = {
- {
- .start = 0x40100000,
- .end = 0x40100023,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_FFUART,
- .end = IRQ_FFUART,
- .flags = IORESOURCE_IRQ,
- }
-};
-
-struct platform_device pxa_device_ffuart = {
- .name = "pxa2xx-uart",
- .id = 0,
- .resource = pxa_resource_ffuart,
- .num_resources = ARRAY_SIZE(pxa_resource_ffuart),
-};
-
-void __init pxa_set_ffuart_info(void *info)
-{
- pxa_register_device(&pxa_device_ffuart, info);
-}
-
-static struct resource pxa_resource_btuart[] = {
- {
- .start = 0x40200000,
- .end = 0x40200023,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_BTUART,
- .end = IRQ_BTUART,
- .flags = IORESOURCE_IRQ,
- }
-};
-
-struct platform_device pxa_device_btuart = {
- .name = "pxa2xx-uart",
- .id = 1,
- .resource = pxa_resource_btuart,
- .num_resources = ARRAY_SIZE(pxa_resource_btuart),
-};
-
-void __init pxa_set_btuart_info(void *info)
-{
- pxa_register_device(&pxa_device_btuart, info);
-}
-
-static struct resource pxa_resource_stuart[] = {
- {
- .start = 0x40700000,
- .end = 0x40700023,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_STUART,
- .end = IRQ_STUART,
- .flags = IORESOURCE_IRQ,
- }
-};
-
-struct platform_device pxa_device_stuart = {
- .name = "pxa2xx-uart",
- .id = 2,
- .resource = pxa_resource_stuart,
- .num_resources = ARRAY_SIZE(pxa_resource_stuart),
-};
-
-void __init pxa_set_stuart_info(void *info)
-{
- pxa_register_device(&pxa_device_stuart, info);
-}
-
-static struct resource pxa_resource_hwuart[] = {
- {
- .start = 0x41600000,
- .end = 0x4160002F,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_HWUART,
- .end = IRQ_HWUART,
- .flags = IORESOURCE_IRQ,
- }
-};
-
-struct platform_device pxa_device_hwuart = {
- .name = "pxa2xx-uart",
- .id = 3,
- .resource = pxa_resource_hwuart,
- .num_resources = ARRAY_SIZE(pxa_resource_hwuart),
-};
-
-void __init pxa_set_hwuart_info(void *info)
-{
- if (cpu_is_pxa255())
- pxa_register_device(&pxa_device_hwuart, info);
- else
- pr_info("UART: Ignoring attempt to register HWUART on non-PXA255 hardware");
-}
-
-static struct resource pxai2c_resources[] = {
- {
- .start = 0x40301680,
- .end = 0x403016a3,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_I2C,
- .end = IRQ_I2C,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa_device_i2c = {
- .name = "pxa2xx-i2c",
- .id = 0,
- .resource = pxai2c_resources,
- .num_resources = ARRAY_SIZE(pxai2c_resources),
-};
-
-void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
-{
- pxa_register_device(&pxa_device_i2c, info);
-}
-
-#ifdef CONFIG_PXA27x
-static struct resource pxa27x_resources_i2c_power[] = {
- {
- .start = 0x40f00180,
- .end = 0x40f001a3,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_PWRI2C,
- .end = IRQ_PWRI2C,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa27x_device_i2c_power = {
- .name = "pxa2xx-i2c",
- .id = 1,
- .resource = pxa27x_resources_i2c_power,
- .num_resources = ARRAY_SIZE(pxa27x_resources_i2c_power),
-};
-#endif
-
-static struct resource pxai2s_resources[] = {
- {
- .start = 0x40400000,
- .end = 0x40400083,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_I2S,
- .end = IRQ_I2S,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa_device_i2s = {
- .name = "pxa2xx-i2s",
- .id = -1,
- .resource = pxai2s_resources,
- .num_resources = ARRAY_SIZE(pxai2s_resources),
-};
-
-struct platform_device pxa_device_asoc_ssp1 = {
- .name = "pxa-ssp-dai",
- .id = 0,
-};
-
-struct platform_device pxa_device_asoc_ssp2= {
- .name = "pxa-ssp-dai",
- .id = 1,
-};
-
-struct platform_device pxa_device_asoc_ssp3 = {
- .name = "pxa-ssp-dai",
- .id = 2,
-};
-
-struct platform_device pxa_device_asoc_ssp4 = {
- .name = "pxa-ssp-dai",
- .id = 3,
-};
-
-struct platform_device pxa_device_asoc_platform = {
- .name = "pxa-pcm-audio",
- .id = -1,
-};
-
-static struct resource pxa_rtc_resources[] = {
- [0] = {
- .start = 0x40900000,
- .end = 0x40900000 + 0x3b,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_RTC1Hz,
- .end = IRQ_RTC1Hz,
- .name = "rtc 1Hz",
- .flags = IORESOURCE_IRQ,
- },
- [2] = {
- .start = IRQ_RTCAlrm,
- .end = IRQ_RTCAlrm,
- .name = "rtc alarm",
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa_device_rtc = {
- .name = "pxa-rtc",
- .id = -1,
- .num_resources = ARRAY_SIZE(pxa_rtc_resources),
- .resource = pxa_rtc_resources,
-};
-
-struct platform_device sa1100_device_rtc = {
- .name = "sa1100-rtc",
- .id = -1,
- .num_resources = ARRAY_SIZE(pxa_rtc_resources),
- .resource = pxa_rtc_resources,
-};
-
-#ifdef CONFIG_PXA25x
-
-static struct resource pxa25x_resource_pwm0[] = {
- [0] = {
- .start = 0x40b00000,
- .end = 0x40b0000f,
- .flags = IORESOURCE_MEM,
- },
-};
-
-struct platform_device pxa25x_device_pwm0 = {
- .name = "pxa25x-pwm",
- .id = 0,
- .resource = pxa25x_resource_pwm0,
- .num_resources = ARRAY_SIZE(pxa25x_resource_pwm0),
-};
-
-static struct resource pxa25x_resource_pwm1[] = {
- [0] = {
- .start = 0x40c00000,
- .end = 0x40c0000f,
- .flags = IORESOURCE_MEM,
- },
-};
-
-struct platform_device pxa25x_device_pwm1 = {
- .name = "pxa25x-pwm",
- .id = 1,
- .resource = pxa25x_resource_pwm1,
- .num_resources = ARRAY_SIZE(pxa25x_resource_pwm1),
-};
-
-static u64 pxa25x_ssp_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa25x_resource_ssp[] = {
- [0] = {
- .start = 0x41000000,
- .end = 0x4100001f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_SSP,
- .end = IRQ_SSP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa25x_device_ssp = {
- .name = "pxa25x-ssp",
- .id = 0,
- .dev = {
- .dma_mask = &pxa25x_ssp_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa25x_resource_ssp,
- .num_resources = ARRAY_SIZE(pxa25x_resource_ssp),
-};
-
-static u64 pxa25x_nssp_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa25x_resource_nssp[] = {
- [0] = {
- .start = 0x41400000,
- .end = 0x4140002f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_NSSP,
- .end = IRQ_NSSP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa25x_device_nssp = {
- .name = "pxa25x-nssp",
- .id = 1,
- .dev = {
- .dma_mask = &pxa25x_nssp_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa25x_resource_nssp,
- .num_resources = ARRAY_SIZE(pxa25x_resource_nssp),
-};
-
-static u64 pxa25x_assp_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa25x_resource_assp[] = {
- [0] = {
- .start = 0x41500000,
- .end = 0x4150002f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_ASSP,
- .end = IRQ_ASSP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa25x_device_assp = {
- /* ASSP is basically equivalent to NSSP */
- .name = "pxa25x-nssp",
- .id = 2,
- .dev = {
- .dma_mask = &pxa25x_assp_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa25x_resource_assp,
- .num_resources = ARRAY_SIZE(pxa25x_resource_assp),
-};
-#endif /* CONFIG_PXA25x */
-
-#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-static u64 pxa27x_ohci_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa27x_resource_ohci[] = {
- [0] = {
- .start = 0x4C000000,
- .end = 0x4C00ff6f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_USBH1,
- .end = IRQ_USBH1,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa27x_device_ohci = {
- .name = "pxa27x-ohci",
- .id = -1,
- .dev = {
- .dma_mask = &pxa27x_ohci_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .num_resources = ARRAY_SIZE(pxa27x_resource_ohci),
- .resource = pxa27x_resource_ohci,
-};
-
-void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)
-{
- pxa_register_device(&pxa27x_device_ohci, info);
-}
-#endif /* CONFIG_PXA27x || CONFIG_PXA3xx */
-
-#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-static u64 pxa27x_ssp1_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa27x_resource_ssp1[] = {
- [0] = {
- .start = 0x41000000,
- .end = 0x4100003f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_SSP,
- .end = IRQ_SSP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa27x_device_ssp1 = {
- .name = "pxa27x-ssp",
- .id = 0,
- .dev = {
- .dma_mask = &pxa27x_ssp1_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa27x_resource_ssp1,
- .num_resources = ARRAY_SIZE(pxa27x_resource_ssp1),
-};
-
-static u64 pxa27x_ssp2_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa27x_resource_ssp2[] = {
- [0] = {
- .start = 0x41700000,
- .end = 0x4170003f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_SSP2,
- .end = IRQ_SSP2,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa27x_device_ssp2 = {
- .name = "pxa27x-ssp",
- .id = 1,
- .dev = {
- .dma_mask = &pxa27x_ssp2_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa27x_resource_ssp2,
- .num_resources = ARRAY_SIZE(pxa27x_resource_ssp2),
-};
-
-static u64 pxa27x_ssp3_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource pxa27x_resource_ssp3[] = {
- [0] = {
- .start = 0x41900000,
- .end = 0x4190003f,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_SSP3,
- .end = IRQ_SSP3,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-struct platform_device pxa27x_device_ssp3 = {
- .name = "pxa27x-ssp",
- .id = 2,
- .dev = {
- .dma_mask = &pxa27x_ssp3_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = pxa27x_resource_ssp3,
- .num_resources = ARRAY_SIZE(pxa27x_resource_ssp3),
-};
-
-static struct resource pxa27x_resource_pwm0[] = {
- [0] = {
- .start = 0x40b00000,
- .end = 0x40b0001f,
- .flags = IORESOURCE_MEM,
- },
-};
-
-struct platform_device pxa27x_device_pwm0 = {
- .name = "pxa27x-pwm",
- .id = 0,
- .resource = pxa27x_resource_pwm0,
- .num_resources = ARRAY_SIZE(pxa27x_resource_pwm0),
-};
-
-static struct resource pxa27x_resource_pwm1[] = {
- [0] = {
- .start = 0x40c00000,
- .end = 0x40c0001f,
- .flags = IORESOURCE_MEM,
- },
-};
-
-struct platform_device pxa27x_device_pwm1 = {
- .name = "pxa27x-pwm",
- .id = 1,
- .resource = pxa27x_resource_pwm1,
- .num_resources = ARRAY_SIZE(pxa27x_resource_pwm1),
-};
-#endif /* CONFIG_PXA27x || CONFIG_PXA3xx */
-
-#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
-const struct software_node pxa2xx_gpiochip_node = {
- .name = "gpio-pxa",
-};
-
-struct resource pxa_resource_gpio[] = {
- {
- .start = 0x40e00000,
- .end = 0x40e0ffff,
- .flags = IORESOURCE_MEM,
- }, {
- .start = IRQ_GPIO0,
- .end = IRQ_GPIO0,
- .name = "gpio0",
- .flags = IORESOURCE_IRQ,
- }, {
- .start = IRQ_GPIO1,
- .end = IRQ_GPIO1,
- .name = "gpio1",
- .flags = IORESOURCE_IRQ,
- }, {
- .start = IRQ_GPIO_2_x,
- .end = IRQ_GPIO_2_x,
- .name = "gpio_mux",
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct pxa_gpio_platform_data pxa2xx_gpio_info = {
- .irq_base = PXA_GPIO_TO_IRQ(0),
- .gpio_set_wake = gpio_set_wake,
-};
-
-struct platform_device pxa25x_device_gpio = {
- .name = "pxa25x-gpio",
- .id = -1,
- .num_resources = ARRAY_SIZE(pxa_resource_gpio),
- .resource = pxa_resource_gpio,
- .dev = {
- .platform_data = &pxa2xx_gpio_info,
- },
-};
-
-struct platform_device pxa27x_device_gpio = {
- .name = "pxa27x-gpio",
- .id = -1,
- .num_resources = ARRAY_SIZE(pxa_resource_gpio),
- .resource = pxa_resource_gpio,
- .dev = {
- .platform_data = &pxa2xx_gpio_info,
- },
-};
-#endif /* CONFIG_PXA25x || CONFIG_PXA27x */
-
-static struct resource pxa_dma_resource[] = {
- [0] = {
- .start = 0x40000000,
- .end = 0x4000ffff,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = IRQ_DMA,
- .end = IRQ_DMA,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static u64 pxadma_dmamask = 0xffffffffUL;
-
-static struct platform_device pxa2xx_pxa_dma = {
- .name = "pxa-dma",
- .id = 0,
- .dev = {
- .dma_mask = &pxadma_dmamask,
- .coherent_dma_mask = 0xffffffff,
- },
- .num_resources = ARRAY_SIZE(pxa_dma_resource),
- .resource = pxa_dma_resource,
-};
-
-void __init pxa2xx_set_dmac_info(struct mmp_dma_platdata *dma_pdata)
-{
- pxa_register_device(&pxa2xx_pxa_dma, dma_pdata);
-}
void __init pxa_register_wdt(unsigned int reset_status)
{
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h
deleted file mode 100644
index 72c556ff67db..000000000000
--- a/arch/arm/mach-pxa/devices.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#define PDMA_FILTER_PARAM(_prio, _requestor) (&(struct pxad_param) { \
- .prio = PXAD_PRIO_##_prio, .drcmr = _requestor })
-struct mmp_dma_platdata;
-
-extern struct platform_device pxa_device_pmu;
-extern struct platform_device pxa3xx_device_mci2;
-extern struct platform_device pxa3xx_device_mci3;
-extern struct platform_device pxa25x_device_udc;
-extern struct platform_device pxa27x_device_udc;
-extern struct platform_device pxa_device_fb;
-extern struct platform_device pxa_device_ffuart;
-extern struct platform_device pxa_device_btuart;
-extern struct platform_device pxa_device_stuart;
-extern struct platform_device pxa_device_hwuart;
-extern struct platform_device pxa_device_i2c;
-extern struct platform_device pxa_device_i2s;
-extern struct platform_device sa1100_device_rtc;
-extern struct platform_device pxa_device_rtc;
-extern struct platform_device pxa_device_ac97;
-
-extern struct platform_device pxa27x_device_i2c_power;
-extern struct platform_device pxa27x_device_ohci;
-extern struct platform_device pxa27x_device_keypad;
-
-extern struct platform_device pxa25x_device_ssp;
-extern struct platform_device pxa25x_device_nssp;
-extern struct platform_device pxa25x_device_assp;
-extern struct platform_device pxa27x_device_ssp1;
-extern struct platform_device pxa27x_device_ssp2;
-extern struct platform_device pxa27x_device_ssp3;
-extern struct platform_device pxa3xx_device_ssp1;
-extern struct platform_device pxa3xx_device_ssp2;
-extern struct platform_device pxa3xx_device_ssp3;
-extern struct platform_device pxa3xx_device_ssp4;
-
-extern struct platform_device pxa25x_device_pwm0;
-extern struct platform_device pxa25x_device_pwm1;
-extern struct platform_device pxa27x_device_pwm0;
-extern struct platform_device pxa27x_device_pwm1;
-
-extern struct platform_device pxa3xx_device_nand;
-extern struct platform_device pxa3xx_device_i2c_power;
-
-extern struct platform_device pxa3xx_device_gcu;
-
-extern struct platform_device pxa_device_asoc_platform;
-extern struct platform_device pxa_device_asoc_ssp1;
-extern struct platform_device pxa_device_asoc_ssp2;
-extern struct platform_device pxa_device_asoc_ssp3;
-extern struct platform_device pxa_device_asoc_ssp4;
-
-extern struct platform_device pxa25x_device_gpio;
-extern struct platform_device pxa27x_device_gpio;
-
-extern const struct software_node pxa2xx_gpiochip_node;
-
-void __init pxa_register_device(struct platform_device *dev, void *data);
-void __init pxa2xx_set_dmac_info(struct mmp_dma_platdata *dma_pdata);
-
-struct i2c_pxa_platform_data;
-extern void pxa_set_i2c_info(struct i2c_pxa_platform_data *info);
-#ifdef CONFIG_PXA27x
-extern void pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info);
-#endif
-#ifdef CONFIG_PXA3xx
-extern void pxa3xx_set_i2c_power_info(struct i2c_pxa_platform_data *info);
-#endif
diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h
index caad4fca8de3..239d1b4119cc 100644
--- a/arch/arm/mach-pxa/generic.h
+++ b/arch/arm/mach-pxa/generic.h
@@ -38,11 +38,6 @@ extern struct syscore pxa_irq_syscore;
extern struct syscore pxa2xx_mfp_syscore;
extern struct syscore pxa3xx_mfp_syscore;
-void __init pxa_set_ffuart_info(void *info);
-void __init pxa_set_btuart_info(void *info);
-void __init pxa_set_stuart_info(void *info);
-void __init pxa_set_hwuart_info(void *info);
-
void pxa_restart(enum reboot_mode, const char *);
#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c
deleted file mode 100644
index 7ab0cb015d1b..000000000000
--- a/arch/arm/mach-pxa/gumstix.c
+++ /dev/null
@@ -1,237 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * linux/arch/arm/mach-pxa/gumstix.c
- *
- * Support for the Gumstix motherboards.
- *
- * Original Author: Craig Hughes
- * Created: Feb 14, 2008
- * Copyright: Craig Hughes
- *
- * Implemented based on lubbock.c by Nicolas Pitre and code from Craig
- * Hughes
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/interrupt.h>
-#include <linux/delay.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/gpio/machine.h>
-#include <linux/gpio/property.h>
-#include <linux/gpio/legacy.h>
-#include <linux/err.h>
-#include <linux/clk.h>
-
-#include <asm/setup.h>
-#include <asm/page.h>
-#include <asm/mach-types.h>
-#include <asm/irq.h>
-#include <linux/sizes.h>
-
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/mach/irq.h>
-#include <asm/mach/flash.h>
-
-#include "pxa25x.h"
-#include <linux/platform_data/mmc-pxamci.h>
-#include "gumstix.h"
-#include "devices.h"
-
-#include "generic.h"
-
-static struct resource flash_resource = {
- .start = 0x00000000,
- .end = SZ_64M - 1,
- .flags = IORESOURCE_MEM,
-};
-
-static struct mtd_partition gumstix_partitions[] = {
- {
- .name = "Bootloader",
- .size = 0x00040000,
- .offset = 0,
- .mask_flags = MTD_WRITEABLE /* force read-only */
- } , {
- .name = "rootfs",
- .size = MTDPART_SIZ_FULL,
- .offset = MTDPART_OFS_APPEND
- }
-};
-
-static struct flash_platform_data gumstix_flash_data = {
- .map_name = "cfi_probe",
- .parts = gumstix_partitions,
- .nr_parts = ARRAY_SIZE(gumstix_partitions),
- .width = 2,
-};
-
-static struct platform_device gumstix_flash_device = {
- .name = "pxa2xx-flash",
- .id = 0,
- .dev = {
- .platform_data = &gumstix_flash_data,
- },
- .resource = &flash_resource,
- .num_resources = 1,
-};
-
-static struct platform_device *devices[] __initdata = {
- &gumstix_flash_device,
-};
-
-#ifdef CONFIG_MMC_PXA
-static struct pxamci_platform_data gumstix_mci_platform_data = {
- .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
-};
-
-static void __init gumstix_mmc_init(void)
-{
- pxa_set_mci_info(&gumstix_mci_platform_data, NULL);
-}
-#else
-static void __init gumstix_mmc_init(void)
-{
- pr_debug("Gumstix mmc disabled\n");
-}
-#endif
-
-#if IS_ENABLED(CONFIG_USB_PXA25X)
-static const struct property_entry gumstix_vbus_props[] __initconst = {
- PROPERTY_ENTRY_GPIO("vbus-gpios", &pxa2xx_gpiochip_node,
- GPIO_GUMSTIX_USB_GPIOn, GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("pullup-gpios", &pxa2xx_gpiochip_node,
- GPIO_GUMSTIX_USB_GPIOx, GPIO_ACTIVE_HIGH),
- { }
-};
-
-static const struct platform_device_info gumstix_gpio_vbus_info __initconst = {
- .name = "gpio-vbus",
- .id = PLATFORM_DEVID_NONE,
- .properties = gumstix_vbus_props,
-};
-
-static void __init gumstix_udc_init(void)
-{
- platform_device_register_full(&gumstix_gpio_vbus_info);
-}
-#else
-static void gumstix_udc_init(void)
-{
- pr_debug("Gumstix udc is disabled\n");
-}
-#endif
-
-#ifdef CONFIG_BT
-/* Normally, the bootloader would have enabled this 32kHz clock but many
-** boards still have u-boot 1.1.4 so we check if it has been turned on and
-** if not, we turn it on with a warning message. */
-static void gumstix_setup_bt_clock(void)
-{
- int timeout = 500;
-
- if (!(readl(OSCC) & OSCC_OOK))
- pr_warn("32kHz clock was not on. Bootloader may need to be updated\n");
- else
- return;
-
- writel(readl(OSCC) | OSCC_OON, OSCC);
- do {
- if (readl(OSCC) & OSCC_OOK)
- break;
- udelay(1);
- } while (--timeout);
- if (!timeout)
- pr_err("Failed to start 32kHz clock\n");
-}
-
-static void __init gumstix_bluetooth_init(void)
-{
- int err;
-
- gumstix_setup_bt_clock();
-
- err = gpio_request(GPIO_GUMSTIX_BTRESET, "BTRST");
- if (err) {
- pr_err("gumstix: failed request gpio for bluetooth reset\n");
- return;
- }
-
- err = gpio_direction_output(GPIO_GUMSTIX_BTRESET, 1);
- if (err) {
- pr_err("gumstix: can't reset bluetooth\n");
- return;
- }
- gpio_set_value(GPIO_GUMSTIX_BTRESET, 0);
- udelay(100);
- gpio_set_value(GPIO_GUMSTIX_BTRESET, 1);
-}
-#else
-static void gumstix_bluetooth_init(void)
-{
- pr_debug("Gumstix Bluetooth is disabled\n");
-}
-#endif
-
-static unsigned long gumstix_pin_config[] __initdata = {
- GPIO12_32KHz,
- /* BTUART */
- GPIO42_HWUART_RXD,
- GPIO43_HWUART_TXD,
- GPIO44_HWUART_CTS,
- GPIO45_HWUART_RTS,
- /* MMC */
- GPIO6_MMC_CLK,
- GPIO53_MMC_CLK,
- GPIO8_MMC_CS0,
-};
-
-int __attribute__((weak)) am200_init(void)
-{
- return 0;
-}
-
-int __attribute__((weak)) am300_init(void)
-{
- return 0;
-}
-
-static void __init carrier_board_init(void)
-{
- /*
- * put carrier/expansion board init here if
- * they cannot be detected programatically
- */
- am200_init();
- am300_init();
-}
-
-static void __init gumstix_init(void)
-{
- pxa2xx_mfp_config(ARRAY_AND_SIZE(gumstix_pin_config));
-
- pxa_set_ffuart_info(NULL);
- pxa_set_btuart_info(NULL);
- pxa_set_stuart_info(NULL);
- pxa_set_hwuart_info(NULL);
-
- gumstix_bluetooth_init();
- gumstix_udc_init();
- gumstix_mmc_init();
- (void) platform_add_devices(devices, ARRAY_SIZE(devices));
- carrier_board_init();
-}
-
-MACHINE_START(GUMSTIX, "Gumstix")
- .atag_offset = 0x100, /* match u-boot bi_boot_params */
- .map_io = pxa25x_map_io,
- .nr_irqs = PXA_NR_IRQS,
- .init_irq = pxa25x_init_irq,
- .init_time = pxa_timer_init,
- .init_machine = gumstix_init,
- .restart = pxa_restart,
-MACHINE_END
diff --git a/arch/arm/mach-pxa/gumstix.h b/arch/arm/mach-pxa/gumstix.h
deleted file mode 100644
index 9005b3c0aabd..000000000000
--- a/arch/arm/mach-pxa/gumstix.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * arch/arm/mach-pxa/include/mach/gumstix.h
- */
-
-#include "irqs.h" /* PXA_GPIO_TO_IRQ */
-
-/* BTRESET - Reset line to Bluetooth module, active low signal. */
-#define GPIO_GUMSTIX_BTRESET 7
-#define GPIO_GUMSTIX_BTRESET_MD (GPIO_GUMSTIX_BTRESET | GPIO_OUT)
-
-
-/*
-GPIOn - Input from MAX823 (or equiv), normalizing USB +5V into a clean
-interrupt signal for determining cable presence. On the gumstix F,
-this moves to GPIO17 and GPIO37. */
-
-/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
-has detected a cable insertion; driven low otherwise. */
-
-#define GPIO_GUMSTIX_USB_GPIOn 35
-#define GPIO_GUMSTIX_USB_GPIOx 41
-
-/* usb state change */
-#define GUMSTIX_USB_INTR_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_USB_GPIOn)
-
-#define GPIO_GUMSTIX_USB_GPIOn_MD (GPIO_GUMSTIX_USB_GPIOn | GPIO_IN)
-#define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT)
-#define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN)
-
-/*
- * SD/MMC definitions
- */
-#define GUMSTIX_GPIO_nSD_WP 22 /* SD Write Protect */
-#define GUMSTIX_GPIO_nSD_DETECT 11 /* MMC/SD Card Detect */
-#define GUMSTIX_IRQ_GPIO_nSD_DETECT PXA_GPIO_TO_IRQ(GUMSTIX_GPIO_nSD_DETECT)
-
-/*
- * SMC Ethernet definitions
- * ETH_RST provides a hardware reset line to the ethernet chip
- * ETH is the IRQ line in from the ethernet chip to the PXA
- */
-#define GPIO_GUMSTIX_ETH0_RST 80
-#define GPIO_GUMSTIX_ETH0_RST_MD (GPIO_GUMSTIX_ETH0_RST | GPIO_OUT)
-#define GPIO_GUMSTIX_ETH1_RST 52
-#define GPIO_GUMSTIX_ETH1_RST_MD (GPIO_GUMSTIX_ETH1_RST | GPIO_OUT)
-
-#define GPIO_GUMSTIX_ETH0 36
-#define GPIO_GUMSTIX_ETH0_MD (GPIO_GUMSTIX_ETH0 | GPIO_IN)
-#define GUMSTIX_ETH0_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH0)
-#define GPIO_GUMSTIX_ETH1 27
-#define GPIO_GUMSTIX_ETH1_MD (GPIO_GUMSTIX_ETH1 | GPIO_IN)
-#define GUMSTIX_ETH1_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH1)
-
-
-/* CF reset line */
-#define GPIO8_RESET 8
-
-/* CF slot 0 */
-#define GPIO4_nBVD1 4
-#define GPIO4_nSTSCHG GPIO4_nBVD1
-#define GPIO11_nCD 11
-#define GPIO26_PRDY_nBSY 26
-#define GUMSTIX_S0_nSTSCHG_IRQ PXA_GPIO_TO_IRQ(GPIO4_nSTSCHG)
-#define GUMSTIX_S0_nCD_IRQ PXA_GPIO_TO_IRQ(GPIO11_nCD)
-#define GUMSTIX_S0_PRDY_nBSY_IRQ PXA_GPIO_TO_IRQ(GPIO26_PRDY_nBSY)
-
-/* CF slot 1 */
-#define GPIO18_nBVD1 18
-#define GPIO18_nSTSCHG GPIO18_nBVD1
-#define GPIO36_nCD 36
-#define GPIO27_PRDY_nBSY 27
-#define GUMSTIX_S1_nSTSCHG_IRQ PXA_GPIO_TO_IRQ(GPIO18_nSTSCHG)
-#define GUMSTIX_S1_nCD_IRQ PXA_GPIO_TO_IRQ(GPIO36_nCD)
-#define GUMSTIX_S1_PRDY_nBSY_IRQ PXA_GPIO_TO_IRQ(GPIO27_PRDY_nBSY)
-
-/* CF GPIO line modes */
-#define GPIO4_nSTSCHG_MD (GPIO4_nSTSCHG | GPIO_IN)
-#define GPIO8_RESET_MD (GPIO8_RESET | GPIO_OUT)
-#define GPIO11_nCD_MD (GPIO11_nCD | GPIO_IN)
-#define GPIO18_nSTSCHG_MD (GPIO18_nSTSCHG | GPIO_IN)
-#define GPIO26_PRDY_nBSY_MD (GPIO26_PRDY_nBSY | GPIO_IN)
-#define GPIO27_PRDY_nBSY_MD (GPIO27_PRDY_nBSY | GPIO_IN)
-#define GPIO36_nCD_MD (GPIO36_nCD | GPIO_IN)
-
-/* for expansion boards that can't be programatically detected */
-extern int am200_init(void);
-extern int am300_init(void);
-
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
index a273f0af095e..de6a306cf0e2 100644
--- a/arch/arm/mach-pxa/pxa25x.c
+++ b/arch/arm/mach-pxa/pxa25x.c
@@ -25,7 +25,6 @@
#include <linux/syscore_ops.h>
#include <linux/irq.h>
#include <linux/irqchip.h>
-#include <linux/platform_data/mmp_dma.h>
#include <linux/soc/pxa/cpu.h>
#include <linux/soc/pxa/smemc.h>
@@ -39,7 +38,6 @@
#include "smemc.h"
#include "generic.h"
-#include "devices.h"
/*
* Various clock factors driven by the CCCR register.
@@ -178,53 +176,6 @@ void __init pxa25x_map_io(void)
pxa25x_get_clk_frequency_khz(1);
}
-static struct platform_device *pxa25x_devices[] __initdata = {
- &pxa25x_device_gpio,
- &pxa25x_device_udc,
- &pxa_device_pmu,
- &pxa_device_i2s,
- &sa1100_device_rtc,
- &pxa25x_device_ssp,
- &pxa25x_device_nssp,
- &pxa25x_device_assp,
- &pxa25x_device_pwm0,
- &pxa25x_device_pwm1,
- &pxa_device_asoc_platform,
-};
-
-static const struct dma_slave_map pxa25x_slave_map[] = {
- /* PXA25x, PXA27x and PXA3xx common entries */
- { "pxa2xx-ac97", "pcm_pcm_mic_mono", PDMA_FILTER_PARAM(LOWEST, 8) },
- { "pxa2xx-ac97", "pcm_pcm_aux_mono_in", PDMA_FILTER_PARAM(LOWEST, 9) },
- { "pxa2xx-ac97", "pcm_pcm_aux_mono_out",
- PDMA_FILTER_PARAM(LOWEST, 10) },
- { "pxa2xx-ac97", "pcm_pcm_stereo_in", PDMA_FILTER_PARAM(LOWEST, 11) },
- { "pxa2xx-ac97", "pcm_pcm_stereo_out", PDMA_FILTER_PARAM(LOWEST, 12) },
- { "pxa-ssp-dai.1", "rx", PDMA_FILTER_PARAM(LOWEST, 13) },
- { "pxa-ssp-dai.1", "tx", PDMA_FILTER_PARAM(LOWEST, 14) },
- { "pxa-ssp-dai.2", "rx", PDMA_FILTER_PARAM(LOWEST, 15) },
- { "pxa-ssp-dai.2", "tx", PDMA_FILTER_PARAM(LOWEST, 16) },
- { "pxa2xx-ir", "rx", PDMA_FILTER_PARAM(LOWEST, 17) },
- { "pxa2xx-ir", "tx", PDMA_FILTER_PARAM(LOWEST, 18) },
- { "pxa2xx-mci.0", "rx", PDMA_FILTER_PARAM(LOWEST, 21) },
- { "pxa2xx-mci.0", "tx", PDMA_FILTER_PARAM(LOWEST, 22) },
-
- /* PXA25x specific map */
- { "pxa25x-ssp.0", "rx", PDMA_FILTER_PARAM(LOWEST, 13) },
- { "pxa25x-ssp.0", "tx", PDMA_FILTER_PARAM(LOWEST, 14) },
- { "pxa25x-nssp.1", "rx", PDMA_FILTER_PARAM(LOWEST, 15) },
- { "pxa25x-nssp.1", "tx", PDMA_FILTER_PARAM(LOWEST, 16) },
- { "pxa25x-nssp.2", "rx", PDMA_FILTER_PARAM(LOWEST, 23) },
- { "pxa25x-nssp.2", "tx", PDMA_FILTER_PARAM(LOWEST, 24) },
-};
-
-static struct mmp_dma_platdata pxa25x_dma_pdata = {
- .dma_channels = 16,
- .nb_requestors = 40,
- .slave_map = pxa25x_slave_map,
- .slave_map_cnt = ARRAY_SIZE(pxa25x_slave_map),
-};
-
static int __init pxa25x_init(void)
{
int ret = 0;
@@ -237,16 +188,6 @@ static int __init pxa25x_init(void)
register_syscore(&pxa_irq_syscore);
register_syscore(&pxa2xx_mfp_syscore);
-
- if (!of_have_populated_dt()) {
- software_node_register(&pxa2xx_gpiochip_node);
- pxa25x_device_gpio.dev.fwnode = software_node_fwnode(
- &pxa2xx_gpiochip_node);
-
- pxa2xx_set_dmac_info(&pxa25x_dma_pdata);
- ret = platform_add_devices(pxa25x_devices,
- ARRAY_SIZE(pxa25x_devices));
- }
}
return ret;
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index 814e0a12f38a..617af225628b 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -21,8 +21,6 @@
#include <linux/syscore_ops.h>
#include <linux/io.h>
#include <linux/irq.h>
-#include <linux/platform_data/i2c-pxa.h>
-#include <linux/platform_data/mmp_dma.h>
#include <linux/soc/pxa/cpu.h>
#include <linux/soc/pxa/smemc.h>
@@ -33,14 +31,12 @@
#include "pxa27x.h"
#include "reset.h"
#include <linux/platform_data/pxa2xx_udc.h>
-#include <linux/platform_data/usb-ohci-pxa27x.h>
#include <linux/platform_data/asoc-pxa.h>
#include "pm.h"
#include "addr-map.h"
#include "smemc.h"
#include "generic.h"
-#include "devices.h"
#include <linux/clk-provider.h>
#include <linux/clkdev.h>
@@ -272,90 +268,17 @@ void __init pxa27x_map_io(void)
pxa27x_get_clk_frequency_khz(1);
}
-/*
- * device registration specific to PXA27x.
- */
-void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info)
-{
- local_irq_disable();
- PCFR |= PCFR_PI2CEN;
- local_irq_enable();
- pxa_register_device(&pxa27x_device_i2c_power, info);
-}
-
-static struct platform_device *devices[] __initdata = {
- &pxa27x_device_gpio,
- &pxa27x_device_udc,
- &pxa_device_pmu,
- &pxa_device_i2s,
- &pxa_device_asoc_ssp1,
- &pxa_device_asoc_ssp2,
- &pxa_device_asoc_ssp3,
- &pxa_device_asoc_platform,
- &pxa_device_rtc,
- &pxa27x_device_ssp1,
- &pxa27x_device_ssp2,
- &pxa27x_device_ssp3,
- &pxa27x_device_pwm0,
- &pxa27x_device_pwm1,
-};
-
-static const struct dma_slave_map pxa27x_slave_map[] = {
- /* PXA25x, PXA27x and PXA3xx common entries */
- { "pxa2xx-ac97", "pcm_pcm_mic_mono", PDMA_FILTER_PARAM(LOWEST, 8) },
- { "pxa2xx-ac97", "pcm_pcm_aux_mono_in", PDMA_FILTER_PARAM(LOWEST, 9) },
- { "pxa2xx-ac97", "pcm_pcm_aux_mono_out",
- PDMA_FILTER_PARAM(LOWEST, 10) },
- { "pxa2xx-ac97", "pcm_pcm_stereo_in", PDMA_FILTER_PARAM(LOWEST, 11) },
- { "pxa2xx-ac97", "pcm_pcm_stereo_out", PDMA_FILTER_PARAM(LOWEST, 12) },
- { "pxa-ssp-dai.0", "rx", PDMA_FILTER_PARAM(LOWEST, 13) },
- { "pxa-ssp-dai.0", "tx", PDMA_FILTER_PARAM(LOWEST, 14) },
- { "pxa-ssp-dai.1", "rx", PDMA_FILTER_PARAM(LOWEST, 15) },
- { "pxa-ssp-dai.1", "tx", PDMA_FILTER_PARAM(LOWEST, 16) },
- { "pxa2xx-ir", "rx", PDMA_FILTER_PARAM(LOWEST, 17) },
- { "pxa2xx-ir", "tx", PDMA_FILTER_PARAM(LOWEST, 18) },
- { "pxa2xx-mci.0", "rx", PDMA_FILTER_PARAM(LOWEST, 21) },
- { "pxa2xx-mci.0", "tx", PDMA_FILTER_PARAM(LOWEST, 22) },
- { "pxa-ssp-dai.2", "rx", PDMA_FILTER_PARAM(LOWEST, 66) },
- { "pxa-ssp-dai.2", "tx", PDMA_FILTER_PARAM(LOWEST, 67) },
-
- /* PXA27x specific map */
- { "pxa2xx-i2s", "rx", PDMA_FILTER_PARAM(LOWEST, 2) },
- { "pxa2xx-i2s", "tx", PDMA_FILTER_PARAM(LOWEST, 3) },
- { "pxa27x-camera.0", "CI_Y", PDMA_FILTER_PARAM(HIGHEST, 68) },
- { "pxa27x-camera.0", "CI_U", PDMA_FILTER_PARAM(HIGHEST, 69) },
- { "pxa27x-camera.0", "CI_V", PDMA_FILTER_PARAM(HIGHEST, 70) },
-};
-
-static struct mmp_dma_platdata pxa27x_dma_pdata = {
- .dma_channels = 32,
- .nb_requestors = 75,
- .slave_map = pxa27x_slave_map,
- .slave_map_cnt = ARRAY_SIZE(pxa27x_slave_map),
-};
-
static int __init pxa27x_init(void)
{
int ret = 0;
if (cpu_is_pxa27x()) {
-
pxa_register_wdt(RCSR);
pxa27x_init_pm();
register_syscore(&pxa_irq_syscore);
register_syscore(&pxa2xx_mfp_syscore);
-
- if (!of_have_populated_dt()) {
- software_node_register(&pxa2xx_gpiochip_node);
- pxa27x_device_gpio.dev.fwnode = software_node_fwnode(
- &pxa2xx_gpiochip_node);
-
- pxa2xx_set_dmac_info(&pxa27x_dma_pdata);
- ret = platform_add_devices(devices,
- ARRAY_SIZE(devices));
- }
}
return ret;
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c
index f77ec118d5b9..0022bf235114 100644
--- a/arch/arm/mach-pxa/pxa300.c
+++ b/arch/arm/mach-pxa/pxa300.c
@@ -19,7 +19,6 @@
#include "pxa300.h"
#include "generic.h"
-#include "devices.h"
static struct mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c
index e372e6c118de..2e84afd94467 100644
--- a/arch/arm/mach-pxa/pxa320.c
+++ b/arch/arm/mach-pxa/pxa320.c
@@ -19,7 +19,6 @@
#include "pxa320.h"
#include "generic.h"
-#include "devices.h"
static struct mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 06c578ea658e..46f4efdfb514 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -10,11 +10,9 @@
* initial version
*/
#include <linux/dmaengine.h>
-#include <linux/dma/pxa-dma.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
-#include <linux/gpio-pxa.h>
#include <linux/pm.h>
#include <linux/platform_device.h>
#include <linux/irq.h>
@@ -22,8 +20,6 @@
#include <linux/io.h>
#include <linux/of.h>
#include <linux/syscore_ops.h>
-#include <linux/platform_data/i2c-pxa.h>
-#include <linux/platform_data/mmp_dma.h>
#include <linux/soc/pxa/cpu.h>
#include <linux/clk/pxa.h>
@@ -31,14 +27,12 @@
#include <asm/suspend.h>
#include "pxa3xx-regs.h"
#include "reset.h"
-#include <linux/platform_data/usb-ohci-pxa27x.h>
#include "pm.h"
#include "addr-map.h"
#include "smemc.h"
#include "irqs.h"
#include "generic.h"
-#include "devices.h"
#define PECR_IE(n) ((1 << ((n) * 2)) << 28)
#define PECR_IS(n) ((1 << ((n) * 2)) << 29)
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c
deleted file mode 100644
index a611eea70e5a..000000000000
--- a/arch/arm/mach-pxa/sharpsl_pm.c
+++ /dev/null
@@ -1,941 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Battery and Power Management code for the Sharp SL-C7xx and SL-Cxx00
- * series of PDAs
- *
- * Copyright (c) 2004-2005 Richard Purdie
- *
- * Based on code written by Sharp for 2.4 kernels
- */
-
-#undef DEBUG
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/interrupt.h>
-#include <linux/platform_device.h>
-#include <linux/apm-emulation.h>
-#include <linux/timer.h>
-#include <linux/delay.h>
-#include <linux/leds.h>
-#include <linux/suspend.h>
-#include <linux/gpio/legacy.h>
-#include <linux/io.h>
-
-#include <asm/mach-types.h>
-#include "pm.h"
-#include "pxa2xx-regs.h"
-#include "regs-rtc.h"
-#include "sharpsl_pm.h"
-
-/*
- * Constants
- */
-#define SHARPSL_CHARGE_ON_TIME_INTERVAL (secs_to_jiffies(60))
-#define SHARPSL_CHARGE_FINISH_TIME (secs_to_jiffies(10*60))
-#define SHARPSL_BATCHK_TIME (secs_to_jiffies(15))
-#define SHARPSL_BATCHK_TIME_SUSPEND (60*10) /* 10 min */
-
-#define SHARPSL_WAIT_CO_TIME 15 /* 15 sec */
-#define SHARPSL_WAIT_DISCHARGE_ON 100 /* 100 msec */
-#define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP 10 /* 10 msec */
-#define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 10 /* 10 msec */
-#define SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN 10 /* 10 msec */
-#define SHARPSL_CHARGE_WAIT_TIME 15 /* 15 msec */
-#define SHARPSL_CHARGE_CO_CHECK_TIME 5 /* 5 msec */
-#define SHARPSL_CHARGE_RETRY_CNT 1 /* eqv. 10 min */
-
-/*
- * Prototypes
- */
-#ifdef CONFIG_PM
-static int sharpsl_off_charge_battery(void);
-static int sharpsl_check_battery_voltage(void);
-#endif
-static int sharpsl_check_battery_temp(void);
-static int sharpsl_ac_check(void);
-static int sharpsl_average_value(int ad);
-static void sharpsl_average_clear(void);
-static void sharpsl_charge_toggle(struct work_struct *private_);
-static void sharpsl_battery_thread(struct work_struct *private_);
-
-
-/*
- * Variables
- */
-struct sharpsl_pm_status sharpsl_pm;
-static DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle);
-static DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread);
-DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
-
-
-
-struct battery_thresh sharpsl_battery_levels_acin[] = {
- { 213, 100},
- { 212, 98},
- { 211, 95},
- { 210, 93},
- { 209, 90},
- { 208, 88},
- { 207, 85},
- { 206, 83},
- { 205, 80},
- { 204, 78},
- { 203, 75},
- { 202, 73},
- { 201, 70},
- { 200, 68},
- { 199, 65},
- { 198, 63},
- { 197, 60},
- { 196, 58},
- { 195, 55},
- { 194, 53},
- { 193, 50},
- { 192, 48},
- { 192, 45},
- { 191, 43},
- { 191, 40},
- { 190, 38},
- { 190, 35},
- { 189, 33},
- { 188, 30},
- { 187, 28},
- { 186, 25},
- { 185, 23},
- { 184, 20},
- { 183, 18},
- { 182, 15},
- { 181, 13},
- { 180, 10},
- { 179, 8},
- { 178, 5},
- { 0, 0},
-};
-
-struct battery_thresh sharpsl_battery_levels_noac[] = {
- { 213, 100},
- { 212, 98},
- { 211, 95},
- { 210, 93},
- { 209, 90},
- { 208, 88},
- { 207, 85},
- { 206, 83},
- { 205, 80},
- { 204, 78},
- { 203, 75},
- { 202, 73},
- { 201, 70},
- { 200, 68},
- { 199, 65},
- { 198, 63},
- { 197, 60},
- { 196, 58},
- { 195, 55},
- { 194, 53},
- { 193, 50},
- { 192, 48},
- { 191, 45},
- { 190, 43},
- { 189, 40},
- { 188, 38},
- { 187, 35},
- { 186, 33},
- { 185, 30},
- { 184, 28},
- { 183, 25},
- { 182, 23},
- { 181, 20},
- { 180, 18},
- { 179, 15},
- { 178, 13},
- { 177, 10},
- { 176, 8},
- { 175, 5},
- { 0, 0},
-};
-
-/* MAX1111 Commands */
-#define MAXCTRL_PD0 (1u << 0)
-#define MAXCTRL_PD1 (1u << 1)
-#define MAXCTRL_SGL (1u << 2)
-#define MAXCTRL_UNI (1u << 3)
-#define MAXCTRL_SEL_SH 4
-#define MAXCTRL_STR (1u << 7)
-
-extern int max1111_read_channel(int);
-/*
- * Read MAX1111 ADC
- */
-int sharpsl_pm_pxa_read_max1111(int channel)
-{
- /* max1111 accepts channels from 0-3, however,
- * it is encoded from 0-7 here in the code.
- */
- return max1111_read_channel(channel >> 1);
-}
-
-static int get_percentage(int voltage)
-{
- int i = sharpsl_pm.machinfo->bat_levels - 1;
- int bl_status = sharpsl_pm.machinfo->backlight_get_status ? sharpsl_pm.machinfo->backlight_get_status() : 0;
- struct battery_thresh *thresh;
-
- if (sharpsl_pm.charge_mode == CHRG_ON)
- thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_acin_bl : sharpsl_pm.machinfo->bat_levels_acin;
- else
- thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_noac_bl : sharpsl_pm.machinfo->bat_levels_noac;
-
- while (i > 0 && (voltage > thresh[i].voltage))
- i--;
-
- return thresh[i].percentage;
-}
-
-static int get_apm_status(int voltage)
-{
- int low_thresh, high_thresh;
-
- if (sharpsl_pm.charge_mode == CHRG_ON) {
- high_thresh = sharpsl_pm.machinfo->status_high_acin;
- low_thresh = sharpsl_pm.machinfo->status_low_acin;
- } else {
- high_thresh = sharpsl_pm.machinfo->status_high_noac;
- low_thresh = sharpsl_pm.machinfo->status_low_noac;
- }
-
- if (voltage >= high_thresh)
- return APM_BATTERY_STATUS_HIGH;
- if (voltage >= low_thresh)
- return APM_BATTERY_STATUS_LOW;
- return APM_BATTERY_STATUS_CRITICAL;
-}
-
-void sharpsl_battery_kick(void)
-{
- schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125));
-}
-
-static void sharpsl_battery_thread(struct work_struct *private_)
-{
- int voltage, percent, apm_status, i;
-
- if (!sharpsl_pm.machinfo)
- return;
-
- sharpsl_pm.battstat.ac_status = (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN) ? APM_AC_ONLINE : APM_AC_OFFLINE);
-
- /* Corgi cannot confirm when battery fully charged so periodically kick! */
- if (!sharpsl_pm.machinfo->batfull_irq && (sharpsl_pm.charge_mode == CHRG_ON)
- && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL))
- schedule_delayed_work(&toggle_charger, 0);
-
- for (i = 0; i < 5; i++) {
- voltage = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT);
- if (voltage > 0)
- break;
- }
- if (voltage <= 0) {
- voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage;
- dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n");
- }
-
- voltage = sharpsl_average_value(voltage);
- apm_status = get_apm_status(voltage);
- percent = get_percentage(voltage);
-
- /* At low battery voltages, the voltage has a tendency to start
- creeping back up so we try to avoid this here */
- if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE)
- || (apm_status == APM_BATTERY_STATUS_HIGH)
- || percent <= sharpsl_pm.battstat.mainbat_percent) {
- sharpsl_pm.battstat.mainbat_voltage = voltage;
- sharpsl_pm.battstat.mainbat_status = apm_status;
- sharpsl_pm.battstat.mainbat_percent = percent;
- }
-
- dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %ld\n", voltage,
- sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies);
-
- /* Suspend if critical battery level */
- if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
- && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
- && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) {
- sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
- dev_err(sharpsl_pm.dev, "Fatal Off\n");
- apm_queue_event(APM_CRITICAL_SUSPEND);
- }
-
- schedule_delayed_work(&sharpsl_bat, SHARPSL_BATCHK_TIME);
-}
-
-void sharpsl_pm_led(int val)
-{
- if (val == SHARPSL_LED_ERROR) {
- dev_err(sharpsl_pm.dev, "Charging Error!\n");
- } else if (val == SHARPSL_LED_ON) {
- dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
- led_trigger_event(sharpsl_charge_led_trigger, LED_FULL);
- } else {
- dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
- led_trigger_event(sharpsl_charge_led_trigger, LED_OFF);
- }
-}
-
-static void sharpsl_charge_on(void)
-{
- dev_dbg(sharpsl_pm.dev, "Turning Charger On\n");
-
- sharpsl_pm.full_count = 0;
- sharpsl_pm.charge_mode = CHRG_ON;
- schedule_delayed_work(&toggle_charger, msecs_to_jiffies(250));
- schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(500));
-}
-
-static void sharpsl_charge_off(void)
-{
- dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n");
-
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm_led(SHARPSL_LED_OFF);
- sharpsl_pm.charge_mode = CHRG_OFF;
-
- schedule_delayed_work(&sharpsl_bat, 0);
-}
-
-static void sharpsl_charge_error(void)
-{
- sharpsl_pm_led(SHARPSL_LED_ERROR);
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm.charge_mode = CHRG_ERROR;
-}
-
-static void sharpsl_charge_toggle(struct work_struct *private_)
-{
- dev_dbg(sharpsl_pm.dev, "Toggling Charger at time: %lx\n", jiffies);
-
- if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
- sharpsl_charge_off();
- return;
- } else if ((sharpsl_check_battery_temp() < 0) || (sharpsl_ac_check() < 0)) {
- sharpsl_charge_error();
- return;
- }
-
- sharpsl_pm_led(SHARPSL_LED_ON);
- sharpsl_pm.machinfo->charge(0);
- mdelay(SHARPSL_CHARGE_WAIT_TIME);
- sharpsl_pm.machinfo->charge(1);
-
- sharpsl_pm.charge_start_time = jiffies;
-}
-
-static void sharpsl_ac_timer(struct timer_list *unused)
-{
- int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
-
- dev_dbg(sharpsl_pm.dev, "AC Status: %d\n", acin);
-
- sharpsl_average_clear();
- if (acin && (sharpsl_pm.charge_mode != CHRG_ON))
- sharpsl_charge_on();
- else if (sharpsl_pm.charge_mode == CHRG_ON)
- sharpsl_charge_off();
-
- schedule_delayed_work(&sharpsl_bat, 0);
-}
-
-
-static irqreturn_t sharpsl_ac_isr(int irq, void *dev_id)
-{
- /* Delay the event slightly to debounce */
- /* Must be a smaller delay than the chrg_full_isr below */
- mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
-
- return IRQ_HANDLED;
-}
-
-static void sharpsl_chrg_full_timer(struct timer_list *unused)
-{
- dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies);
-
- sharpsl_pm.full_count++;
-
- if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
- dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n");
- if (sharpsl_pm.charge_mode == CHRG_ON)
- sharpsl_charge_off();
- } else if (sharpsl_pm.full_count < 2) {
- dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n");
- schedule_delayed_work(&toggle_charger, 0);
- } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) {
- dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n");
- schedule_delayed_work(&toggle_charger, 0);
- } else {
- sharpsl_charge_off();
- sharpsl_pm.charge_mode = CHRG_DONE;
- dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n");
- }
-}
-
-/* Charging Finished Interrupt (Not present on Corgi) */
-/* Can trigger at the same time as an AC status change so
- delay until after that has been processed */
-static irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id)
-{
- if (sharpsl_pm.flags & SHARPSL_SUSPENDED)
- return IRQ_HANDLED;
-
- /* delay until after any ac interrupt */
- mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500));
-
- return IRQ_HANDLED;
-}
-
-static irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id)
-{
- int is_fatal = 0;
-
- if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) {
- dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n");
- is_fatal = 1;
- }
-
- if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL)) {
- dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n");
- is_fatal = 1;
- }
-
- if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) {
- sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
- apm_queue_event(APM_CRITICAL_SUSPEND);
- }
-
- return IRQ_HANDLED;
-}
-
-/*
- * Maintain an average of the last 10 readings
- */
-#define SHARPSL_CNV_VALUE_NUM 10
-static int sharpsl_ad_index;
-
-static void sharpsl_average_clear(void)
-{
- sharpsl_ad_index = 0;
-}
-
-static int sharpsl_average_value(int ad)
-{
- int i, ad_val = 0;
- static int sharpsl_ad[SHARPSL_CNV_VALUE_NUM+1];
-
- if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) {
- sharpsl_ad_index = 0;
- return ad;
- }
-
- sharpsl_ad[sharpsl_ad_index] = ad;
- sharpsl_ad_index++;
- if (sharpsl_ad_index >= SHARPSL_CNV_VALUE_NUM) {
- for (i = 0; i < (SHARPSL_CNV_VALUE_NUM-1); i++)
- sharpsl_ad[i] = sharpsl_ad[i+1];
- sharpsl_ad_index = SHARPSL_CNV_VALUE_NUM - 1;
- }
- for (i = 0; i < sharpsl_ad_index; i++)
- ad_val += sharpsl_ad[i];
-
- return ad_val / sharpsl_ad_index;
-}
-
-/*
- * Take an array of 5 integers, remove the maximum and minimum values
- * and return the average.
- */
-static int get_select_val(int *val)
-{
- int i, j, k, temp, sum = 0;
-
- /* Find MAX val */
- temp = val[0];
- j = 0;
- for (i = 1; i < 5; i++) {
- if (temp < val[i]) {
- temp = val[i];
- j = i;
- }
- }
-
- /* Find MIN val */
- temp = val[4];
- k = 4;
- for (i = 3; i >= 0; i--) {
- if (temp > val[i]) {
- temp = val[i];
- k = i;
- }
- }
-
- for (i = 0; i < 5; i++)
- if (i != j && i != k)
- sum += val[i];
-
- dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], val[2], val[3], val[4]);
-
- return sum/3;
-}
-
-static int sharpsl_check_battery_temp(void)
-{
- int val, i, buff[5];
-
- /* Check battery temperature */
- for (i = 0; i < 5; i++) {
- mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
- sharpsl_pm.machinfo->measure_temp(1);
- mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
- buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_TEMP);
- sharpsl_pm.machinfo->measure_temp(0);
- }
-
- val = get_select_val(buff);
-
- dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
- if (val > sharpsl_pm.machinfo->charge_on_temp) {
- printk(KERN_WARNING "Not charging: temperature out of limits.\n");
- return -1;
- }
-
- return 0;
-}
-
-#ifdef CONFIG_PM
-static int sharpsl_check_battery_voltage(void)
-{
- int val, i, buff[5];
-
- /* disable charge, enable discharge */
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm.machinfo->discharge(1);
- mdelay(SHARPSL_WAIT_DISCHARGE_ON);
-
- if (sharpsl_pm.machinfo->discharge1)
- sharpsl_pm.machinfo->discharge1(1);
-
- /* Check battery voltage */
- for (i = 0; i < 5; i++) {
- buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT);
- mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT);
- }
-
- if (sharpsl_pm.machinfo->discharge1)
- sharpsl_pm.machinfo->discharge1(0);
-
- sharpsl_pm.machinfo->discharge(0);
-
- val = get_select_val(buff);
- dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val);
-
- if (val < sharpsl_pm.machinfo->charge_on_volt)
- return -1;
-
- return 0;
-}
-#endif
-
-static int sharpsl_ac_check(void)
-{
- int temp, i, buff[5];
-
- for (i = 0; i < 5; i++) {
- buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_ACIN_VOLT);
- mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN);
- }
-
- temp = get_select_val(buff);
- dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n", temp);
-
- if ((temp > sharpsl_pm.machinfo->charge_acin_high) || (temp < sharpsl_pm.machinfo->charge_acin_low)) {
- dev_err(sharpsl_pm.dev, "Error: AC check failed: voltage %d.\n", temp);
- return -1;
- }
-
- return 0;
-}
-
-#ifdef CONFIG_PM
-static int sharpsl_pm_suspend(struct platform_device *pdev, pm_message_t state)
-{
- sharpsl_pm.flags |= SHARPSL_SUSPENDED;
- flush_delayed_work(&toggle_charger);
- flush_delayed_work(&sharpsl_bat);
-
- if (sharpsl_pm.charge_mode == CHRG_ON)
- sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
- else
- sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
-
- return 0;
-}
-
-static int sharpsl_pm_resume(struct platform_device *pdev)
-{
- /* Clear the reset source indicators as they break the bootloader upon reboot */
- RCSR = 0x0f;
- sharpsl_average_clear();
- sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED;
- sharpsl_pm.flags &= ~SHARPSL_SUSPENDED;
-
- return 0;
-}
-
-static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
-{
- dev_dbg(sharpsl_pm.dev, "Time is: %08x\n", RCNR);
-
- dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n", sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG);
- /* not charging and AC-IN! */
-
- if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN))) {
- dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n");
- sharpsl_pm.charge_mode = CHRG_OFF;
- sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
- sharpsl_off_charge_battery();
- }
-
- sharpsl_pm.machinfo->presuspend();
-
- PEDR = 0xffffffff; /* clear it */
-
- sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE;
- if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) {
- RTSR &= RTSR_ALE;
- RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND;
- dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n", RTAR);
- sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE;
- } else if (alarm_enable) {
- RTSR &= RTSR_ALE;
- RTAR = alarm_time;
- dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n", RTAR);
- } else {
- dev_dbg(sharpsl_pm.dev, "No alarms set.\n");
- }
-
- pxa_pm_enter(state);
-
- sharpsl_pm.machinfo->postsuspend();
-
- dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n", PEDR);
-}
-
-static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
-{
- if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable)) {
- if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) {
- dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n");
- corgi_goto_sleep(alarm_time, alarm_enable, state);
- return 1;
- }
- if (sharpsl_off_charge_battery()) {
- dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n");
- corgi_goto_sleep(alarm_time, alarm_enable, state);
- return 1;
- }
- dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n");
- }
-
- if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) ||
- (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL))) {
- dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n");
- corgi_goto_sleep(alarm_time, alarm_enable, state);
- return 1;
- }
-
- return 0;
-}
-
-static int corgi_pxa_pm_enter(suspend_state_t state)
-{
- unsigned long alarm_time = RTAR;
- unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0);
-
- dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n");
-
- corgi_goto_sleep(alarm_time, alarm_status, state);
-
- while (corgi_enter_suspend(alarm_time, alarm_status, state))
- {}
-
- if (sharpsl_pm.machinfo->earlyresume)
- sharpsl_pm.machinfo->earlyresume();
-
- dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n");
-
- return 0;
-}
-
-static int sharpsl_off_charge_error(void)
-{
- dev_err(sharpsl_pm.dev, "Offline Charger: Error occurred.\n");
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm_led(SHARPSL_LED_ERROR);
- sharpsl_pm.charge_mode = CHRG_ERROR;
- return 1;
-}
-
-/*
- * Charging Control while suspended
- * Return 1 - go straight to sleep
- * Return 0 - sleep or wakeup depending on other factors
- */
-static int sharpsl_off_charge_battery(void)
-{
- int time;
-
- dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode);
-
- if (sharpsl_pm.charge_mode == CHRG_OFF) {
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n");
-
- /* AC Check */
- if ((sharpsl_ac_check() < 0) || (sharpsl_check_battery_temp() < 0))
- return sharpsl_off_charge_error();
-
- /* Start Charging */
- sharpsl_pm_led(SHARPSL_LED_ON);
- sharpsl_pm.machinfo->charge(0);
- mdelay(SHARPSL_CHARGE_WAIT_TIME);
- sharpsl_pm.machinfo->charge(1);
-
- sharpsl_pm.charge_mode = CHRG_ON;
- sharpsl_pm.full_count = 0;
-
- return 1;
- } else if (sharpsl_pm.charge_mode != CHRG_ON) {
- return 1;
- }
-
- if (sharpsl_pm.full_count == 0) {
- int time;
-
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n");
-
- if ((sharpsl_check_battery_temp() < 0) || (sharpsl_check_battery_voltage() < 0))
- return sharpsl_off_charge_error();
-
- sharpsl_pm.machinfo->charge(0);
- mdelay(SHARPSL_CHARGE_WAIT_TIME);
- sharpsl_pm.machinfo->charge(1);
- sharpsl_pm.charge_mode = CHRG_ON;
-
- mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
-
- time = RCNR;
- while (1) {
- /* Check if any wakeup event had occurred */
- if (sharpsl_pm.machinfo->charger_wakeup())
- return 0;
- /* Check for timeout */
- if ((RCNR - time) > SHARPSL_WAIT_CO_TIME)
- return 1;
- if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) {
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occurred. Retrying to check\n");
- sharpsl_pm.full_count++;
- sharpsl_pm.machinfo->charge(0);
- mdelay(SHARPSL_CHARGE_WAIT_TIME);
- sharpsl_pm.machinfo->charge(1);
- return 1;
- }
- }
- }
-
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n");
-
- mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
-
- time = RCNR;
- while (1) {
- /* Check if any wakeup event had occurred */
- if (sharpsl_pm.machinfo->charger_wakeup())
- return 0;
- /* Check for timeout */
- if ((RCNR-time) > SHARPSL_WAIT_CO_TIME) {
- if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) {
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n");
- sharpsl_pm.full_count = 0;
- }
- sharpsl_pm.full_count++;
- return 1;
- }
- if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) {
- dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n");
- sharpsl_pm_led(SHARPSL_LED_OFF);
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm.charge_mode = CHRG_DONE;
- return 1;
- }
- }
-}
-#else
-#define sharpsl_pm_suspend NULL
-#define sharpsl_pm_resume NULL
-#endif
-
-static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf)
-{
- return sprintf(buf, "%d\n", sharpsl_pm.battstat.mainbat_percent);
-}
-
-static ssize_t battery_voltage_show(struct device *dev, struct device_attribute *attr, char *buf)
-{
- return sprintf(buf, "%d\n", sharpsl_pm.battstat.mainbat_voltage);
-}
-
-static DEVICE_ATTR_RO(battery_percentage);
-static DEVICE_ATTR_RO(battery_voltage);
-
-extern void (*apm_get_power_status)(struct apm_power_info *);
-
-static void sharpsl_apm_get_power_status(struct apm_power_info *info)
-{
- info->ac_line_status = sharpsl_pm.battstat.ac_status;
-
- if (sharpsl_pm.charge_mode == CHRG_ON)
- info->battery_status = APM_BATTERY_STATUS_CHARGING;
- else
- info->battery_status = sharpsl_pm.battstat.mainbat_status;
-
- info->battery_flag = (1 << info->battery_status);
- info->battery_life = sharpsl_pm.battstat.mainbat_percent;
-}
-
-#ifdef CONFIG_PM
-static const struct platform_suspend_ops sharpsl_pm_ops = {
- .prepare = pxa_pm_prepare,
- .finish = pxa_pm_finish,
- .enter = corgi_pxa_pm_enter,
- .valid = suspend_valid_only_mem,
-};
-#endif
-
-static int sharpsl_pm_probe(struct platform_device *pdev)
-{
- int ret, irq;
-
- if (!pdev->dev.platform_data)
- return -EINVAL;
-
- sharpsl_pm.dev = &pdev->dev;
- sharpsl_pm.machinfo = pdev->dev.platform_data;
- sharpsl_pm.charge_mode = CHRG_OFF;
- sharpsl_pm.flags = 0;
-
- timer_setup(&sharpsl_pm.ac_timer, sharpsl_ac_timer, 0);
-
- timer_setup(&sharpsl_pm.chrg_full_timer, sharpsl_chrg_full_timer, 0);
-
- led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
-
- sharpsl_pm.machinfo->init();
-
- gpio_request(sharpsl_pm.machinfo->gpio_acin, "AC IN");
- gpio_direction_input(sharpsl_pm.machinfo->gpio_acin);
- gpio_request(sharpsl_pm.machinfo->gpio_batfull, "Battery Full");
- gpio_direction_input(sharpsl_pm.machinfo->gpio_batfull);
- gpio_request(sharpsl_pm.machinfo->gpio_batlock, "Battery Lock");
- gpio_direction_input(sharpsl_pm.machinfo->gpio_batlock);
-
- /* Register interrupt handlers */
- irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_acin);
- if (request_irq(irq, sharpsl_ac_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "AC Input Detect", sharpsl_ac_isr)) {
- dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq);
- }
-
- irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_batlock);
- if (request_irq(irq, sharpsl_fatal_isr, IRQF_TRIGGER_FALLING, "Battery Cover", sharpsl_fatal_isr)) {
- dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq);
- }
-
- if (sharpsl_pm.machinfo->gpio_fatal) {
- irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_fatal);
- if (request_irq(irq, sharpsl_fatal_isr, IRQF_TRIGGER_FALLING, "Fatal Battery", sharpsl_fatal_isr)) {
- dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq);
- }
- }
-
- if (sharpsl_pm.machinfo->batfull_irq) {
- /* Register interrupt handler. */
- irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_batfull);
- if (request_irq(irq, sharpsl_chrg_full_isr, IRQF_TRIGGER_RISING, "CO", sharpsl_chrg_full_isr)) {
- dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq);
- }
- }
-
- ret = device_create_file(&pdev->dev, &dev_attr_battery_percentage);
- ret |= device_create_file(&pdev->dev, &dev_attr_battery_voltage);
- if (ret != 0)
- dev_warn(&pdev->dev, "Failed to register attributes (%d)\n", ret);
-
- apm_get_power_status = sharpsl_apm_get_power_status;
-
-#ifdef CONFIG_PM
- suspend_set_ops(&sharpsl_pm_ops);
-#endif
-
- mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
-
- return 0;
-}
-
-static void sharpsl_pm_remove(struct platform_device *pdev)
-{
- suspend_set_ops(NULL);
-
- device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
- device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
-
- led_trigger_unregister_simple(sharpsl_charge_led_trigger);
-
- free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr);
- free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr);
-
- if (sharpsl_pm.machinfo->gpio_fatal)
- free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr);
-
- if (sharpsl_pm.machinfo->batfull_irq)
- free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr);
-
- gpio_free(sharpsl_pm.machinfo->gpio_batlock);
- gpio_free(sharpsl_pm.machinfo->gpio_batfull);
- gpio_free(sharpsl_pm.machinfo->gpio_acin);
-
- if (sharpsl_pm.machinfo->exit)
- sharpsl_pm.machinfo->exit();
-
- timer_delete_sync(&sharpsl_pm.chrg_full_timer);
- timer_delete_sync(&sharpsl_pm.ac_timer);
-}
-
-static struct platform_driver sharpsl_pm_driver = {
- .probe = sharpsl_pm_probe,
- .remove = sharpsl_pm_remove,
- .suspend = sharpsl_pm_suspend,
- .resume = sharpsl_pm_resume,
- .driver = {
- .name = "sharpsl-pm",
- },
-};
-
-static int sharpsl_pm_init(void)
-{
- return platform_driver_register(&sharpsl_pm_driver);
-}
-
-static void sharpsl_pm_exit(void)
-{
- platform_driver_unregister(&sharpsl_pm_driver);
-}
-
-late_initcall(sharpsl_pm_init);
-module_exit(sharpsl_pm_exit);
diff --git a/arch/arm/mach-pxa/sharpsl_pm.h b/arch/arm/mach-pxa/sharpsl_pm.h
deleted file mode 100644
index 623167f30ec2..000000000000
--- a/arch/arm/mach-pxa/sharpsl_pm.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * SharpSL Battery/PM Driver
- *
- * Copyright (c) 2004-2005 Richard Purdie
- */
-#ifndef _MACH_SHARPSL_PM
-#define _MACH_SHARPSL_PM
-
-struct sharpsl_charger_machinfo {
- void (*init)(void);
- void (*exit)(void);
- int gpio_acin;
- int gpio_batfull;
- int batfull_irq;
- int gpio_batlock;
- int gpio_fatal;
- void (*discharge)(int);
- void (*discharge1)(int);
- void (*charge)(int);
- void (*measure_temp)(int);
- void (*presuspend)(void);
- void (*postsuspend)(void);
- void (*earlyresume)(void);
- unsigned long (*read_devdata)(int);
-#define SHARPSL_BATT_VOLT 1
-#define SHARPSL_BATT_TEMP 2
-#define SHARPSL_ACIN_VOLT 3
-#define SHARPSL_STATUS_ACIN 4
-#define SHARPSL_STATUS_LOCK 5
-#define SHARPSL_STATUS_CHRGFULL 6
-#define SHARPSL_STATUS_FATAL 7
- bool (*charger_wakeup)(void);
- int (*should_wakeup)(unsigned int resume_on_alarm);
- void (*backlight_limit)(int);
- int (*backlight_get_status) (void);
- int charge_on_volt;
- int charge_on_temp;
- int charge_acin_high;
- int charge_acin_low;
- int fatal_acin_volt;
- int fatal_noacin_volt;
- int bat_levels;
- struct battery_thresh *bat_levels_noac;
- struct battery_thresh *bat_levels_acin;
- struct battery_thresh *bat_levels_noac_bl;
- struct battery_thresh *bat_levels_acin_bl;
- int status_high_acin;
- int status_low_acin;
- int status_high_noac;
- int status_low_noac;
-};
-
-struct battery_thresh {
- int voltage;
- int percentage;
-};
-
-struct battery_stat {
- int ac_status; /* APM AC Present/Not Present */
- int mainbat_status; /* APM Main Battery Status */
- int mainbat_percent; /* Main Battery Percentage Charge */
- int mainbat_voltage; /* Main Battery Voltage */
-};
-
-struct sharpsl_pm_status {
- struct device *dev;
- struct timer_list ac_timer;
- struct timer_list chrg_full_timer;
-
- int charge_mode;
-#define CHRG_ERROR (-1)
-#define CHRG_OFF (0)
-#define CHRG_ON (1)
-#define CHRG_DONE (2)
-
- unsigned int flags;
-#define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */
-#define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */
-#define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */
-#define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */
-#define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */
-
- int full_count;
- unsigned long charge_start_time;
- struct sharpsl_charger_machinfo *machinfo;
- struct battery_stat battstat;
-};
-
-extern struct sharpsl_pm_status sharpsl_pm;
-
-extern struct battery_thresh sharpsl_battery_levels_acin[];
-extern struct battery_thresh sharpsl_battery_levels_noac[];
-
-#define SHARPSL_LED_ERROR 2
-#define SHARPSL_LED_ON 1
-#define SHARPSL_LED_OFF 0
-
-void sharpsl_battery_kick(void);
-void sharpsl_pm_led(int val);
-
-/* MAX1111 Channel Definitions */
-#define MAX1111_BATT_VOLT 4u
-#define MAX1111_BATT_TEMP 2u
-#define MAX1111_ACIN_VOLT 6u
-int sharpsl_pm_pxa_read_max1111(int channel);
-
-#endif
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
deleted file mode 100644
index 5eaf38243b9e..000000000000
--- a/arch/arm/mach-pxa/spitz.c
+++ /dev/null
@@ -1,1174 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Support for Sharp SL-Cxx00 Series of PDAs
- * Models: SL-C3000 (Spitz), SL-C1000 (Akita) and SL-C3100 (Borzoi)
- *
- * Copyright (c) 2005 Richard Purdie
- *
- * Based on Sharp's 2.4 kernel patches/lubbock.c
- */
-
-#include <linux/kernel.h>
-#include <linux/platform_device.h>
-#include <linux/delay.h>
-#include <linux/gpio_keys.h>
-#include <linux/gpio/legacy.h>
-#include <linux/gpio/machine.h>
-#include <linux/gpio/property.h>
-#include <linux/leds.h>
-#include <linux/i2c.h>
-#include <linux/platform_data/i2c-pxa.h>
-#include <linux/platform_data/pca953x.h>
-#include <linux/property.h>
-#include <linux/spi/spi.h>
-#include <linux/spi/ads7846.h>
-#include <linux/spi/corgi_lcd.h>
-#include <linux/mtd/sharpsl.h>
-#include <linux/mtd/physmap.h>
-#include <linux/input-event-codes.h>
-#include <linux/input/matrix_keypad.h>
-#include <linux/regulator/machine.h>
-#include <linux/io.h>
-#include <linux/property.h>
-#include <linux/reboot.h>
-#include <linux/memblock.h>
-
-#include <asm/setup.h>
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/sharpsl_param.h>
-#include <asm/hardware/scoop.h>
-
-#include "pxa27x.h"
-#include "pxa27x-udc.h"
-#include "reset.h"
-#include <linux/platform_data/mmc-pxamci.h>
-#include <linux/platform_data/usb-ohci-pxa27x.h>
-#include <linux/platform_data/video-pxafb.h>
-#include "spitz.h"
-#include "sharpsl_pm.h"
-#include "smemc.h"
-
-#include "generic.h"
-#include "devices.h"
-
-/******************************************************************************
- * Pin configuration
- ******************************************************************************/
-static unsigned long spitz_pin_config[] __initdata = {
- /* Chip Selects */
- GPIO78_nCS_2, /* SCOOP #2 */
- GPIO79_nCS_3, /* NAND */
- GPIO80_nCS_4, /* SCOOP #1 */
-
- /* LCD - 16bpp Active TFT */
- GPIOxx_LCD_TFT_16BPP,
-
- /* PC Card */
- GPIO48_nPOE,
- GPIO49_nPWE,
- GPIO50_nPIOR,
- GPIO51_nPIOW,
- GPIO85_nPCE_1,
- GPIO54_nPCE_2,
- GPIO55_nPREG,
- GPIO56_nPWAIT,
- GPIO57_nIOIS16,
- GPIO104_PSKTSEL,
-
- /* I2S */
- GPIO28_I2S_BITCLK_OUT,
- GPIO29_I2S_SDATA_IN,
- GPIO30_I2S_SDATA_OUT,
- GPIO31_I2S_SYNC,
-
- /* MMC */
- GPIO32_MMC_CLK,
- GPIO112_MMC_CMD,
- GPIO92_MMC_DAT_0,
- GPIO109_MMC_DAT_1,
- GPIO110_MMC_DAT_2,
- GPIO111_MMC_DAT_3,
-
- /* GPIOs */
- GPIO9_GPIO, /* SPITZ_GPIO_nSD_DETECT */
- GPIO16_GPIO, /* SPITZ_GPIO_SYNC */
- GPIO81_GPIO, /* SPITZ_GPIO_nSD_WP */
- GPIO41_GPIO, /* SPITZ_GPIO_USB_CONNECT */
- GPIO37_GPIO, /* SPITZ_GPIO_USB_HOST */
- GPIO35_GPIO, /* SPITZ_GPIO_USB_DEVICE */
- GPIO22_GPIO, /* SPITZ_GPIO_HSYNC */
- GPIO94_GPIO, /* SPITZ_GPIO_CF_CD */
- GPIO105_GPIO, /* SPITZ_GPIO_CF_IRQ */
- GPIO106_GPIO, /* SPITZ_GPIO_CF2_IRQ */
-
- /* GPIO matrix keypad */
- GPIO88_GPIO, /* column 0 */
- GPIO23_GPIO, /* column 1 */
- GPIO24_GPIO, /* column 2 */
- GPIO25_GPIO, /* column 3 */
- GPIO26_GPIO, /* column 4 */
- GPIO27_GPIO, /* column 5 */
- GPIO52_GPIO, /* column 6 */
- GPIO103_GPIO, /* column 7 */
- GPIO107_GPIO, /* column 8 */
- GPIO108_GPIO, /* column 9 */
- GPIO114_GPIO, /* column 10 */
- GPIO12_GPIO, /* row 0 */
- GPIO17_GPIO, /* row 1 */
- GPIO91_GPIO, /* row 2 */
- GPIO34_GPIO, /* row 3 */
- GPIO36_GPIO, /* row 4 */
- GPIO38_GPIO, /* row 5 */
- GPIO39_GPIO, /* row 6 */
-
- /* I2C */
- GPIO117_I2C_SCL,
- GPIO118_I2C_SDA,
-
- GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, /* SPITZ_GPIO_KEY_INT */
- GPIO1_GPIO | WAKEUP_ON_EDGE_FALL, /* SPITZ_GPIO_RESET */
-};
-
-static const struct software_node spitz_scoop_1_gpiochip_node = {
- .name = "sharp-scoop.0",
-};
-
-/* Only on Spitz */
-static const struct software_node spitz_scoop_2_gpiochip_node = {
- .name = "sharp-scoop.1",
-};
-
-/* Only on Akita */
-static const struct software_node akita_max7310_gpiochip_node = {
- .name = "i2c-max7310",
-};
-
-/******************************************************************************
- * Scoop GPIO expander
- ******************************************************************************/
-#if defined(CONFIG_SHARP_SCOOP) || defined(CONFIG_SHARP_SCOOP_MODULE)
-/* SCOOP Device #1 */
-static struct resource spitz_scoop_1_resources[] = {
- [0] = {
- .start = 0x10800000,
- .end = 0x10800fff,
- .flags = IORESOURCE_MEM,
- },
-};
-
-static struct scoop_config spitz_scoop_1_setup = {
- .io_dir = SPITZ_SCP_IO_DIR,
- .io_out = SPITZ_SCP_IO_OUT,
- .suspend_clr = SPITZ_SCP_SUS_CLR,
- .suspend_set = SPITZ_SCP_SUS_SET,
- .gpio_base = SPITZ_SCP_GPIO_BASE,
-};
-
-static struct platform_device spitz_scoop_1_device = {
- .name = "sharp-scoop",
- .id = 0,
- .dev = {
- .platform_data = &spitz_scoop_1_setup,
- },
- .num_resources = ARRAY_SIZE(spitz_scoop_1_resources),
- .resource = spitz_scoop_1_resources,
-};
-
-/* SCOOP Device #2 */
-static struct resource spitz_scoop_2_resources[] = {
- [0] = {
- .start = 0x08800040,
- .end = 0x08800fff,
- .flags = IORESOURCE_MEM,
- },
-};
-
-static struct scoop_config spitz_scoop_2_setup = {
- .io_dir = SPITZ_SCP2_IO_DIR,
- .io_out = SPITZ_SCP2_IO_OUT,
- .suspend_clr = SPITZ_SCP2_SUS_CLR,
- .suspend_set = SPITZ_SCP2_SUS_SET,
- .gpio_base = SPITZ_SCP2_GPIO_BASE,
-};
-
-static struct platform_device spitz_scoop_2_device = {
- .name = "sharp-scoop",
- .id = 1,
- .dev = {
- .platform_data = &spitz_scoop_2_setup,
- },
- .num_resources = ARRAY_SIZE(spitz_scoop_2_resources),
- .resource = spitz_scoop_2_resources,
-};
-
-static void __init spitz_scoop_init(void)
-{
- spitz_scoop_1_device.dev.fwnode = software_node_fwnode(&spitz_scoop_1_gpiochip_node);
- platform_device_register(&spitz_scoop_1_device);
-
- /* Akita doesn't have the second SCOOP chip */
- if (!machine_is_akita()) {
- spitz_scoop_2_device.dev.fwnode = software_node_fwnode(
- &spitz_scoop_2_gpiochip_node);
- platform_device_register(&spitz_scoop_2_device);
- }
-}
-
-/* Power control is shared with between one of the CF slots and SD */
-static void __maybe_unused spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr)
-{
- unsigned short cpr;
- unsigned long flags;
-
- if (new_cpr & 0x7) {
- gpio_set_value(SPITZ_GPIO_CF_POWER, 1);
- mdelay(5);
- }
-
- local_irq_save(flags);
-
- cpr = read_scoop_reg(&spitz_scoop_1_device.dev, SCOOP_CPR);
-
- if (enable & new_cpr)
- cpr |= new_cpr;
- else
- cpr &= ~enable;
-
- write_scoop_reg(&spitz_scoop_1_device.dev, SCOOP_CPR, cpr);
-
- local_irq_restore(flags);
-
- if (!(cpr & 0x7)) {
- mdelay(1);
- gpio_set_value(SPITZ_GPIO_CF_POWER, 0);
- }
-}
-
-#else
-static inline void spitz_scoop_init(void) {}
-static inline void spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr) {}
-#endif
-
-/******************************************************************************
- * PCMCIA
- ******************************************************************************/
-#if defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE)
-static void spitz_pcmcia_pwr(struct device *scoop, uint16_t cpr, int nr)
-{
- /* Only need to override behaviour for slot 0 */
- if (nr == 0)
- spitz_card_pwr_ctrl(
- cpr & (SCOOP_CPR_CF_3V | SCOOP_CPR_CF_XV), cpr);
- else
- write_scoop_reg(scoop, SCOOP_CPR, cpr);
-}
-
-static struct scoop_pcmcia_dev spitz_pcmcia_scoop[] = {
- {
- .dev = &spitz_scoop_1_device.dev,
- .irq = SPITZ_IRQ_GPIO_CF_IRQ,
- .cd_irq = SPITZ_IRQ_GPIO_CF_CD,
- .cd_irq_str = "PCMCIA0 CD",
- }, {
- .dev = &spitz_scoop_2_device.dev,
- .irq = SPITZ_IRQ_GPIO_CF2_IRQ,
- .cd_irq = -1,
- },
-};
-
-static struct scoop_pcmcia_config spitz_pcmcia_config = {
- .devs = &spitz_pcmcia_scoop[0],
- .num_devs = 2,
- .power_ctrl = spitz_pcmcia_pwr,
-};
-
-static void __init spitz_pcmcia_init(void)
-{
- /* Akita has only one PCMCIA slot used */
- if (machine_is_akita())
- spitz_pcmcia_config.num_devs = 1;
-
- platform_scoop_config = &spitz_pcmcia_config;
-}
-#else
-static inline void spitz_pcmcia_init(void) {}
-#endif
-
-/******************************************************************************
- * GPIO keyboard
- ******************************************************************************/
-#if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE)
-
-#define SPITZ_KEY_CALENDAR KEY_F1
-#define SPITZ_KEY_ADDRESS KEY_F2
-#define SPITZ_KEY_FN KEY_F3
-#define SPITZ_KEY_CANCEL KEY_F4
-#define SPITZ_KEY_EXOK KEY_F5
-#define SPITZ_KEY_EXCANCEL KEY_F6
-#define SPITZ_KEY_EXJOGDOWN KEY_F7
-#define SPITZ_KEY_EXJOGUP KEY_F8
-#define SPITZ_KEY_JAP1 KEY_LEFTALT
-#define SPITZ_KEY_JAP2 KEY_RIGHTCTRL
-#define SPITZ_KEY_SYNC KEY_F9
-#define SPITZ_KEY_MAIL KEY_F10
-#define SPITZ_KEY_OK KEY_F11
-#define SPITZ_KEY_MENU KEY_F12
-
-static const uint32_t spitz_keymap[] = {
- KEY(0, 0, KEY_LEFTCTRL),
- KEY(0, 1, KEY_1),
- KEY(0, 2, KEY_3),
- KEY(0, 3, KEY_5),
- KEY(0, 4, KEY_6),
- KEY(0, 5, KEY_7),
- KEY(0, 6, KEY_9),
- KEY(0, 7, KEY_0),
- KEY(0, 8, KEY_BACKSPACE),
- KEY(0, 9, SPITZ_KEY_EXOK), /* EXOK */
- KEY(0, 10, SPITZ_KEY_EXCANCEL), /* EXCANCEL */
- KEY(1, 1, KEY_2),
- KEY(1, 2, KEY_4),
- KEY(1, 3, KEY_R),
- KEY(1, 4, KEY_Y),
- KEY(1, 5, KEY_8),
- KEY(1, 6, KEY_I),
- KEY(1, 7, KEY_O),
- KEY(1, 8, KEY_P),
- KEY(1, 9, SPITZ_KEY_EXJOGDOWN), /* EXJOGDOWN */
- KEY(1, 10, SPITZ_KEY_EXJOGUP), /* EXJOGUP */
- KEY(2, 0, KEY_TAB),
- KEY(2, 1, KEY_Q),
- KEY(2, 2, KEY_E),
- KEY(2, 3, KEY_T),
- KEY(2, 4, KEY_G),
- KEY(2, 5, KEY_U),
- KEY(2, 6, KEY_J),
- KEY(2, 7, KEY_K),
- KEY(3, 0, SPITZ_KEY_ADDRESS), /* ADDRESS */
- KEY(3, 1, KEY_W),
- KEY(3, 2, KEY_S),
- KEY(3, 3, KEY_F),
- KEY(3, 4, KEY_V),
- KEY(3, 5, KEY_H),
- KEY(3, 6, KEY_M),
- KEY(3, 7, KEY_L),
- KEY(3, 9, KEY_RIGHTSHIFT),
- KEY(4, 0, SPITZ_KEY_CALENDAR), /* CALENDAR */
- KEY(4, 1, KEY_A),
- KEY(4, 2, KEY_D),
- KEY(4, 3, KEY_C),
- KEY(4, 4, KEY_B),
- KEY(4, 5, KEY_N),
- KEY(4, 6, KEY_DOT),
- KEY(4, 8, KEY_ENTER),
- KEY(4, 9, KEY_LEFTSHIFT),
- KEY(5, 0, SPITZ_KEY_MAIL), /* MAIL */
- KEY(5, 1, KEY_Z),
- KEY(5, 2, KEY_X),
- KEY(5, 3, KEY_MINUS),
- KEY(5, 4, KEY_SPACE),
- KEY(5, 5, KEY_COMMA),
- KEY(5, 7, KEY_UP),
- KEY(5, 10, SPITZ_KEY_FN), /* FN */
- KEY(6, 0, KEY_SYSRQ),
- KEY(6, 1, SPITZ_KEY_JAP1), /* JAP1 */
- KEY(6, 2, SPITZ_KEY_JAP2), /* JAP2 */
- KEY(6, 3, SPITZ_KEY_CANCEL), /* CANCEL */
- KEY(6, 4, SPITZ_KEY_OK), /* OK */
- KEY(6, 5, SPITZ_KEY_MENU), /* MENU */
- KEY(6, 6, KEY_LEFT),
- KEY(6, 7, KEY_DOWN),
- KEY(6, 8, KEY_RIGHT),
-};
-
-static const struct software_node_ref_args spitz_mkp_row_gpios[] = {
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 12, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 17, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 91, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 34, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 36, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 38, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 39, GPIO_ACTIVE_HIGH),
-};
-
-static const struct software_node_ref_args spitz_mkp_col_gpios[] = {
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 88, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 23, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 24, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 25, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 26, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 27, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 52, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 103, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 107, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 108, GPIO_ACTIVE_HIGH),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, 114, GPIO_ACTIVE_HIGH),
-};
-
-static const struct property_entry spitz_mkp_properties[] = {
- PROPERTY_ENTRY_U32_ARRAY("linux,keymap", spitz_keymap),
- PROPERTY_ENTRY_REF_ARRAY("row-gpios", spitz_mkp_row_gpios),
- PROPERTY_ENTRY_REF_ARRAY("col-gpios", spitz_mkp_col_gpios),
- PROPERTY_ENTRY_U32("col-scan-delay-us", 10),
- PROPERTY_ENTRY_U32("debounce-delay-ms", 10),
- PROPERTY_ENTRY_BOOL("wakeup-source"),
- { }
-};
-
-static const struct platform_device_info spitz_mkp_info __initconst = {
- .name = "matrix-keypad",
- .id = PLATFORM_DEVID_NONE,
- .properties = spitz_mkp_properties,
-};
-
-
-static void __init spitz_mkp_init(void)
-{
- struct platform_device *pd;
- int err;
-
- pd = platform_device_register_full(&spitz_mkp_info);
- err = PTR_ERR_OR_ZERO(pd);
- if (err)
- pr_err("failed to create keypad device: %d\n", err);
-}
-#else
-static inline void spitz_mkp_init(void) {}
-#endif
-
-/******************************************************************************
- * GPIO keys
- ******************************************************************************/
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-static const struct software_node spitz_gpio_keys_node = {
- .name = "spitz-gpio-keys",
-};
-
-static const struct property_entry spitz_suspend_key_props[] = {
- PROPERTY_ENTRY_U32("linux,input-type", EV_PWR),
- PROPERTY_ENTRY_U32("linux,code", KEY_SUSPEND),
- PROPERTY_ENTRY_GPIO("gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_ON_KEY, GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_STRING("label", "On Off"),
- PROPERTY_ENTRY_BOOL("wakeup-source"),
- { }
-};
-
-static const struct software_node spitz_suspend_key_node = {
- .parent = &spitz_gpio_keys_node,
- .properties = spitz_suspend_key_props,
-};
-
-static const struct property_entry spitz_sw1_props[] = {
- PROPERTY_ENTRY_U32("linux,input-type", EV_SW),
- PROPERTY_ENTRY_U32("linux,code", 0),
- PROPERTY_ENTRY_GPIO("gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_SWA, GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_STRING("label", "Display Down"),
- { }
-};
-
-static const struct software_node spitz_sw1_node = {
- .parent = &spitz_gpio_keys_node,
- .properties = spitz_sw1_props,
-};
-
-static const struct property_entry spitz_sw2_props[] = {
- PROPERTY_ENTRY_U32("linux,input-type", EV_SW),
- PROPERTY_ENTRY_U32("linux,code", 1),
- PROPERTY_ENTRY_GPIO("gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_SWB, GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_STRING("label", "Lid Closed"),
- { }
-};
-
-static const struct software_node spitz_sw2_node = {
- .parent = &spitz_gpio_keys_node,
- .properties = spitz_sw2_props,
-};
-
-static const struct software_node *spitz_gpio_keys_swnodes[] = {
- &spitz_gpio_keys_node,
- &spitz_suspend_key_node,
- &spitz_sw1_node,
- &spitz_sw2_node,
- NULL
-};
-
-static void __init spitz_keys_init(void)
-{
- struct platform_device_info keys_info = {
- .name = "gpio-keys",
- .id = PLATFORM_DEVID_NONE,
- };
- struct platform_device *pd;
- int err;
-
- err = software_node_register_node_group(spitz_gpio_keys_swnodes);
- if (err) {
- pr_err("failed to register gpio-keys software nodes: %d\n", err);
- return;
- }
-
- keys_info.fwnode = software_node_fwnode(&spitz_gpio_keys_node);
-
- pd = platform_device_register_full(&keys_info);
- err = PTR_ERR_OR_ZERO(pd);
- if (err)
- pr_err("failed to create gpio-keys device: %d\n", err);
-}
-#else
-static inline void spitz_keys_init(void) {}
-#endif
-
-/******************************************************************************
- * LEDs
- ******************************************************************************/
-#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
-static const struct software_node spitz_gpio_leds_node = {
- .name = "spitz-leds",
-};
-
-static const struct property_entry spitz_orange_led_props[] = {
- PROPERTY_ENTRY_STRING("linux,default-trigger", "sharpsl-charge"),
- PROPERTY_ENTRY_GPIO("gpios",
- &spitz_scoop_1_gpiochip_node, 6, GPIO_ACTIVE_HIGH),
- { }
-};
-
-static const struct software_node spitz_orange_led_node = {
- .name = "spitz:amber:charge",
- .parent = &spitz_gpio_leds_node,
- .properties = spitz_orange_led_props,
-};
-
-static const struct property_entry spitz_green_led_props[] = {
- PROPERTY_ENTRY_STRING("linux,default-trigger", "disk-activity"),
- PROPERTY_ENTRY_GPIO("gpios",
- &spitz_scoop_1_gpiochip_node, 0, GPIO_ACTIVE_HIGH),
- { }
-};
-
-static const struct software_node spitz_green_led_node = {
- .name = "spitz:green:hddactivity",
- .parent = &spitz_gpio_leds_node,
- .properties = spitz_green_led_props,
-};
-
-static const struct software_node *spitz_gpio_leds_swnodes[] = {
- &spitz_gpio_leds_node,
- &spitz_orange_led_node,
- &spitz_green_led_node,
- NULL
-};
-
-static void __init spitz_leds_init(void)
-{
- struct platform_device_info led_info = {
- .name = "leds-gpio",
- .id = PLATFORM_DEVID_NONE,
- };
- struct platform_device *led_dev;
- int err;
-
- err = software_node_register_node_group(spitz_gpio_leds_swnodes);
- if (err) {
- pr_err("failed to register LED software nodes: %d\n", err);
- return;
- }
-
- led_info.fwnode = software_node_fwnode(&spitz_gpio_leds_node);
-
- led_dev = platform_device_register_full(&led_info);
- err = PTR_ERR_OR_ZERO(led_dev);
- if (err)
- pr_err("failed to create LED device: %d\n", err);
-}
-#else
-static inline void spitz_leds_init(void) {}
-#endif
-
-/******************************************************************************
- * SSP Devices
- ******************************************************************************/
-#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE)
-
-static const struct property_entry spitz_ads7846_props[] = {
- PROPERTY_ENTRY_STRING("compatible", "ti,ads7846"),
- PROPERTY_ENTRY_U32("touchscreen-max-pressure", 1024),
- PROPERTY_ENTRY_U16("ti,x-plate-ohms", 419),
- PROPERTY_ENTRY_U16("ti,y-plate-ohms", 486),
- PROPERTY_ENTRY_U16("ti,vref-delay-usecs", 100),
- PROPERTY_ENTRY_GPIO("pendown-gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_TP_INT, GPIO_ACTIVE_LOW),
- PROPERTY_ENTRY_GPIO("ti,hsync-gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_HSYNC, GPIO_ACTIVE_LOW),
- { }
-};
-
-static const struct software_node spitz_ads7846_swnode = {
- .name = "ads7846",
- .properties = spitz_ads7846_props,
-};
-
-static const struct property_entry spitz_lcdcon_props[] = {
- PROPERTY_ENTRY_GPIO("BL_CONT-gpios",
- &spitz_scoop_2_gpiochip_node, 6, GPIO_ACTIVE_LOW),
- PROPERTY_ENTRY_GPIO("BL_ON-gpios",
- &spitz_scoop_2_gpiochip_node, 7, GPIO_ACTIVE_HIGH),
- { }
-};
-
-static const struct property_entry akita_lcdcon_props[] = {
- PROPERTY_ENTRY_GPIO("BL_ON-gpios",
- &akita_max7310_gpiochip_node, 3, GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("BL_CONT-gpios",
- &akita_max7310_gpiochip_node, 4, GPIO_ACTIVE_LOW),
- { }
-};
-
-static struct software_node spitz_lcdcon_node = {
- .name = "spitz-lcdcon",
-};
-
-static struct corgi_lcd_platform_data spitz_lcdcon_info = {
- .init_mode = CORGI_LCD_MODE_VGA,
- .max_intensity = 0x2f,
- .default_intensity = 0x1f,
- .limit_mask = 0x0b,
- .kick_battery = sharpsl_battery_kick,
-};
-
-static struct spi_board_info spitz_spi_devices[] = {
- {
- .modalias = "ads7846",
- .max_speed_hz = 1200000,
- .bus_num = 2,
- .chip_select = 0,
- .swnode = &spitz_ads7846_swnode,
- .irq = PXA_GPIO_TO_IRQ(SPITZ_GPIO_TP_INT),
- }, {
- .modalias = "corgi-lcd",
- .max_speed_hz = 50000,
- .bus_num = 2,
- .chip_select = 1,
- .platform_data = &spitz_lcdcon_info,
- .swnode = &spitz_lcdcon_node,
- }, {
- .modalias = "max1111",
- .max_speed_hz = 450000,
- .bus_num = 2,
- .chip_select = 2,
- },
-};
-
-static const struct software_node_ref_args spitz_spi_gpio_refs[] = {
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_ADS7846_CS,
- GPIO_ACTIVE_LOW),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_LCDCON_CS,
- GPIO_ACTIVE_LOW),
- SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_MAX1111_CS,
- GPIO_ACTIVE_LOW),
-};
-
-static const struct property_entry spitz_spi_properties[] = {
- PROPERTY_ENTRY_REF_ARRAY("gpios", spitz_spi_gpio_refs),
- { }
-};
-
-static const struct platform_device_info spitz_spi_device_info = {
- .name = "pxa2xx-spi",
- /* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1 */
- .id = 2,
- .properties = spitz_spi_properties,
-};
-
-static void __init spitz_spi_init(void)
-{
- struct platform_device *pd;
- int err;
-
- pd = platform_device_register_full(&spitz_spi_device_info);
- err = PTR_ERR_OR_ZERO(pd);
- if (err)
- pr_err("pxa2xx-spi: failed to instantiate SPI controller: %d\n",
- err);
-
- spitz_lcdcon_node.properties = machine_is_akita() ?
- akita_lcdcon_props : spitz_lcdcon_props;
- spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices));
-}
-#else
-static inline void spitz_spi_init(void) {}
-#endif
-
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
-/*
- * NOTE: The card detect interrupt isn't debounced so we delay it by 250ms to
- * give the card a chance to fully insert/eject.
- */
-static int spitz_mci_setpower(struct device *dev, unsigned int vdd)
-{
- struct pxamci_platform_data* p_d = dev->platform_data;
-
- if ((1 << vdd) & p_d->ocr_mask)
- spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, SCOOP_CPR_SD_3V);
- else
- spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, 0x0);
-
- return 0;
-}
-
-static struct pxamci_platform_data spitz_mci_platform_data = {
- .detect_delay_ms = 250,
- .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
- .setpower = spitz_mci_setpower,
-};
-
-static const struct property_entry spitz_mci_props[] __initconst = {
- PROPERTY_ENTRY_GPIO("cd-gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_nSD_DETECT, GPIO_ACTIVE_LOW),
- PROPERTY_ENTRY_GPIO("wp-gpios", &pxa2xx_gpiochip_node,
- SPITZ_GPIO_nSD_WP, GPIO_ACTIVE_LOW),
- { }
-};
-
-static void __init spitz_mmc_init(void)
-{
- pxa_set_mci_info(&spitz_mci_platform_data, spitz_mci_props);
-}
-#else
-static inline void spitz_mmc_init(void) {}
-#endif
-
-/******************************************************************************
- * USB Host
- ******************************************************************************/
-#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
-static int spitz_ohci_init(struct device *dev)
-{
- int err;
-
- err = gpio_request(SPITZ_GPIO_USB_HOST, "USB_HOST");
- if (err)
- return err;
-
- /* Only Port 2 is connected, setup USB Port 2 Output Control Register */
- UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
-
- return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
-}
-
-static void spitz_ohci_exit(struct device *dev)
-{
- gpio_free(SPITZ_GPIO_USB_HOST);
-}
-
-static struct pxaohci_platform_data spitz_ohci_platform_data = {
- .port_mode = PMM_NPS_MODE,
- .init = spitz_ohci_init,
- .exit = spitz_ohci_exit,
- .flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
- .power_budget = 150,
-};
-
-static void __init spitz_uhc_init(void)
-{
- pxa_set_ohci_info(&spitz_ohci_platform_data);
-}
-#else
-static inline void spitz_uhc_init(void) {}
-#endif
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
-static struct pxafb_mode_info spitz_pxafb_modes[] = {
- {
- .pixclock = 19231,
- .xres = 480,
- .yres = 640,
- .bpp = 16,
- .hsync_len = 40,
- .left_margin = 46,
- .right_margin = 125,
- .vsync_len = 3,
- .upper_margin = 1,
- .lower_margin = 0,
- .sync = 0,
- }, {
- .pixclock = 134617,
- .xres = 240,
- .yres = 320,
- .bpp = 16,
- .hsync_len = 20,
- .left_margin = 20,
- .right_margin = 46,
- .vsync_len = 2,
- .upper_margin = 1,
- .lower_margin = 0,
- .sync = 0,
- },
-};
-
-static struct pxafb_mach_info spitz_pxafb_info = {
- .modes = spitz_pxafb_modes,
- .num_modes = ARRAY_SIZE(spitz_pxafb_modes),
- .fixed_modes = 1,
- .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING,
-};
-
-static void __init spitz_lcd_init(void)
-{
- pxa_set_fb_info(NULL, &spitz_pxafb_info);
-}
-#else
-static inline void spitz_lcd_init(void) {}
-#endif
-
-/******************************************************************************
- * NAND Flash
- ******************************************************************************/
-#if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE)
-static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
-
-static struct nand_bbt_descr spitz_nand_bbt = {
- .options = 0,
- .offs = 4,
- .len = 2,
- .pattern = scan_ff_pattern
-};
-
-static int akita_ooblayout_ecc(struct mtd_info *mtd, int section,
- struct mtd_oob_region *oobregion)
-{
- if (section > 12)
- return -ERANGE;
-
- switch (section % 3) {
- case 0:
- oobregion->offset = 5;
- oobregion->length = 1;
- break;
-
- case 1:
- oobregion->offset = 1;
- oobregion->length = 3;
- break;
-
- case 2:
- oobregion->offset = 6;
- oobregion->length = 2;
- break;
- }
-
- oobregion->offset += (section / 3) * 0x10;
-
- return 0;
-}
-
-static int akita_ooblayout_free(struct mtd_info *mtd, int section,
- struct mtd_oob_region *oobregion)
-{
- if (section)
- return -ERANGE;
-
- oobregion->offset = 8;
- oobregion->length = 9;
-
- return 0;
-}
-
-static const struct mtd_ooblayout_ops akita_ooblayout_ops = {
- .ecc = akita_ooblayout_ecc,
- .free = akita_ooblayout_free,
-};
-
-static const char * const probes[] = {
- "cmdlinepart",
- "ofpart",
- "sharpslpart",
- NULL,
-};
-
-static struct sharpsl_nand_platform_data spitz_nand_pdata = {
- .badblock_pattern = &spitz_nand_bbt,
- .part_parsers = probes,
-};
-
-static struct resource spitz_nand_resources[] = {
- {
- .start = PXA_CS3_PHYS,
- .end = PXA_CS3_PHYS + SZ_4K - 1,
- .flags = IORESOURCE_MEM,
- },
-};
-
-static struct platform_device spitz_nand_device = {
- .name = "sharpsl-nand",
- .id = -1,
- .resource = spitz_nand_resources,
- .num_resources = ARRAY_SIZE(spitz_nand_resources),
- .dev = {
- .platform_data = &spitz_nand_pdata,
- }
-};
-
-static void __init spitz_nand_init(void)
-{
- if (machine_is_akita() || machine_is_borzoi()) {
- spitz_nand_bbt.len = 1;
- spitz_nand_pdata.ecc_layout = &akita_ooblayout_ops;
- }
-
- platform_device_register(&spitz_nand_device);
-}
-#else
-static inline void spitz_nand_init(void) {}
-#endif
-
-/******************************************************************************
- * NOR Flash
- ******************************************************************************/
-#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
-static struct mtd_partition spitz_rom_parts[] = {
- {
- .name ="Boot PROM Filesystem",
- .offset = 0x00140000,
- .size = MTDPART_SIZ_FULL,
- },
-};
-
-static struct physmap_flash_data spitz_rom_data = {
- .width = 2,
- .nr_parts = ARRAY_SIZE(spitz_rom_parts),
- .parts = spitz_rom_parts,
-};
-
-static struct resource spitz_rom_resources[] = {
- {
- .start = PXA_CS0_PHYS,
- .end = PXA_CS0_PHYS + SZ_8M - 1,
- .flags = IORESOURCE_MEM,
- },
-};
-
-static struct platform_device spitz_rom_device = {
- .name = "physmap-flash",
- .id = -1,
- .resource = spitz_rom_resources,
- .num_resources = ARRAY_SIZE(spitz_rom_resources),
- .dev = {
- .platform_data = &spitz_rom_data,
- },
-};
-
-static void __init spitz_nor_init(void)
-{
- platform_device_register(&spitz_rom_device);
-}
-#else
-static inline void spitz_nor_init(void) {}
-#endif
-
-/******************************************************************************
- * I2C devices
- ******************************************************************************/
-#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
-static struct pca953x_platform_data akita_pca953x_pdata = {
- .gpio_base = AKITA_IOEXP_GPIO_BASE,
-};
-
-static struct i2c_board_info spitz_i2c_devs[] = {
- {
- .type = "wm8750",
- .addr = 0x1b,
- }, {
- .type = "max7310",
- .addr = 0x18,
- .platform_data = &akita_pca953x_pdata,
- .swnode = &akita_max7310_gpiochip_node,
- },
-};
-
-static struct regulator_consumer_supply isl6271a_consumers[] = {
- REGULATOR_SUPPLY("vcc_core", NULL),
-};
-
-static struct regulator_init_data isl6271a_info[] = {
- {
- .constraints = {
- .name = "vcc_core range",
- .min_uV = 850000,
- .max_uV = 1600000,
- .always_on = 1,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- },
- .consumer_supplies = isl6271a_consumers,
- .num_consumer_supplies = ARRAY_SIZE(isl6271a_consumers),
- }
-};
-
-static struct i2c_board_info spitz_pi2c_devs[] = {
- {
- .type = "isl6271a",
- .addr = 0x0c,
- .platform_data = &isl6271a_info,
- },
-};
-
-static void __init spitz_i2c_init(void)
-{
- int size = ARRAY_SIZE(spitz_i2c_devs);
-
- /* Only Akita has the max7310 chip */
- if (!machine_is_akita())
- size--;
-
- pxa_set_i2c_info(NULL);
- pxa27x_set_i2c_power_info(NULL);
- i2c_register_board_info(0, spitz_i2c_devs, size);
- i2c_register_board_info(1, ARRAY_AND_SIZE(spitz_pi2c_devs));
-}
-#else
-static inline void spitz_i2c_init(void) {}
-#endif
-
-static const struct property_entry spitz_audio_props[] = {
- PROPERTY_ENTRY_GPIO("mute-l-gpios", &spitz_scoop_1_gpiochip_node, 3,
- GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("mute-r-gpios", &spitz_scoop_1_gpiochip_node, 4,
- GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("mic-gpios", &spitz_scoop_2_gpiochip_node, 8,
- GPIO_ACTIVE_HIGH),
- { }
-};
-
-static const struct property_entry akita_audio_props[] = {
- PROPERTY_ENTRY_GPIO("mute-l-gpios", &spitz_scoop_1_gpiochip_node, 3,
- GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("mute-r-gpios", &spitz_scoop_1_gpiochip_node, 4,
- GPIO_ACTIVE_HIGH),
- PROPERTY_ENTRY_GPIO("mic-gpios", &akita_max7310_gpiochip_node, 2,
- GPIO_ACTIVE_HIGH),
- { }
-};
-
-/******************************************************************************
- * Audio devices
- ******************************************************************************/
-static inline void spitz_audio_init(void)
-{
- struct platform_device_info audio_info = {
- .name = "spitz-audio",
- .id = PLATFORM_DEVID_NONE,
- .properties = machine_is_akita() ?
- akita_audio_props : spitz_audio_props,
- };
-
- platform_device_register_full(&audio_info);
-}
-
-/******************************************************************************
- * Machine init
- ******************************************************************************/
-static void spitz_poweroff(void)
-{
- pxa_restart(REBOOT_GPIO, NULL);
-}
-
-static void spitz_restart(enum reboot_mode mode, const char *cmd)
-{
- uint32_t msc0 = __raw_readl(MSC0);
- /* Bootloader magic for a reboot */
- if ((msc0 & 0xffff0000) == 0x7ff00000)
- __raw_writel((msc0 & 0xffff) | 0x7ee00000, MSC0);
-
- spitz_poweroff();
-}
-
-static void __init spitz_init(void)
-{
- software_node_register(&spitz_scoop_1_gpiochip_node);
- if (machine_is_akita())
- software_node_register(&akita_max7310_gpiochip_node);
- else
- software_node_register(&spitz_scoop_2_gpiochip_node);
-
- init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0);
- register_platform_power_off(spitz_poweroff);
-
- PMCR = 0x00;
-
- /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
- PCFR |= PCFR_OPDE;
-
- pxa2xx_mfp_config(ARRAY_AND_SIZE(spitz_pin_config));
-
- pxa_set_ffuart_info(NULL);
- pxa_set_btuart_info(NULL);
- pxa_set_stuart_info(NULL);
-
- spitz_spi_init();
- spitz_scoop_init();
- spitz_mkp_init();
- spitz_keys_init();
- spitz_leds_init();
- spitz_mmc_init();
- spitz_pcmcia_init();
- spitz_uhc_init();
- spitz_lcd_init();
- spitz_nor_init();
- spitz_nand_init();
- spitz_i2c_init();
- spitz_audio_init();
-
- regulator_has_full_constraints();
-}
-
-static void __init spitz_fixup(struct tag *tags, char **cmdline)
-{
- sharpsl_save_param();
- memblock_add(0xa0000000, SZ_64M);
-}
-
-#ifdef CONFIG_MACH_SPITZ
-MACHINE_START(SPITZ, "SHARP Spitz")
- .fixup = spitz_fixup,
- .map_io = pxa27x_map_io,
- .nr_irqs = PXA_NR_IRQS,
- .init_irq = pxa27x_init_irq,
- .init_machine = spitz_init,
- .init_time = pxa_timer_init,
- .restart = spitz_restart,
-MACHINE_END
-#endif
-
-#ifdef CONFIG_MACH_BORZOI
-MACHINE_START(BORZOI, "SHARP Borzoi")
- .fixup = spitz_fixup,
- .map_io = pxa27x_map_io,
- .nr_irqs = PXA_NR_IRQS,
- .init_irq = pxa27x_init_irq,
- .init_machine = spitz_init,
- .init_time = pxa_timer_init,
- .restart = spitz_restart,
-MACHINE_END
-#endif
-
-#ifdef CONFIG_MACH_AKITA
-MACHINE_START(AKITA, "SHARP Akita")
- .fixup = spitz_fixup,
- .map_io = pxa27x_map_io,
- .nr_irqs = PXA_NR_IRQS,
- .init_irq = pxa27x_init_irq,
- .init_machine = spitz_init,
- .init_time = pxa_timer_init,
- .restart = spitz_restart,
-MACHINE_END
-#endif
diff --git a/arch/arm/mach-pxa/spitz.h b/arch/arm/mach-pxa/spitz.h
deleted file mode 100644
index 04828d8918aa..000000000000
--- a/arch/arm/mach-pxa/spitz.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Hardware specific definitions for SL-Cx000 series of PDAs
- *
- * Copyright (c) 2005 Alexander Wykes
- * Copyright (c) 2005 Richard Purdie
- *
- * Based on Sharp's 2.4 kernel patches
- */
-#ifndef __ASM_ARCH_SPITZ_H
-#define __ASM_ARCH_SPITZ_H 1
-#endif
-
-#include "irqs.h" /* PXA_NR_BUILTIN_GPIO, PXA_GPIO_TO_IRQ */
-#include <linux/fb.h>
-
-/* Spitz/Akita GPIOs */
-
-#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */
-#define SPITZ_GPIO_RESET (1)
-#define SPITZ_GPIO_nSD_DETECT (9)
-#define SPITZ_GPIO_TP_INT (11) /* Touch Panel interrupt */
-#define SPITZ_GPIO_AK_INT (13) /* Remote Control */
-#define SPITZ_GPIO_ADS7846_CS (14)
-#define SPITZ_GPIO_SYNC (16)
-#define SPITZ_GPIO_MAX1111_CS (20)
-#define SPITZ_GPIO_FATAL_BAT (21)
-#define SPITZ_GPIO_HSYNC (22)
-#define SPITZ_GPIO_nSD_CLK (32)
-#define SPITZ_GPIO_USB_DEVICE (35)
-#define SPITZ_GPIO_USB_HOST (37)
-#define SPITZ_GPIO_USB_CONNECT (41)
-#define SPITZ_GPIO_LCDCON_CS (53)
-#define SPITZ_GPIO_nPCE (54)
-#define SPITZ_GPIO_nSD_WP (81)
-#define SPITZ_GPIO_ON_RESET (89)
-#define SPITZ_GPIO_BAT_COVER (90)
-#define SPITZ_GPIO_CF_CD (94)
-#define SPITZ_GPIO_ON_KEY (95)
-#define SPITZ_GPIO_SWA (97)
-#define SPITZ_GPIO_SWB (96)
-#define SPITZ_GPIO_CHRG_FULL (101)
-#define SPITZ_GPIO_CO (101)
-#define SPITZ_GPIO_CF_IRQ (105)
-#define SPITZ_GPIO_AC_IN (115)
-#define SPITZ_GPIO_HP_IN (116)
-
-/* Spitz Only GPIOs */
-
-#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */
-#define SPITZ_GPIO_CF2_CD (93)
-
-
-/* Spitz/Akita Keyboard Definitions */
-
-#define SPITZ_KEY_STROBE_NUM (11)
-#define SPITZ_KEY_SENSE_NUM (7)
-#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000
-#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000
-#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000
-#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880
-#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000
-#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4
-#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000
-#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000
-
-#define SPITZ_GPIO_KEY_STROBE0 88
-#define SPITZ_GPIO_KEY_STROBE1 23
-#define SPITZ_GPIO_KEY_STROBE2 24
-#define SPITZ_GPIO_KEY_STROBE3 25
-#define SPITZ_GPIO_KEY_STROBE4 26
-#define SPITZ_GPIO_KEY_STROBE5 27
-#define SPITZ_GPIO_KEY_STROBE6 52
-#define SPITZ_GPIO_KEY_STROBE7 103
-#define SPITZ_GPIO_KEY_STROBE8 107
-#define SPITZ_GPIO_KEY_STROBE9 108
-#define SPITZ_GPIO_KEY_STROBE10 114
-
-#define SPITZ_GPIO_KEY_SENSE0 12
-#define SPITZ_GPIO_KEY_SENSE1 17
-#define SPITZ_GPIO_KEY_SENSE2 91
-#define SPITZ_GPIO_KEY_SENSE3 34
-#define SPITZ_GPIO_KEY_SENSE4 36
-#define SPITZ_GPIO_KEY_SENSE5 38
-#define SPITZ_GPIO_KEY_SENSE6 39
-
-
-/* Spitz Scoop Device (No. 1) GPIOs */
-/* Suspend States in comments */
-#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Keep */
-#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Keep */
-#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Keep */
-#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Low */
-#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Low */
-#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* Keep */
-#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Keep */
-#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Low */
-#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Low */
-
-#define SPITZ_SCP_IO_DIR (SPITZ_SCP_JK_B | SPITZ_SCP_CHRG_ON | \
- SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | \
- SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
-#define SPITZ_SCP_IO_OUT (SPITZ_SCP_CHRG_ON | SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R)
-#define SPITZ_SCP_SUS_CLR (SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
-#define SPITZ_SCP_SUS_SET 0
-
-#define SPITZ_SCP_GPIO_BASE (PXA_NR_BUILTIN_GPIO)
-#define SPITZ_GPIO_LED_GREEN (SPITZ_SCP_GPIO_BASE + 0)
-#define SPITZ_GPIO_JK_B (SPITZ_SCP_GPIO_BASE + 1)
-#define SPITZ_GPIO_CHRG_ON (SPITZ_SCP_GPIO_BASE + 2)
-#define SPITZ_GPIO_MUTE_L (SPITZ_SCP_GPIO_BASE + 3)
-#define SPITZ_GPIO_MUTE_R (SPITZ_SCP_GPIO_BASE + 4)
-#define SPITZ_GPIO_CF_POWER (SPITZ_SCP_GPIO_BASE + 5)
-#define SPITZ_GPIO_LED_ORANGE (SPITZ_SCP_GPIO_BASE + 6)
-#define SPITZ_GPIO_JK_A (SPITZ_SCP_GPIO_BASE + 7)
-#define SPITZ_GPIO_ADC_TEMP_ON (SPITZ_SCP_GPIO_BASE + 8)
-
-/* Spitz Scoop Device (No. 2) GPIOs */
-/* Suspend States in comments */
-#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* High */
-#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Keep */
-#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */
-#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */
-#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */
-#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */
-#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Low */
-#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Low */
-#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Low */
-
-#define SPITZ_SCP2_IO_DIR (SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1 | \
- SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
-
-#define SPITZ_SCP2_IO_OUT (SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1)
-#define SPITZ_SCP2_SUS_CLR (SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
-#define SPITZ_SCP2_SUS_SET (SPITZ_SCP2_IR_ON | SPITZ_SCP2_RESERVED_1)
-
-#define SPITZ_SCP2_GPIO_BASE (PXA_NR_BUILTIN_GPIO + 12)
-#define SPITZ_GPIO_IR_ON (SPITZ_SCP2_GPIO_BASE + 0)
-#define SPITZ_GPIO_AKIN_PULLUP (SPITZ_SCP2_GPIO_BASE + 1)
-#define SPITZ_GPIO_RESERVED_1 (SPITZ_SCP2_GPIO_BASE + 2)
-#define SPITZ_GPIO_RESERVED_2 (SPITZ_SCP2_GPIO_BASE + 3)
-#define SPITZ_GPIO_RESERVED_3 (SPITZ_SCP2_GPIO_BASE + 4)
-#define SPITZ_GPIO_RESERVED_4 (SPITZ_SCP2_GPIO_BASE + 5)
-#define SPITZ_GPIO_BACKLIGHT_CONT (SPITZ_SCP2_GPIO_BASE + 6)
-#define SPITZ_GPIO_BACKLIGHT_ON (SPITZ_SCP2_GPIO_BASE + 7)
-#define SPITZ_GPIO_MIC_BIAS (SPITZ_SCP2_GPIO_BASE + 8)
-
-/* Akita IO Expander GPIOs */
-#define AKITA_IOEXP_GPIO_BASE (PXA_NR_BUILTIN_GPIO + 12)
-#define AKITA_GPIO_RESERVED_0 (AKITA_IOEXP_GPIO_BASE + 0)
-#define AKITA_GPIO_RESERVED_1 (AKITA_IOEXP_GPIO_BASE + 1)
-#define AKITA_GPIO_MIC_BIAS (AKITA_IOEXP_GPIO_BASE + 2)
-#define AKITA_GPIO_BACKLIGHT_ON (AKITA_IOEXP_GPIO_BASE + 3)
-#define AKITA_GPIO_BACKLIGHT_CONT (AKITA_IOEXP_GPIO_BASE + 4)
-#define AKITA_GPIO_AKIN_PULLUP (AKITA_IOEXP_GPIO_BASE + 5)
-#define AKITA_GPIO_IR_ON (AKITA_IOEXP_GPIO_BASE + 6)
-#define AKITA_GPIO_RESERVED_7 (AKITA_IOEXP_GPIO_BASE + 7)
-
-/* Spitz IRQ Definitions */
-
-#define SPITZ_IRQ_GPIO_KEY_INT PXA_GPIO_TO_IRQ(SPITZ_GPIO_KEY_INT)
-#define SPITZ_IRQ_GPIO_AC_IN PXA_GPIO_TO_IRQ(SPITZ_GPIO_AC_IN)
-#define SPITZ_IRQ_GPIO_AK_INT PXA_GPIO_TO_IRQ(SPITZ_GPIO_AK_INT)
-#define SPITZ_IRQ_GPIO_HP_IN PXA_GPIO_TO_IRQ(SPITZ_GPIO_HP_IN)
-#define SPITZ_IRQ_GPIO_TP_INT PXA_GPIO_TO_IRQ(SPITZ_GPIO_TP_INT)
-#define SPITZ_IRQ_GPIO_SYNC PXA_GPIO_TO_IRQ(SPITZ_GPIO_SYNC)
-#define SPITZ_IRQ_GPIO_ON_KEY PXA_GPIO_TO_IRQ(SPITZ_GPIO_ON_KEY)
-#define SPITZ_IRQ_GPIO_SWA PXA_GPIO_TO_IRQ(SPITZ_GPIO_SWA)
-#define SPITZ_IRQ_GPIO_SWB PXA_GPIO_TO_IRQ(SPITZ_GPIO_SWB)
-#define SPITZ_IRQ_GPIO_BAT_COVER PXA_GPIO_TO_IRQ(SPITZ_GPIO_BAT_COVER)
-#define SPITZ_IRQ_GPIO_FATAL_BAT PXA_GPIO_TO_IRQ(SPITZ_GPIO_FATAL_BAT)
-#define SPITZ_IRQ_GPIO_CO PXA_GPIO_TO_IRQ(SPITZ_GPIO_CO)
-#define SPITZ_IRQ_GPIO_CF_IRQ PXA_GPIO_TO_IRQ(SPITZ_GPIO_CF_IRQ)
-#define SPITZ_IRQ_GPIO_CF_CD PXA_GPIO_TO_IRQ(SPITZ_GPIO_CF_CD)
-#define SPITZ_IRQ_GPIO_CF2_IRQ PXA_GPIO_TO_IRQ(SPITZ_GPIO_CF2_IRQ)
-#define SPITZ_IRQ_GPIO_nSD_INT PXA_GPIO_TO_IRQ(SPITZ_GPIO_nSD_INT)
-#define SPITZ_IRQ_GPIO_nSD_DETECT PXA_GPIO_TO_IRQ(SPITZ_GPIO_nSD_DETECT)
-
-/*
- * Shared data structures
- */
-extern struct platform_device spitzssp_device;
-extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c
deleted file mode 100644
index 806847c36549..000000000000
--- a/arch/arm/mach-pxa/spitz_pm.c
+++ /dev/null
@@ -1,257 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Battery and Power Management code for the Sharp SL-Cxx00
- *
- * Copyright (c) 2005 Richard Purdie
- */
-
-#include <linux/module.h>
-#include <linux/stat.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include <linux/gpio/legacy.h>
-#include <linux/gpio-pxa.h>
-#include <linux/interrupt.h>
-#include <linux/platform_device.h>
-#include <linux/apm-emulation.h>
-#include <linux/spi/corgi_lcd.h>
-
-#include <asm/irq.h>
-#include <asm/mach-types.h>
-
-#include "spitz.h"
-#include "pxa27x.h"
-#include "sharpsl_pm.h"
-
-#include "generic.h"
-
-#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
-#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
-#define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */
-#define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */
-#define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */
-#define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */
-
-static int spitz_last_ac_status;
-
-static void spitz_charger_init(void)
-{
- gpio_request(SPITZ_GPIO_KEY_INT, "Keyboard Interrupt");
- gpio_direction_input(SPITZ_GPIO_KEY_INT);
- gpio_request(SPITZ_GPIO_SYNC, "Sync");
- gpio_direction_input(SPITZ_GPIO_SYNC);
- gpio_request(SPITZ_GPIO_AC_IN, "Charger Detection");
- gpio_direction_input(SPITZ_GPIO_AC_IN);
- gpio_request(SPITZ_GPIO_ADC_TEMP_ON, "ADC Temp On");
- gpio_direction_output(SPITZ_GPIO_ADC_TEMP_ON, 0);
- gpio_request(SPITZ_GPIO_JK_B, "JK B");
- gpio_direction_output(SPITZ_GPIO_JK_B, 0);
- gpio_request(SPITZ_GPIO_CHRG_ON, "Charger On");
- gpio_direction_output(SPITZ_GPIO_CHRG_ON, 0);
-}
-
-static void spitz_measure_temp(int on)
-{
- gpio_set_value(SPITZ_GPIO_ADC_TEMP_ON, on);
-}
-
-static void spitz_charge(int on)
-{
- if (on) {
- if (sharpsl_pm.flags & SHARPSL_SUSPENDED) {
- gpio_set_value(SPITZ_GPIO_JK_B, 1);
- gpio_set_value(SPITZ_GPIO_CHRG_ON, 0);
- } else {
- gpio_set_value(SPITZ_GPIO_JK_B, 0);
- gpio_set_value(SPITZ_GPIO_CHRG_ON, 0);
- }
- } else {
- gpio_set_value(SPITZ_GPIO_JK_B, 0);
- gpio_set_value(SPITZ_GPIO_CHRG_ON, 1);
- }
-}
-
-static void spitz_discharge(int on)
-{
- gpio_set_value(SPITZ_GPIO_JK_A, on);
-}
-
-/* HACK - For unknown reasons, accurate voltage readings are only made with a load
- on the power bus which the green led on spitz provides */
-static void spitz_discharge1(int on)
-{
- gpio_set_value(SPITZ_GPIO_LED_GREEN, on);
-}
-
-static unsigned long gpio18_config = GPIO18_GPIO;
-
-static void spitz_presuspend(void)
-{
- spitz_last_ac_status = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
-
- /* GPIO Sleep Register */
- PGSR0 = 0x00144018;
- PGSR1 = 0x00EF0000;
- if (machine_is_akita()) {
- PGSR2 = 0x2121C000;
- PGSR3 = 0x00600400;
- } else {
- PGSR2 = 0x0121C000;
- PGSR3 = 0x00600000;
- }
-
- PGSR0 &= ~SPITZ_GPIO_G0_STROBE_BIT;
- PGSR1 &= ~SPITZ_GPIO_G1_STROBE_BIT;
- PGSR2 &= ~SPITZ_GPIO_G2_STROBE_BIT;
- PGSR3 &= ~SPITZ_GPIO_G3_STROBE_BIT;
- PGSR2 |= GPIO_bit(SPITZ_GPIO_KEY_STROBE0);
-
- pxa2xx_mfp_config(&gpio18_config, 1);
- gpio_request_one(18, GPIOF_OUT_INIT_HIGH, "Unknown");
- gpio_free(18);
-
- PRER = GPIO_bit(SPITZ_GPIO_KEY_INT);
- PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
- PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET) | PWER_RTC;
- PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
- PKSR = 0xffffffff; /* clear */
-
- /* nRESET_OUT Disable */
- PSLR |= PSLR_SL_ROD;
-
- /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
- PCFR = PCFR_GPR_EN | PCFR_OPDE;
-}
-
-static void spitz_postsuspend(void)
-{
-}
-
-static int spitz_should_wakeup(unsigned int resume_on_alarm)
-{
- int is_resume = 0;
- int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
-
- if (spitz_last_ac_status != acin) {
- if (acin) {
- /* charge on */
- sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
- dev_dbg(sharpsl_pm.dev, "AC Inserted\n");
- } else {
- /* charge off */
- dev_dbg(sharpsl_pm.dev, "AC Removed\n");
- sharpsl_pm_led(SHARPSL_LED_OFF);
- sharpsl_pm.machinfo->charge(0);
- sharpsl_pm.charge_mode = CHRG_OFF;
- }
- spitz_last_ac_status = acin;
- /* Return to suspend as this must be what we were woken for */
- return 0;
- }
-
- if (PEDR & GPIO_bit(SPITZ_GPIO_KEY_INT))
- is_resume |= GPIO_bit(SPITZ_GPIO_KEY_INT);
-
- if (PKSR & GPIO_bit(SPITZ_GPIO_SYNC))
- is_resume |= GPIO_bit(SPITZ_GPIO_SYNC);
-
- if (resume_on_alarm && (PEDR & PWER_RTC))
- is_resume |= PWER_RTC;
-
- dev_dbg(sharpsl_pm.dev, "is_resume: %x\n", is_resume);
- return is_resume;
-}
-
-static bool spitz_charger_wakeup(void)
-{
- return !gpio_get_value(SPITZ_GPIO_KEY_INT) ||
- gpio_get_value(SPITZ_GPIO_SYNC);
-}
-
-static unsigned long spitzpm_read_devdata(int type)
-{
- switch (type) {
- case SHARPSL_STATUS_ACIN:
- return !gpio_get_value(SPITZ_GPIO_AC_IN);
- case SHARPSL_STATUS_LOCK:
- return gpio_get_value(sharpsl_pm.machinfo->gpio_batlock);
- case SHARPSL_STATUS_CHRGFULL:
- return gpio_get_value(sharpsl_pm.machinfo->gpio_batfull);
- case SHARPSL_STATUS_FATAL:
- return gpio_get_value(sharpsl_pm.machinfo->gpio_fatal);
- case SHARPSL_ACIN_VOLT:
- return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
- case SHARPSL_BATT_TEMP:
- return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP);
- case SHARPSL_BATT_VOLT:
- default:
- return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT);
- }
-}
-
-struct sharpsl_charger_machinfo spitz_pm_machinfo = {
- .init = spitz_charger_init,
- .exit = NULL,
- .gpio_batlock = SPITZ_GPIO_BAT_COVER,
- .gpio_acin = SPITZ_GPIO_AC_IN,
- .gpio_batfull = SPITZ_GPIO_CHRG_FULL,
- .batfull_irq = 1,
- .gpio_fatal = SPITZ_GPIO_FATAL_BAT,
- .discharge = spitz_discharge,
- .discharge1 = spitz_discharge1,
- .charge = spitz_charge,
- .measure_temp = spitz_measure_temp,
- .presuspend = spitz_presuspend,
- .postsuspend = spitz_postsuspend,
- .read_devdata = spitzpm_read_devdata,
- .charger_wakeup = spitz_charger_wakeup,
- .should_wakeup = spitz_should_wakeup,
-#if defined(CONFIG_LCD_CORGI)
- .backlight_limit = corgi_lcd_limit_intensity,
-#endif
- .charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
- .charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
- .charge_acin_high = SHARPSL_CHARGE_ON_ACIN_HIGH,
- .charge_acin_low = SHARPSL_CHARGE_ON_ACIN_LOW,
- .fatal_acin_volt = SHARPSL_FATAL_ACIN_VOLT,
- .fatal_noacin_volt= SHARPSL_FATAL_NOACIN_VOLT,
- .bat_levels = 40,
- .bat_levels_noac = sharpsl_battery_levels_noac,
- .bat_levels_acin = sharpsl_battery_levels_acin,
- .status_high_acin = 188,
- .status_low_acin = 178,
- .status_high_noac = 185,
- .status_low_noac = 175,
-};
-
-static struct platform_device *spitzpm_device;
-
-static int spitzpm_init(void)
-{
- int ret;
-
- if (!machine_is_spitz() && !machine_is_akita()
- && !machine_is_borzoi())
- return -ENODEV;
-
- spitzpm_device = platform_device_alloc("sharpsl-pm", -1);
- if (!spitzpm_device)
- return -ENOMEM;
-
- spitzpm_device->dev.platform_data = &spitz_pm_machinfo;
- ret = platform_device_add(spitzpm_device);
-
- if (ret)
- platform_device_put(spitzpm_device);
-
- return ret;
-}
-
-static void spitzpm_exit(void)
-{
- platform_device_unregister(spitzpm_device);
-}
-
-module_init(spitzpm_init);
-module_exit(spitzpm_exit);
--
2.53.0
next prev parent reply other threads:[~2026-09-08 15:29 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 15:27 [PATCH 00/13] ARM: deprecated platform removal Arnd Bergmann
2026-09-08 15:27 ` [PATCH 01/13] ARM: remove sa1100 platform Arnd Bergmann
2026-09-08 16:26 ` Guenter Roeck
2026-09-08 17:23 ` Linus Walleij
2026-09-08 19:39 ` Karl Mehltretter
2026-09-08 20:09 ` Arnd Bergmann
2026-09-08 20:36 ` Nicolas Pitre
2026-09-08 21:26 ` David Laight
2026-09-08 21:32 ` Arnd Bergmann
2026-09-08 15:27 ` [PATCH 02/13] ARM: remove footbridge Arnd Bergmann
2026-09-08 17:27 ` Linus Walleij
2026-09-09 15:09 ` Ralph Siemsen
2026-09-08 15:27 ` [PATCH 03/13] ARM: remove riscpc Arnd Bergmann
2026-09-09 8:04 ` Thomas Zimmermann
2026-09-09 16:42 ` Bart Van Assche
2026-09-09 20:09 ` Arnd Bergmann
2026-09-11 3:44 ` Ethan Nelson-Moore
2026-09-11 9:07 ` Linus Walleij
2026-09-11 13:25 ` Bart Van Assche
2026-09-11 13:37 ` Linus Walleij
2026-09-11 14:38 ` Daniel Palmer
2026-09-11 18:14 ` Linus Walleij
2026-09-12 1:29 ` Daniel Palmer
2026-09-11 18:42 ` Karl Mehltretter
2026-09-12 2:08 ` Ethan Nelson-Moore
2026-09-12 3:59 ` Ethan Nelson-Moore
2026-09-08 15:27 ` Arnd Bergmann [this message]
2026-09-08 17:30 ` [PATCH 04/13] ARM: remove legacy pxa board files Linus Walleij
2026-09-08 18:32 ` Daniel Mack
2026-09-08 15:27 ` [PATCH 05/13] ARM: orion/dove/mv78xx0: remove all " Arnd Bergmann
2026-09-08 15:34 ` Mark Brown
2026-09-08 16:12 ` Ulf Hansson
2026-09-08 16:18 ` Andrew Lunn
2026-09-08 17:33 ` Linus Walleij
2026-09-08 20:14 ` Niklas Cassel
2026-09-09 12:54 ` Gregory CLEMENT
2026-09-11 10:22 ` Daniel Lezcano
2026-09-08 15:27 ` [PATCH 06/13] ARM: omap2: remove omap24xx support Arnd Bergmann
2026-09-08 17:18 ` Aaro Koskinen
2026-09-08 17:35 ` Linus Walleij
2026-09-08 19:21 ` Karl Mehltretter
2026-09-08 19:42 ` Arnd Bergmann
2026-09-09 8:06 ` Thomas Zimmermann
2026-09-08 15:27 ` [PATCH 07/13] ARM: imx: remove i.MX31 SoC support Arnd Bergmann
2026-09-09 8:24 ` Vladimir Zapolskiy
2026-09-09 8:26 ` Daniel Baluta
2026-09-10 15:11 ` Frank Li
2026-09-08 15:27 ` [PATCH 08/13] ARM: imx: remove nommu support Arnd Bergmann
2026-09-09 20:17 ` Fabio Estevam
2026-09-09 20:21 ` Fabio Estevam
2026-09-10 13:08 ` Jesse T
2026-09-10 16:08 ` Giulio Benetti
2026-09-10 15:14 ` Frank Li
2026-09-08 15:27 ` [PATCH 09/13] ARM: lpc18xx: remove entire platform Arnd Bergmann
2026-09-08 17:36 ` Linus Walleij
2026-09-09 8:28 ` Vladimir Zapolskiy
2026-09-08 15:28 ` [PATCH 10/13] ARM: stm32: remove stm32f4/f7/h7 MCU support Arnd Bergmann
2026-09-08 17:36 ` Linus Walleij
2026-09-11 15:46 ` Alexandre TORGUE
2026-09-08 15:28 ` [PATCH 11/13] ARM: versatile: remove mps2 support Arnd Bergmann
2026-09-08 15:41 ` Vladimir Murzin
2026-09-08 17:37 ` Linus Walleij
2026-09-08 19:49 ` Sudeep Holla
2026-09-08 19:51 ` Arnd Bergmann
2026-09-08 19:58 ` Sudeep Holla
2026-09-08 19:54 ` Sudeep Holla
2026-09-08 15:28 ` [PATCH 12/13] ARM: at91: remove samv7 support Arnd Bergmann
2026-09-08 17:39 ` Linus Walleij
2026-09-08 19:58 ` Sverdlin, Alexander
2026-09-08 21:09 ` Rob Herring
2026-09-08 21:30 ` Arnd Bergmann
2026-09-10 12:25 ` Nicolas Ferre
2026-09-09 12:41 ` Alexandre Belloni
2026-09-10 12:23 ` Nicolas Ferre
2026-09-08 15:28 ` [PATCH 13/13] ARM: axxia: remove entire platform Arnd Bergmann
2026-09-08 17:40 ` Linus Walleij
2026-09-08 18:23 ` Krzysztof Kozlowski
2026-09-08 20:02 ` Sverdlin, Alexander
2026-09-08 16:53 ` [PATCH 00/13] ARM: deprecated platform removal Randy Dunlap
2026-09-08 16:56 ` Randy Dunlap
2026-09-08 18:33 ` Arnd Bergmann
2026-09-08 18:39 ` Randy Dunlap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260908152808.3928630-5-arnd@kernel.org \
--to=arnd@kernel.org \
--cc=Frank.Li@nxp.com \
--cc=aaro.koskinen@iki.fi \
--cc=alexander.sverdlin@siemens.com \
--cc=alexandre.belloni@bootlin.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andreas@kemnade.info \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=brgl@kernel.org \
--cc=claudiu.beznea@tuxon.dev \
--cc=conor+dt@kernel.org \
--cc=daniel@zonque.org \
--cc=david@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=enelsonmoore@gmail.com \
--cc=festevam@gmail.com \
--cc=fustini@kernel.org \
--cc=geert@linux-m68k.org \
--cc=gregory.clement@bootlin.com \
--cc=haojian.zhuang@gmail.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=khilman@baylibre.com \
--cc=kmehltretter@gmail.com \
--cc=kristoffer.ericson@gmail.com \
--cc=krzk@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux@armlinux.org.uk \
--cc=liviu.dudau@arm.com \
--cc=lpieralisi@kernel.org \
--cc=mcoquelin.stm32@gmail.com \
--cc=nicolas.ferre@microchip.com \
--cc=npitre@baylibre.com \
--cc=robert.jarzmik@free.fr \
--cc=robh@kernel.org \
--cc=rogerq@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=sebastian.hesselbarth@gmail.com \
--cc=shawnguo@kernel.org \
--cc=stefan@agner.ch \
--cc=sudeep.holla@kernel.org \
--cc=tony@atomide.com \
--cc=vz@mleia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®