linux/arch/arm/mach-pxa/mp900.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  linux/arch/arm/mach-pxa/mp900.c
   4 *
   5 *  Support for the NEC MobilePro900/C platform
   6 *
   7 *  Based on mach-pxa/gumstix.c
   8 *
   9 *  2007, 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com>
  10 *  2007, 2008 Michael Petchkovsky <mkpetch@internode.on.net>
  11 */
  12
  13#include <linux/init.h>
  14#include <linux/device.h>
  15#include <linux/platform_device.h>
  16#include <linux/types.h>
  17#include <linux/usb/isp116x.h>
  18
  19#include <asm/mach-types.h>
  20#include <asm/mach/arch.h>
  21
  22#include "pxa25x.h"
  23#include "generic.h"
  24
  25static void isp116x_pfm_delay(struct device *dev, int delay)
  26{
  27
  28        /* 400MHz PXA2 = 2.5ns / instruction */
  29
  30        int cyc = delay / 10;
  31
  32        /* 4 Instructions = 4 x 2.5ns = 10ns */
  33        __asm__ volatile ("0:\n"
  34                "subs %0, %1, #1\n"
  35                "bge 0b\n"
  36                :"=r" (cyc)
  37                :"0"(cyc)
  38        );
  39}
  40
  41static struct isp116x_platform_data isp116x_pfm_data = {
  42        .remote_wakeup_enable = 1,
  43        .delay = isp116x_pfm_delay,
  44};
  45
  46static struct resource isp116x_pfm_resources[] = {
  47        [0] =   {
  48                .start  = 0x0d000000,
  49                .end    = 0x0d000000 + 1,
  50                .flags  = IORESOURCE_MEM,
  51                },
  52        [1] =   {
  53                .start  = 0x0d000000 + 4,
  54                .end    = 0x0d000000 + 5,
  55                .flags  = IORESOURCE_MEM,
  56                },
  57        [2] =   {
  58                .start  = 61,
  59                .end    = 61,
  60                .flags  = IORESOURCE_IRQ,
  61                },
  62};
  63
  64static struct platform_device mp900c_dummy_device = {
  65        .name           = "mp900c_dummy",
  66        .id             = -1,
  67};
  68
  69static struct platform_device mp900c_usb = {
  70        .name           = "isp116x-hcd",
  71        .num_resources  = ARRAY_SIZE(isp116x_pfm_resources),
  72        .resource       = isp116x_pfm_resources,
  73        .dev.platform_data = &isp116x_pfm_data,
  74};
  75
  76static struct platform_device *devices[] __initdata = {
  77        &mp900c_dummy_device,
  78        &mp900c_usb,
  79};
  80
  81static void __init mp900c_init(void)
  82{
  83        printk(KERN_INFO "MobilePro 900/C machine init\n");
  84        pxa_set_ffuart_info(NULL);
  85        pxa_set_btuart_info(NULL);
  86        pxa_set_stuart_info(NULL);
  87        platform_add_devices(devices, ARRAY_SIZE(devices));
  88}
  89
  90/* Maintainer - Michael Petchkovsky <mkpetch@internode.on.net> */
  91MACHINE_START(NEC_MP900, "MobilePro900/C")
  92        .atag_offset    = 0x220100,
  93        .init_time      = pxa_timer_init,
  94        .map_io         = pxa25x_map_io,
  95        .nr_irqs        = PXA_NR_IRQS,
  96        .init_irq       = pxa25x_init_irq,
  97        .handle_irq     = pxa25x_handle_irq,
  98        .init_machine   = mp900c_init,
  99        .restart        = pxa_restart,
 100MACHINE_END
 101
 102