1
0
mirror of https://git.openwrt.org/openwrt/openwrt.git synced 2024-11-18 22:43:53 +01:00

danube led cleanup

SVN-Revision: 9734
This commit is contained in:
John Crispin 2007-12-13 21:00:03 +00:00
parent 31857f702b
commit 4545e6f507

@ -33,6 +33,48 @@
#include <asm/danube/danube_led.h> #include <asm/danube/danube_led.h>
#include <asm/danube/danube_gptu.h> #include <asm/danube/danube_gptu.h>
#define LED_CONFIG 0x01
#define CONFIG_OPERATION_UPDATE_SOURCE 0x0001
#define CONFIG_OPERATION_BLINK 0x0002
#define CONFIG_OPERATION_UPDATE_CLOCK 0x0004
#define CONFIG_OPERATION_STORE_MODE 0x0008
#define CONFIG_OPERATION_SHIFT_CLOCK 0x0010
#define CONFIG_OPERATION_DATA_OFFSET 0x0020
#define CONFIG_OPERATION_NUMBER_OF_LED 0x0040
#define CONFIG_OPERATION_DATA 0x0080
#define CONFIG_OPERATION_MIPS0_ACCESS 0x0100
#define CONFIG_DATA_CLOCK_EDGE 0x0200
/*
* Data Type Used to Call ioctl
*/
struct led_config_param {
unsigned long operation_mask; // Select operations to be performed
unsigned long led; // LED to change update source (LED or ADSL)
unsigned long source; // Corresponding update source (LED or ADSL)
unsigned long blink_mask; // LEDs to set blink mode
unsigned long blink; // Set to blink mode or normal mode
unsigned long update_clock; // Select the source of update clock
unsigned long fpid; // If FPI is the source of update clock, set the divider
// else if GPT is the source, set the frequency
unsigned long store_mode; // Set clock mode or single pulse mode for store signal
unsigned long fpis; // FPI is the source of shift clock, set the divider
unsigned long data_offset; // Set cycles to be inserted before data is transmitted
unsigned long number_of_enabled_led; // Total number of LED to be enabled
unsigned long data_mask; // LEDs to set value
unsigned long data; // Corresponding value
unsigned long mips0_access_mask; // LEDs to set access right
unsigned long mips0_access; // 1: the corresponding data is output from MIPS0, 0: MIPS1
unsigned long f_data_clock_on_rising; // 1: data clock on rising edge, 0: data clock on falling edge
};
extern int danube_led_set_blink(unsigned int, unsigned int);
extern int danube_led_set_data(unsigned int, unsigned int);
extern int danube_led_config(struct led_config_param *);
#define DATA_CLOCKING_EDGE FALLING_EDGE #define DATA_CLOCKING_EDGE FALLING_EDGE
#define RISING_EDGE 0 #define RISING_EDGE 0
#define FALLING_EDGE 1 #define FALLING_EDGE 1
@ -808,37 +850,35 @@ static struct miscdevice led_miscdev = {
int __init int __init
danube_led_init (void) danube_led_init (void)
{ {
int ret; int ret = 0;
struct led_config_param param = {0}; struct led_config_param param = {0};
enable_led(); enable_led();
/* writel(0, DANUBE_LED_AR);
* Set default value to registers to turn off all LED light. writel(0, DANUBE_LED_CPU0);
*/ writel(0, DANUBE_LED_CPU1);
*DANUBE_LED_AR = 0x0; writel(0, DANUBE_LED_CON1);
*DANUBE_LED_CPU0 = 0x0; writel((0x80000000 | (DATA_CLOCKING_EDGE << 26)), DANUBE_LED_CON0);
*DANUBE_LED_CPU1 = 0x0;
*DANUBE_LED_CON1 = 0x0;
*DANUBE_LED_CON0 = (0x80000000 | (DATA_CLOCKING_EDGE << 26));
disable_led(); disable_led();
sema_init(&led_sem, 0); sema_init(&led_sem, 0);
ret = misc_register(&led_miscdev); ret = misc_register(&led_miscdev);
if ( ret == -EBUSY ) if (ret == -EBUSY)
{ {
led_miscdev.minor = MISC_DYNAMIC_MINOR; led_miscdev.minor = MISC_DYNAMIC_MINOR;
ret = misc_register(&led_miscdev); ret = misc_register(&led_miscdev);
} }
if ( ret )
if (ret)
{ {
printk(KERN_ERR "led: can't misc_register\n"); printk(KERN_ERR "led: can't misc_register\n");
return ret; goto out;
} } else {
else
printk(KERN_INFO "led: misc_register on minor = %d\n", led_miscdev.minor); printk(KERN_INFO "led: misc_register on minor = %d\n", led_miscdev.minor);
}
module_id = THIS_MODULE ? (int)THIS_MODULE : ((MISC_MAJOR << 8) | led_miscdev.minor); module_id = THIS_MODULE ? (int)THIS_MODULE : ((MISC_MAJOR << 8) | led_miscdev.minor);
@ -886,7 +926,8 @@ danube_led_init (void)
param.data = 1 << 5; param.data = 1 << 5;
danube_led_config(&param); danube_led_config(&param);
return 0; out:
return ret;
} }
void __exit void __exit