From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Warren Subject: [RFC 3/3] New pinmux testing hacks Date: Thu, 8 Dec 2011 15:13:10 -0700 Message-ID: <1323382390-14892-4-git-send-email-swarren@nvidia.com> References: <1323382390-14892-1-git-send-email-swarren@nvidia.com> Return-path: In-Reply-To: <1323382390-14892-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Sender: linux-tegra-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Linus Walleij Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Stephen Warren List-Id: linux-tegra@vger.kernel.org Signed-off-by: Stephen Warren --- DO NOT MERGE this: This is a local hack I use for testing, never to be accepted upstream. I include it only as an FYI to anyone interested in testing this. arch/arm/boot/dts/tegra20.dtsi | 8 +++++ arch/arm/mach-tegra/pinmux.c | 2 + drivers/pinctrl/pinctrl-tegra.c | 57 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 0 deletions(-) diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 4af5cd2..557d3d1 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -108,6 +108,14 @@ 0x70000868 0xa8 >; /* Pad control registers */ }; + pinmux2: pinmux2@70000000 { + compatible = "nvidia,tegra20-pinmux-new"; + reg = < 0x70000014 0x10 /* Tri-state registers */ + 0x70000080 0x20 /* Mux registers */ + 0x700000a0 0x14 /* Pull-up/down registers */ + 0x70000868 0xa8 >; /* Pad control registers */ + }; + serial@70006000 { compatible = "nvidia,tegra20-uart"; reg = <0x70006000 0x40>; diff --git a/arch/arm/mach-tegra/pinmux.c b/arch/arm/mach-tegra/pinmux.c index 1d20165..453dce5 100644 --- a/arch/arm/mach-tegra/pinmux.c +++ b/arch/arm/mach-tegra/pinmux.c @@ -722,6 +722,7 @@ static int __devinit tegra_pinmux_probe(struct platform_device *pdev) return -ENODEV; } +#if 0 if (!devm_request_mem_region(&pdev->dev, res->start, resource_size(res), dev_name(&pdev->dev))) { @@ -729,6 +730,7 @@ static int __devinit tegra_pinmux_probe(struct platform_device *pdev) "Couldn't request MEM resource %d\n", i); return -ENODEV; } +#endif regs[i] = devm_ioremap(&pdev->dev, res->start, resource_size(res)); diff --git a/drivers/pinctrl/pinctrl-tegra.c b/drivers/pinctrl/pinctrl-tegra.c index 988be8f..fc2aa7e 100644 --- a/drivers/pinctrl/pinctrl-tegra.c +++ b/drivers/pinctrl/pinctrl-tegra.c @@ -428,6 +428,59 @@ static struct of_device_id tegra_pinctrl_of_match[] __devinitdata = { {}, }; +#include +static void pmx_test_pre(void) +{ + static struct pinmux_map map[] = { + { + .name = "hack", + .ctrl_dev_name = "pinctrl.0", + .function = "pllm_out1", + .group = "cdev1", + .hog_on_boot = true, + }, + }; + + pinmux_register_mappings(map, ARRAY_SIZE(map)); +} + +static void pmx_test_post(struct pinctrl_dev *pctl) +{ + unsigned long config; + int ret; + + config = TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, 0); + ret = pin_config_group_get(pctl, "atc", &config); + if (ret) + printk("ATC TRISTATE: COULD NOT RETRIEVE: %d\n", ret); + else + printk("ATC TRISTATE IS %d\n", (int)TEGRA_PINCONF_UNPACK_ARG(config)); + + config = TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, 1); + ret = pin_config_group_set(pctl, "atc", config); + if (ret) + printk("ATC TRISTATE: COULD NOT SET: %d\n", ret); + + config = TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, 0); + ret = pin_config_group_get(pctl, "atc", &config); + if (ret) + printk("ATC TRISTATE: COULD NOT RETRIEVE: %d\n", ret); + else + printk("ATC TRISTATE IS NOW %d\n", (int)TEGRA_PINCONF_UNPACK_ARG(config)); + + config = TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, 0); + ret = pin_config_group_set(pctl, "atc", config); + if (ret) + printk("ATC TRISTATE: COULD NOT SET: %d\n", ret); + + config = TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, 0); + ret = pin_config_group_get(pctl, "atc", &config); + if (ret) + printk("ATC TRISTATE: COULD NOT RETRIEVE: %d\n", ret); + else + printk("ATC TRISTATE IS NOW %d\n", (int)TEGRA_PINCONF_UNPACK_ARG(config)); +} + static int __devinit tegra_pinctrl_probe(struct platform_device *pdev) { const struct of_device_id *match; @@ -494,6 +547,8 @@ static int __devinit tegra_pinctrl_probe(struct platform_device *pdev) } } + pmx_test_pre(); + pmx->pctl = pinctrl_register(&tegra_pinctrl_desc, &pdev->dev, pmx); if (IS_ERR(pmx->pctl)) { dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); @@ -502,6 +557,8 @@ static int __devinit tegra_pinctrl_probe(struct platform_device *pdev) pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range); + pmx_test_post(pmx->pctl); + platform_set_drvdata(pdev, pmx); dev_dbg(&pdev->dev, "Probed Tegra pinctrl driver\n"); -- 1.7.0.4