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

Commit 18403424 authored by Lee Jones's avatar Lee Jones Committed by Arnd Bergmann
Browse files

ARM: ux500: pass parent pointer to each platform device



This patch provides a means for any device within ux500
platform code to allocate its own parent. This is particularly
prudent with the introduction of /sys/devices/socX, as a
device can now proclaim to be integral part of an SoC, rather
than a more generic platform device. Latter patches make good
use of this functionality.

Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent d65b4e98
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ static struct mmci_platform_data mop500_sdi0_data = {
#endif
};

static void sdi0_configure(void)
static void sdi0_configure(struct device *parent)
{
	int ret;

@@ -123,15 +123,15 @@ static void sdi0_configure(void)
	gpio_direction_output(sdi0_en, 1);

	/* Add the device, force v2 to subrevision 1 */
	db8500_add_sdi0(&mop500_sdi0_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi0(parent, &mop500_sdi0_data, U8500_SDI_V2_PERIPHID);
}

void mop500_sdi_tc35892_init(void)
void mop500_sdi_tc35892_init(struct device *parent)
{
	mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD;
	sdi0_en = GPIO_SDMMC_EN;
	sdi0_vsel = GPIO_SDMMC_1V8_3V_SEL;
	sdi0_configure();
	sdi0_configure(parent);
}

/*
@@ -246,12 +246,13 @@ static struct mmci_platform_data mop500_sdi4_data = {
#endif
};

void __init mop500_sdi_init(void)
void __init mop500_sdi_init(struct device *parent)
{
	/* PoP:ed eMMC */
	db8500_add_sdi2(&mop500_sdi2_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi2(parent, &mop500_sdi2_data, U8500_SDI_V2_PERIPHID);
	/* On-board eMMC */
	db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);

	/*
	 * On boards with the TC35892 GPIO expander, sdi0 will finally
	 * be added when the TC35892 initializes and calls
@@ -259,31 +260,31 @@ void __init mop500_sdi_init(void)
	 */
}

void __init snowball_sdi_init(void)
void __init snowball_sdi_init(struct device *parent)
{
	/* On Snowball MMC_CAP_SD_HIGHSPEED isn't supported (Hardware issue?) */
	mop500_sdi0_data.capabilities &= ~MMC_CAP_SD_HIGHSPEED;
	/* On-board eMMC */
	db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
	/* External Micro SD slot */
	mop500_sdi0_data.gpio_cd = SNOWBALL_SDMMC_CD_GPIO;
	mop500_sdi0_data.cd_invert = true;
	sdi0_en = SNOWBALL_SDMMC_EN_GPIO;
	sdi0_vsel = SNOWBALL_SDMMC_1V8_3V_GPIO;
	sdi0_configure();
	sdi0_configure(parent);
}

void __init hrefv60_sdi_init(void)
void __init hrefv60_sdi_init(struct device *parent)
{
	/* PoP:ed eMMC */
	db8500_add_sdi2(&mop500_sdi2_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi2(parent, &mop500_sdi2_data, U8500_SDI_V2_PERIPHID);
	/* On-board eMMC */
	db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
	/* External Micro SD slot */
	mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO;
	sdi0_en = HREFV60_SDMMC_EN_GPIO;
	sdi0_vsel = HREFV60_SDMMC_1V8_3V_GPIO;
	sdi0_configure();
	sdi0_configure(parent);
	/* WLAN SDIO channel */
	db8500_add_sdi1(&mop500_sdi1_data, U8500_SDI_V2_PERIPHID);
	db8500_add_sdi1(parent, &mop500_sdi1_data, U8500_SDI_V2_PERIPHID);
}
+35 −27
Original line number Diff line number Diff line
@@ -226,7 +226,12 @@ static struct tps6105x_platform_data mop500_tps61052_data = {

static void mop500_tc35892_init(struct tc3589x *tc3589x, unsigned int base)
{
	mop500_sdi_tc35892_init();
	struct device *parent = NULL;
#if 0
	/* FIXME: Is the sdi actually part of tc3589x? */
	parent = tc3589x->dev;
#endif
	mop500_sdi_tc35892_init(parent);
}

static struct tc3589x_gpio_platform_data mop500_tc35892_gpio_data = {
@@ -353,12 +358,12 @@ U8500_I2C_CONTROLLER(1, 0xe, 1, 8, 100000, 200, I2C_FREQ_MODE_FAST);
U8500_I2C_CONTROLLER(2,	0xe, 1, 8, 100000, 200, I2C_FREQ_MODE_FAST);
U8500_I2C_CONTROLLER(3,	0xe, 1, 8, 100000, 200, I2C_FREQ_MODE_FAST);

static void __init mop500_i2c_init(void)
static void __init mop500_i2c_init(struct device *parent)
{
	db8500_add_i2c0(&u8500_i2c0_data);
	db8500_add_i2c1(&u8500_i2c1_data);
	db8500_add_i2c2(&u8500_i2c2_data);
	db8500_add_i2c3(&u8500_i2c3_data);
	db8500_add_i2c0(parent, &u8500_i2c0_data);
	db8500_add_i2c1(parent, &u8500_i2c1_data);
	db8500_add_i2c2(parent, &u8500_i2c2_data);
	db8500_add_i2c3(parent, &u8500_i2c3_data);
}

static struct gpio_keys_button mop500_gpio_keys[] = {
@@ -451,9 +456,9 @@ static struct pl022_ssp_controller ssp0_platform_data = {
	.num_chipselect = 5,
};

static void __init mop500_spi_init(void)
static void __init mop500_spi_init(struct device *parent)
{
	db8500_add_ssp0(&ssp0_platform_data);
	db8500_add_ssp0(parent, &ssp0_platform_data);
}

#ifdef CONFIG_STE_DMA40
@@ -587,11 +592,11 @@ static struct amba_pl011_data uart2_plat = {
#endif
};

static void __init mop500_uart_init(void)
static void __init mop500_uart_init(struct device *parent)
{
	db8500_add_uart0(&uart0_plat);
	db8500_add_uart1(&uart1_plat);
	db8500_add_uart2(&uart2_plat);
	db8500_add_uart0(parent, &uart0_plat);
	db8500_add_uart1(parent, &uart1_plat);
	db8500_add_uart2(parent, &uart2_plat);
}

static struct platform_device *snowball_platform_devs[] __initdata = {
@@ -603,21 +608,22 @@ static struct platform_device *snowball_platform_devs[] __initdata = {

static void __init mop500_init_machine(void)
{
	struct device *parent = NULL;
	int i2c0_devs;

	mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR;

	u8500_init_devices();
	parent = u8500_init_devices();

	mop500_pins_init();

	platform_add_devices(mop500_platform_devs,
			ARRAY_SIZE(mop500_platform_devs));

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

	i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);

@@ -631,19 +637,20 @@ static void __init mop500_init_machine(void)

static void __init snowball_init_machine(void)
{
	struct device *parent = NULL;
	int i2c0_devs;

	u8500_init_devices();
	parent = u8500_init_devices();

	snowball_pins_init();

	platform_add_devices(snowball_platform_devs,
			ARRAY_SIZE(snowball_platform_devs));

	mop500_i2c_init();
	snowball_sdi_init();
	mop500_spi_init();
	mop500_uart_init();
	mop500_i2c_init(parent);
	snowball_sdi_init(parent);
	mop500_spi_init(parent);
	mop500_uart_init(parent);

	i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);
	i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs);
@@ -656,6 +663,7 @@ static void __init snowball_init_machine(void)

static void __init hrefv60_init_machine(void)
{
	struct device *parent = NULL;
	int i2c0_devs;

	/*
@@ -665,17 +673,17 @@ static void __init hrefv60_init_machine(void)
	 */
	mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO;

	u8500_init_devices();
	parent = u8500_init_devices();

	hrefv60_pins_init();

	platform_add_devices(mop500_platform_devs,
			ARRAY_SIZE(mop500_platform_devs));

	mop500_i2c_init();
	hrefv60_sdi_init();
	mop500_spi_init();
	mop500_uart_init();
	mop500_i2c_init(parent);
	hrefv60_sdi_init(parent);
	mop500_spi_init(parent);
	mop500_uart_init(parent);

	i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);

+4 −4
Original line number Diff line number Diff line
@@ -75,10 +75,10 @@

struct i2c_board_info;

extern void mop500_sdi_init(void);
extern void snowball_sdi_init(void);
extern void hrefv60_sdi_init(void);
extern void mop500_sdi_tc35892_init(void);
extern void mop500_sdi_init(struct device *parent);
extern void snowball_sdi_init(struct device *parent);
extern void hrefv60_sdi_init(struct device *parent);
extern void mop500_sdi_tc35892_init(struct device *parent);
void __init mop500_u8500uib_init(void);
void __init mop500_stuib_init(void);
void __init mop500_pins_init(void);
+2 −2
Original line number Diff line number Diff line
@@ -66,9 +66,9 @@ static struct mmci_platform_data u5500_sdi0_data = {
#endif
};

void __init u5500_sdi_init(void)
void __init u5500_sdi_init(struct device *parent)
{
	nmk_config_pins(u5500_sdi_pins, ARRAY_SIZE(u5500_sdi_pins));

	db5500_add_sdi0(&u5500_sdi0_data);
	db5500_add_sdi0(parent, &u5500_sdi0_data);
}
+13 −10
Original line number Diff line number Diff line
@@ -97,9 +97,9 @@ static struct i2c_board_info __initdata u5500_i2c2_devices[] = {
	},
};

static void __init u5500_i2c_init(void)
static void __init u5500_i2c_init(struct device *parent)
{
	db5500_add_i2c2(&u5500_i2c2_data);
	db5500_add_i2c2(parent, &u5500_i2c2_data);
	i2c_register_board_info(2, ARRAY_AND_SIZE(u5500_i2c2_devices));
}

@@ -126,20 +126,23 @@ static struct platform_device *u5500_platform_devices[] __initdata = {
	&ab5500_device,
};

static void __init u5500_uart_init(void)
static void __init u5500_uart_init(struct device *parent)
{
	db5500_add_uart0(NULL);
	db5500_add_uart1(NULL);
	db5500_add_uart2(NULL);
	db5500_add_uart0(parent, NULL);
	db5500_add_uart1(parent, NULL);
	db5500_add_uart2(parent, NULL);
}

static void __init u5500_init_machine(void)
{
	u5500_init_devices();
	struct device *parent = NULL;

	parent = u5500_init_devices();
	nmk_config_pins(u5500_pins, ARRAY_SIZE(u5500_pins));
	u5500_i2c_init();
	u5500_sdi_init();
	u5500_uart_init();

	u5500_i2c_init(parent);
	u5500_sdi_init(parent);
	u5500_uart_init(parent);

	platform_add_devices(u5500_platform_devices,
		ARRAY_SIZE(u5500_platform_devices));
Loading