Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01afdd13 authored by Rabin Vincent's avatar Rabin Vincent Committed by Linus Walleij
Browse files

ux500: rework gpio registration



Rework gpio registration to remove build-time
changing macros.

Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
parent 8d568ae5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#

obj-y				:= clock.o cpu.o devices.o devices-common.o
obj-$(CONFIG_UX500_SOC_DB5500)	+= cpu-db5500.o devices-db5500.o dma-db5500.o
obj-$(CONFIG_UX500_SOC_DB5500)	+= cpu-db5500.o dma-db5500.o
obj-$(CONFIG_UX500_SOC_DB8500)	+= cpu-db8500.o devices-db8500.o prcmu.o
obj-$(CONFIG_MACH_U8500_MOP)	+= board-mop500.o board-mop500-sdi.o
obj-$(CONFIG_MACH_U5500)	+= board-u5500.o board-u5500-sdi.o
+24 −9
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@

#include <asm/mach/map.h>

#include <plat/gpio.h>

#include <mach/hardware.h>
#include <mach/devices.h>
#include <mach/setup.h>
@@ -113,19 +115,32 @@ static struct platform_device mbox2_device = {
};

static struct platform_device *u5500_platform_devs[] __initdata = {
	&u5500_gpio_devs[0],
	&u5500_gpio_devs[1],
	&u5500_gpio_devs[2],
	&u5500_gpio_devs[3],
	&u5500_gpio_devs[4],
	&u5500_gpio_devs[5],
	&u5500_gpio_devs[6],
	&u5500_gpio_devs[7],
	&mbox0_device,
	&mbox1_device,
	&mbox2_device,
};

static resource_size_t __initdata db5500_gpio_base[] = {
	U5500_GPIOBANK0_BASE,
	U5500_GPIOBANK1_BASE,
	U5500_GPIOBANK2_BASE,
	U5500_GPIOBANK3_BASE,
	U5500_GPIOBANK4_BASE,
	U5500_GPIOBANK5_BASE,
	U5500_GPIOBANK6_BASE,
	U5500_GPIOBANK7_BASE,
};

static void __init db5500_add_gpios(void)
{
	struct nmk_gpio_platform_data pdata = {
		/* No custom data yet */
	};

	dbx500_add_gpios(ARRAY_AND_SIZE(db5500_gpio_base),
			 IRQ_DB5500_GPIO0, &pdata);
}

void __init u5500_map_io(void)
{
	ux500_map_io();
@@ -135,8 +150,8 @@ void __init u5500_map_io(void)

void __init u5500_init_devices(void)
{
	db5500_add_gpios();
	db5500_dma_init();

	db5500_add_rtc();

	platform_add_devices(u5500_platform_devs,
+23 −9
Original line number Diff line number Diff line
@@ -25,15 +25,6 @@
#include "devices-db8500.h"

static struct platform_device *platform_devs[] __initdata = {
	&u8500_gpio_devs[0],
	&u8500_gpio_devs[1],
	&u8500_gpio_devs[2],
	&u8500_gpio_devs[3],
	&u8500_gpio_devs[4],
	&u8500_gpio_devs[5],
	&u8500_gpio_devs[6],
	&u8500_gpio_devs[7],
	&u8500_gpio_devs[8],
	&u8500_dma40_device,
};

@@ -141,6 +132,28 @@ void __init u8500_map_io(void)
	get_db8500_asic_id();
}

static resource_size_t __initdata db8500_gpio_base[] = {
	U8500_GPIOBANK0_BASE,
	U8500_GPIOBANK1_BASE,
	U8500_GPIOBANK2_BASE,
	U8500_GPIOBANK3_BASE,
	U8500_GPIOBANK4_BASE,
	U8500_GPIOBANK5_BASE,
	U8500_GPIOBANK6_BASE,
	U8500_GPIOBANK7_BASE,
	U8500_GPIOBANK8_BASE,
};

static void __init db8500_add_gpios(void)
{
	struct nmk_gpio_platform_data pdata = {
		/* No custom data yet */
	};

	dbx500_add_gpios(ARRAY_AND_SIZE(db8500_gpio_base),
			 IRQ_DB8500_GPIO0, &pdata);
}

/*
 * This function is called from the board init
 */
@@ -164,6 +177,7 @@ void __init u8500_init_devices(void)
		dma40_u8500ed_fixup();

	db8500_add_rtc();
	db8500_add_gpios();

	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));

+38 −0
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@
#include <linux/platform_device.h>
#include <linux/amba/bus.h>

#include <plat/gpio.h>

#include <mach/hardware.h>

#include "devices-common.h"
@@ -105,3 +107,39 @@ dbx500_add_platform_device_4k1irq(const char *name, int id,
	return dbx500_add_platform_device(name, id, pdata, resources,
					  ARRAY_SIZE(resources));
}

static struct platform_device *
dbx500_add_gpio(int id, resource_size_t addr, int irq,
		struct nmk_gpio_platform_data *pdata)
{
	struct resource resources[] = {
		{
			.start	= addr,
			.end	= addr + 127,
			.flags	= IORESOURCE_MEM,
		},
		{
			.start	= irq,
			.end	= irq,
			.flags	= IORESOURCE_IRQ,
		}
	};

	return platform_device_register_resndata(NULL, "gpio", id,
				resources, ARRAY_SIZE(resources),
				pdata, sizeof(*pdata));
}

void dbx500_add_gpios(resource_size_t *base, int num, int irq,
		      struct nmk_gpio_platform_data *pdata)
{
	int first = 0;
	int i;

	for (i = 0; i < num; i++, first += 32, irq++) {
		pdata->first_gpio = first;
		pdata->first_irq = NOMADIK_GPIO_TO_IRQ(first);

		dbx500_add_gpio(i, base[i], irq, pdata);
	}
}
+5 −0
Original line number Diff line number Diff line
@@ -74,4 +74,9 @@ dbx500_add_rtc(resource_size_t base, int irq)
	return dbx500_add_amba_device("rtc-pl031", base, irq, NULL, 0);
}

struct nmk_gpio_platform_data;

void dbx500_add_gpios(resource_size_t *base, int num, int irq,
		      struct nmk_gpio_platform_data *pdata);

#endif
Loading