]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/irda/ali-ircc.c
net drivers: fix platform driver hotplug/coldplug
[linux-2.6-omap-h63xx.git] / drivers / net / irda / ali-ircc.c
index 971e2dee1e6bae0a43e60dbd39dc60371fbe5d87..083b0dd70fef1f1431e284b0aa7aa864047711b8 100644 (file)
@@ -60,6 +60,7 @@ static struct platform_driver ali_ircc_driver = {
        .resume         = ali_ircc_resume,
        .driver         = {
                .name   = ALI_IRCC_DRIVER_NAME,
+               .owner  = THIS_MODULE,
        },
 };
 
@@ -360,10 +361,6 @@ static int ali_ircc_open(int i, chipio_t *info)
        self->tx_fifo.len = self->tx_fifo.ptr = self->tx_fifo.free = 0;
        self->tx_fifo.tail = self->tx_buff.head;
 
-       
-       /* Keep track of module usage */
-       SET_MODULE_OWNER(dev);
-
        /* Override the network functions we need to use */
        dev->hard_start_xmit = ali_ircc_sir_hard_xmit;
        dev->open            = ali_ircc_net_open;
@@ -662,19 +659,13 @@ static int ali_ircc_read_dongle_id (int i, chipio_t *info)
  */
 static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id)
 {
-       struct net_device *dev = (struct net_device *) dev_id;
+       struct net_device *dev = dev_id;
        struct ali_ircc_cb *self;
        int ret;
                
        IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__);
                
-       if (!dev) {
-               IRDA_WARNING("%s: irq %d for unknown device.\n",
-                            ALI_IRCC_DRIVER_NAME, irq);
-               return IRQ_NONE;
-       }       
-       
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = dev->priv;
        
        spin_lock(&self->lock);
        
@@ -1478,9 +1469,8 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
 
        self->stats.tx_bytes += skb->len;
 
-       memcpy(self->tx_fifo.queue[self->tx_fifo.free].start, skb->data, 
-              skb->len);
-       
+       skb_copy_from_linear_data(skb, self->tx_fifo.queue[self->tx_fifo.free].start,
+                     skb->len);
        self->tx_fifo.len++;
        self->tx_fifo.free++;
 
@@ -1930,7 +1920,7 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                        
                        /* Copy frame without CRC, CRC is removed by hardware*/
                        skb_put(skb, len);
-                       memcpy(skb->data, self->rx_buff.data, len);
+                       skb_copy_to_linear_data(skb, self->rx_buff.data, len);
 
                        /* Move to next frame */
                        self->rx_buff.data += len;
@@ -1938,7 +1928,7 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                        self->stats.rx_packets++;
 
                        skb->dev = self->netdev;
-                       skb->mac.raw  = skb->data;
+                       skb_reset_mac_header(skb);
                        skb->protocol = htons(ETH_P_IRDA);
                        netif_rx(skb);
                        self->netdev->last_rx = jiffies;
@@ -2267,6 +2257,7 @@ static void FIR2SIR(int iobase)
 MODULE_AUTHOR("Benjamin Kong <benjamin_kong@ali.com.tw>");
 MODULE_DESCRIPTION("ALi FIR Controller Driver");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" ALI_IRCC_DRIVER_NAME);
 
 
 module_param_array(io, int, NULL, 0);