uboot/include/asm-nios/status_led.h
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net>
   3 * Stephan Linz <linz@li-pro.net>
   4 *
   5 * See file CREDITS for list of people who contributed to this
   6 * project.
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License as
  10 * published by the Free Software Foundation; either version 2 of
  11 * the License, or (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21 * MA 02111-1307 USA
  22 *
  23 * asm-nios/status_led.h
  24 *
  25 * NIOS PIO based status led support functions
  26 */
  27
  28#ifndef __ASM_STATUS_LED_H__
  29#define __ASM_STATUS_LED_H__
  30
  31#include <nios-io.h>
  32
  33/* led_id_t is unsigned int mask */
  34typedef unsigned int led_id_t;
  35
  36#ifdef  STATUS_LED_WRONLY       /* emulate read access */
  37static led_id_t __led_portval = 0;
  38#endif
  39
  40static inline void __led_init (led_id_t mask, int state)
  41{
  42        nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
  43
  44#ifdef  STATUS_LED_WRONLY       /* emulate read access */
  45
  46#if (STATUS_LED_ACTIVE == 0)
  47        if (state == STATUS_LED_ON)
  48                __led_portval &= ~mask;
  49        else
  50                __led_portval |= mask;
  51#else
  52        if (state == STATUS_LED_ON)
  53                __led_portval |= mask;
  54        else
  55                __led_portval &= ~mask;
  56#endif
  57
  58        piop->data = __led_portval;
  59
  60#else   /* !STATUS_LED_WRONLY */
  61
  62#if (STATUS_LED_ACTIVE == 0)
  63        if (state == STATUS_LED_ON)
  64                piop->data &= ~mask;
  65        else
  66                piop->data |= mask;
  67#else
  68        if (state == STATUS_LED_ON)
  69                piop->data |= mask;
  70        else
  71                piop->data &= ~mask;
  72#endif
  73
  74        piop->direction |= mask;
  75
  76#endif  /* STATUS_LED_WRONLY */
  77}
  78
  79static inline void __led_toggle (led_id_t mask)
  80{
  81        nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
  82
  83#ifdef  STATUS_LED_WRONLY       /* emulate read access */
  84
  85        __led_portval ^= mask;
  86        piop->data = __led_portval;
  87
  88#else   /* !STATUS_LED_WRONLY */
  89
  90        piop->data ^= mask;
  91
  92#endif  /* STATUS_LED_WRONLY */
  93}
  94
  95static inline void __led_set (led_id_t mask, int state)
  96{
  97        nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
  98
  99#ifdef  STATUS_LED_WRONLY       /* emulate read access */
 100
 101#if (STATUS_LED_ACTIVE == 0)
 102        if (state == STATUS_LED_ON)
 103                __led_portval &= ~mask;
 104        else
 105                __led_portval |= mask;
 106#else
 107        if (state == STATUS_LED_ON)
 108                __led_portval |= mask;
 109        else
 110                __led_portval &= ~mask;
 111#endif
 112
 113        piop->data = __led_portval;
 114
 115#else   /* !STATUS_LED_WRONLY */
 116
 117#if (STATUS_LED_ACTIVE == 0)
 118        if (state == STATUS_LED_ON)
 119                piop->data &= ~mask;
 120        else
 121                piop->data |= mask;
 122#else
 123        if (state == STATUS_LED_ON)
 124                piop->data |= mask;
 125        else
 126                piop->data &= ~mask;
 127#endif
 128
 129#endif  /* STATUS_LED_WRONLY */
 130}
 131
 132#endif  /* __ASM_STATUS_LED_H__ */
 133