<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><div>Hi Members of linuxppc,</div>

<div>&nbsp;</div>

<div>I'm working on XUPV2P board with Virtex II Pro FPGA device.</div>

<div>&nbsp;</div>

<div>I written a kernel module for LED device. I got that module run
successfuly on ML403 board having Virtex 4 FPGA.I have not make any
change in my source code for XUP board, because I don't feel any change is required.</div>

<div>&nbsp;</div>

<div>On XUP board when I run "insmod xilinx_led.ko" command on my target board, I got following message.</div>

<div>&nbsp;</div>

<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff"># insmod xilinx_led..ko</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><b><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">Oops: kernel access of bad area, sig: 11 [#1]</font></span></b> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">PREEMPT</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">NIP: d1006190 LR: d1006188 CTR: 00000000</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">REGS: c0705db0 TRAP: 0300<span style="">&nbsp;&nbsp; </span>Not tainted<span style="">&nbsp; </span>(2.6.23xlnx)</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">MSR: 00029030 &lt;EE,ME,IR,DR&gt;<span style="">&nbsp; </span>CR: 24000024<span style="">&nbsp; </span>XER: 00000000</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">DEAR: 0000004c, ESR: 00000000</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">TASK = c04c63d0[186] 'insmod' THREAD: c0704000</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">GPR00: d1006188 c0705e60 c04c63d0 00000000 000000d0 00000001 00000000 c0220ae0</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">GPR08: c006c60c 00000000 00000001 c04553f0 026f4bac 100b4260 d1003288 d1007668</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">GPR16: d1003288 d1003238 0000fff1 0000fff2 0000004c 00000000 d100762c c003e94c</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">GPR24: d1002e02 00000018 d1002000 00000019 d1000000 d1007598 d10077c8 00000000</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">NIP [d1006190] xilinx_ml403_led_setup+0x174/0x1dc [xilinx_led]</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">LR [d1006188] xilinx_ml403_led_setup+0x16c/0x1dc [xilinx_led]</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">Call Trace:</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">[c0705e60] [d1006188] <strong>xilinx_ml403_led_setup</strong>+0x16c/0x1dc [xilinx_led] <b>(unreliable)</b></font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">[c0705e90] [c0040be0] sys_init_module+0x120c/0x12f8</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">[c0705f40] [c0002c10] ret_from_syscall+0x0/0x3c</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">Instruction dump:</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">48000819 3d20d100 39297620 913f003c 93bf0040 3c800fc0 60840001 7fe3fb78</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">38a00001 48000805 813e0014 7c7f1b78 &lt;80e9004c&gt; 3c60d100 3c80d100 80bc77c8</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"> &nbsp;</span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;">Note: After above output when I execute "lsmod" command. I observed that led device is tainted.</span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"> &nbsp;</span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">~ # lsmod</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">Module<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Size<span style="">&nbsp; </span>Used by<span style="">&nbsp;&nbsp;&nbsp; </span>Tainted: G</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">xilinx_led<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>6172<span style="">&nbsp; </span>1</font></span> 
</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt; font-family: Arial;"><font color="#0000ff">~ #</font></span> 
</p>
<div>
<div>&nbsp;</div></div>

<div>What I understood from above message is that there is a problem in registering the device in function <strong><font color="#0000ff">xilinx_ml403_led_setup( ). </font></strong></div>

<div><strong></strong>&nbsp;</div>

<div><font color="#000000">Anyone can help me out to solve this problem?</font></div>

<div>The source code is given below.&nbsp;</div>

<div>Rajendra</div>
<br>
---------------------------------------Xilinx_led.c---------------------------------------------------------------<br>
#include &lt;linux/init.h&gt;<br>
#include &lt;linux/module.h&gt;<br>
#include &lt;linux/kernel.h&gt;<br>
#include &lt;linux/slab.h&gt;<br>
#include &lt;linux/fs.h&gt;<br>
#include &lt;linux/errno.h&gt;<br>
#include &lt;linux/types.h&gt;<br>
#include &lt;linux/mm.h&gt;<br>
#include &lt;linux/cdev.h&gt;<br>
#include &lt;linux/proc_fs.h&gt;<br>
#include &lt;linux/fcntl.h&gt;<br>
#include &lt;linux/ioport.h&gt;<br>
#include &lt;linux/interrupt.h&gt;<br>
#include &lt;linux/xilinx_devices.h&gt;<br>
#include &lt;asm/system.h&gt;<br>
#include &lt;asm/io.h&gt;<br>
#include &lt;asm/uaccess.h&gt;<br>
<br>
#include "xparameters.h"<br>
#include "xio.h"<br>
#include "xgpio.h"<br>
#include "xgpio_l.h"<br>
#include "xstatus.h"<br>
<br>
#include "xbasic_types.h"<br>
/* LED constant */<br>
<br>
#define DRIVER_NAME "led"<br>
#define DRIVER_DESCRIPTION "GPIO based 4 bit led peripheral driver"<br>
#define LED_PHY_BASEADDR XPAR_LEDS_4BIT_BASEADDR<br>
#define LED_PHY_HIGHADDR XPAR_LEDS_4BIT_HIGHADDR<br>
#define LED_DEVICE_ID XPAR_LEDS_4BIT_DEVICE_ID<br>
#define LED_MAJOR 252<br>
#define LED_MINOR 1<br>
#define LEDChan 1<br>
<br>
XGpio gp_out;<br>
<br>
/* Device Structure */<br>
<br>
struct led_instance<br>
{<br>
&nbsp;&nbsp;&nbsp; Xuint32 phy_baseaddr;<br>
&nbsp;&nbsp;&nbsp; Xuint32 phy_highaddr;<br>
&nbsp;&nbsp;&nbsp; Xuint32 remap_size;<br>
&nbsp;&nbsp;&nbsp; Xuint32 virtual_baseaddr;<br>
&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp; device_id;<br>
&nbsp;&nbsp;&nbsp; struct&nbsp; cdev *cdev;<br>
<br>
&nbsp;&nbsp;&nbsp; XGpio&nbsp;&nbsp;&nbsp; gpio;<br>
};<br>
<br>
struct led_instance xilinx_ml403_led;<br>
<br>
/*Open and Release method */<br>
<br>
int led_open(struct inode *inode, struct file *filp)<br>
{<br>
&nbsp;&nbsp;&nbsp; struct led_instance *dev;<br>
<br>
&nbsp;&nbsp;&nbsp; dev = container_of(inode -&gt; i_cdev, struct led_instance, cdev);<br>
&nbsp;&nbsp;&nbsp; filp -&gt; private_data = dev;<br>
&nbsp;&nbsp;&nbsp; return 0;<br>
}<br>
<br>
int led_release(struct inode *inode, struct file *filp)<br>
{<br>
&nbsp;&nbsp;&nbsp; return 0;<br>
}<br>
<br>
/* Read Method */<br>
<br>
ssize_t led_read(struct file *flip, char __user *buf, size_t count, loff_t *f_pos)<br>
{<br>
&nbsp;&nbsp;&nbsp; size_t&nbsp; retval = 0;<br>
&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp; data;<br>
<br>
&nbsp;&nbsp;&nbsp; printk(KERN_INFO "%s: Entering\n\r", __FUNCTION__);<br>
<br>
&nbsp;&nbsp;&nbsp; if(*f_pos &gt;= sizeof(data))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto out01;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if(*f_pos + count &gt;= sizeof(data))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count = sizeof(data) - *f_pos;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; data = XGpio_DiscreteRead(&amp;gp_out, LEDChan);<br>
&nbsp;&nbsp;&nbsp; printk(KERN_INFO "data = 0x%08X!\n\r", data);<br>
<br>
&nbsp;&nbsp;&nbsp; if(copy_to_user(buf, &amp;data, count))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EFAULT;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto out01;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; *f_pos += count;<br>
&nbsp;&nbsp;&nbsp; retval = count;<br>
<br>
out01:&nbsp;&nbsp;&nbsp; return retval;<br>
<br>
}<br>
<br>
/* Write Method */<br>
ssize_t led_write(struct file *flip, const char __user *buf, size_t count, loff_t *f_pos)<br>
{<br>
&nbsp;&nbsp;&nbsp; size_t&nbsp; retval = 0;<br>
&nbsp;&nbsp;&nbsp; Xuint32&nbsp;&nbsp;&nbsp; data;<br>
<br>
&nbsp;&nbsp;&nbsp; printk(KERN_INFO "%s: Entering\n\r", __FUNCTION__);<br>
<br>
&nbsp;&nbsp;&nbsp; if(count &lt; sizeof(data))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk("argument to small!\n\r");<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EINVAL;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto out01;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; if(*f_pos + count &gt;= sizeof(data))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count = sizeof(data) - *f_pos;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; if(copy_from_user(&amp;data,buf, count))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EFAULT;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto out01;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; XGpio_DiscreteWrite(&amp;gp_out,LEDChan,data);<br>
&nbsp;&nbsp;&nbsp; *f_pos += count;<br>
&nbsp;&nbsp;&nbsp; retval = count;<br>
<br>
out01:&nbsp;&nbsp;&nbsp; return retval;<br>
}<br>
<br>
/* File Operations Structure */<br>
<br>
struct file_operations led_fops = {<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; owner:&nbsp;&nbsp;&nbsp; THIS_MODULE,<br>
&nbsp;&nbsp;&nbsp; open:&nbsp;&nbsp;&nbsp; led_open,<br>
&nbsp;&nbsp;&nbsp; read:&nbsp;&nbsp;&nbsp; led_read,<br>
&nbsp;&nbsp;&nbsp; write:&nbsp;&nbsp;&nbsp; led_write,<br>
&nbsp;&nbsp;&nbsp; release:led_release<br>
};<br>
<br>
/* Device Registration */<br>
int xilinx_ml403_led_setup(void)<br>
{<br>
&nbsp;&nbsp;&nbsp; XGpio_Config xgpio_config;<br>
&nbsp;&nbsp;&nbsp; struct cdev *cdev=0;<br>
&nbsp;&nbsp;&nbsp; int retval = 0;<br>
&nbsp;&nbsp;&nbsp; dev_t devno;<br>
<br>
&nbsp;&nbsp;&nbsp; memset(&amp;xilinx_ml403_led, 0, sizeof(struct led_instance));<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; /* Map the control registers in */<br>
&nbsp;&nbsp;&nbsp; /* get baseaddress and highaddress */<br>
&nbsp;&nbsp;&nbsp; xilinx_ml403_led.phy_baseaddr&nbsp;&nbsp;&nbsp; = LED_PHY_BASEADDR;<br>
&nbsp;&nbsp;&nbsp; xilinx_ml403_led.remap_size&nbsp;&nbsp;&nbsp; = LED_PHY_HIGHADDR - LED_PHY_BASEADDR + 1;<br>
&nbsp;&nbsp;&nbsp; xilinx_ml403_led.device_id&nbsp;&nbsp;&nbsp; = LED_DEVICE_ID;<br>
<br>
&nbsp;&nbsp;&nbsp; if(!xilinx_ml403_led.phy_baseaddr ||
(xilinx_ml403_led.remap_size - xilinx_ml403_led.phy_baseaddr + 1 &lt;
8))<br>
&nbsp;&nbsp;&nbsp; {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "%s: Couldn't get registers resource\n\r","led");<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EFAULT;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto failed1;<br>
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>
<br>
&nbsp;&nbsp;&nbsp; if(!request_mem_region(xilinx_ml403_led.phy_baseaddr, xilinx_ml403_led.remap_size, DRIVER_NAME))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "Couldn't lock
memory region at 0x%08lX\n\r",(unsigned long)
xilinx_ml403_led.phy_baseaddr);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EBUSY;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto failed2; <br>
<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; xilinx_ml403_led.virtual_baseaddr = ioremap(xilinx_ml403_led.phy_baseaddr, xilinx_ml403_led.remap_size);<br>
<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; if(!xilinx_ml403_led.virtual_baseaddr)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "Couldn't ioremap
memory at 0x%08lX\n\r", (unsigned long) xilinx_ml403_led.phy_baseaddr);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -EFAULT;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto failed3;<br>
<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if(XGpio_CfgInitialize(&amp;gp_out, &amp;xgpio_config,xilinx_ml403_led.virtual_baseaddr) != XST_SUCCESS)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "%s: Couldn't initialize instance.\n\r","xilinx_led");<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retval = -ENODEV;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; goto failed3;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; XGpio_SetDataDirection(&amp;gp_out, LEDChan , 0x00000000);<br>
<br>
&nbsp;&nbsp;&nbsp; cdev= kmalloc(sizeof(struct cdev), GFP_KERNEL);<br>
&nbsp;&nbsp;&nbsp; if(!cdev)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "%s: Couldn't allocate device private record\n\r","led");<br>
&nbsp;&nbsp;&nbsp; return -ENOMEM;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; memset(cdev,0,sizeof(struct cdev));<br>
<br>
&nbsp;&nbsp;&nbsp; cdev_init(cdev,&amp;led_fops);<br>
&nbsp;&nbsp;&nbsp; cdev-&gt;owner = THIS_MODULE;<br>
&nbsp;&nbsp;&nbsp; cdev-&gt;ops = &amp;led_fops;<br>
&nbsp;&nbsp;&nbsp; devno = MKDEV(LED_MAJOR,LED_MINOR);<br>
&nbsp;&nbsp;&nbsp; retval = cdev_add(cdev,devno,1);<br>
<br>
&nbsp;&nbsp;&nbsp; xilinx_ml403_led.cdev;<br>
<br>
&nbsp;&nbsp;&nbsp; printk(KERN_ERR "%s at 0x%081X mapped to 0x%08X
device:%u,%u\n\r","xilinx_led",xilinx_ml403_led.phy_baseaddr,(unsigned
int) xilinx_ml403_led.virtual_baseaddr,(unsigned
int)MAJOR(xilinx_ml403_led.cdev-&gt;dev),(unsigned
int)MINOR(xilinx_ml403_led.cdev-&gt;dev));<br>
<br>
&nbsp;&nbsp;&nbsp; failed3:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; iounmap((void *) (xilinx_ml403_led.phy_baseaddr));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; failed2:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; release_mem_region(xilinx_ml403_led.phy_baseaddr,xilinx_ml403_led.remap_size);<br>
<br>
&nbsp;&nbsp;&nbsp; failed1:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return retval;<br>
}<br>
<br>
int __init led_init(void)<br>
{<br>
&nbsp;&nbsp;&nbsp; int retval;<br>
&nbsp;&nbsp;&nbsp; retval=xilinx_ml403_led_setup();<br>
&nbsp;&nbsp;&nbsp; if(retval)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return retval;<br>
&nbsp;&nbsp;&nbsp; return 0;<br>
}<br>
<br>
void __exit led_exit(void)<br>
{<br>
&nbsp;&nbsp;&nbsp; cdev_del(xilinx_ml403_led.cdev);<br>
<br>
&nbsp;&nbsp;&nbsp; iounmap((void *)(xilinx_ml403_led.virtual_baseaddr));<br>
&nbsp;&nbsp;&nbsp; release_mem_region(xilinx_ml403_led.phy_baseaddr,xilinx_ml403_led.remap_size);<br>
}<br>
<br>
module_init(led_init);<br>
module_exit(led_exit);<br>
<br>
MODULE_AUTHOR("SANDEEPANI - SCHOOL OF EMBEDDDED DESIGN");<br>
MODULE_DESCRIPTION(DRIVER_DESCRIPTION);<br>
MODULE_LICENSE("Dual BSD/GPL");<br>
<br>
<br>
</td></tr></table><br>


      <!--3--><hr size=1></hr> Explore and discover exciting holidays and getaways with Yahoo! India Travel <a href="http://in.rd.yahoo.com/tagline_Travel_1/*http://in.travel.yahoo.com/"> Click here!</a>