linux/arch/xtensa/platforms/s6105/setup.c
<<
>>
Prefs
   1/*
   2 * s6105 control routines
   3 *
   4 * Copyright (c) 2009 emlix GmbH
   5 */
   6#include <linux/irq.h>
   7#include <linux/io.h>
   8#include <linux/gpio.h>
   9
  10#include <asm/bootparam.h>
  11
  12#include <variant/hardware.h>
  13#include <variant/gpio.h>
  14
  15#include <platform/gpio.h>
  16
  17void platform_halt(void)
  18{
  19        local_irq_disable();
  20        while (1)
  21                ;
  22}
  23
  24void platform_power_off(void)
  25{
  26        platform_halt();
  27}
  28
  29void platform_restart(void)
  30{
  31        platform_halt();
  32}
  33
  34void __init platform_setup(char **cmdline)
  35{
  36        unsigned long reg;
  37
  38        reg = readl(S6_REG_GREG1 + S6_GREG1_PLLSEL);
  39        reg &= ~(S6_GREG1_PLLSEL_GMAC_MASK << S6_GREG1_PLLSEL_GMAC |
  40                S6_GREG1_PLLSEL_GMII_MASK << S6_GREG1_PLLSEL_GMII);
  41        reg |= S6_GREG1_PLLSEL_GMAC_125MHZ << S6_GREG1_PLLSEL_GMAC |
  42                S6_GREG1_PLLSEL_GMII_125MHZ << S6_GREG1_PLLSEL_GMII;
  43        writel(reg, S6_REG_GREG1 + S6_GREG1_PLLSEL);
  44
  45        reg = readl(S6_REG_GREG1 + S6_GREG1_CLKGATE);
  46        reg &= ~(1 << S6_GREG1_BLOCK_SB);
  47        reg &= ~(1 << S6_GREG1_BLOCK_GMAC);
  48        writel(reg, S6_REG_GREG1 + S6_GREG1_CLKGATE);
  49
  50        reg = readl(S6_REG_GREG1 + S6_GREG1_BLOCKENA);
  51        reg |= 1 << S6_GREG1_BLOCK_SB;
  52        reg |= 1 << S6_GREG1_BLOCK_GMAC;
  53        writel(reg, S6_REG_GREG1 + S6_GREG1_BLOCKENA);
  54
  55        printk(KERN_NOTICE "S6105 on Stretch S6000 - "
  56                "Copyright (C) 2009 emlix GmbH <info@emlix.com>\n");
  57}
  58
  59void __init platform_init(bp_tag_t *first)
  60{
  61        s6_gpio_init(0);
  62        gpio_request(GPIO_LED1_NGREEN, "led1_green");
  63        gpio_request(GPIO_LED1_RED, "led1_red");
  64        gpio_direction_output(GPIO_LED1_NGREEN, 1);
  65}
  66
  67void platform_heartbeat(void)
  68{
  69        static unsigned int c;
  70
  71        if (!(++c & 0x4F))
  72                gpio_direction_output(GPIO_LED1_RED, !(c & 0x10));
  73}
  74