linux/arch/arm/mach-imx/mm-imx27.c
<<
>>
Prefs
   1/*
   2 * arch/arm/mach-imx/mm-imx27.c
   3 *
   4 * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version 2
   9 * of the License, or (at your option) any later version.
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18 * MA 02110-1301, USA.
  19 */
  20
  21#include <linux/mm.h>
  22#include <linux/init.h>
  23#include <linux/pinctrl/machine.h>
  24#include <asm/pgtable.h>
  25#include <asm/mach/map.h>
  26
  27#include "common.h"
  28#include "devices/devices-common.h"
  29#include "hardware.h"
  30#include "iomux-v1.h"
  31
  32/* MX27 memory map definition */
  33static struct map_desc imx27_io_desc[] __initdata = {
  34        /*
  35         * this fixed mapping covers:
  36         * - AIPI1
  37         * - AIPI2
  38         * - AITC
  39         * - ROM Patch
  40         * - and some reserved space
  41         */
  42        imx_map_entry(MX27, AIPI, MT_DEVICE),
  43        /*
  44         * this fixed mapping covers:
  45         * - CSI
  46         * - ATA
  47         */
  48        imx_map_entry(MX27, SAHB1, MT_DEVICE),
  49        /*
  50         * this fixed mapping covers:
  51         * - EMI
  52         */
  53        imx_map_entry(MX27, X_MEMC, MT_DEVICE),
  54};
  55
  56/*
  57 * Initialize the memory map. It is called during the
  58 * system startup to create static physical to virtual
  59 * memory map for the IO modules.
  60 */
  61void __init mx27_map_io(void)
  62{
  63        iotable_init(imx27_io_desc, ARRAY_SIZE(imx27_io_desc));
  64}
  65
  66void __init imx27_init_early(void)
  67{
  68        mxc_set_cpu_type(MXC_CPU_MX27);
  69        imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR),
  70                        MX27_NUM_GPIO_PORT);
  71}
  72
  73void __init mx27_init_irq(void)
  74{
  75        mxc_init_irq(MX27_IO_ADDRESS(MX27_AVIC_BASE_ADDR));
  76}
  77
  78static const struct resource imx27_audmux_res[] __initconst = {
  79        DEFINE_RES_MEM(MX27_AUDMUX_BASE_ADDR, SZ_4K),
  80};
  81
  82void __init imx27_soc_init(void)
  83{
  84        mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
  85        mxc_device_init();
  86
  87        /* i.mx27 has the i.mx21 type gpio */
  88        mxc_register_gpio("imx21-gpio", 0, MX27_GPIO1_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  89        mxc_register_gpio("imx21-gpio", 1, MX27_GPIO2_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  90        mxc_register_gpio("imx21-gpio", 2, MX27_GPIO3_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  91        mxc_register_gpio("imx21-gpio", 3, MX27_GPIO4_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  92        mxc_register_gpio("imx21-gpio", 4, MX27_GPIO5_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  93        mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
  94
  95        pinctrl_provide_dummies();
  96        imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR,
  97                        MX27_INT_DMACH0, 0); /* No ERR irq */
  98        /* imx27 has the imx21 type audmux */
  99        platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,
 100                                        ARRAY_SIZE(imx27_audmux_res));
 101
 102        imx27_pm_init();
 103}
 104