diff options
author | Helge Deller <deller@gmx.de> | 2007-02-28 23:51:29 -0500 |
---|---|---|
committer | Dmitry Torokhov <dtor@insightbb.com> | 2007-02-28 23:51:29 -0500 |
commit | ffd51f46cdf856c0b453d2828a74d552cc15f881 (patch) | |
tree | 2322b5c7dbbbf876e549e40ff340240b6a59af20 /drivers/input/serio/hp_sdc_mlc.c | |
parent | 3acaf540a33199141695f2e2fcfa8829053159bf (diff) |
Input: HIL - cleanup coding style
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/serio/hp_sdc_mlc.c')
-rw-r--r-- | drivers/input/serio/hp_sdc_mlc.c | 227 |
1 files changed, 117 insertions, 110 deletions
diff --git a/drivers/input/serio/hp_sdc_mlc.c b/drivers/input/serio/hp_sdc_mlc.c index 1f131ff1f69e..cb0b28877e05 100644 --- a/drivers/input/serio/hp_sdc_mlc.c +++ b/drivers/input/serio/hp_sdc_mlc.c | |||
@@ -58,12 +58,13 @@ struct hp_sdc_mlc_priv_s { | |||
58 | } hp_sdc_mlc_priv; | 58 | } hp_sdc_mlc_priv; |
59 | 59 | ||
60 | /************************* Interrupt context ******************************/ | 60 | /************************* Interrupt context ******************************/ |
61 | static void hp_sdc_mlc_isr (int irq, void *dev_id, | 61 | static void hp_sdc_mlc_isr (int irq, void *dev_id, |
62 | uint8_t status, uint8_t data) { | 62 | uint8_t status, uint8_t data) |
63 | int idx; | 63 | { |
64 | int idx; | ||
64 | hil_mlc *mlc = &hp_sdc_mlc; | 65 | hil_mlc *mlc = &hp_sdc_mlc; |
65 | 66 | ||
66 | write_lock(&(mlc->lock)); | 67 | write_lock(&mlc->lock); |
67 | if (mlc->icount < 0) { | 68 | if (mlc->icount < 0) { |
68 | printk(KERN_WARNING PREFIX "HIL Overflow!\n"); | 69 | printk(KERN_WARNING PREFIX "HIL Overflow!\n"); |
69 | up(&mlc->isem); | 70 | up(&mlc->isem); |
@@ -73,239 +74,247 @@ static void hp_sdc_mlc_isr (int irq, void *dev_id, | |||
73 | if ((status & HP_SDC_STATUS_IRQMASK) == HP_SDC_STATUS_HILDATA) { | 74 | if ((status & HP_SDC_STATUS_IRQMASK) == HP_SDC_STATUS_HILDATA) { |
74 | mlc->ipacket[idx] |= data | HIL_ERR_INT; | 75 | mlc->ipacket[idx] |= data | HIL_ERR_INT; |
75 | mlc->icount--; | 76 | mlc->icount--; |
76 | if (hp_sdc_mlc_priv.got5x) goto check; | 77 | if (hp_sdc_mlc_priv.got5x || !idx) |
77 | if (!idx) goto check; | 78 | goto check; |
78 | if ((mlc->ipacket[idx-1] & HIL_PKT_ADDR_MASK) != | 79 | if ((mlc->ipacket[idx - 1] & HIL_PKT_ADDR_MASK) != |
79 | (mlc->ipacket[idx] & HIL_PKT_ADDR_MASK)) { | 80 | (mlc->ipacket[idx] & HIL_PKT_ADDR_MASK)) { |
80 | mlc->ipacket[idx] &= ~HIL_PKT_ADDR_MASK; | 81 | mlc->ipacket[idx] &= ~HIL_PKT_ADDR_MASK; |
81 | mlc->ipacket[idx] |= (mlc->ipacket[idx-1] | 82 | mlc->ipacket[idx] |= (mlc->ipacket[idx - 1] |
82 | & HIL_PKT_ADDR_MASK); | 83 | & HIL_PKT_ADDR_MASK); |
83 | } | 84 | } |
84 | goto check; | 85 | goto check; |
85 | } | 86 | } |
86 | /* We know status is 5X */ | 87 | /* We know status is 5X */ |
87 | if (data & HP_SDC_HIL_ISERR) goto err; | 88 | if (data & HP_SDC_HIL_ISERR) |
88 | mlc->ipacket[idx] = | 89 | goto err; |
90 | mlc->ipacket[idx] = | ||
89 | (data & HP_SDC_HIL_R1MASK) << HIL_PKT_ADDR_SHIFT; | 91 | (data & HP_SDC_HIL_R1MASK) << HIL_PKT_ADDR_SHIFT; |
90 | hp_sdc_mlc_priv.got5x = 1; | 92 | hp_sdc_mlc_priv.got5x = 1; |
91 | goto out; | 93 | goto out; |
92 | 94 | ||
93 | check: | 95 | check: |
94 | hp_sdc_mlc_priv.got5x = 0; | 96 | hp_sdc_mlc_priv.got5x = 0; |
95 | if (mlc->imatch == 0) goto done; | 97 | if (mlc->imatch == 0) |
96 | if ((mlc->imatch == (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) | 98 | goto done; |
97 | && (mlc->ipacket[idx] == (mlc->imatch | idx))) goto done; | 99 | if ((mlc->imatch == (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) |
98 | if (mlc->ipacket[idx] == mlc->imatch) goto done; | 100 | && (mlc->ipacket[idx] == (mlc->imatch | idx))) |
101 | goto done; | ||
102 | if (mlc->ipacket[idx] == mlc->imatch) | ||
103 | goto done; | ||
99 | goto out; | 104 | goto out; |
100 | 105 | ||
101 | err: | 106 | err: |
102 | printk(KERN_DEBUG PREFIX "err code %x\n", data); | 107 | printk(KERN_DEBUG PREFIX "err code %x\n", data); |
108 | |||
103 | switch (data) { | 109 | switch (data) { |
104 | case HP_SDC_HIL_RC_DONE: | 110 | case HP_SDC_HIL_RC_DONE: |
105 | printk(KERN_WARNING PREFIX "Bastard SDC reconfigured loop!\n"); | 111 | printk(KERN_WARNING PREFIX "Bastard SDC reconfigured loop!\n"); |
106 | break; | 112 | break; |
113 | |||
107 | case HP_SDC_HIL_ERR: | 114 | case HP_SDC_HIL_ERR: |
108 | mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_PERR | | 115 | mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_PERR | |
109 | HIL_ERR_FERR | HIL_ERR_FOF; | 116 | HIL_ERR_FERR | HIL_ERR_FOF; |
110 | break; | 117 | break; |
118 | |||
111 | case HP_SDC_HIL_TO: | 119 | case HP_SDC_HIL_TO: |
112 | mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_LERR; | 120 | mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_LERR; |
113 | break; | 121 | break; |
122 | |||
114 | case HP_SDC_HIL_RC: | 123 | case HP_SDC_HIL_RC: |
115 | printk(KERN_WARNING PREFIX "Bastard SDC decided to reconfigure loop!\n"); | 124 | printk(KERN_WARNING PREFIX "Bastard SDC decided to reconfigure loop!\n"); |
116 | break; | 125 | break; |
126 | |||
117 | default: | 127 | default: |
118 | printk(KERN_WARNING PREFIX "Unkown HIL Error status (%x)!\n", data); | 128 | printk(KERN_WARNING PREFIX "Unkown HIL Error status (%x)!\n", data); |
119 | break; | 129 | break; |
120 | } | 130 | } |
131 | |||
121 | /* No more data will be coming due to an error. */ | 132 | /* No more data will be coming due to an error. */ |
122 | done: | 133 | done: |
123 | tasklet_schedule(mlc->tasklet); | 134 | tasklet_schedule(mlc->tasklet); |
124 | up(&(mlc->isem)); | 135 | up(&mlc->isem); |
125 | out: | 136 | out: |
126 | write_unlock(&(mlc->lock)); | 137 | write_unlock(&mlc->lock); |
127 | } | 138 | } |
128 | 139 | ||
129 | 140 | ||
130 | /******************** Tasklet or userspace context functions ****************/ | 141 | /******************** Tasklet or userspace context functions ****************/ |
131 | 142 | ||
132 | static int hp_sdc_mlc_in (hil_mlc *mlc, suseconds_t timeout) { | 143 | static int hp_sdc_mlc_in(hil_mlc *mlc, suseconds_t timeout) |
144 | { | ||
133 | unsigned long flags; | 145 | unsigned long flags; |
134 | struct hp_sdc_mlc_priv_s *priv; | 146 | struct hp_sdc_mlc_priv_s *priv; |
135 | int rc = 2; | 147 | int rc = 2; |
136 | 148 | ||
137 | priv = mlc->priv; | 149 | priv = mlc->priv; |
138 | 150 | ||
139 | write_lock_irqsave(&(mlc->lock), flags); | 151 | write_lock_irqsave(&mlc->lock, flags); |
140 | 152 | ||
141 | /* Try to down the semaphore */ | 153 | /* Try to down the semaphore */ |
142 | if (down_trylock(&(mlc->isem))) { | 154 | if (down_trylock(&mlc->isem)) { |
143 | struct timeval tv; | 155 | struct timeval tv; |
144 | if (priv->emtestmode) { | 156 | if (priv->emtestmode) { |
145 | mlc->ipacket[0] = | 157 | mlc->ipacket[0] = |
146 | HIL_ERR_INT | (mlc->opacket & | 158 | HIL_ERR_INT | (mlc->opacket & |
147 | (HIL_PKT_CMD | | 159 | (HIL_PKT_CMD | |
148 | HIL_PKT_ADDR_MASK | | 160 | HIL_PKT_ADDR_MASK | |
149 | HIL_PKT_DATA_MASK)); | 161 | HIL_PKT_DATA_MASK)); |
150 | mlc->icount = 14; | 162 | mlc->icount = 14; |
151 | /* printk(KERN_DEBUG PREFIX ">[%x]\n", mlc->ipacket[0]); */ | 163 | /* printk(KERN_DEBUG PREFIX ">[%x]\n", mlc->ipacket[0]); */ |
152 | goto wasup; | 164 | goto wasup; |
153 | } | 165 | } |
154 | do_gettimeofday(&tv); | 166 | do_gettimeofday(&tv); |
155 | tv.tv_usec += 1000000 * (tv.tv_sec - mlc->instart.tv_sec); | 167 | tv.tv_usec += USEC_PER_SEC * (tv.tv_sec - mlc->instart.tv_sec); |
156 | if (tv.tv_usec - mlc->instart.tv_usec > mlc->intimeout) { | 168 | if (tv.tv_usec - mlc->instart.tv_usec > mlc->intimeout) { |
157 | /* printk("!%i %i", | 169 | /* printk("!%i %i", |
158 | tv.tv_usec - mlc->instart.tv_usec, | 170 | tv.tv_usec - mlc->instart.tv_usec, |
159 | mlc->intimeout); | 171 | mlc->intimeout); |
160 | */ | 172 | */ |
161 | rc = 1; | 173 | rc = 1; |
162 | up(&(mlc->isem)); | 174 | up(&mlc->isem); |
163 | } | 175 | } |
164 | goto done; | 176 | goto done; |
165 | } | 177 | } |
166 | wasup: | 178 | wasup: |
167 | up(&(mlc->isem)); | 179 | up(&mlc->isem); |
168 | rc = 0; | 180 | rc = 0; |
169 | goto done; | 181 | goto done; |
170 | done: | 182 | done: |
171 | write_unlock_irqrestore(&(mlc->lock), flags); | 183 | write_unlock_irqrestore(&mlc->lock, flags); |
172 | return rc; | 184 | return rc; |
173 | } | 185 | } |
174 | 186 | ||
175 | static int hp_sdc_mlc_cts (hil_mlc *mlc) { | 187 | static int hp_sdc_mlc_cts(hil_mlc *mlc) |
188 | { | ||
176 | struct hp_sdc_mlc_priv_s *priv; | 189 | struct hp_sdc_mlc_priv_s *priv; |
177 | unsigned long flags; | 190 | unsigned long flags; |
178 | 191 | ||
179 | priv = mlc->priv; | 192 | priv = mlc->priv; |
180 | 193 | ||
181 | write_lock_irqsave(&(mlc->lock), flags); | 194 | write_lock_irqsave(&mlc->lock, flags); |
182 | 195 | ||
183 | /* Try to down the semaphores -- they should be up. */ | 196 | /* Try to down the semaphores -- they should be up. */ |
184 | if (down_trylock(&(mlc->isem))) { | 197 | BUG_ON(down_trylock(&mlc->isem)); |
185 | BUG(); | 198 | BUG_ON(down_trylock(&mlc->osem)); |
186 | goto busy; | ||
187 | } | ||
188 | if (down_trylock(&(mlc->osem))) { | ||
189 | BUG(); | ||
190 | up(&(mlc->isem)); | ||
191 | goto busy; | ||
192 | } | ||
193 | up(&(mlc->isem)); | ||
194 | up(&(mlc->osem)); | ||
195 | 199 | ||
196 | if (down_trylock(&(mlc->csem))) { | 200 | up(&mlc->isem); |
197 | if (priv->trans.act.semaphore != &(mlc->csem)) goto poll; | 201 | up(&mlc->osem); |
198 | goto busy; | 202 | |
203 | if (down_trylock(&mlc->csem)) { | ||
204 | if (priv->trans.act.semaphore != &mlc->csem) | ||
205 | goto poll; | ||
206 | else | ||
207 | goto busy; | ||
199 | } | 208 | } |
200 | if (!(priv->tseq[4] & HP_SDC_USE_LOOP)) goto done; | 209 | |
210 | if (!(priv->tseq[4] & HP_SDC_USE_LOOP)) | ||
211 | goto done; | ||
201 | 212 | ||
202 | poll: | 213 | poll: |
203 | priv->trans.act.semaphore = &(mlc->csem); | 214 | priv->trans.act.semaphore = &mlc->csem; |
204 | priv->trans.actidx = 0; | 215 | priv->trans.actidx = 0; |
205 | priv->trans.idx = 1; | 216 | priv->trans.idx = 1; |
206 | priv->trans.endidx = 5; | 217 | priv->trans.endidx = 5; |
207 | priv->tseq[0] = | 218 | priv->tseq[0] = |
208 | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN | HP_SDC_ACT_SEMAPHORE; | 219 | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN | HP_SDC_ACT_SEMAPHORE; |
209 | priv->tseq[1] = HP_SDC_CMD_READ_USE; | 220 | priv->tseq[1] = HP_SDC_CMD_READ_USE; |
210 | priv->tseq[2] = 1; | 221 | priv->tseq[2] = 1; |
211 | priv->tseq[3] = 0; | 222 | priv->tseq[3] = 0; |
212 | priv->tseq[4] = 0; | 223 | priv->tseq[4] = 0; |
213 | hp_sdc_enqueue_transaction(&(priv->trans)); | 224 | hp_sdc_enqueue_transaction(&priv->trans); |
214 | busy: | 225 | busy: |
215 | write_unlock_irqrestore(&(mlc->lock), flags); | 226 | write_unlock_irqrestore(&mlc->lock, flags); |
216 | return 1; | 227 | return 1; |
217 | done: | 228 | done: |
218 | priv->trans.act.semaphore = &(mlc->osem); | 229 | priv->trans.act.semaphore = &mlc->osem; |
219 | up(&(mlc->csem)); | 230 | up(&mlc->csem); |
220 | write_unlock_irqrestore(&(mlc->lock), flags); | 231 | write_unlock_irqrestore(&mlc->lock, flags); |
221 | return 0; | 232 | return 0; |
222 | } | 233 | } |
223 | 234 | ||
224 | static void hp_sdc_mlc_out (hil_mlc *mlc) { | 235 | static void hp_sdc_mlc_out(hil_mlc *mlc) |
236 | { | ||
225 | struct hp_sdc_mlc_priv_s *priv; | 237 | struct hp_sdc_mlc_priv_s *priv; |
226 | unsigned long flags; | 238 | unsigned long flags; |
227 | 239 | ||
228 | priv = mlc->priv; | 240 | priv = mlc->priv; |
229 | 241 | ||
230 | write_lock_irqsave(&(mlc->lock), flags); | 242 | write_lock_irqsave(&mlc->lock, flags); |
231 | 243 | ||
232 | /* Try to down the semaphore -- it should be up. */ | 244 | /* Try to down the semaphore -- it should be up. */ |
233 | if (down_trylock(&(mlc->osem))) { | 245 | BUG_ON(down_trylock(&mlc->osem)); |
234 | BUG(); | ||
235 | goto done; | ||
236 | } | ||
237 | 246 | ||
238 | if (mlc->opacket & HIL_DO_ALTER_CTRL) goto do_control; | 247 | if (mlc->opacket & HIL_DO_ALTER_CTRL) |
248 | goto do_control; | ||
239 | 249 | ||
240 | do_data: | 250 | do_data: |
241 | if (priv->emtestmode) { | 251 | if (priv->emtestmode) { |
242 | up(&(mlc->osem)); | 252 | up(&mlc->osem); |
243 | goto done; | 253 | goto done; |
244 | } | 254 | } |
245 | /* Shouldn't be sending commands when loop may be busy */ | 255 | /* Shouldn't be sending commands when loop may be busy */ |
246 | if (down_trylock(&(mlc->csem))) { | 256 | BUG_ON(down_trylock(&mlc->csem)); |
247 | BUG(); | 257 | up(&mlc->csem); |
248 | goto done; | ||
249 | } | ||
250 | up(&(mlc->csem)); | ||
251 | 258 | ||
252 | priv->trans.actidx = 0; | 259 | priv->trans.actidx = 0; |
253 | priv->trans.idx = 1; | 260 | priv->trans.idx = 1; |
254 | priv->trans.act.semaphore = &(mlc->osem); | 261 | priv->trans.act.semaphore = &mlc->osem; |
255 | priv->trans.endidx = 6; | 262 | priv->trans.endidx = 6; |
256 | priv->tseq[0] = | 263 | priv->tseq[0] = |
257 | HP_SDC_ACT_DATAREG | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_SEMAPHORE; | 264 | HP_SDC_ACT_DATAREG | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_SEMAPHORE; |
258 | priv->tseq[1] = 0x7; | 265 | priv->tseq[1] = 0x7; |
259 | priv->tseq[2] = | 266 | priv->tseq[2] = |
260 | (mlc->opacket & | 267 | (mlc->opacket & |
261 | (HIL_PKT_ADDR_MASK | HIL_PKT_CMD)) | 268 | (HIL_PKT_ADDR_MASK | HIL_PKT_CMD)) |
262 | >> HIL_PKT_ADDR_SHIFT; | 269 | >> HIL_PKT_ADDR_SHIFT; |
263 | priv->tseq[3] = | 270 | priv->tseq[3] = |
264 | (mlc->opacket & HIL_PKT_DATA_MASK) | 271 | (mlc->opacket & HIL_PKT_DATA_MASK) |
265 | >> HIL_PKT_DATA_SHIFT; | 272 | >> HIL_PKT_DATA_SHIFT; |
266 | priv->tseq[4] = 0; /* No timeout */ | 273 | priv->tseq[4] = 0; /* No timeout */ |
267 | if (priv->tseq[3] == HIL_CMD_DHR) priv->tseq[4] = 1; | 274 | if (priv->tseq[3] == HIL_CMD_DHR) |
275 | priv->tseq[4] = 1; | ||
268 | priv->tseq[5] = HP_SDC_CMD_DO_HIL; | 276 | priv->tseq[5] = HP_SDC_CMD_DO_HIL; |
269 | goto enqueue; | 277 | goto enqueue; |
270 | 278 | ||
271 | do_control: | 279 | do_control: |
272 | priv->emtestmode = mlc->opacket & HIL_CTRL_TEST; | 280 | priv->emtestmode = mlc->opacket & HIL_CTRL_TEST; |
273 | 281 | ||
274 | /* we cannot emulate this, it should not be used. */ | 282 | /* we cannot emulate this, it should not be used. */ |
275 | BUG_ON((mlc->opacket & (HIL_CTRL_APE | HIL_CTRL_IPF)) == HIL_CTRL_APE); | 283 | BUG_ON((mlc->opacket & (HIL_CTRL_APE | HIL_CTRL_IPF)) == HIL_CTRL_APE); |
276 | 284 | ||
277 | if ((mlc->opacket & HIL_CTRL_ONLY) == HIL_CTRL_ONLY) goto control_only; | 285 | if ((mlc->opacket & HIL_CTRL_ONLY) == HIL_CTRL_ONLY) |
278 | if (mlc->opacket & HIL_CTRL_APE) { | 286 | goto control_only; |
279 | BUG(); /* Should not send command/data after engaging APE */ | 287 | |
280 | goto done; | 288 | /* Should not send command/data after engaging APE */ |
281 | } | 289 | BUG_ON(mlc->opacket & HIL_CTRL_APE); |
282 | /* Disengaging APE this way would not be valid either since | 290 | |
291 | /* Disengaging APE this way would not be valid either since | ||
283 | * the loop must be allowed to idle. | 292 | * the loop must be allowed to idle. |
284 | * | 293 | * |
285 | * So, it works out that we really never actually send control | 294 | * So, it works out that we really never actually send control |
286 | * and data when using SDC, we just send the data. | 295 | * and data when using SDC, we just send the data. |
287 | */ | 296 | */ |
288 | goto do_data; | 297 | goto do_data; |
289 | 298 | ||
290 | control_only: | 299 | control_only: |
291 | priv->trans.actidx = 0; | 300 | priv->trans.actidx = 0; |
292 | priv->trans.idx = 1; | 301 | priv->trans.idx = 1; |
293 | priv->trans.act.semaphore = &(mlc->osem); | 302 | priv->trans.act.semaphore = &mlc->osem; |
294 | priv->trans.endidx = 4; | 303 | priv->trans.endidx = 4; |
295 | priv->tseq[0] = | 304 | priv->tseq[0] = |
296 | HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT | HP_SDC_ACT_SEMAPHORE; | 305 | HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT | HP_SDC_ACT_SEMAPHORE; |
297 | priv->tseq[1] = HP_SDC_CMD_SET_LPC; | 306 | priv->tseq[1] = HP_SDC_CMD_SET_LPC; |
298 | priv->tseq[2] = 1; | 307 | priv->tseq[2] = 1; |
299 | // priv->tseq[3] = (mlc->ddc + 1) | HP_SDC_LPS_ACSUCC; | 308 | /* priv->tseq[3] = (mlc->ddc + 1) | HP_SDC_LPS_ACSUCC; */ |
300 | priv->tseq[3] = 0; | 309 | priv->tseq[3] = 0; |
301 | if (mlc->opacket & HIL_CTRL_APE) { | 310 | if (mlc->opacket & HIL_CTRL_APE) { |
302 | priv->tseq[3] |= HP_SDC_LPC_APE_IPF; | 311 | priv->tseq[3] |= HP_SDC_LPC_APE_IPF; |
303 | down_trylock(&(mlc->csem)); | 312 | down_trylock(&mlc->csem); |
304 | } | 313 | } |
305 | enqueue: | 314 | enqueue: |
306 | hp_sdc_enqueue_transaction(&(priv->trans)); | 315 | hp_sdc_enqueue_transaction(&priv->trans); |
307 | done: | 316 | done: |
308 | write_unlock_irqrestore(&(mlc->lock), flags); | 317 | write_unlock_irqrestore(&mlc->lock, flags); |
309 | } | 318 | } |
310 | 319 | ||
311 | static int __init hp_sdc_mlc_init(void) | 320 | static int __init hp_sdc_mlc_init(void) |
@@ -316,14 +325,13 @@ static int __init hp_sdc_mlc_init(void) | |||
316 | 325 | ||
317 | hp_sdc_mlc_priv.emtestmode = 0; | 326 | hp_sdc_mlc_priv.emtestmode = 0; |
318 | hp_sdc_mlc_priv.trans.seq = hp_sdc_mlc_priv.tseq; | 327 | hp_sdc_mlc_priv.trans.seq = hp_sdc_mlc_priv.tseq; |
319 | hp_sdc_mlc_priv.trans.act.semaphore = &(mlc->osem); | 328 | hp_sdc_mlc_priv.trans.act.semaphore = &mlc->osem; |
320 | hp_sdc_mlc_priv.got5x = 0; | 329 | hp_sdc_mlc_priv.got5x = 0; |
321 | 330 | ||
322 | mlc->cts = &hp_sdc_mlc_cts; | 331 | mlc->cts = &hp_sdc_mlc_cts; |
323 | mlc->in = &hp_sdc_mlc_in; | 332 | mlc->in = &hp_sdc_mlc_in; |
324 | mlc->out = &hp_sdc_mlc_out; | 333 | mlc->out = &hp_sdc_mlc_out; |
325 | 334 | mlc->priv = &hp_sdc_mlc_priv; | |
326 | mlc->priv = &hp_sdc_mlc_priv; | ||
327 | 335 | ||
328 | if (hil_mlc_register(mlc)) { | 336 | if (hil_mlc_register(mlc)) { |
329 | printk(KERN_WARNING PREFIX "Failed to register MLC structure with hil_mlc\n"); | 337 | printk(KERN_WARNING PREFIX "Failed to register MLC structure with hil_mlc\n"); |
@@ -336,10 +344,9 @@ static int __init hp_sdc_mlc_init(void) | |||
336 | } | 344 | } |
337 | return 0; | 345 | return 0; |
338 | err1: | 346 | err1: |
339 | if (hil_mlc_unregister(mlc)) { | 347 | if (hil_mlc_unregister(mlc)) |
340 | printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n" | 348 | printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n" |
341 | "This is bad. Could cause an oops.\n"); | 349 | "This is bad. Could cause an oops.\n"); |
342 | } | ||
343 | err0: | 350 | err0: |
344 | return -EBUSY; | 351 | return -EBUSY; |
345 | } | 352 | } |
@@ -347,14 +354,14 @@ static int __init hp_sdc_mlc_init(void) | |||
347 | static void __exit hp_sdc_mlc_exit(void) | 354 | static void __exit hp_sdc_mlc_exit(void) |
348 | { | 355 | { |
349 | hil_mlc *mlc = &hp_sdc_mlc; | 356 | hil_mlc *mlc = &hp_sdc_mlc; |
350 | if (hp_sdc_release_hil_irq(&hp_sdc_mlc_isr)) { | 357 | |
358 | if (hp_sdc_release_hil_irq(&hp_sdc_mlc_isr)) | ||
351 | printk(KERN_ERR PREFIX "Failed to release the raw HIL ISR hook.\n" | 359 | printk(KERN_ERR PREFIX "Failed to release the raw HIL ISR hook.\n" |
352 | "This is bad. Could cause an oops.\n"); | 360 | "This is bad. Could cause an oops.\n"); |
353 | } | 361 | |
354 | if (hil_mlc_unregister(mlc)) { | 362 | if (hil_mlc_unregister(mlc)) |
355 | printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n" | 363 | printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n" |
356 | "This is bad. Could cause an oops.\n"); | 364 | "This is bad. Could cause an oops.\n"); |
357 | } | ||
358 | } | 365 | } |
359 | 366 | ||
360 | module_init(hp_sdc_mlc_init); | 367 | module_init(hp_sdc_mlc_init); |