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

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

ux500: rework device registration



Change the Ux500 devices to be dynamically allocated and added by
calling functions instead of referencing structures, thereby allowing
5500 and other derivatives' support to be added without having to
duplicate structures, use fixup functions, or use compile-time macros.

Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
parent 1bde668c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
# Makefile for the linux kernel, U8500 machine.
#

obj-y				:= clock.o cpu.o devices.o
obj-y				:= clock.o cpu.o devices.o devices-common.o
obj-$(CONFIG_UX500_SOC_DB5500)	+= cpu-db5500.o devices-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
+4 −7
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <mach/devices.h>
#include <mach/hardware.h>

#include "devices-db8500.h"
#include "pins-db8500.h"
#include "board-mop500.h"

@@ -108,7 +109,7 @@ void mop500_sdi_tc35892_init(void)
	gpio_direction_output(GPIO_SDMMC_1V8_3V_SEL, 1);
	gpio_direction_output(GPIO_SDMMC_EN, 0);

	amba_device_register(&u8500_sdi0_device, &iomem_resource);
	db8500_add_sdi0(&mop500_sdi0_data);
}

/*
@@ -140,15 +141,11 @@ void mop500_sdi_init(void)
{
	nmk_config_pins(mop500_sdi_pins, ARRAY_SIZE(mop500_sdi_pins));

	u8500_sdi0_device.dev.platform_data = &mop500_sdi0_data;
	u8500_sdi2_device.dev.platform_data = &mop500_sdi2_data;
	u8500_sdi4_device.dev.platform_data = &mop500_sdi4_data;

	if (!cpu_is_u8500ed()) {
		nmk_config_pins(mop500_sdi2_pins, ARRAY_SIZE(mop500_sdi2_pins));
		amba_device_register(&u8500_sdi2_device, &iomem_resource);
		db8500_add_sdi2(&mop500_sdi2_data);
	}

	/* On-board eMMC */
	amba_device_register(&u8500_sdi4_device, &iomem_resource);
	db8500_add_sdi4(&mop500_sdi4_data);
}
+23 −23
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include <mach/devices.h>
#include <mach/irqs.h>

#include "devices-db8500.h"
#include "pins-db8500.h"
#include "board-mop500.h"

@@ -192,12 +193,13 @@ U8500_I2C_CONTROLLER(1, 0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
U8500_I2C_CONTROLLER(2,	0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
U8500_I2C_CONTROLLER(3,	0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);

static struct amba_device *amba_devs[] __initdata = {
	&ux500_uart0_device,
	&ux500_uart1_device,
	&ux500_uart2_device,
	&u8500_ssp0_device,
};
static void __init mop500_i2c_init(void)
{
	db8500_add_i2c0(&u8500_i2c0_data);
	db8500_add_i2c1(&u8500_i2c1_data);
	db8500_add_i2c2(&u8500_i2c2_data);
	db8500_add_i2c3(&u8500_i2c3_data);
}

static const unsigned int ux500_keymap[] = {
	KEY(2, 5, KEY_END),
@@ -308,36 +310,34 @@ static struct ske_keypad_platform_data ske_keypad_board = {

/* add any platform devices here - TODO */
static struct platform_device *platform_devs[] __initdata = {
	&u8500_i2c0_device,
	&ux500_i2c1_device,
	&ux500_i2c2_device,
	&ux500_i2c3_device,
	&ux500_ske_keypad_device,
};

static void __init u8500_init_machine(void)
static void __init mop500_spi_init(void)
{
	int i;
	db8500_add_ssp0(&ssp0_platform_data);
}

static void __init mop500_uart_init(void)
{
	db8500_add_uart0();
	db8500_add_uart1();
	db8500_add_uart2();
}

static void __init u8500_init_machine(void)
{
	u8500_init_devices();

	nmk_config_pins(mop500_pins, ARRAY_SIZE(mop500_pins));

	u8500_i2c0_device.dev.platform_data = &u8500_i2c0_data;
	ux500_i2c1_device.dev.platform_data = &u8500_i2c1_data;
	ux500_i2c2_device.dev.platform_data = &u8500_i2c2_data;
	ux500_i2c3_device.dev.platform_data = &u8500_i2c3_data;
	ux500_ske_keypad_device.dev.platform_data = &ske_keypad_board;

	u8500_ssp0_device.dev.platform_data = &ssp0_platform_data;

	/* Register the active AMBA devices on this board */
	for (i = 0; i < ARRAY_SIZE(amba_devs); i++)
		amba_device_register(amba_devs[i], &iomem_resource);

	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));

	mop500_i2c_init();
	mop500_sdi_init();
	mop500_spi_init();
	mop500_uart_init();

	/* If HW is early drop (ED) or V1.0 then use SPI to access AB8500 */
	if (cpu_is_u8500ed() || cpu_is_u8500v10())
+10 −6
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/platform_device.h>
#include <linux/amba/bus.h>
#include <linux/gpio.h>
#include <linux/irq.h>

#include <asm/mach/arch.h>
#include <asm/mach-types.h>
@@ -17,17 +18,20 @@
#include <mach/devices.h>
#include <mach/setup.h>

static struct amba_device *amba_board_devs[] __initdata = {
	&ux500_uart0_device,
	&ux500_uart1_device,
	&ux500_uart2_device,
};
#include "devices-db5500.h"

static void __init u5500_uart_init(void)
{
	db5500_add_uart0();
	db5500_add_uart1();
	db5500_add_uart2();
}

static void __init u5500_init_machine(void)
{
	u5500_init_devices();

	amba_add_devices(amba_board_devs, ARRAY_SIZE(amba_board_devs));
	u5500_uart_init();
}

MACHINE_START(U8500, "ST-Ericsson U5500 Platform")
+4 −1
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#include <linux/platform_device.h>
#include <linux/amba/bus.h>
#include <linux/io.h>
#include <linux/irq.h>

#include <asm/mach/map.h>

@@ -16,6 +17,8 @@
#include <mach/setup.h>
#include <mach/irqs.h>

#include "devices-db5500.h"

static struct map_desc u5500_io_desc[] __initdata = {
	__IO_DEV_DESC(U5500_GPIO0_BASE, SZ_4K),
	__IO_DEV_DESC(U5500_GPIO1_BASE, SZ_4K),
@@ -132,7 +135,7 @@ void __init u5500_map_io(void)

void __init u5500_init_devices(void)
{
	ux500_init_devices();
	db5500_add_rtc();

	platform_add_devices(u5500_platform_devs,
			     ARRAY_SIZE(u5500_platform_devs));
Loading