satip-axe/kernel/drivers/leds/leds-mb374.c
2015-03-26 17:24:57 +01:00

99 lines
2.2 KiB
C

/*
* linux/drivers/leds/leds-mb374.c
*
* Copyright (C) 2007 STMicroelectronics Limited
* Author: Stuart Menefy <stuart.menefy@st.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/leds.h>
#include <linux/stm/pio.h>
#include <asm/io.h>
#include <asm/mb374/epld.h>
struct mb374_led {
struct led_classdev cdev;
union {
struct stpio_pin *pio;
int bit;
} u;
};
static void mb374_led_pio_set(struct led_classdev *led_cdev, enum led_brightness brightness)
{
struct mb374_led *led_dev =
container_of(led_cdev, struct mb374_led, cdev);
stpio_set_pin(led_dev->u.pio, brightness);
}
static void mb374_led_epld_set(struct led_classdev *led_cdev, enum led_brightness brightness)
{
struct mb374_led *led_dev =
container_of(led_cdev, struct mb374_led, cdev);
ctrl_outl(1 << led_dev->u.bit, brightness ? EPLD_LED_SET : EPLD_LED_CLR);
}
#define MB374_EPLD_LED(_n, _bit) \
{ \
.cdev = { \
.name = "mb374-led" #_n, \
.brightness_set = mb374_led_epld_set, \
}, \
.u.bit = _bit \
}
#define MB374_PIO_LED(_n) \
{ \
.cdev = { \
.name = "mb374-led" #_n, \
.brightness_set = mb374_led_pio_set, \
}, \
}
static struct mb374_led mb374_leds[8] = {
MB374_EPLD_LED(0,0),
MB374_EPLD_LED(1,1),
MB374_EPLD_LED(2,2),
MB374_EPLD_LED(3,3),
MB374_EPLD_LED(4,4),
MB374_EPLD_LED(5,5),
MB374_PIO_LED(6),
MB374_PIO_LED(7)
};
static int __init mb374_led_init(void)
{
int i;
mb374_leds[6].u.pio = stpio_request_pin(0,3, "LED", STPIO_OUT);
mb374_leds[7].u.pio = stpio_request_pin(0,0, "LED", STPIO_OUT);
mb374_leds[0].cdev.default_trigger = "heartbeat";
for (i=0; i<8; i++) {
led_classdev_register(NULL, &mb374_leds[i].cdev);
}
}
static void __exit mb374_led_exit(void)
{
int i;
for (i=0; i<8; i++) {
led_classdev_unregister(&mb374_leds[i].cdev);
}
}
module_init(mb374_led_init);
module_exit(mb374_led_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Front LED support for Mb374 Server");
MODULE_AUTHOR("Stuart Menefy <stuart.menefy@st.com>");