[Armadeus-commitlog] SF.net SVN: armadeus: [774] trunk/target/linux/modules/led
Brought to you by:
sszy
|
From: <Fa...@us...> - 2008-03-14 13:01:08
|
Revision: 774
http://armadeus.svn.sourceforge.net/armadeus/?rev=774&view=rev
Author: FabM
Date: 2008-03-14 06:01:08 -0700 (Fri, 14 Mar 2008)
Log Message:
-----------
[target] Interruption ok
Modified Paths:
--------------
trunk/target/linux/modules/led/README
trunk/target/linux/modules/led/led.c
trunk/target/linux/modules/led/led.h
Removed Paths:
-------------
trunk/target/linux/modules/led/TODO
Modified: trunk/target/linux/modules/led/README
===================================================================
--- trunk/target/linux/modules/led/README 2008-03-14 12:54:53 UTC (rev 773)
+++ trunk/target/linux/modules/led/README 2008-03-14 13:01:08 UTC (rev 774)
@@ -1,4 +1,9 @@
-Driver for fpga IP bus_led -> armadeus/firmware/led/
+Driver for fpga IP Wishbone_example -> armadeus/firmware/Wishbone_example/
+Can be use with very simple IP -> armadeus/firmware/bus_led but changing led address
+in led.h :
+#define FPGA_LED 0
+Instead of
+#define FPGA_LED 4
Fabien Marteau <fab...@ar...>
@@ -18,11 +23,7 @@
only LSB will switch led, 1 will switch off led and 0 will
witch on. To read value, just read the file.
- To test read/write testled.c can be used, to compile :
- make test
- then launch the binary :
- >./testled led
-
+
* Sysfs /sys/fpgaled/status
Sysfs is created at /sys/fpgaled/status, to print the led status:
@@ -30,7 +31,7 @@
To switch the status :
>echo 1 > /sys/fpgaled/status
-* interruption
+* interruption (not for ip bus_led)
Led value is toggled on interruption, to use it, apf9328.c has to
be modified with line (buildroot/build_arm/linux-2.6.23.1/arch/arm/mach-imx/apf9328.c) :
@@ -41,3 +42,11 @@
# define FPGA_INT_GPIOA 1
set_irq_type(IRQ_GPIOA(FPGA_INT_GPIOA),IRQF_TRIGGER_RISING);
At the end of the file.
+
+* little test software
+
+ To test read/write testled.c can be used, to compile :
+ make test
+ then launch the binary :
+ >./testled led
+
Deleted: trunk/target/linux/modules/led/TODO
===================================================================
--- trunk/target/linux/modules/led/TODO 2008-03-14 12:54:53 UTC (rev 773)
+++ trunk/target/linux/modules/led/TODO 2008-03-14 13:01:08 UTC (rev 774)
@@ -1 +0,0 @@
- - a proper sysfs entry
Modified: trunk/target/linux/modules/led/led.c
===================================================================
--- trunk/target/linux/modules/led/led.c 2008-03-14 12:54:53 UTC (rev 773)
+++ trunk/target/linux/modules/led/led.c 2008-03-14 13:01:08 UTC (rev 774)
@@ -37,10 +37,10 @@
/* acknoledge irq */
data = 0x0001;
fpga_write(ldev->fpga_virtual_base_address + FPGA_IRQ_ACK,&data,ldev);
- /* read led value */
- fpga_read(ldev->fpga_virtual_base_address,&data,ldev);
- data = ((data&0x0001)==1)?data&0xfffe:data|0x0001;
- fpga_write(ldev->fpga_virtual_base_address,&data,ldev);
+ /* read button value */
+ fpga_read(ldev->fpga_virtual_base_address + FPGA_BUTTON,&data,ldev);
+ data = ((data&0x0001)==1)?0x0001:0x0000;
+ fpga_write(ldev->fpga_virtual_base_address + FPGA_LED,&data,ldev);
up(&ldev->sem);
PDEBUG("time %ldticks\n",jiffies-ldev->previousint);
@@ -90,7 +90,7 @@
return -ERESTARTSYS;
}
- if((ret_size=fpga_read(dev->fpga_virtual_base_address,&data,dev))<0)
+ if((ret_size=fpga_read(dev->fpga_virtual_base_address + FPGA_LED,&data,dev))<0)
goto out;
PDEBUG("data : %d\n",data);
@@ -117,7 +117,7 @@
if(down_interruptible(&ldev->sem))
return -ERESTARTSYS;
- size=fpga_write(ldev->fpga_virtual_base_address,&data,ldev);
+ size=fpga_write(ldev->fpga_virtual_base_address + FPGA_LED,&data,ldev);
up(&ldev->sem);
return size ;
@@ -140,7 +140,7 @@
if(*offp + count >= 1) /* Only one word can be read */
count = 1 - *offp;
- if((retval = fpga_read(ldev->fpga_virtual_base_address,&data,ldev))<0)
+ if((retval = fpga_read(ldev->fpga_virtual_base_address + FPGA_LED,&data,ldev))<0)
goto out;
/* return data for user */
@@ -180,7 +180,7 @@
goto out;
}
- if((retval=fpga_write(ldev->fpga_virtual_base_address,&data,ldev))<0){
+ if((retval=fpga_write(ldev->fpga_virtual_base_address + FPGA_LED,&data,ldev))<0){
goto out;
}
@@ -274,10 +274,18 @@
printk(KERN_ERR "Can't request fpga irq\n");
goto error;
}
+ /* irq ack */
+ data=1;
+ if((result=fpga_write(sdev->fpga_virtual_base_address + FPGA_IRQ_ACK,&data,sdev))<0)
+ goto error;
/* irq unmask */
data=1;
if((result=fpga_write(sdev->fpga_virtual_base_address + FPGA_IRQ_MASK,&data,sdev))<0)
goto error;
+ /* initialize led value */
+ data=1;
+ if((result=fpga_write(sdev->fpga_virtual_base_address + FPGA_LED,&data,sdev))<0)
+ goto error;
sdev->previousint = jiffies;
/* OK module inserted ! */
Modified: trunk/target/linux/modules/led/led.h
===================================================================
--- trunk/target/linux/modules/led/led.h 2008-03-14 12:54:53 UTC (rev 773)
+++ trunk/target/linux/modules/led/led.h 2008-03-14 13:01:08 UTC (rev 774)
@@ -68,7 +68,9 @@
# define PDEBUG(fmt,args...) /* no debbuging message */
#endif
-#define FPGA_IRQ_MASK 4
+#define FPGA_BUTTON 8
+#define FPGA_LED 4
+#define FPGA_IRQ_MASK 0
#define FPGA_IRQ_PEND 2
#define FPGA_IRQ_ACK 2
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|