Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]

Diff markup

Differences between /linux/drivers/pcmcia/sa1100_cerf.c (Version 2.6.25.8) and /linux/drivers/pcmcia/sa1100_cerf.c (Version 2.6.11.8)


  1 /*                                                  1 /*
  2  * drivers/pcmcia/sa1100_cerf.c                     2  * drivers/pcmcia/sa1100_cerf.c
  3  *                                                  3  *
  4  * PCMCIA implementation routines for CerfBoar      4  * PCMCIA implementation routines for CerfBoard
  5  * Based off the Assabet.                           5  * Based off the Assabet.
  6  *                                                  6  *
  7  */                                                 7  */
                                                   >>   8 #include <linux/config.h>
  8 #include <linux/module.h>                           9 #include <linux/module.h>
  9 #include <linux/kernel.h>                          10 #include <linux/kernel.h>
                                                   >>  11 #include <linux/sched.h>
 10 #include <linux/device.h>                          12 #include <linux/device.h>
 11 #include <linux/init.h>                            13 #include <linux/init.h>
 12 #include <linux/delay.h>                           14 #include <linux/delay.h>
 13                                                    15 
 14 #include <asm/hardware.h>                          16 #include <asm/hardware.h>
 15 #include <asm/mach-types.h>                        17 #include <asm/mach-types.h>
 16 #include <asm/irq.h>                               18 #include <asm/irq.h>
 17 #include <asm/arch/cerf.h>                         19 #include <asm/arch/cerf.h>
 18 #include "sa1100_generic.h"                        20 #include "sa1100_generic.h"
 19                                                    21 
 20 #define CERF_SOCKET     1                          22 #define CERF_SOCKET     1
 21                                                    23 
 22 static struct pcmcia_irqs irqs[] = {               24 static struct pcmcia_irqs irqs[] = {
 23         { CERF_SOCKET, CERF_IRQ_GPIO_CF_CD,        25         { CERF_SOCKET, CERF_IRQ_GPIO_CF_CD,   "CF_CD"   },
 24         { CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD2,      26         { CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD2, "CF_BVD2" },
 25         { CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD1,      27         { CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD1, "CF_BVD1" }
 26 };                                                 28 };
 27                                                    29 
 28 static int cerf_pcmcia_hw_init(struct soc_pcmc     30 static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 29 {                                                  31 {
 30         skt->irq = CERF_IRQ_GPIO_CF_IRQ;           32         skt->irq = CERF_IRQ_GPIO_CF_IRQ;
 31                                                    33 
 32         return soc_pcmcia_request_irqs(skt, ir     34         return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 33 }                                                  35 }
 34                                                    36 
 35 static void cerf_pcmcia_hw_shutdown(struct soc     37 static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 36 {                                                  38 {
 37         soc_pcmcia_free_irqs(skt, irqs, ARRAY_     39         soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 38 }                                                  40 }
 39                                                    41 
 40 static void                                        42 static void
 41 cerf_pcmcia_socket_state(struct soc_pcmcia_soc     43 cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 42 {                                                  44 {
 43         unsigned long levels = GPLR;               45         unsigned long levels = GPLR;
 44                                                    46 
 45         state->detect   = (levels & CERF_GPIO_     47         state->detect   = (levels & CERF_GPIO_CF_CD)  ?0:1;
 46         state->ready    = (levels & CERF_GPIO_     48         state->ready    = (levels & CERF_GPIO_CF_IRQ) ?1:0;
 47         state->bvd1     = (levels & CERF_GPIO_     49         state->bvd1     = (levels & CERF_GPIO_CF_BVD1)?1:0;
 48         state->bvd2     = (levels & CERF_GPIO_     50         state->bvd2     = (levels & CERF_GPIO_CF_BVD2)?1:0;
 49         state->wrprot   = 0;                       51         state->wrprot   = 0;
 50         state->vs_3v    = 1;                       52         state->vs_3v    = 1;
 51         state->vs_Xv    = 0;                       53         state->vs_Xv    = 0;
 52 }                                                  54 }
 53                                                    55 
 54 static int                                         56 static int
 55 cerf_pcmcia_configure_socket(struct soc_pcmcia     57 cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 56                              const socket_stat     58                              const socket_state_t *state)
 57 {                                                  59 {
 58         switch (state->Vcc) {                      60         switch (state->Vcc) {
 59         case 0:                                    61         case 0:
 60         case 50:                                   62         case 50:
 61         case 33:                                   63         case 33:
 62                 break;                             64                 break;
 63                                                    65 
 64         default:                                   66         default:
 65                 printk(KERN_ERR "%s(): unrecog     67                 printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
 66                         __FUNCTION__, state->V     68                         __FUNCTION__, state->Vcc);
 67                 return -1;                         69                 return -1;
 68         }                                          70         }
 69                                                    71 
 70         if (state->flags & SS_RESET) {             72         if (state->flags & SS_RESET) {
 71                 GPSR = CERF_GPIO_CF_RESET;         73                 GPSR = CERF_GPIO_CF_RESET;
 72         } else {                                   74         } else {
 73                 GPCR = CERF_GPIO_CF_RESET;         75                 GPCR = CERF_GPIO_CF_RESET;
 74         }                                          76         }
 75                                                    77 
 76         return 0;                                  78         return 0;
 77 }                                                  79 }
 78                                                    80 
 79 static void cerf_pcmcia_socket_init(struct soc     81 static void cerf_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 80 {                                                  82 {
 81         soc_pcmcia_enable_irqs(skt, irqs, ARRA     83         soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 82 }                                                  84 }
 83                                                    85 
 84 static void cerf_pcmcia_socket_suspend(struct      86 static void cerf_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 85 {                                                  87 {
 86         soc_pcmcia_disable_irqs(skt, irqs, ARR     88         soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 87 }                                                  89 }
 88                                                    90 
 89 static struct pcmcia_low_level cerf_pcmcia_ops     91 static struct pcmcia_low_level cerf_pcmcia_ops = { 
 90         .owner                  = THIS_MODULE,     92         .owner                  = THIS_MODULE,
 91         .hw_init                = cerf_pcmcia_     93         .hw_init                = cerf_pcmcia_hw_init,
 92         .hw_shutdown            = cerf_pcmcia_     94         .hw_shutdown            = cerf_pcmcia_hw_shutdown,
 93         .socket_state           = cerf_pcmcia_     95         .socket_state           = cerf_pcmcia_socket_state,
 94         .configure_socket       = cerf_pcmcia_     96         .configure_socket       = cerf_pcmcia_configure_socket,
 95                                                    97 
 96         .socket_init            = cerf_pcmcia_     98         .socket_init            = cerf_pcmcia_socket_init,
 97         .socket_suspend         = cerf_pcmcia_     99         .socket_suspend         = cerf_pcmcia_socket_suspend,
 98 };                                                100 };
 99                                                   101 
100 int __init pcmcia_cerf_init(struct device *dev    102 int __init pcmcia_cerf_init(struct device *dev)
101 {                                                 103 {
102         int ret = -ENODEV;                        104         int ret = -ENODEV;
103                                                   105 
104         if (machine_is_cerf())                    106         if (machine_is_cerf())
105                 ret = sa11xx_drv_pcmcia_probe(    107                 ret = sa11xx_drv_pcmcia_probe(dev, &cerf_pcmcia_ops, CERF_SOCKET, 1);
106                                                   108 
107         return ret;                               109         return ret;
108 }                                                 110 }
109                                                   111 
  This page was automatically generated by the LXR engine.