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.25)


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