aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hisax/avma1_cs.c
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2010-03-20 14:43:26 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2010-05-10 04:23:16 -0400
commitb498ada6d0cf0f9828b0c590f9fa2e84f60f5709 (patch)
treed066ef21b59ff0c7143a9aad2e7bf6f849a496dc /drivers/isdn/hisax/avma1_cs.c
parentc7c2fa079073ab92b0736a161b4cf1051a3e631f (diff)
pcmcia: dev_node removal (remaining drivers)
As a fourth step, remove any remaining usages of dev_node_t from drivers: - ipwireless can be simplified a bit, as we do not need to pass around the (write-only) dev_node_t around. - avma1_cs can be simplified as well, if we only keep the minor number around as "priv" data, not a full-fledged struct. Acked-by: Jiri Kosina <jkosina@suse.cz> Acked-by: Karsten Keil <isdn@linux-pingi.de> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/isdn/hisax/avma1_cs.c')
-rw-r--r--drivers/isdn/hisax/avma1_cs.c51
1 files changed, 3 insertions, 48 deletions
diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c
index 3ae2176c6f75..a80a7617f16f 100644
--- a/drivers/isdn/hisax/avma1_cs.c
+++ b/drivers/isdn/hisax/avma1_cs.c
@@ -62,31 +62,6 @@ static void avma1cs_release(struct pcmcia_device *link);
62static void avma1cs_detach(struct pcmcia_device *p_dev) __devexit ; 62static void avma1cs_detach(struct pcmcia_device *p_dev) __devexit ;
63 63
64 64
65/*
66 A linked list of "instances" of the skeleton device. Each actual
67 PCMCIA card corresponds to one device instance, and is described
68 by one struct pcmcia_device structure (defined in ds.h).
69
70 You may not want to use a linked list for this -- for example, the
71 memory card driver uses an array of struct pcmcia_device pointers, where minor
72 device numbers are used to derive the corresponding array index.
73*/
74
75/*
76 A driver needs to provide a dev_node_t structure for each device
77 on a card. In some cases, there is only one device per card (for
78 example, ethernet cards, modems). In other cases, there may be
79 many actual or logical devices (SCSI adapters, memory cards with
80 multiple partitions). The dev_node_t structures need to be kept
81 in a linked list starting at the 'dev' field of a struct pcmcia_device
82 structure. We allocate them in the card's private data structure,
83 because they generally can't be allocated dynamically.
84*/
85
86typedef struct local_info_t {
87 dev_node_t node;
88} local_info_t;
89
90/*====================================================================== 65/*======================================================================
91 66
92 avma1cs_attach() creates an "instance" of the driver, allocating 67 avma1cs_attach() creates an "instance" of the driver, allocating
@@ -101,17 +76,8 @@ typedef struct local_info_t {
101 76
102static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) 77static int __devinit avma1cs_probe(struct pcmcia_device *p_dev)
103{ 78{
104 local_info_t *local;
105
106 dev_dbg(&p_dev->dev, "avma1cs_attach()\n"); 79 dev_dbg(&p_dev->dev, "avma1cs_attach()\n");
107 80
108 /* Allocate space for private device-specific data */
109 local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
110 if (!local)
111 return -ENOMEM;
112
113 p_dev->priv = local;
114
115 /* The io structure describes IO port mapping */ 81 /* The io structure describes IO port mapping */
116 p_dev->io.NumPorts1 = 16; 82 p_dev->io.NumPorts1 = 16;
117 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 83 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
@@ -173,14 +139,11 @@ static int avma1cs_configcheck(struct pcmcia_device *p_dev,
173 139
174static int __devinit avma1cs_config(struct pcmcia_device *link) 140static int __devinit avma1cs_config(struct pcmcia_device *link)
175{ 141{
176 local_info_t *dev;
177 int i = -1; 142 int i = -1;
178 char devname[128]; 143 char devname[128];
179 IsdnCard_t icard; 144 IsdnCard_t icard;
180 int busy = 0; 145 int busy = 0;
181 146
182 dev = link->priv;
183
184 dev_dbg(&link->dev, "avma1cs_config(0x%p)\n", link); 147 dev_dbg(&link->dev, "avma1cs_config(0x%p)\n", link);
185 148
186 devname[0] = 0; 149 devname[0] = 0;
@@ -211,14 +174,6 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
211 174
212 } while (0); 175 } while (0);
213 176
214 /* At this point, the dev_node_t structure(s) should be
215 initialized and arranged in a linked list at link->dev. */
216
217 strcpy(dev->node.dev_name, "A1");
218 dev->node.major = 45;
219 dev->node.minor = 0;
220 link->dev_node = &dev->node;
221
222 /* If any step failed, release any partially configured state */ 177 /* If any step failed, release any partially configured state */
223 if (i != 0) { 178 if (i != 0) {
224 avma1cs_release(link); 179 avma1cs_release(link);
@@ -239,7 +194,7 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
239 avma1cs_release(link); 194 avma1cs_release(link);
240 return -ENODEV; 195 return -ENODEV;
241 } 196 }
242 dev->node.minor = i; 197 link->priv = (void *) (unsigned long) i;
243 198
244 return 0; 199 return 0;
245} /* avma1cs_config */ 200} /* avma1cs_config */
@@ -254,12 +209,12 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
254 209
255static void avma1cs_release(struct pcmcia_device *link) 210static void avma1cs_release(struct pcmcia_device *link)
256{ 211{
257 local_info_t *local = link->priv; 212 unsigned long minor = (unsigned long) link->priv;
258 213
259 dev_dbg(&link->dev, "avma1cs_release(0x%p)\n", link); 214 dev_dbg(&link->dev, "avma1cs_release(0x%p)\n", link);
260 215
261 /* now unregister function with hisax */ 216 /* now unregister function with hisax */
262 HiSax_closecard(local->node.minor); 217 HiSax_closecard(minor);
263 218
264 pcmcia_disable_device(link); 219 pcmcia_disable_device(link);
265} /* avma1cs_release */ 220} /* avma1cs_release */