ARM: clps711x: Remove NEED_MACH_MEMORY_H dependency
Subsystems (7)
PATCH RESEND 1/15 ARM: clps711x: Remove NEED_MACH_MEMORY_H dependency
This patch removes dependency of NEED_MACH_MEMORY_H for CLPS711X-target. Since some board may have memory holes, define ARCH_HAS_HOLES_MEMORYMODEL for these boards.
--- arch/arm/Kconfig | 1 - arch/arm/mach-clps711x/Kconfig | 3 +- arch/arm/mach-clps711x/include/mach/memory.h | 41 ---------------------------- 3 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 arch/arm/mach-clps711x/include/mach/memory.h
arch/arm/Kconfig +0 -1
@@ -371,7 +371,6 @@ config ARCH_CLPS711X select CPU_ARM720T select GENERIC_CLOCKEVENTS select MULTI_IRQ_HANDLER - select NEED_MACH_MEMORY_H select SPARSE_IRQ help Support for Cirrus Logic 711x/721x/731x based boards.
arch/arm/mach-clps711x/Kconfig +1 -2
@@ -22,8 +22,7 @@ config ARCH_CLEP7312 config ARCH_EDB7211 bool "EDB7211" - select ARCH_SELECT_MEMORY_MODEL - select ARCH_SPARSEMEM_ENABLE + select ARCH_HAS_HOLES_MEMORYMODEL help Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211 evaluation board.
arch/arm/mach-clps711x/include/mach/memory.h deleted +0 -41
41 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND v2 1/3 GPIO: clps711x: Rewrite driver for using generic GPIO code
This patch provides rewritten driver for CLPS711X GPIO which uses generic GPIO code.
--- drivers/gpio/Kconfig | 5 +- drivers/gpio/gpio-clps711x.c | 226 +++++++++++-------------------------------- 2 files changed, 63 insertions(+), 168 deletions(-)
drivers/gpio/Kconfig +4 -1
@@ -109,8 +109,11 @@ config GPIO_MAX730X comment "Memory mapped GPIO drivers:" config GPIO_CLPS711X - def_bool y + tristate "CLPS711X GPIO support" depends on ARCH_CLPS711X + select GPIO_GENERIC + help + Say yes here to support GPIO on CLPS711X SoCs. config GPIO_GENERIC_PLATFORM tristate "Generic memory-mapped GPIO controller support (MMIO platform device)"
drivers/gpio/gpio-clps711x.c +59 -167
257 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND v2 1/3 GPIO: clps711x: Rewrite driver for using generic GPIO code
Quoted 6 lines · Alexander Shiyan
This patch provides rewritten driver for CLPS711X GPIO which uses generic GPIO code.
Acked-by Arnd Bergmann <[email protected]>Acked-by Linus Walleij <[email protected]>Signed-off-by Alexander Shiyan <[email protected]>
Alexander are you sending this through ARM SoC?
Alternatively I can carry this in the GPIO tree if there are no conflicts elsewhere in this next merge window.
Yours,
Linus Walleij
Re: [PATCH RESEND v2 1/3] GPIO: clps711x: Rewrite driver for using generic GPIO code
In reply to Alexander ShiyanQuoted 5 lines · Alexander Shiyan
Quoted 4 lines
This patch provides rewritten driver for CLPS711X GPIO which uses generic GPIO code.
Quoted 8 lines
Quoted 3 lines
Acked-by Arnd Bergmann <[email protected]>Acked-by Linus Walleij <[email protected]>Signed-off-by Alexander Shiyan <[email protected]>Alexander are you sending this through ARM SoC?
Alternatively I can carry this in the GPIO tree if there are no conflicts elsewhere in this next merge window.
This series already in arm-soc.
https://git.kernel.org/cgit/linux/kernel/git/arm/arm-soc.git/log/?h=clps711x/soc
Thanks.
---
PATCH RESEND 2/15 ARM: clps711x: Set PLL clock to zero if we work from 13 mHz source
In reply to Alexander ShiyanThis clock will be used in audio subsystem. Since audio cannot work without PLL we should indicate this.
--- arch/arm/mach-clps711x/common.c | 1 + 1 file changed, 1 insertion(+)
arch/arm/mach-clps711x/common.c +1 -0
@@ -301,6 +301,7 @@ void __init clps711x_timer_init(void) cpu = ext; bus = cpu; spi =135400 ; + pll =0 ; }else { cpu = pll;if (cpu >=36864000 )
Signature · 1 line
1.8.1.5
PATCH RESEND 3/15 ARM: clps711x: autcpu12: Move LCD DPOT definitions to board file
In reply to Alexander ShiyanWe do not have driver for Up/Down digital potentiometer (DPOT), so just define pins as GPIOs and export these pins to user.
--- arch/arm/mach-clps711x/board-autcpu12.c | 14 ++++++++++++++ arch/arm/mach-clps711x/include/mach/autcpu12.h | 8 -------- 2 files changed, 14 insertions(+), 8 deletions(-)
arch/arm/mach-clps711x/board-autcpu12.c +14 -0
@@ -51,12 +51,18 @@#define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000)#define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10) +/* NAND flash */ #define AUTCPU12_MMGPIO_BASE (CLPS711X_NR_GPIO)#define AUTCPU12_SMC_NCE (AUTCPU12_MMGPIO_BASE + 0)/* Bit 0 */ #define AUTCPU12_SMC_RDY CLPS711X_GPIO(1, 2)#define AUTCPU12_SMC_ALE CLPS711X_GPIO(1, 3)#define AUTCPU12_SMC_CLE CLPS711X_GPIO(1, 3) +/* LCD contrast digital potentiometer */ +#define AUTCPU12_DPOT_CS CLPS711X_GPIO(4, 0) +#define AUTCPU12_DPOT_CLK CLPS711X_GPIO(4, 1) +#define AUTCPU12_DPOT_UD CLPS711X_GPIO(4, 2) +static struct resource autcpu12_cs8900_resource[]__initdata = {DEFINE_RES_MEM (AUTCPU12_CS8900_BASE ,SZ_1K ),DEFINE_RES_IRQ (AUTCPU12_CS8900_IRQ ),
@@ -148,6 +154,12 @@ static struct platform_device autcpu12_mmgpio_pdev __initdata = { }, }; +static const struct gpio autcpu12_gpios[]__initconst = { + {AUTCPU12_DPOT_CS ,GPIOF_OUT_INIT_HIGH ,"DPOT CS" }, + {AUTCPU12_DPOT_CLK ,GPIOF_OUT_INIT_LOW ,"DPOT CLK" }, + {AUTCPU12_DPOT_UD ,GPIOF_OUT_INIT_LOW ,"DPOT UD" }, +}; +static void __init autcpu12_init (void ) {clps711x_devices_init ();
@@ -160,6 +172,8 @@ static void __init autcpu12_init(void)static void __init autcpu12_init_late (void ) { +gpio_request_array (autcpu12_gpios,ARRAY_SIZE (autcpu12_gpios)); +if (IS_ENABLED (MTD_NAND_GPIO ) &&IS_ENABLED (GPIO_GENERIC_PLATFORM )) {/* We are need both drivers to handle NAND */ platform_device_register (&autcpu12_nand_pdev);
arch/arm/mach-clps711x/include/mach/autcpu12.h +0 -8
@@ -48,12 +48,4 @@#define AUTCPU12_PHYS_LPT CS1_PHYS_BASE +0x0E000000/* physical */ -/* -* defines for lcd contrast -*/ -#define AUTCPU12_DPOT_PORT_OFFSET PEDR -#define AUTCPU12_DPOT_CS (1<<0) -#define AUTCPU12_DPOT_CLK (1<<1) -#define AUTCPU12_DPOT_UD (1<<2) -#endif
Signature · 1 line
1.8.1.5
PATCH RESEND 4/15 ARM: clps711x: autcpu12: Add support for NOR flash
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-autcpu12.c | 39 ++++++++++++++++++++++++-- arch/arm/mach-clps711x/include/mach/autcpu12.h | 5 ---- 2 files changed, 37 insertions(+), 7 deletions(-)
arch/arm/mach-clps711x/board-autcpu12.c +37 -2
@@ -26,6 +26,7 @@#include <linux/gpio.h> #include <linux/ioport.h> #include <linux/interrupt.h> +#include <linux/mtd/physmap.h> #include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h> #include <linux/platform_device.h>
@@ -45,12 +46,17 @@#include "common.h" #include "devices.h" -#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300) -#define AUTCPU12_CS8900_IRQ (IRQ_EINT3) +/* NOR flash */ +#define AUTCPU12_FLASH_BASE (CS0_PHYS_BASE) +/* SmartMedia flash */ #define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000)#define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10) +/* Ethernet */ +#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300) +#define AUTCPU12_CS8900_IRQ (IRQ_EINT3) +/* NAND flash */ #define AUTCPU12_MMGPIO_BASE (CLPS711X_NR_GPIO)#define AUTCPU12_SMC_NCE (AUTCPU12_MMGPIO_BASE + 0)/* Bit 0 */
@@ -160,9 +166,38 @@ static const struct gpio autcpu12_gpios[] __initconst = { { AUTCPU12_DPOT_UD, GPIOF_OUT_INIT_LOW, "DPOT UD" }, }; +static struct mtd_partition autcpu12_flash_partitions[] = { + { + .name ="NOR.0" , + .offset =0 , + .size =MTDPART_SIZ_FULL , + }, +}; + +static struct physmap_flash_data autcpu12_flash_pdata = { + .width =4 , + .parts = autcpu12_flash_partitions, + .nr_parts =ARRAY_SIZE (autcpu12_flash_partitions), +}; + +static struct resource autcpu12_flash_resources[]__initdata = { +DEFINE_RES_MEM (AUTCPU12_FLASH_BASE ,SZ_8M ), +}; + +static struct platform_device autcpu12_flash_pdev__initdata = { + .name ="physmap-flash" , + .id =0 , + .resource = autcpu12_flash_resources, + .num_resources =ARRAY_SIZE (autcpu12_flash_resources), + .dev = { + .platform_data = &autcpu12_flash_pdata, + }, +}; +static void __init autcpu12_init (void ) {clps711x_devices_init (); +platform_device_register (&autcpu12_flash_pdev);platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 );platform_device_register_simple ("cs89x0" ,0 , autcpu12_cs8900_resource,ARRAY_SIZE (autcpu12_cs8900_resource));
arch/arm/mach-clps711x/include/mach/autcpu12.h +0 -5
@@ -20,11 +20,6 @@#ifndef __ASM_ARCH_AUTCPU12_H#define __ASM_ARCH_AUTCPU12_H -/* -* The flash bank is wired to chip select 0 -*/ -#define AUTCPU12_PHYS_FLASH CS0_PHYS_BASE/* physical */ -/* offset for device specific information structure */ #define AUTCPU12_LCDINFO_OFFS (0x00010000)
Signature · 1 line
1.8.1.5
PATCH RESEND 5/15 ARM: clps711x: autcpu12: Special driver for handling memory is removed
In reply to Alexander ShiyanThis patch provide migration to using "mtd-ram" driver instead of using special driver for handling NVRAM memory.
--- arch/arm/mach-clps711x/board-autcpu12.c | 68 ++++++++++--- arch/arm/mach-clps711x/include/mach/autcpu12.h | 2 - drivers/mtd/maps/Kconfig | 7 -- drivers/mtd/maps/Makefile | 1 - drivers/mtd/maps/autcpu12-nvram.c | 129 ------------------------- 5 files changed, 56 insertions(+), 151 deletions(-) delete mode 100644 drivers/mtd/maps/autcpu12-nvram.c
arch/arm/mach-clps711x/board-autcpu12.c +56 -12
@@ -27,6 +27,7 @@#include <linux/ioport.h> #include <linux/interrupt.h> #include <linux/mtd/physmap.h> +#include <linux/mtd/plat-ram.h> #include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h> #include <linux/platform_device.h>
@@ -49,6 +50,9 @@/* NOR flash */ #define AUTCPU12_FLASH_BASE (CS0_PHYS_BASE) +/* NVRAM */ +#define AUTCPU12_NVRAM_BASE (CS1_PHYS_BASE + 0x02000000) +/* SmartMedia flash */ #define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000)#define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10)
@@ -74,17 +78,6 @@ static struct resource autcpu12_cs8900_resource[] __initdata = { DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ), }; -static struct resource autcpu12_nvram_resource[]__initdata = { -DEFINE_RES_MEM_NAMED (AUTCPU12_PHYS_NVRAM ,SZ_128K ,"SRAM" ), -}; - -static struct platform_device autcpu12_nvram_pdev__initdata = { - .name ="autcpu12_nvram" , - .id =-1 , - .resource = autcpu12_nvram_resource, - .num_resources =ARRAY_SIZE (autcpu12_nvram_resource), -}; -static struct resource autcpu12_nand_resource[]__initdata = {DEFINE_RES_MEM (AUTCPU12_SMC_BASE ,SZ_16 ), };
@@ -194,6 +187,57 @@ static struct platform_device autcpu12_flash_pdev __initdata = { }, }; +static struct resource autcpu12_nvram_resource[]__initdata = { +DEFINE_RES_MEM (AUTCPU12_NVRAM_BASE ,0 ), +}; + +static struct platdata_mtd_ram autcpu12_nvram_pdata = { + .bankwidth =4 , +}; + +static struct platform_device autcpu12_nvram_pdev__initdata = { + .name ="mtd-ram" , + .id =0 , + .resource = autcpu12_nvram_resource, + .num_resources =ARRAY_SIZE (autcpu12_nvram_resource), + .dev = { + .platform_data = &autcpu12_nvram_pdata, + }, +}; + +static void __init autcpu12_nvram_init (void ) +{ +void __iomem *nvram; +unsigned int save[2 ]; +resource_size_t nvram_size =SZ_128K ; + +/* +* Check for 32K/128K +* Read ofs 0K +* Read ofs 64K +* Write complement to ofs 64K +* Read and check result on ofs 0K +* Restore contents +*/ + nvram =ioremap (autcpu12_nvram_resource[0 ].start,SZ_128K ); +if (nvram) { + save[0 ] =readl (nvram +0 ); + save[1 ] =readl (nvram +SZ_64K ); +writel (~save[0 ], nvram +SZ_64K ); +if (readl (nvram +0 ) != save[0 ]) { +writel (save[0 ], nvram +0 ); + nvram_size =SZ_32K ; + }else +writel (save[1 ], nvram +SZ_64K ); +iounmap (nvram); + + autcpu12_nvram_resource[0 ].end = + autcpu12_nvram_resource[0 ].start + nvram_size -1 ; +platform_device_register (&autcpu12_nvram_pdev); + }else +pr_err ("Failed to remap NVRAM resource\n" ); +} +static void __init autcpu12_init (void ) {clps711x_devices_init ();
@@ -202,7 +246,7 @@ static void __init autcpu12_init(void)platform_device_register_simple ("cs89x0" ,0 , autcpu12_cs8900_resource,ARRAY_SIZE (autcpu12_cs8900_resource));platform_device_register (&autcpu12_mmgpio_pdev); -platform_device_register (&autcpu12_nvram_pdev); +autcpu12_nvram_init (); }static void __init autcpu12_init_late (void )
arch/arm/mach-clps711x/include/mach/autcpu12.h +0 -2
@@ -31,8 +31,6 @@*/ #define AUTCPU12_PHYS_CHAR_LCD CS1_PHYS_BASE +0x00000000/* physical */ -#define AUTCPU12_PHYS_NVRAM CS1_PHYS_BASE +0x02000000/* physical */ -#define AUTCPU12_PHYS_CSAUX1 CS1_PHYS_BASE +0x04000000/* physical */ #define AUTCPU12_PHYS_CAN CS1_PHYS_BASE +0x08000000/* physical */
drivers/mtd/maps/Kconfig +0 -7
@@ -297,13 +297,6 @@ config MTD_IXP4XX IXDP425 and Coyote. If you have an IXP4xx based board and would like to use the flash chips on it, say 'Y'. -config MTD_AUTCPU12 - bool "NV-RAM mapping AUTCPU12 board" - depends on ARCH_AUTCPU12 - help - This enables access to the NV-RAM on autronix autcpu12 board. - If you have such a board, say 'Y'. - config MTD_IMPA7 tristate "JEDEC Flash device mapped on impA7" depends on ARM && MTD_JEDECPROBE
drivers/mtd/maps/Makefile +0 -1
@@ -32,7 +32,6 @@ obj-$(CONFIG_MTD_VMAX) += vmax301.o obj-$(CONFIG_MTD_SCx200_DOCFLASH)+= scx200_docflash.o obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o obj-$(CONFIG_MTD_PCI) += pci.o -obj-$(CONFIG_MTD_AUTCPU12) += autcpu12-nvram.o obj-$(CONFIG_MTD_IMPA7) += impa7.o obj-$(CONFIG_MTD_UCLINUX) += uclinux.o obj-$(CONFIG_MTD_NETtel) += nettel.o
drivers/mtd/maps/autcpu12-nvram.c deleted +0 -129
129 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND 6/15 ARM: clps711x: autcpu12: Move remaining specific definitions to board file
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-autcpu12.c | 9 +++++- arch/arm/mach-clps711x/include/mach/autcpu12.h | 44 -------------------------- 2 files changed, 8 insertions(+), 45 deletions(-) delete mode 100644 arch/arm/mach-clps711x/include/mach/autcpu12.h
arch/arm/mach-clps711x/board-autcpu12.c +8 -1
@@ -42,7 +42,6 @@#include <asm/page.h> #include <asm/mach/map.h> -#include <mach/autcpu12.h> #include "common.h" #include "devices.h"
@@ -50,6 +49,14 @@/* NOR flash */ #define AUTCPU12_FLASH_BASE (CS0_PHYS_BASE) +/* Board specific hardware definitions */ +#define AUTCPU12_CHAR_LCD_BASE (CS1_PHYS_BASE + 0x00000000) +#define AUTCPU12_CSAUX1_BASE (CS1_PHYS_BASE + 0x04000000) +#define AUTCPU12_CAN_BASE (CS1_PHYS_BASE + 0x08000000) +#define AUTCPU12_TOUCH_BASE (CS1_PHYS_BASE + 0x0a000000) +#define AUTCPU12_IO_BASE (CS1_PHYS_BASE + 0x0c000000) +#define AUTCPU12_LPT_BASE (CS1_PHYS_BASE + 0x0e000000) +/* NVRAM */ #define AUTCPU12_NVRAM_BASE (CS1_PHYS_BASE + 0x02000000)
arch/arm/mach-clps711x/include/mach/autcpu12.h deleted +0 -44
44 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND 7/15 ARM: clps711x: p720t: Define PLD registers as GPIOs
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-p720t.c | 245 +++++++++++++++++++++------ arch/arm/mach-clps711x/include/mach/syspld.h | 116 ------------- 2 files changed, 193 insertions(+), 168 deletions(-) delete mode 100644 arch/arm/mach-clps711x/include/mach/syspld.h
arch/arm/mach-clps711x/board-p720t.c +193 -52
@@ -23,10 +23,12 @@#include <linux/string.h> #include <linux/mm.h> #include <linux/io.h> +#include <linux/gpio.h> #include <linux/slab.h> #include <linux/leds.h> #include <linux/sizes.h> #include <linux/backlight.h> +#include <linux/basic_mmio_gpio.h> #include <linux/platform_device.h> #include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h>
@@ -38,7 +40,6 @@#include <asm/mach-types.h> #include <asm/mach/arch.h> #include <asm/mach/map.h> -#include <mach/syspld.h> #include <video/platform_lcd.h>
@@ -52,6 +53,178 @@#define P720T_NAND_BASE (CLPS711X_SDRAM1_BASE) +#define P720T_MMGPIO_BASE (CLPS711X_NR_GPIO) + +#define SYSPLD_PHYS_BASE IOMEM(CS1_PHYS_BASE) + +#define PLD_INT (SYSPLD_PHYS_BASE + 0x000000) +#define PLD_INT_MMGPIO_BASE (P720T_MMGPIO_BASE + 0) +#define PLD_INT_PENIRQ (PLD_INT_MMGPIO_BASE + 5) +#define PLD_INT_UCB_IRQ (PLD_INT_MMGPIO_BASE + 1) +#define PLD_INT_KBD_ATN (PLD_INT_MMGPIO_BASE + 0)/* EINT1 */ + +#define PLD_PWR (SYSPLD_PHYS_BASE + 0x000004) +#define PLD_PWR_MMGPIO_BASE (P720T_MMGPIO_BASE + 8) +#define PLD_PWR_EXT (PLD_PWR_MMGPIO_BASE + 5) +#define PLD_PWR_MODE (PLD_PWR_MMGPIO_BASE + 4)/* 1 = PWM, 0 = PFM */ +#define PLD_S4_ON (PLD_PWR_MMGPIO_BASE + 3)/* LCD bias voltage enable */ +#define PLD_S3_ON (PLD_PWR_MMGPIO_BASE + 2)/* LCD backlight enable */ +#define PLD_S2_ON (PLD_PWR_MMGPIO_BASE + 1)/* LCD 3V3 supply enable */ +#define PLD_S1_ON (PLD_PWR_MMGPIO_BASE + 0)/* LCD 3V supply enable */ + +#define PLD_KBD (SYSPLD_PHYS_BASE + 0x000008) +#define PLD_KBD_MMGPIO_BASE (P720T_MMGPIO_BASE + 16) +#define PLD_KBD_WAKE (PLD_KBD_MMGPIO_BASE + 1) +#define PLD_KBD_EN (PLD_KBD_MMGPIO_BASE + 0) + +#define PLD_SPI (SYSPLD_PHYS_BASE + 0x00000c) +#define PLD_SPI_MMGPIO_BASE (P720T_MMGPIO_BASE + 24) +#define PLD_SPI_EN (PLD_SPI_MMGPIO_BASE + 0) + +#define PLD_IO (SYSPLD_PHYS_BASE + 0x000010) +#define PLD_IO_MMGPIO_BASE (P720T_MMGPIO_BASE + 32) +#define PLD_IO_BOOTSEL (PLD_IO_MMGPIO_BASE + 6)/* Boot sel switch */ +#define PLD_IO_USER (PLD_IO_MMGPIO_BASE + 5)/* User defined switch */ +#define PLD_IO_LED3 (PLD_IO_MMGPIO_BASE + 4) +#define PLD_IO_LED2 (PLD_IO_MMGPIO_BASE + 3) +#define PLD_IO_LED1 (PLD_IO_MMGPIO_BASE + 2) +#define PLD_IO_LED0 (PLD_IO_MMGPIO_BASE + 1) +#define PLD_IO_LEDEN (PLD_IO_MMGPIO_BASE + 0) + +#define PLD_IRDA (SYSPLD_PHYS_BASE + 0x000014) +#define PLD_IRDA_MMGPIO_BASE (P720T_MMGPIO_BASE + 40) +#define PLD_IRDA_EN (PLD_IRDA_MMGPIO_BASE + 0) + +#define PLD_COM2 (SYSPLD_PHYS_BASE + 0x000018) +#define PLD_COM2_MMGPIO_BASE (P720T_MMGPIO_BASE + 48) +#define PLD_COM2_EN (PLD_COM2_MMGPIO_BASE + 0) + +#define PLD_COM1 (SYSPLD_PHYS_BASE + 0x00001c) +#define PLD_COM1_MMGPIO_BASE (P720T_MMGPIO_BASE + 56) +#define PLD_COM1_EN (PLD_COM1_MMGPIO_BASE + 0) + +#define PLD_AUD (SYSPLD_PHYS_BASE + 0x000020) +#define PLD_AUD_MMGPIO_BASE (P720T_MMGPIO_BASE + 64) +#define PLD_AUD_DIV1 (PLD_AUD_MMGPIO_BASE + 6) +#define PLD_AUD_DIV0 (PLD_AUD_MMGPIO_BASE + 5) +#define PLD_AUD_CLK_SEL1 (PLD_AUD_MMGPIO_BASE + 4) +#define PLD_AUD_CLK_SEL0 (PLD_AUD_MMGPIO_BASE + 3) +#define PLD_AUD_MIC_PWR (PLD_AUD_MMGPIO_BASE + 2) +#define PLD_AUD_MIC_GAIN (PLD_AUD_MMGPIO_BASE + 1) +#define PLD_AUD_CODEC_EN (PLD_AUD_MMGPIO_BASE + 0) + +#define PLD_CF (SYSPLD_PHYS_BASE + 0x000024) +#define PLD_CF_MMGPIO_BASE (P720T_MMGPIO_BASE + 72) +#define PLD_CF2_SLEEP (PLD_CF_MMGPIO_BASE + 5) +#define PLD_CF1_SLEEP (PLD_CF_MMGPIO_BASE + 4) +#define PLD_CF2_nPDREQ (PLD_CF_MMGPIO_BASE + 3) +#define PLD_CF1_nPDREQ (PLD_CF_MMGPIO_BASE + 2) +#define PLD_CF2_nIRQ (PLD_CF_MMGPIO_BASE + 1) +#define PLD_CF1_nIRQ (PLD_CF_MMGPIO_BASE + 0) + +#define PLD_SDC (SYSPLD_PHYS_BASE + 0x000028) +#define PLD_SDC_MMGPIO_BASE (P720T_MMGPIO_BASE + 80) +#define PLD_SDC_INT_EN (PLD_SDC_MMGPIO_BASE + 2) +#define PLD_SDC_WP (PLD_SDC_MMGPIO_BASE + 1) +#define PLD_SDC_CD (PLD_SDC_MMGPIO_BASE + 0) + +#define PLD_CODEC (SYSPLD_PHYS_BASE + 0x400000) +#define PLD_CODEC_MMGPIO_BASE (P720T_MMGPIO_BASE + 88) +#define PLD_CODEC_IRQ3 (PLD_CODEC_MMGPIO_BASE + 4) +#define PLD_CODEC_IRQ2 (PLD_CODEC_MMGPIO_BASE + 3) +#define PLD_CODEC_IRQ1 (PLD_CODEC_MMGPIO_BASE + 2) +#define PLD_CODEC_EN (PLD_CODEC_MMGPIO_BASE + 0) + +#define PLD_BRITE (SYSPLD_PHYS_BASE + 0x400004) +#define PLD_BRITE_MMGPIO_BASE (P720T_MMGPIO_BASE + 96) +#define PLD_BRITE_UP (PLD_BRITE_MMGPIO_BASE + 1) +#define PLD_BRITE_DN (PLD_BRITE_MMGPIO_BASE + 0) + +#define PLD_LCDEN (SYSPLD_PHYS_BASE + 0x400008) +#define PLD_LCDEN_MMGPIO_BASE (P720T_MMGPIO_BASE + 104) +#define PLD_LCDEN_EN (PLD_LCDEN_MMGPIO_BASE + 0) + +#define PLD_TCH (SYSPLD_PHYS_BASE + 0x400010) +#define PLD_TCH_MMGPIO_BASE (P720T_MMGPIO_BASE + 112) +#define PLD_TCH_PENIRQ (PLD_TCH_MMGPIO_BASE + 1) +#define PLD_TCH_EN (PLD_TCH_MMGPIO_BASE + 0) + +#define PLD_GPIO (SYSPLD_PHYS_BASE + 0x400014) +#define PLD_GPIO_MMGPIO_BASE (P720T_MMGPIO_BASE + 120) +#define PLD_GPIO2 (PLD_GPIO_MMGPIO_BASE + 2) +#define PLD_GPIO1 (PLD_GPIO_MMGPIO_BASE + 1) +#define PLD_GPIO0 (PLD_GPIO_MMGPIO_BASE + 0) + +static struct gpio p720t_gpios[]__initconst = { + {PLD_S1_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S1_ON" }, + {PLD_S2_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S2_ON" }, + {PLD_S3_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S3_ON" }, + {PLD_S4_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S4_ON" }, + {PLD_KBD_EN ,GPIOF_OUT_INIT_LOW ,"PLD_KBD_EN" }, + {PLD_SPI_EN ,GPIOF_OUT_INIT_LOW ,"PLD_SPI_EN" }, + {PLD_IO_USER ,GPIOF_OUT_INIT_LOW ,"PLD_IO_USER" }, + {PLD_IO_LED0 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED0" }, + {PLD_IO_LED1 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED1" }, + {PLD_IO_LED2 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED2" }, + {PLD_IO_LED3 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED3" }, + {PLD_IO_LEDEN ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LEDEN" }, + {PLD_IRDA_EN ,GPIOF_OUT_INIT_LOW ,"PLD_IRDA_EN" }, + {PLD_COM1_EN ,GPIOF_OUT_INIT_HIGH ,"PLD_COM1_EN" }, + {PLD_COM2_EN ,GPIOF_OUT_INIT_HIGH ,"PLD_COM2_EN" }, + {PLD_CODEC_EN ,GPIOF_OUT_INIT_LOW ,"PLD_CODEC_EN" }, + {PLD_LCDEN_EN ,GPIOF_OUT_INIT_LOW ,"PLD_LCDEN_EN" }, + {PLD_TCH_EN ,GPIOF_OUT_INIT_LOW ,"PLD_TCH_EN" }, + {P720T_USERLED ,GPIOF_OUT_INIT_LOW ,"USER_LED" }, +}; + +static struct resource p720t_mmgpio_resource[]__initdata = { +DEFINE_RES_MEM_NAMED (0 ,4 ,"dat" ), +}; + +static struct bgpio_pdata p720t_mmgpio_pdata = { + .ngpio =8 , +}; + +static struct platform_device p720t_mmgpio__initdata = { + .name ="basic-mmio-gpio" , + .id =-1 , + .resource = p720t_mmgpio_resource, + .num_resources =ARRAY_SIZE (p720t_mmgpio_resource), + .dev = { + .platform_data = &p720t_mmgpio_pdata, + }, +}; + +static void __init p720t_mmgpio_init (void __iomem *addrbase,int gpiobase) +{ + p720t_mmgpio_resource[0 ].start = (unsigned long )addrbase; + p720t_mmgpio_pdata.base = gpiobase; + +platform_device_register (&p720t_mmgpio); +} + +static struct { +void __iomem *addrbase; +int gpiobase; +} mmgpios[]__initconst = { + {PLD_INT ,PLD_INT_MMGPIO_BASE }, + {PLD_PWR ,PLD_PWR_MMGPIO_BASE }, + {PLD_KBD ,PLD_KBD_MMGPIO_BASE }, + {PLD_SPI ,PLD_SPI_MMGPIO_BASE }, + {PLD_IO ,PLD_IO_MMGPIO_BASE }, + {PLD_IRDA ,PLD_IRDA_MMGPIO_BASE }, + {PLD_COM2 ,PLD_COM2_MMGPIO_BASE }, + {PLD_COM1 ,PLD_COM1_MMGPIO_BASE }, + {PLD_AUD ,PLD_AUD_MMGPIO_BASE }, + {PLD_CF ,PLD_CF_MMGPIO_BASE }, + {PLD_SDC ,PLD_SDC_MMGPIO_BASE }, + {PLD_CODEC ,PLD_CODEC_MMGPIO_BASE }, + {PLD_BRITE ,PLD_BRITE_MMGPIO_BASE }, + {PLD_LCDEN ,PLD_LCDEN_MMGPIO_BASE }, + {PLD_TCH ,PLD_TCH_MMGPIO_BASE }, + {PLD_GPIO ,PLD_GPIO_MMGPIO_BASE }, +}; +static struct resource p720t_nand_resource[]__initdata = {DEFINE_RES_MEM (P720T_NAND_BASE ,SZ_4 ), };
@@ -93,11 +266,15 @@ static struct platform_device p720t_nand_pdev __initdata = {static void p720t_lcd_power_set (struct plat_lcd_data *pd,unsigned int power) {if (power) { -PLD_LCDEN =PLD_LCDEN_EN ; -PLD_PWR |=PLD_S4_ON |PLD_S2_ON |PLD_S1_ON ; +gpio_set_value (PLD_LCDEN_EN ,1 ); +gpio_set_value (PLD_S1_ON ,1 ); +gpio_set_value (PLD_S2_ON ,1 ); +gpio_set_value (PLD_S4_ON ,1 ); }else { -PLD_PWR &= ~(PLD_S4_ON |PLD_S2_ON |PLD_S1_ON ); -PLD_LCDEN =0 ; +gpio_set_value (PLD_S1_ON ,0 ); +gpio_set_value (PLD_S2_ON ,0 ); +gpio_set_value (PLD_S4_ON ,0 ); +gpio_set_value (PLD_LCDEN_EN ,0 ); } }
@@ -107,10 +284,7 @@ static struct plat_lcd_data p720t_lcd_power_pdata = {static void p720t_lcd_backlight_set_intensity (int intensity) { -if (intensity) -PLD_PWR |=PLD_S3_ON ; -else -PLD_PWR =0 ; +gpio_set_value (PLD_S3_ON , intensity); }static struct generic_bl_info p720t_lcd_backlight_pdata = {
@@ -120,19 +294,6 @@ static struct generic_bl_info p720t_lcd_backlight_pdata = { .set_bl_intensity = p720t_lcd_backlight_set_intensity, }; -/* -* Map the P720T system PLD. It occupies two address spaces: -* 0x10000000 and 0x10400000. We map both regions as one. -*/ -static struct map_desc p720t_io_desc[]__initdata = { - { - .virtual =SYSPLD_VIRT_BASE , - .pfn =__phys_to_pfn (SYSPLD_PHYS_BASE ), - .length =SZ_8M , - .type =MT_DEVICE , - }, -}; -static void __init fixup_p720t (struct tag *tag,char **cmdline,struct meminfo *mi) {
@@ -158,33 +319,6 @@ fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi) } } -static void __init p720t_map_io (void ) -{ -clps711x_map_io (); -iotable_init (p720t_io_desc,ARRAY_SIZE (p720t_io_desc)); -} - -static void __init p720t_init_early (void ) -{ -/* -* Power down as much as possible in case we don't -* have the drivers loaded. -*/ -PLD_LCDEN =0 ; -PLD_PWR &= ~(PLD_S4_ON |PLD_S3_ON |PLD_S2_ON |PLD_S1_ON ); - -PLD_KBD =0 ; -PLD_IO =0 ; -PLD_IRDA =0 ; -PLD_CODEC =0 ; -PLD_TCH =0 ; -PLD_SPI =0 ; -if (!IS_ENABLED (CONFIG_DEBUG_LL )) { -PLD_COM2 =0 ; -PLD_COM1 =0 ; - } -} -static struct gpio_led p720t_gpio_leds[] = { { .name ="User LED" ,
@@ -200,12 +334,20 @@ static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {static void __init p720t_init (void ) { +int i; +clps711x_devices_init (); + +for (i =0 ; i <ARRAY_SIZE (mmgpios); i++) +p720t_mmgpio_init (mmgpios[i].addrbase, mmgpios[i].gpiobase); + +platform_device_register (&p720t_nand_pdev); }static void __init p720t_init_late (void ) { -platform_device_register (&p720t_nand_pdev); +WARN_ON (gpio_request_array (p720t_gpios,ARRAY_SIZE (p720t_gpios))); +platform_device_register_data (&platform_bus,"platform-lcd" ,0 , &p720t_lcd_power_pdata,sizeof (p720t_lcd_power_pdata));
@@ -223,8 +365,7 @@ MACHINE_START(P720T, "ARM-Prospector720T") .atag_offset = 0x100, .nr_irqs = CLPS711X_NR_IRQS, .fixup = fixup_p720t, - .map_io = p720t_map_io, - .init_early = p720t_init_early, + .map_io = clps711x_map_io, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = p720t_init,
arch/arm/mach-clps711x/include/mach/syspld.h deleted +0 -116
116 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND 7/15 ARM: clps711x: p720t: Define PLD registers as GPIOs
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-p720t.c | 245 +++++++++++++++++++++------ arch/arm/mach-clps711x/include/mach/syspld.h | 116 ------------- 2 files changed, 193 insertions(+), 168 deletions(-) delete mode 100644 arch/arm/mach-clps711x/include/mach/syspld.h
arch/arm/mach-clps711x/board-p720t.c +193 -52
@@ -23,10 +23,12 @@#include <linux/string.h> #include <linux/mm.h> #include <linux/io.h> +#include <linux/gpio.h> #include <linux/slab.h> #include <linux/leds.h> #include <linux/sizes.h> #include <linux/backlight.h> +#include <linux/basic_mmio_gpio.h> #include <linux/platform_device.h> #include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h>
@@ -38,7 +40,6 @@#include <asm/mach-types.h> #include <asm/mach/arch.h> #include <asm/mach/map.h> -#include <mach/syspld.h> #include <video/platform_lcd.h>
@@ -52,6 +53,178 @@#define P720T_NAND_BASE (CLPS711X_SDRAM1_BASE) +#define P720T_MMGPIO_BASE (CLPS711X_NR_GPIO) + +#define SYSPLD_PHYS_BASE IOMEM(CS1_PHYS_BASE) + +#define PLD_INT (SYSPLD_PHYS_BASE + 0x000000) +#define PLD_INT_MMGPIO_BASE (P720T_MMGPIO_BASE + 0) +#define PLD_INT_PENIRQ (PLD_INT_MMGPIO_BASE + 5) +#define PLD_INT_UCB_IRQ (PLD_INT_MMGPIO_BASE + 1) +#define PLD_INT_KBD_ATN (PLD_INT_MMGPIO_BASE + 0)/* EINT1 */ + +#define PLD_PWR (SYSPLD_PHYS_BASE + 0x000004) +#define PLD_PWR_MMGPIO_BASE (P720T_MMGPIO_BASE + 8) +#define PLD_PWR_EXT (PLD_PWR_MMGPIO_BASE + 5) +#define PLD_PWR_MODE (PLD_PWR_MMGPIO_BASE + 4)/* 1 = PWM, 0 = PFM */ +#define PLD_S4_ON (PLD_PWR_MMGPIO_BASE + 3)/* LCD bias voltage enable */ +#define PLD_S3_ON (PLD_PWR_MMGPIO_BASE + 2)/* LCD backlight enable */ +#define PLD_S2_ON (PLD_PWR_MMGPIO_BASE + 1)/* LCD 3V3 supply enable */ +#define PLD_S1_ON (PLD_PWR_MMGPIO_BASE + 0)/* LCD 3V supply enable */ + +#define PLD_KBD (SYSPLD_PHYS_BASE + 0x000008) +#define PLD_KBD_MMGPIO_BASE (P720T_MMGPIO_BASE + 16) +#define PLD_KBD_WAKE (PLD_KBD_MMGPIO_BASE + 1) +#define PLD_KBD_EN (PLD_KBD_MMGPIO_BASE + 0) + +#define PLD_SPI (SYSPLD_PHYS_BASE + 0x00000c) +#define PLD_SPI_MMGPIO_BASE (P720T_MMGPIO_BASE + 24) +#define PLD_SPI_EN (PLD_SPI_MMGPIO_BASE + 0) + +#define PLD_IO (SYSPLD_PHYS_BASE + 0x000010) +#define PLD_IO_MMGPIO_BASE (P720T_MMGPIO_BASE + 32) +#define PLD_IO_BOOTSEL (PLD_IO_MMGPIO_BASE + 6)/* Boot sel switch */ +#define PLD_IO_USER (PLD_IO_MMGPIO_BASE + 5)/* User defined switch */ +#define PLD_IO_LED3 (PLD_IO_MMGPIO_BASE + 4) +#define PLD_IO_LED2 (PLD_IO_MMGPIO_BASE + 3) +#define PLD_IO_LED1 (PLD_IO_MMGPIO_BASE + 2) +#define PLD_IO_LED0 (PLD_IO_MMGPIO_BASE + 1) +#define PLD_IO_LEDEN (PLD_IO_MMGPIO_BASE + 0) + +#define PLD_IRDA (SYSPLD_PHYS_BASE + 0x000014) +#define PLD_IRDA_MMGPIO_BASE (P720T_MMGPIO_BASE + 40) +#define PLD_IRDA_EN (PLD_IRDA_MMGPIO_BASE + 0) + +#define PLD_COM2 (SYSPLD_PHYS_BASE + 0x000018) +#define PLD_COM2_MMGPIO_BASE (P720T_MMGPIO_BASE + 48) +#define PLD_COM2_EN (PLD_COM2_MMGPIO_BASE + 0) + +#define PLD_COM1 (SYSPLD_PHYS_BASE + 0x00001c) +#define PLD_COM1_MMGPIO_BASE (P720T_MMGPIO_BASE + 56) +#define PLD_COM1_EN (PLD_COM1_MMGPIO_BASE + 0) + +#define PLD_AUD (SYSPLD_PHYS_BASE + 0x000020) +#define PLD_AUD_MMGPIO_BASE (P720T_MMGPIO_BASE + 64) +#define PLD_AUD_DIV1 (PLD_AUD_MMGPIO_BASE + 6) +#define PLD_AUD_DIV0 (PLD_AUD_MMGPIO_BASE + 5) +#define PLD_AUD_CLK_SEL1 (PLD_AUD_MMGPIO_BASE + 4) +#define PLD_AUD_CLK_SEL0 (PLD_AUD_MMGPIO_BASE + 3) +#define PLD_AUD_MIC_PWR (PLD_AUD_MMGPIO_BASE + 2) +#define PLD_AUD_MIC_GAIN (PLD_AUD_MMGPIO_BASE + 1) +#define PLD_AUD_CODEC_EN (PLD_AUD_MMGPIO_BASE + 0) + +#define PLD_CF (SYSPLD_PHYS_BASE + 0x000024) +#define PLD_CF_MMGPIO_BASE (P720T_MMGPIO_BASE + 72) +#define PLD_CF2_SLEEP (PLD_CF_MMGPIO_BASE + 5) +#define PLD_CF1_SLEEP (PLD_CF_MMGPIO_BASE + 4) +#define PLD_CF2_nPDREQ (PLD_CF_MMGPIO_BASE + 3) +#define PLD_CF1_nPDREQ (PLD_CF_MMGPIO_BASE + 2) +#define PLD_CF2_nIRQ (PLD_CF_MMGPIO_BASE + 1) +#define PLD_CF1_nIRQ (PLD_CF_MMGPIO_BASE + 0) + +#define PLD_SDC (SYSPLD_PHYS_BASE + 0x000028) +#define PLD_SDC_MMGPIO_BASE (P720T_MMGPIO_BASE + 80) +#define PLD_SDC_INT_EN (PLD_SDC_MMGPIO_BASE + 2) +#define PLD_SDC_WP (PLD_SDC_MMGPIO_BASE + 1) +#define PLD_SDC_CD (PLD_SDC_MMGPIO_BASE + 0) + +#define PLD_CODEC (SYSPLD_PHYS_BASE + 0x400000) +#define PLD_CODEC_MMGPIO_BASE (P720T_MMGPIO_BASE + 88) +#define PLD_CODEC_IRQ3 (PLD_CODEC_MMGPIO_BASE + 4) +#define PLD_CODEC_IRQ2 (PLD_CODEC_MMGPIO_BASE + 3) +#define PLD_CODEC_IRQ1 (PLD_CODEC_MMGPIO_BASE + 2) +#define PLD_CODEC_EN (PLD_CODEC_MMGPIO_BASE + 0) + +#define PLD_BRITE (SYSPLD_PHYS_BASE + 0x400004) +#define PLD_BRITE_MMGPIO_BASE (P720T_MMGPIO_BASE + 96) +#define PLD_BRITE_UP (PLD_BRITE_MMGPIO_BASE + 1) +#define PLD_BRITE_DN (PLD_BRITE_MMGPIO_BASE + 0) + +#define PLD_LCDEN (SYSPLD_PHYS_BASE + 0x400008) +#define PLD_LCDEN_MMGPIO_BASE (P720T_MMGPIO_BASE + 104) +#define PLD_LCDEN_EN (PLD_LCDEN_MMGPIO_BASE + 0) + +#define PLD_TCH (SYSPLD_PHYS_BASE + 0x400010) +#define PLD_TCH_MMGPIO_BASE (P720T_MMGPIO_BASE + 112) +#define PLD_TCH_PENIRQ (PLD_TCH_MMGPIO_BASE + 1) +#define PLD_TCH_EN (PLD_TCH_MMGPIO_BASE + 0) + +#define PLD_GPIO (SYSPLD_PHYS_BASE + 0x400014) +#define PLD_GPIO_MMGPIO_BASE (P720T_MMGPIO_BASE + 120) +#define PLD_GPIO2 (PLD_GPIO_MMGPIO_BASE + 2) +#define PLD_GPIO1 (PLD_GPIO_MMGPIO_BASE + 1) +#define PLD_GPIO0 (PLD_GPIO_MMGPIO_BASE + 0) + +static struct gpio p720t_gpios[]__initconst = { + {PLD_S1_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S1_ON" }, + {PLD_S2_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S2_ON" }, + {PLD_S3_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S3_ON" }, + {PLD_S4_ON ,GPIOF_OUT_INIT_LOW ,"PLD_S4_ON" }, + {PLD_KBD_EN ,GPIOF_OUT_INIT_LOW ,"PLD_KBD_EN" }, + {PLD_SPI_EN ,GPIOF_OUT_INIT_LOW ,"PLD_SPI_EN" }, + {PLD_IO_USER ,GPIOF_OUT_INIT_LOW ,"PLD_IO_USER" }, + {PLD_IO_LED0 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED0" }, + {PLD_IO_LED1 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED1" }, + {PLD_IO_LED2 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED2" }, + {PLD_IO_LED3 ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LED3" }, + {PLD_IO_LEDEN ,GPIOF_OUT_INIT_LOW ,"PLD_IO_LEDEN" }, + {PLD_IRDA_EN ,GPIOF_OUT_INIT_LOW ,"PLD_IRDA_EN" }, + {PLD_COM1_EN ,GPIOF_OUT_INIT_HIGH ,"PLD_COM1_EN" }, + {PLD_COM2_EN ,GPIOF_OUT_INIT_HIGH ,"PLD_COM2_EN" }, + {PLD_CODEC_EN ,GPIOF_OUT_INIT_LOW ,"PLD_CODEC_EN" }, + {PLD_LCDEN_EN ,GPIOF_OUT_INIT_LOW ,"PLD_LCDEN_EN" }, + {PLD_TCH_EN ,GPIOF_OUT_INIT_LOW ,"PLD_TCH_EN" }, + {P720T_USERLED ,GPIOF_OUT_INIT_LOW ,"USER_LED" }, +}; + +static struct resource p720t_mmgpio_resource[]__initdata = { +DEFINE_RES_MEM_NAMED (0 ,4 ,"dat" ), +}; + +static struct bgpio_pdata p720t_mmgpio_pdata = { + .ngpio =8 , +}; + +static struct platform_device p720t_mmgpio__initdata = { + .name ="basic-mmio-gpio" , + .id =-1 , + .resource = p720t_mmgpio_resource, + .num_resources =ARRAY_SIZE (p720t_mmgpio_resource), + .dev = { + .platform_data = &p720t_mmgpio_pdata, + }, +}; + +static void __init p720t_mmgpio_init (void __iomem *addrbase,int gpiobase) +{ + p720t_mmgpio_resource[0 ].start = (unsigned long )addrbase; + p720t_mmgpio_pdata.base = gpiobase; + +platform_device_register (&p720t_mmgpio); +} + +static struct { +void __iomem *addrbase; +int gpiobase; +} mmgpios[]__initconst = { + {PLD_INT ,PLD_INT_MMGPIO_BASE }, + {PLD_PWR ,PLD_PWR_MMGPIO_BASE }, + {PLD_KBD ,PLD_KBD_MMGPIO_BASE }, + {PLD_SPI ,PLD_SPI_MMGPIO_BASE }, + {PLD_IO ,PLD_IO_MMGPIO_BASE }, + {PLD_IRDA ,PLD_IRDA_MMGPIO_BASE }, + {PLD_COM2 ,PLD_COM2_MMGPIO_BASE }, + {PLD_COM1 ,PLD_COM1_MMGPIO_BASE }, + {PLD_AUD ,PLD_AUD_MMGPIO_BASE }, + {PLD_CF ,PLD_CF_MMGPIO_BASE }, + {PLD_SDC ,PLD_SDC_MMGPIO_BASE }, + {PLD_CODEC ,PLD_CODEC_MMGPIO_BASE }, + {PLD_BRITE ,PLD_BRITE_MMGPIO_BASE }, + {PLD_LCDEN ,PLD_LCDEN_MMGPIO_BASE }, + {PLD_TCH ,PLD_TCH_MMGPIO_BASE }, + {PLD_GPIO ,PLD_GPIO_MMGPIO_BASE }, +}; +static struct resource p720t_nand_resource[]__initdata = {DEFINE_RES_MEM (P720T_NAND_BASE ,SZ_4 ), };
@@ -93,11 +266,15 @@ static struct platform_device p720t_nand_pdev __initdata = {static void p720t_lcd_power_set (struct plat_lcd_data *pd,unsigned int power) {if (power) { -PLD_LCDEN =PLD_LCDEN_EN ; -PLD_PWR |=PLD_S4_ON |PLD_S2_ON |PLD_S1_ON ; +gpio_set_value (PLD_LCDEN_EN ,1 ); +gpio_set_value (PLD_S1_ON ,1 ); +gpio_set_value (PLD_S2_ON ,1 ); +gpio_set_value (PLD_S4_ON ,1 ); }else { -PLD_PWR &= ~(PLD_S4_ON |PLD_S2_ON |PLD_S1_ON ); -PLD_LCDEN =0 ; +gpio_set_value (PLD_S1_ON ,0 ); +gpio_set_value (PLD_S2_ON ,0 ); +gpio_set_value (PLD_S4_ON ,0 ); +gpio_set_value (PLD_LCDEN_EN ,0 ); } }
@@ -107,10 +284,7 @@ static struct plat_lcd_data p720t_lcd_power_pdata = {static void p720t_lcd_backlight_set_intensity (int intensity) { -if (intensity) -PLD_PWR |=PLD_S3_ON ; -else -PLD_PWR =0 ; +gpio_set_value (PLD_S3_ON , intensity); }static struct generic_bl_info p720t_lcd_backlight_pdata = {
@@ -120,19 +294,6 @@ static struct generic_bl_info p720t_lcd_backlight_pdata = { .set_bl_intensity = p720t_lcd_backlight_set_intensity, }; -/* -* Map the P720T system PLD. It occupies two address spaces: -* 0x10000000 and 0x10400000. We map both regions as one. -*/ -static struct map_desc p720t_io_desc[]__initdata = { - { - .virtual =SYSPLD_VIRT_BASE , - .pfn =__phys_to_pfn (SYSPLD_PHYS_BASE ), - .length =SZ_8M , - .type =MT_DEVICE , - }, -}; -static void __init fixup_p720t (struct tag *tag,char **cmdline,struct meminfo *mi) {
@@ -158,33 +319,6 @@ fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi) } } -static void __init p720t_map_io (void ) -{ -clps711x_map_io (); -iotable_init (p720t_io_desc,ARRAY_SIZE (p720t_io_desc)); -} - -static void __init p720t_init_early (void ) -{ -/* -* Power down as much as possible in case we don't -* have the drivers loaded. -*/ -PLD_LCDEN =0 ; -PLD_PWR &= ~(PLD_S4_ON |PLD_S3_ON |PLD_S2_ON |PLD_S1_ON ); - -PLD_KBD =0 ; -PLD_IO =0 ; -PLD_IRDA =0 ; -PLD_CODEC =0 ; -PLD_TCH =0 ; -PLD_SPI =0 ; -if (!IS_ENABLED (CONFIG_DEBUG_LL )) { -PLD_COM2 =0 ; -PLD_COM1 =0 ; - } -} -static struct gpio_led p720t_gpio_leds[] = { { .name ="User LED" ,
@@ -200,12 +334,20 @@ static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {static void __init p720t_init (void ) { +int i; +clps711x_devices_init (); + +for (i =0 ; i <ARRAY_SIZE (mmgpios); i++) +p720t_mmgpio_init (mmgpios[i].addrbase, mmgpios[i].gpiobase); + +platform_device_register (&p720t_nand_pdev); }static void __init p720t_init_late (void ) { -platform_device_register (&p720t_nand_pdev); +WARN_ON (gpio_request_array (p720t_gpios,ARRAY_SIZE (p720t_gpios))); +platform_device_register_data (&platform_bus,"platform-lcd" ,0 , &p720t_lcd_power_pdata,sizeof (p720t_lcd_power_pdata));
@@ -223,8 +365,7 @@ MACHINE_START(P720T, "ARM-Prospector720T") .atag_offset = 0x100, .nr_irqs = CLPS711X_NR_IRQS, .fixup = fixup_p720t, - .map_io = p720t_map_io, - .init_early = p720t_init_early, + .map_io = clps711x_map_io, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = p720t_init,
arch/arm/mach-clps711x/include/mach/syspld.h deleted +0 -116
116 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND 8/15 ARM: clps711x: Move specific definitions from hardware.h to boards files
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-edb7211.c | 8 ++++++-- arch/arm/mach-clps711x/include/mach/hardware.h | 7 ------- 2 files changed, 6 insertions(+), 9 deletions(-)
arch/arm/mach-clps711x/board-edb7211.c +6 -2
@@ -39,9 +39,13 @@#define EDB7211_FLASH0_BASE (CS0_PHYS_BASE)#define EDB7211_FLASH1_BASE (CS1_PHYS_BASE) +#define EDB7211_CS8900_BASE (CS2_PHYS_BASE + 0x300)#define EDB7211_CS8900_IRQ (IRQ_EINT3) +/* The extra 8 lines of the keyboard matrix */ +#define EDB7211_EXTKBD_BASE (CS3_PHYS_BASE) +static struct resource edb7211_cs8900_resource[]__initdata = {DEFINE_RES_MEM (EDB7211_CS8900_BASE ,SZ_1K ),DEFINE_RES_IRQ (EDB7211_CS8900_IRQ ),
@@ -113,8 +117,8 @@ static struct gpio edb7211_gpios[] __initconst = {static struct map_desc edb7211_io_desc[]__initdata = { {/* Memory-mapped extra keyboard row */ - .virtual =IO_ADDRESS (EP7211_PHYS_EXTKBD ), - .pfn =__phys_to_pfn (EP7211_PHYS_EXTKBD ), + .virtual =IO_ADDRESS (EDB7211_EXTKBD_BASE ), + .pfn =__phys_to_pfn (EDB7211_EXTKBD_BASE ), .length =SZ_1M , .type =MT_DEVICE , },
arch/arm/mach-clps711x/include/mach/hardware.h +0 -7
@@ -70,11 +70,4 @@#define CLPS711X_SDRAM0_BASE (0xc0000000)#define CLPS711X_SDRAM1_BASE (0xd0000000) -#if defined (CONFIG_ARCH_EDB7211 ) - -/* The extra 8 lines of the keyboard matrix are wired to chip select 3 */ -#define EP7211_PHYS_EXTKBD CS3_PHYS_BASE - -#endif /* CONFIG_ARCH_EDB7211 */ -#endif
Signature · 1 line
1.8.1.5
PATCH RESEND 9/15 ARM: clps711x: Replace "arch_initcall" in common code with ".init_early"
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-autcpu12.c | 1 + arch/arm/mach-clps711x/board-cdb89712.c | 1 + arch/arm/mach-clps711x/board-clep7312.c | 1 + arch/arm/mach-clps711x/board-edb7211.c | 1 + arch/arm/mach-clps711x/board-fortunet.c | 1 + arch/arm/mach-clps711x/board-p720t.c | 1 + arch/arm/mach-clps711x/common.c | 10 +++------- arch/arm/mach-clps711x/common.h | 1 + 8 files changed, 10 insertions(+), 7 deletions(-)
arch/arm/mach-clps711x/board-autcpu12.c +1 -0
@@ -271,6 +271,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12") .atag_offset = 0x20000, .nr_irqs = CLPS711X_NR_IRQS, .map_io = clps711x_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = autcpu12_init,
arch/arm/mach-clps711x/board-cdb89712.c +1 -0
@@ -141,6 +141,7 @@ MACHINE_START(CDB89712, "Cirrus-CDB89712") .atag_offset = 0x100, .nr_irqs = CLPS711X_NR_IRQS, .map_io = clps711x_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = cdb89712_init,
arch/arm/mach-clps711x/board-clep7312.c +1 -0
@@ -39,6 +39,7 @@ MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312") .nr_irqs = CLPS711X_NR_IRQS, .fixup = fixup_clep7312, .map_io = clps711x_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .handle_irq = clps711x_handle_irq,
arch/arm/mach-clps711x/board-edb7211.c +1 -0
@@ -182,6 +182,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)") .fixup = fixup_edb7211, .reserve = edb7211_reserve, .map_io = edb7211_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = edb7211_init,
arch/arm/mach-clps711x/board-fortunet.c +1 -0
@@ -77,6 +77,7 @@ MACHINE_START(FORTUNET, "ARM-FortuNet") .nr_irqs = CLPS711X_NR_IRQS, .fixup = fortunet_fixup, .map_io = clps711x_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .handle_irq = clps711x_handle_irq,
arch/arm/mach-clps711x/board-p720t.c +1 -0
@@ -366,6 +366,7 @@ MACHINE_START(P720T, "ARM-Prospector720T") .nr_irqs = CLPS711X_NR_IRQS, .fixup = fixup_p720t, .map_io = clps711x_map_io, + .init_early = clps711x_init_early, .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = p720t_init,
arch/arm/mach-clps711x/common.c +3 -7
@@ -354,15 +354,11 @@ void clps711x_restart(char mode, const char *cmd)static void clps711x_idle (void ) {clps_writel (1 ,HALT ); - __asm__ __volatile__( -"mov r0, r0\n\ -mov r0, r0" ); + asm("mov r0, r0" ); + asm("mov r0, r0" ); } -static int __init clps711x_idle_init (void ) +void __init clps711x_init_early (void ) { arm_pm_idle = clps711x_idle; -return 0 ; } - -arch_initcall (clps711x_idle_init);
arch/arm/mach-clps711x/common.h +1 -0
@@ -13,3 +13,4 @@ extern void clps711x_init_irq(void);extern void clps711x_timer_init (void );extern void clps711x_handle_irq (struct pt_regs *regs);extern void clps711x_restart (char mode,const char *cmd); +extern void clps711x_init_early (void );
Signature · 1 line
1.8.1.5
PATCH RESEND 10/15 ARM: clps711x: Add clocksource framework
In reply to Alexander Shiyan--- arch/arm/Kconfig | 1 + arch/arm/mach-clps711x/common.c | 48 ++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-)
arch/arm/Kconfig +1 -0
@@ -367,6 +367,7 @@ config ARCH_CLPS711X select ARCH_REQUIRE_GPIOLIB select AUTO_ZRELADDR select CLKDEV_LOOKUP + select CLKSRC_MMIO select COMMON_CLK select CPU_ARM720T select GENERIC_CLOCKEVENTS
arch/arm/mach-clps711x/common.c +40 -8
95 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND 11/15 ARM: clps711x: Optimize interrupt handling
In reply to Alexander ShiyanThis patch modify interrupt handler for processing all penging interrupts at once.
--- arch/arm/mach-clps711x/common.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-)
arch/arm/mach-clps711x/common.c +18 -12
@@ -215,7 +215,7 @@ void __init clps711x_init_irq(void) } } -inline u32 fls16 (u32 x) +static inline u32 fls16 (u32 x) {u32 r =15 ;
@@ -239,18 +239,24 @@ inline u32 fls16(u32 x) asmlinkage void __exception_irq_entry clps711x_handle_irq(struct pt_regs *regs) { -u32 irqstat; -void __iomem *base =CLPS711X_VIRT_BASE ; +do { +u32 irqstat; +void __iomem *base =CLPS711X_VIRT_BASE ; + + irqstat =readw_relaxed (base +INTSR1 ) & +readw_relaxed (base +INTMR1 ); +if (irqstat) +handle_IRQ (fls16 (irqstat), regs); + + irqstat =readw_relaxed (base +INTSR2 ) & +readw_relaxed (base +INTMR2 ); +if (irqstat) { +handle_IRQ (fls16 (irqstat) +16 , regs); +continue ; + } - irqstat =readl_relaxed (base +INTSR1 ) &readl_relaxed (base +INTMR1 ); -if (irqstat) { -handle_IRQ (fls16 (irqstat), regs); -return ; - } - - irqstat =readl_relaxed (base +INTSR2 ) &readl_relaxed (base +INTMR2 ); -if (likely (irqstat)) -handle_IRQ (fls16 (irqstat) +16 , regs); +break ; + }while (1 ); } static u32 notrace clps711x_sched_clock_read(void)
Signature · 1 line
1.8.1.5
PATCH RESEND 12/15 ARM: clps711x: edb7211: Add support for I2C
In reply to Alexander Shiyan--- arch/arm/mach-clps711x/board-edb7211.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
arch/arm/mach-clps711x/board-edb7211.c +13 -0
@@ -12,6 +12,7 @@#include <linux/delay.h> #include <linux/memblock.h> #include <linux/types.h> +#include <linux/i2c-gpio.h> #include <linux/interrupt.h> #include <linux/backlight.h> #include <linux/platform_device.h>
@@ -37,6 +38,9 @@#define EDB7211_LCDEN CLPS711X_GPIO(3, 2)#define EDB7211_LCDBL CLPS711X_GPIO(3, 3) +#define EDB7211_I2C_SDA CLPS711X_GPIO(3, 4) +#define EDB7211_I2C_SCL CLPS711X_GPIO(3, 5) +#define EDB7211_FLASH0_BASE (CS0_PHYS_BASE)#define EDB7211_FLASH1_BASE (CS1_PHYS_BASE)
@@ -46,6 +50,12 @@/* The extra 8 lines of the keyboard matrix */ #define EDB7211_EXTKBD_BASE (CS3_PHYS_BASE) +static struct i2c_gpio_platform_data edb7211_i2c_pdata__initdata = { + .sda_pin =EDB7211_I2C_SDA , + .scl_pin =EDB7211_I2C_SCL , + .scl_is_output_only =1 , +}; +static struct resource edb7211_cs8900_resource[]__initdata = {DEFINE_RES_MEM (EDB7211_CS8900_BASE ,SZ_1K ),DEFINE_RES_IRQ (EDB7211_CS8900_IRQ ),
@@ -173,6 +183,9 @@ static void __init edb7211_init_late(void)platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 );platform_device_register_simple ("cs89x0" ,0 , edb7211_cs8900_resource,ARRAY_SIZE (edb7211_cs8900_resource)); +platform_device_register_data (&platform_bus,"i2c-gpio" ,0 , + &edb7211_i2c_pdata, +sizeof (edb7211_i2c_pdata)); }MACHINE_START (EDB7211 ,"CL-EDB7211 (EP7211 eval board)" )
Signature · 1 line
1.8.1.5
PATCH RESEND 13/15 ARM: clps711x: edb7211: Control LCD backlight via PWM
In reply to Alexander ShiyanThis patch provide control LCD backlight via PWM. GPIO is used only for switch backlight ON and OFF.
--- arch/arm/mach-clps711x/board-edb7211.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm/mach-clps711x/board-edb7211.c +3 -2
@@ -109,13 +109,14 @@ static struct plat_lcd_data edb7211_lcd_power_pdata = {static void edb7211_lcd_backlight_set_intensity (int intensity) { -gpio_set_value (EDB7211_LCDBL , intensity); +gpio_set_value (EDB7211_LCDBL , !!intensity); +clps_writel ((clps_readl (PMPCON ) &0xf0ff ) | (intensity <<8 ),PMPCON ); }static struct generic_bl_info edb7211_lcd_backlight_pdata = { .name ="lcd-backlight.0" , .default_intensity =0x01 , - .max_intensity =0x01 , + .max_intensity =0x0f , .set_bl_intensity = edb7211_lcd_backlight_set_intensity, };
Signature · 1 line
1.8.1.5
PATCH RESEND 14/15 ARM: clps711x: Add support for SYSCON driver
In reply to Alexander ShiyanThis patch adds support for SYSCON driver for CLPS711X targets. At this time there are no users for this driver, but it is will be used as start point to use in CLPS711X drivers and remove <mach/xx> dependencies.
--- arch/arm/Kconfig | 1 + arch/arm/mach-clps711x/devices.c | 20 ++++++ arch/arm/mach-clps711x/include/mach/clps711x.h | 88 +----------------------- drivers/mfd/syscon.c | 3 + include/linux/mfd/syscon/clps711x.h | 94 ++++++++++++++++++++++++++ 5 files changed, 120 insertions(+), 86 deletions(-) create mode 100644 include/linux/mfd/syscon/clps711x.h
arch/arm/Kconfig +1 -0
@@ -371,6 +371,7 @@ config ARCH_CLPS711X select COMMON_CLK select CPU_ARM720T select GENERIC_CLOCKEVENTS + select MFD_SYSCON select MULTI_IRQ_HANDLER select SPARSE_IRQ help
arch/arm/mach-clps711x/devices.c +20 -0
@@ -10,6 +10,7 @@*/ #include <linux/platform_device.h> +#include <linux/sizes.h> #include <mach/hardware.h>
@@ -42,7 +43,26 @@ static void __init clps711x_add_gpio(void) } } +const struct resource clps711x_syscon_res[]__initconst = { +/* SYSCON1, SYSFLG1 */ +DEFINE_RES_MEM (CLPS711X_PHYS_BASE +SYSCON1 ,SZ_128 ), +/* SYSCON2, SYSFLG2 */ +DEFINE_RES_MEM (CLPS711X_PHYS_BASE +SYSCON2 ,SZ_128 ), +/* SYSCON3 */ +DEFINE_RES_MEM (CLPS711X_PHYS_BASE +SYSCON3 ,SZ_64 ), +}; + +static void __init clps711x_add_syscon (void ) +{ +unsigned i; + +for (i =0 ; i <ARRAY_SIZE (clps711x_syscon_res); i++) +platform_device_register_simple ("clps711x-syscon" , i +1 , + &clps711x_syscon_res[i],1 ); +} +void __init clps711x_devices_init (void ) {clps711x_add_gpio (); +clps711x_add_syscon (); }
arch/arm/mach-clps711x/include/mach/clps711x.h +2 -86
109 lines not on this page · raw message
drivers/mfd/syscon.c +3 -0
@@ -159,6 +159,9 @@ static int syscon_probe(struct platform_device *pdev)static const struct platform_device_id syscon_ids[] = { {"syscon" , }, +#ifdef CONFIG_ARCH_CLPS711X + {"clps711x-syscon" , }, +#endif { } };
include/linux/mfd/syscon/clps711x.h new file +94 -0
94 lines not on this page · raw message
Signature · 1 line
1.8.1.5
PATCH RESEND v2 2/3 ARM: clps711x: Re-add GPIO support
In reply to Alexander Shiyanarch_initcall was been removed from GPIO driver, so this patch re-add support for GPIO into boards as platform_device. Since some drivers (spi, nand, etc.) is not support deferred probe, separate machine init calls is used in board code to make proper loading sequence.
--- arch/arm/mach-clps711x/Makefile | 5 +--- arch/arm/mach-clps711x/board-autcpu12.c | 2 ++ arch/arm/mach-clps711x/board-cdb89712.c | 2 ++ arch/arm/mach-clps711x/board-edb7211.c | 7 +++++ arch/arm/mach-clps711x/board-p720t.c | 10 ++++--- arch/arm/mach-clps711x/devices.c | 48 +++++++++++++++++++++++++++++++++ arch/arm/mach-clps711x/devices.h | 12 +++++++++ 7 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 arch/arm/mach-clps711x/devices.c create mode 100644 arch/arm/mach-clps711x/devices.h
arch/arm/mach-clps711x/Makefile +1 -4
@@ -4,10 +4,7 @@ # Object file lists. -obj-y := common.o -obj-m := -obj-n := -obj- := +obj-y := common.o devices.o obj-$(CONFIG_ARCH_AUTCPU12) += board-autcpu12.o obj-$(CONFIG_ARCH_CDB89712) += board-cdb89712.o
arch/arm/mach-clps711x/board-autcpu12.c +2 -0
@@ -43,6 +43,7 @@#include <mach/autcpu12.h> #include "common.h" +#include "devices.h" #define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
@@ -149,6 +150,7 @@ static struct platform_device autcpu12_mmgpio_pdev __initdata = {static void __init autcpu12_init (void ) { +clps711x_devices_init ();platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 );platform_device_register_simple ("cs89x0" ,0 , autcpu12_cs8900_resource,ARRAY_SIZE (autcpu12_cs8900_resource));
arch/arm/mach-clps711x/board-cdb89712.c +2 -0
@@ -39,6 +39,7 @@#include <asm/mach/map.h> #include "common.h" +#include "devices.h" #define CDB89712_CS8900_BASE (CS2_PHYS_BASE + 0x300)#define CDB89712_CS8900_IRQ (IRQ_EINT3)
@@ -127,6 +128,7 @@ static struct platform_device cdb89712_sram_pdev __initdata = {static void __init cdb89712_init (void ) { +clps711x_devices_init ();platform_device_register (&cdb89712_flash_pdev);platform_device_register (&cdb89712_bootrom_pdev);platform_device_register (&cdb89712_sram_pdev);
arch/arm/mach-clps711x/board-edb7211.c +7 -0
@@ -29,6 +29,7 @@#include <mach/hardware.h> #include "common.h" +#include "devices.h" #define VIDEORAM_SIZE SZ_128K
@@ -151,6 +152,11 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)static void __init edb7211_init (void ) { +clps711x_devices_init (); +} + +static void __init edb7211_init_late (void ) +{gpio_request_array (edb7211_gpios,ARRAY_SIZE (edb7211_gpios));platform_device_register (&edb7211_flash_pdev);
@@ -175,6 +181,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)") .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = edb7211_init, + .init_late = edb7211_init_late, .handle_irq = clps711x_handle_irq, .restart = clps711x_restart,MACHINE_END
arch/arm/mach-clps711x/board-p720t.c +6 -4
@@ -43,6 +43,7 @@#include <video/platform_lcd.h> #include "common.h" +#include "devices.h" #define P720T_USERLED CLPS711X_GPIO(3, 0)#define P720T_NAND_CLE CLPS711X_GPIO(4, 0)
@@ -199,6 +200,11 @@ static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {static void __init p720t_init (void ) { +clps711x_devices_init (); +} + +static void __init p720t_init_late (void ) +{platform_device_register (&p720t_nand_pdev); platform_device_register_data(&platform_bus, "platform-lcd", 0, &p720t_lcd_power_pdata,
@@ -207,10 +213,6 @@ static void __init p720t_init(void) &p720t_lcd_backlight_pdata, sizeof(p720t_lcd_backlight_pdata));platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 ); -} - -static void __init p720t_init_late (void ) -{platform_device_register_data (&platform_bus,"leds-gpio" ,0 , &p720t_gpio_led_pdata,sizeof (p720t_gpio_led_pdata));
arch/arm/mach-clps711x/devices.c new file +48 -0
48 lines not on this page · raw message
arch/arm/mach-clps711x/devices.h new file +12 -0
@@ -0,0 +1,12 @@ +/* +* CLPS711X common devices definitions +* +* Copyright (C) 2013 Alexander Shiyan <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +*/ + +void clps711x_devices_init (void );
Signature · 1 line
1.8.1.5
PATCH RESEND v2 2/3 ARM: clps711x: Re-add GPIO support
In reply to Alexander Shiyanarch_initcall was been removed from GPIO driver, so this patch re-add support for GPIO into boards as platform_device. Since some drivers (spi, nand, etc.) is not support deferred probe, separate machine init calls is used in board code to make proper loading sequence.
--- arch/arm/mach-clps711x/Makefile | 5 +--- arch/arm/mach-clps711x/board-autcpu12.c | 2 ++ arch/arm/mach-clps711x/board-cdb89712.c | 2 ++ arch/arm/mach-clps711x/board-edb7211.c | 7 +++++ arch/arm/mach-clps711x/board-p720t.c | 10 ++++--- arch/arm/mach-clps711x/devices.c | 48 +++++++++++++++++++++++++++++++++ arch/arm/mach-clps711x/devices.h | 12 +++++++++ 7 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 arch/arm/mach-clps711x/devices.c create mode 100644 arch/arm/mach-clps711x/devices.h
arch/arm/mach-clps711x/Makefile +1 -4
@@ -4,10 +4,7 @@ # Object file lists. -obj-y := common.o -obj-m := -obj-n := -obj- := +obj-y := common.o devices.o obj-$(CONFIG_ARCH_AUTCPU12) += board-autcpu12.o obj-$(CONFIG_ARCH_CDB89712) += board-cdb89712.o
arch/arm/mach-clps711x/board-autcpu12.c +2 -0
@@ -43,6 +43,7 @@#include <mach/autcpu12.h> #include "common.h" +#include "devices.h" #define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
@@ -149,6 +150,7 @@ static struct platform_device autcpu12_mmgpio_pdev __initdata = {static void __init autcpu12_init (void ) { +clps711x_devices_init ();platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 );platform_device_register_simple ("cs89x0" ,0 , autcpu12_cs8900_resource,ARRAY_SIZE (autcpu12_cs8900_resource));
arch/arm/mach-clps711x/board-cdb89712.c +2 -0
@@ -39,6 +39,7 @@#include <asm/mach/map.h> #include "common.h" +#include "devices.h" #define CDB89712_CS8900_BASE (CS2_PHYS_BASE + 0x300)#define CDB89712_CS8900_IRQ (IRQ_EINT3)
@@ -127,6 +128,7 @@ static struct platform_device cdb89712_sram_pdev __initdata = {static void __init cdb89712_init (void ) { +clps711x_devices_init ();platform_device_register (&cdb89712_flash_pdev);platform_device_register (&cdb89712_bootrom_pdev);platform_device_register (&cdb89712_sram_pdev);
arch/arm/mach-clps711x/board-edb7211.c +7 -0
@@ -29,6 +29,7 @@#include <mach/hardware.h> #include "common.h" +#include "devices.h" #define VIDEORAM_SIZE SZ_128K
@@ -151,6 +152,11 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)static void __init edb7211_init (void ) { +clps711x_devices_init (); +} + +static void __init edb7211_init_late (void ) +{gpio_request_array (edb7211_gpios,ARRAY_SIZE (edb7211_gpios));platform_device_register (&edb7211_flash_pdev);
@@ -175,6 +181,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)") .init_irq = clps711x_init_irq, .init_time = clps711x_timer_init, .init_machine = edb7211_init, + .init_late = edb7211_init_late, .handle_irq = clps711x_handle_irq, .restart = clps711x_restart,MACHINE_END
arch/arm/mach-clps711x/board-p720t.c +6 -4
@@ -43,6 +43,7 @@#include <video/platform_lcd.h> #include "common.h" +#include "devices.h" #define P720T_USERLED CLPS711X_GPIO(3, 0)#define P720T_NAND_CLE CLPS711X_GPIO(4, 0)
@@ -199,6 +200,11 @@ static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {static void __init p720t_init (void ) { +clps711x_devices_init (); +} + +static void __init p720t_init_late (void ) +{platform_device_register (&p720t_nand_pdev); platform_device_register_data(&platform_bus, "platform-lcd", 0, &p720t_lcd_power_pdata,
@@ -207,10 +213,6 @@ static void __init p720t_init(void) &p720t_lcd_backlight_pdata, sizeof(p720t_lcd_backlight_pdata));platform_device_register_simple ("video-clps711x" ,0 ,NULL ,0 ); -} - -static void __init p720t_init_late (void ) -{platform_device_register_data (&platform_bus,"leds-gpio" ,0 , &p720t_gpio_led_pdata,sizeof (p720t_gpio_led_pdata));
arch/arm/mach-clps711x/devices.c new file +48 -0
48 lines not on this page · raw message
arch/arm/mach-clps711x/devices.h new file +12 -0
@@ -0,0 +1,12 @@ +/* +* CLPS711X common devices definitions +* +* Copyright (C) 2013 Alexander Shiyan <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +*/ + +void clps711x_devices_init (void );
Signature · 1 line
1.8.1.5
PATCH RESEND v2 3/3 GPIO: clps711x: Add DT support
In reply to Alexander ShiyanAdd DT support to the CLPS711X GPIO driver.
--- .../devicetree/bindings/gpio/gpio-clps711x.txt | 28 ++++++++++++++++++++++ drivers/gpio/gpio-clps711x.c | 14 ++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 Documentation/devicetree/bindings/gpio/gpio-clps711x.txt
Documentation/devicetree/bindings/gpio/gpio-clps711x.txt new file +28 -0
@@ -0,0 +1,28 @@ +Cirrus Logic CLPS711X GPIO controller + +Required properties: +- compatible: Should be "cirrus,clps711x-gpio" +- reg: Physical base GPIO controller registers location and length. + There should be two registers, first is DATA register, the second + is DIRECTION. +- gpio-controller: Marks the device node as a gpio controller. +- #gpio-cells: Should be two. The first cell is the pin number and + the second cell is used to specify the gpio polarity: + 0 = active high + 1 = active low + +Note: Each GPIO port should have an alias correctly numbered in "aliases" +node. + +Example: + +aliases { + gpio0 = &porta; +}; + +porta: gpio at 80000000 { + compatible = "cirrus,clps711x-gpio"; + reg = <0x80000000 0x1>, <0x80000040 0x1>; + gpio-controller; + #gpio-cells = <2>; +};
drivers/gpio/gpio-clps711x.c +11 -3
@@ -17,10 +17,11 @@static int clps711x_gpio_probe (struct platform_device *pdev) { +struct device_node *np = pdev->dev.of_node;void __iomem *dat, *dir;struct bgpio_chip *bgc;struct resource *res; -int err, id = pdev->id; +int err, id = np ?of_alias_get_id (np,"gpio" ) : pdev->id;if ((id <0 ) || (id >4 ))return -ENODEV ;
@@ -76,10 +77,17 @@ static int clps711x_gpio_remove(struct platform_device *pdev)return bgpio_remove (bgc); } +static const struct of_device_id clps711x_gpio_ids[] = { + { .compatible ="cirrus,clps711x-gpio" }, + { } +}; +MODULE_DEVICE_TABLE (of, clps711x_gpio_ids); +static struct platform_driver clps711x_gpio_driver = { .driver = { - .name ="clps711x-gpio" , - .owner =THIS_MODULE , + .name ="clps711x-gpio" , + .owner =THIS_MODULE , + .of_match_table =of_match_ptr (clps711x_gpio_ids), }, .probe = clps711x_gpio_probe, .remove = clps711x_gpio_remove,
Signature · 1 line
1.8.1.5
PATCH RESEND 15/15 ARM: clps711x: Update defconfig
In reply to Alexander Shiyan--- arch/arm/configs/clps711x_defconfig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm/configs/clps711x_defconfig +4 -4
@@ -31,21 +31,18 @@ CONFIG_EP7211_DONGLE=y # CONFIG_WIRELESS is not set CONFIG_MTD=y CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y CONFIG_MTD_BLOCK=y CONFIG_MTD_CFI=y CONFIG_MTD_JEDECPROBE=y CONFIG_MTD_CFI_INTELEXT=y CONFIG_MTD_CFI_AMDSTD=y CONFIG_MTD_CFI_STAA=y -CONFIG_MTD_AUTCPU12=y CONFIG_MTD_PLATRAM=y CONFIG_MTD_NAND=y CONFIG_MTD_NAND_GPIO=y CONFIG_NETDEVICES=y # CONFIG_NET_CADENCE is not set # CONFIG_NET_VENDOR_BROADCOM is not set -# CONFIG_NET_VENDOR_CHELSIO is not set CONFIG_CS89x0=y CONFIG_CS89x0_PLATFORM=y # CONFIG_NET_VENDOR_FARADAY is not set
@@ -63,7 +60,11 @@ CONFIG_CS89x0_PLATFORM=y # CONFIG_VT is not set CONFIG_SERIAL_CLPS711X_CONSOLE=y # CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_I2C_GPIO=y CONFIG_SPI=y +CONFIG_SPI_CLPS711X=y +CONFIG_GPIO_CLPS711X=y CONFIG_GPIO_GENERIC_PLATFORM=y # CONFIG_HWMON is not set CONFIG_FB=y
@@ -87,4 +88,3 @@ CONFIG_DEBUG_LL=y CONFIG_EARLY_PRINTK=y # CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_HW is not set -# CONFIG_CRC32 is not set
Signature · 1 line
1.8.1.5
Arnd Bergmann
maintainerPATCH RESEND 1/15 ARM: clps711x: Remove NEED_MACH_MEMORY_H dependency
In reply to Alexander ShiyanHi Alexander,
I'm having trouble applying these. Can you say which base you used and in which order to apply the two series?
Arnd
Quoted 2 lines
I'm having trouble applying these. Can you say which base you used and in which order to apply the two series?
Afaik this is already in the arm-soc by Olof.
See clps711x/soc branch.
Thanks.
---
Arnd Bergmann
maintainerPATCH RESEND 1/15 ARM: clps711x: Remove NEED_MACH_MEMORY_H dependency
Quoted 4 lines · Alexander Shiyan
Quoted 2 lines
I'm having trouble applying these. Can you say which base you used and in which order to apply the two series?
Afaik this is already in the arm-soc by Olof.
Yes, you are right. It's harder to track what has gone in for standaline patches, so I assumed these would be different.
Thanks for the quick confirmation.
Arnd