[PATCH v2 3/4] gpio/tegra: Convert to a platform device
From: Olof Johansson <hidden>
Date: 2011-10-11 21:40:31
Also in:
linux-devicetree, linux-tegra
On Tue, Oct 11, 2011 at 2:29 PM, Olof Johansson [off-list ref] wrote:
quoted
@@ -333,28 +336,55 @@ static struct irq_chip tegra_gpio_irq_chip = {? */ ?static struct lock_class_key gpio_lock_class; -static int __init tegra_gpio_init(void) +static int __init tegra_gpio_probe(struct platform_device *pdev) ?{ + ? ? struct resource *res; ? ? ? struct tegra_gpio_bank *bank; ? ? ? int gpio; ? ? ? int i; ? ? ? int j; + ? ? for (i = 0; i < ARRAY_SIZE(tegra_gpio_banks); i++) { + ? ? ? ? ? ? res = platform_get_resource(pdev, IORESOURCE_IRQ, i); + ? ? ? ? ? ? if (!res) { + ? ? ? ? ? ? ? ? ? ? dev_err(&pdev->dev, "Missing IRQ resource\n"); + ? ? ? ? ? ? ? ? ? ? return -ENODEV; + ? ? ? ? ? ? } + + ? ? ? ? ? ? bank = &tegra_gpio_banks[i]; + ? ? ? ? ? ? bank->bank = i; + ? ? ? ? ? ? bank->irq = res->start; + ? ? } + + ? ? res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + ? ? if (!res) { + ? ? ? ? ? ? dev_err(&pdev->dev, "Missing MEM resource\n"); + ? ? ? ? ? ? return -ENODEV; + ? ? } + + ? ? if (!devm_request_mem_region(&pdev->dev, res->start, + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?resource_size(res), + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dev_name(&pdev->dev))) { + ? ? ? ? ? ? dev_err(&pdev->dev, "Couldn't request MEM resource\n"); + ? ? ? ? ? ? return -ENODEV; + ? ? } + + ? ? regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); + ? ? if (!regs) { + ? ? ? ? ? ? dev_err(&pdev->dev, "Couldn't ioremap regs\n"); + ? ? ? ? ? ? return -ENODEV;Should you release the mem region requested above here?
As discussed on irc, this is handled by the driver core in case of failed probe, so nevermind. -Olof