From patchwork Mon Dec 10 08:56:00 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 13444 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 589EC23E1A for ; Mon, 10 Dec 2012 08:56:37 +0000 (UTC) Received: from mail-ie0-f176.google.com (mail-ie0-f176.google.com [209.85.223.176]) by fiordland.canonical.com (Postfix) with ESMTP id E7598A183C8 for ; Mon, 10 Dec 2012 08:56:36 +0000 (UTC) Received: by mail-ie0-f176.google.com with SMTP id 13so7655200iea.35 for ; Mon, 10 Dec 2012 00:56:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:from:to:cc :subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=WsHDHEkCagmqVkpcucUvz50rE7nUaq7NugUgu2mqTaI=; b=f0udsPAqBL3+GyuQQ08vAZhzVu9U6CR8uS2UzCynrxOOpOCCnB6Q1mH44H7JFI/z/K j8JEPmojhzfP4rI9iHZuN5XzsVEXgub7YEKZrKvwvpHnnXcP1XrvbRf2rM+8zmh3tvei keQ8+Q3YfPfxpnVlqYXI/xMOahTll9VZ76v9uFidhqseUVYBJCV9TueuD1qeqFlaO1G9 zGatQfGco6SY34kkKDKX3ssRvSOaP8IvjFQY44blWEe5TjH/fJo8rRAIkXkb7lxBgsCK mtisHUzVHggIu9rkSehKj3F2CtrOVh61Ps1u0wH5pO7+2HINIsj0mIhTOaCzQOhzOkgy 0yUg== Received: by 10.50.36.164 with SMTP id r4mr5839398igj.57.1355129796365; Mon, 10 Dec 2012 00:56:36 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.50.67.148 with SMTP id n20csp54763igt; Mon, 10 Dec 2012 00:56:35 -0800 (PST) Received: by 10.180.93.69 with SMTP id cs5mr9386704wib.3.1355129795310; Mon, 10 Dec 2012 00:56:35 -0800 (PST) Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by mx.google.com with ESMTPS id p30si13805894wen.95.2012.12.10.00.56.34 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 10 Dec 2012 00:56:35 -0800 (PST) Received-SPF: neutral (google.com: 209.85.212.182 is neither permitted nor denied by best guess record for domain of lee.jones@linaro.org) client-ip=209.85.212.182; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.212.182 is neither permitted nor denied by best guess record for domain of lee.jones@linaro.org) smtp.mail=lee.jones@linaro.org Received: by mail-wi0-f182.google.com with SMTP id hn14so962585wib.3 for ; Mon, 10 Dec 2012 00:56:34 -0800 (PST) Received: by 10.216.141.15 with SMTP id f15mr4876591wej.116.1355129794772; Mon, 10 Dec 2012 00:56:34 -0800 (PST) Received: from localhost.localdomain (cpc1-aztw13-0-0-cust473.18-1.cable.virginmedia.com. [77.102.241.218]) by mx.google.com with ESMTPS id fv2sm9173114wib.4.2012.12.10.00.56.33 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 10 Dec 2012 00:56:34 -0800 (PST) From: Lee Jones To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: arnd@arndb.de, linus.walleij@stericsson.com, ulf.hansson@linaro.org, Lee Jones Subject: [PATCH 11/12] ARM: ux500: Use the GPIO regulator framework for SDI0's 'en' and 'vsel' Date: Mon, 10 Dec 2012 08:56:00 +0000 Message-Id: <1355129761-8088-12-git-send-email-lee.jones@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1355129761-8088-1-git-send-email-lee.jones@linaro.org> References: <1355129761-8088-1-git-send-email-lee.jones@linaro.org> X-Gm-Message-State: ALoCoQmxx8af/sM9xoWaKyvL2HNUajhap39XZkH3hrr11FhsydjkOuOFyUdbDiUPpdlf9NXBMqmE To prevent lots of unnecessary call-backs into platform code, we're now using the GPIO regulator framework to control the 'enable' (en) and 'voltage select' (vsel) GPIO pins which in turn control the MMCI's secondary regulator settings. This already works with Device Tree, but when booting with ATAGs we need to register it as a platform device. Signed-off-by: Lee Jones --- arch/arm/mach-ux500/board-mop500.c | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index daa4237..9f9fe7f 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #include #include @@ -91,6 +93,54 @@ static struct platform_device snowball_gpio_en_3v3_regulator_dev = { }, }; +static struct regulator_consumer_supply sdi0_reg_consumers[] = { + REGULATOR_SUPPLY("vqmmc", NULL), +}; + +static struct regulator_init_data sdi0_reg_init_data = { + .constraints = { + .min_uV = 1800000, + .max_uV = 3300000, + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies = ARRAY_SIZE(sdi0_reg_consumers), + .consumer_supplies = sdi0_reg_consumers, +}; + +/* Dynamically populated. */ +static struct gpio sdi0_reg_gpios[] = { + { 0, GPIOF_OUT_INIT_LOW, "mmci_vsel" }, +}; + +static struct gpio_regulator_state sdi0_reg_states[] = { + { .value = 3300000, .gpios = (0 << 0) }, + { .value = 1800000, .gpios = (1 << 0) }, +}; + +static struct gpio_regulator_config sdi0_reg_info = { + .supply_name = "mmci-reg", + + .enable_high = 1, + .enabled_at_boot = 0, + + .gpios = sdi0_reg_gpios, + .nr_gpios = ARRAY_SIZE(sdi0_reg_gpios), + + .states = sdi0_reg_states, + .nr_states = ARRAY_SIZE(sdi0_reg_states), + + .type = REGULATOR_VOLTAGE, + .init_data = &sdi0_reg_init_data, +}; + +static struct platform_device sdi0_regulator = { + .name = "gpio-regulator", + .id = -1, + .dev = { + .platform_data = &sdi0_reg_info, + }, +}; + static struct ab8500_gpio_platform_data ab8500_gpio_pdata = { .gpio_base = MOP500_AB8500_PIN_GPIO(1), .irq_base = MOP500_AB8500_VIR_GPIO_IRQ_BASE, @@ -440,6 +490,7 @@ static struct hash_platform_data u8500_hash1_platform_data = { /* add any platform devices here - TODO */ static struct platform_device *mop500_platform_devs[] __initdata = { &mop500_gpio_keys_device, + &sdi0_regulator, }; #ifdef CONFIG_STE_DMA40 @@ -581,6 +632,7 @@ static struct platform_device *snowball_platform_devs[] __initdata = { &snowball_key_dev, &snowball_sbnet_dev, &snowball_gpio_en_3v3_regulator_dev, + &sdi0_regulator, }; static void __init mop500_init_machine(void) @@ -591,6 +643,9 @@ static void __init mop500_init_machine(void) mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; + sdi0_reg_info.enable_gpio = GPIO_SDMMC_EN; + sdi0_reg_info.gpios[0].gpio = GPIO_SDMMC_1V8_3V_SEL; + mop500_pinmaps_init(); parent = u8500_init_devices(&ab8500_platdata); @@ -623,6 +678,9 @@ static void __init snowball_init_machine(void) struct device *parent = NULL; int i; + sdi0_reg_info.enable_gpio = SNOWBALL_SDMMC_EN_GPIO; + sdi0_reg_info.gpios[0].gpio = SNOWBALL_SDMMC_1V8_3V_GPIO; + snowball_pinmaps_init(); parent = u8500_init_devices(&ab8500_platdata); @@ -655,6 +713,9 @@ static void __init hrefv60_init_machine(void) */ mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO; + sdi0_reg_info.enable_gpio = HREFV60_SDMMC_EN_GPIO; + sdi0_reg_info.gpios[0].gpio = HREFV60_SDMMC_1V8_3V_GPIO; + hrefv60_pinmaps_init(); parent = u8500_init_devices(&ab8500_platdata);