linux/arch/mips/lantiq/xway/vmmc.c
<<
>>
Prefs
   1/*
   2 *  This program is free software; you can redistribute it and/or modify it
   3 *  under the terms of the GNU General Public License version 2 as published
   4 *  by the Free Software Foundation.
   5 *
   6 *  Copyright (C) 2012 John Crispin <john@phrozen.org>
   7 */
   8
   9#include <linux/export.h>
  10#include <linux/of_platform.h>
  11#include <linux/of_gpio.h>
  12#include <linux/dma-mapping.h>
  13
  14#include <lantiq_soc.h>
  15
  16static unsigned int *cp1_base;
  17
  18unsigned int *ltq_get_cp1_base(void)
  19{
  20        if (!cp1_base)
  21                panic("no cp1 base was set\n");
  22
  23        return cp1_base;
  24}
  25EXPORT_SYMBOL(ltq_get_cp1_base);
  26
  27static int vmmc_probe(struct platform_device *pdev)
  28{
  29#define CP1_SIZE       (1 << 20)
  30        int gpio_count;
  31        dma_addr_t dma;
  32
  33        cp1_base =
  34                (void *) CPHYSADDR(dma_alloc_coherent(&pdev->dev, CP1_SIZE,
  35                                                    &dma, GFP_KERNEL));
  36
  37        gpio_count = of_gpio_count(pdev->dev.of_node);
  38        while (gpio_count > 0) {
  39                enum of_gpio_flags flags;
  40                int gpio = of_get_gpio_flags(pdev->dev.of_node,
  41                                             --gpio_count, &flags);
  42                if (gpio_request(gpio, "vmmc-relay"))
  43                        continue;
  44                dev_info(&pdev->dev, "requested GPIO %d\n", gpio);
  45                gpio_direction_output(gpio,
  46                                      (flags & OF_GPIO_ACTIVE_LOW) ? (0) : (1));
  47        }
  48
  49        dev_info(&pdev->dev, "reserved %dMB at 0x%p", CP1_SIZE >> 20, cp1_base);
  50
  51        return 0;
  52}
  53
  54static const struct of_device_id vmmc_match[] = {
  55        { .compatible = "lantiq,vmmc-xway" },
  56        {},
  57};
  58
  59static struct platform_driver vmmc_driver = {
  60        .probe = vmmc_probe,
  61        .driver = {
  62                .name = "lantiq,vmmc",
  63                .of_match_table = vmmc_match,
  64        },
  65};
  66builtin_platform_driver(vmmc_driver);
  67