linux/arch/arm/mach-s3c24xx/mach-smdk2413.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2//
   3// Copyright (c) 2006 Simtec Electronics
   4//      Ben Dooks <ben@simtec.co.uk>
   5//
   6// Thanks to Dimity Andric (TomTom) and Steven Ryu (Samsung) for the
   7// loans of SMDK2413 to work with.
   8
   9#include <linux/kernel.h>
  10#include <linux/types.h>
  11#include <linux/interrupt.h>
  12#include <linux/list.h>
  13#include <linux/timer.h>
  14#include <linux/init.h>
  15#include <linux/gpio.h>
  16#include <linux/serial_core.h>
  17#include <linux/serial_s3c.h>
  18#include <linux/platform_device.h>
  19#include <linux/io.h>
  20#include <linux/memblock.h>
  21
  22#include <asm/mach/arch.h>
  23#include <asm/mach/map.h>
  24#include <asm/mach/irq.h>
  25
  26#include <mach/hardware.h>
  27#include <asm/hardware/iomd.h>
  28#include <asm/setup.h>
  29#include <asm/irq.h>
  30#include <asm/mach-types.h>
  31
  32//#include <asm/debug-ll.h>
  33#include <mach/regs-gpio.h>
  34#include <mach/regs-lcd.h>
  35
  36#include <linux/platform_data/usb-s3c2410_udc.h>
  37#include <linux/platform_data/i2c-s3c2410.h>
  38#include <mach/gpio-samsung.h>
  39#include <mach/fb.h>
  40
  41#include <plat/devs.h>
  42#include <plat/cpu.h>
  43#include <plat/samsung-time.h>
  44
  45#include "common.h"
  46#include "common-smdk.h"
  47
  48static struct map_desc smdk2413_iodesc[] __initdata = {
  49};
  50
  51static struct s3c2410_uartcfg smdk2413_uartcfgs[] __initdata = {
  52        [0] = {
  53                .hwport      = 0,
  54                .flags       = 0,
  55                .ucon        = 0x3c5,
  56                .ulcon       = 0x03,
  57                .ufcon       = 0x51,
  58        },
  59        [1] = {
  60                .hwport      = 1,
  61                .flags       = 0,
  62                .ucon        = 0x3c5,
  63                .ulcon       = 0x03,
  64                .ufcon       = 0x51,
  65        },
  66        /* IR port */
  67        [2] = {
  68                .hwport      = 2,
  69                .flags       = 0,
  70                .ucon        = 0x3c5,
  71                .ulcon       = 0x43,
  72                .ufcon       = 0x51,
  73        }
  74};
  75
  76
  77static struct s3c2410_udc_mach_info smdk2413_udc_cfg __initdata = {
  78        .pullup_pin = S3C2410_GPF(2),
  79};
  80
  81
  82static struct platform_device *smdk2413_devices[] __initdata = {
  83        &s3c_device_ohci,
  84        &s3c_device_wdt,
  85        &s3c_device_i2c0,
  86        &s3c_device_iis,
  87        &s3c_device_usbgadget,
  88        &s3c2412_device_dma,
  89};
  90
  91static void __init smdk2413_fixup(struct tag *tags, char **cmdline)
  92{
  93        if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) {
  94                memblock_add(0x30000000, SZ_64M);
  95        }
  96}
  97
  98static void __init smdk2413_map_io(void)
  99{
 100        s3c24xx_init_io(smdk2413_iodesc, ARRAY_SIZE(smdk2413_iodesc));
 101        s3c24xx_init_uarts(smdk2413_uartcfgs, ARRAY_SIZE(smdk2413_uartcfgs));
 102        samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
 103}
 104
 105static void __init smdk2413_init_time(void)
 106{
 107        s3c2412_init_clocks(12000000);
 108        samsung_timer_init();
 109}
 110
 111static void __init smdk2413_machine_init(void)
 112{       /* Turn off suspend on both USB ports, and switch the
 113         * selectable USB port to USB device mode. */
 114
 115        s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST |
 116                              S3C2410_MISCCR_USBSUSPND0 |
 117                              S3C2410_MISCCR_USBSUSPND1, 0x0);
 118
 119
 120        s3c24xx_udc_set_platdata(&smdk2413_udc_cfg);
 121        s3c_i2c0_set_platdata(NULL);
 122
 123        platform_add_devices(smdk2413_devices, ARRAY_SIZE(smdk2413_devices));
 124        smdk_machine_init();
 125}
 126
 127MACHINE_START(S3C2413, "S3C2413")
 128        /* Maintainer: Ben Dooks <ben-linux@fluff.org> */
 129        .atag_offset    = 0x100,
 130
 131        .fixup          = smdk2413_fixup,
 132        .init_irq       = s3c2412_init_irq,
 133        .map_io         = smdk2413_map_io,
 134        .init_machine   = smdk2413_machine_init,
 135        .init_time      = samsung_timer_init,
 136MACHINE_END
 137
 138MACHINE_START(SMDK2412, "SMDK2412")
 139        /* Maintainer: Ben Dooks <ben-linux@fluff.org> */
 140        .atag_offset    = 0x100,
 141
 142        .fixup          = smdk2413_fixup,
 143        .init_irq       = s3c2412_init_irq,
 144        .map_io         = smdk2413_map_io,
 145        .init_machine   = smdk2413_machine_init,
 146        .init_time      = samsung_timer_init,
 147MACHINE_END
 148
 149MACHINE_START(SMDK2413, "SMDK2413")
 150        /* Maintainer: Ben Dooks <ben-linux@fluff.org> */
 151        .atag_offset    = 0x100,
 152
 153        .fixup          = smdk2413_fixup,
 154        .init_irq       = s3c2412_init_irq,
 155        .map_io         = smdk2413_map_io,
 156        .init_machine   = smdk2413_machine_init,
 157        .init_time      = smdk2413_init_time,
 158MACHINE_END
 159