diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/core/Makefile | 2 | ||||
-rw-r--r-- | drivers/mmc/core/bus.c | 23 | ||||
-rw-r--r-- | drivers/mmc/core/bus.h | 11 | ||||
-rw-r--r-- | drivers/mmc/core/core.h | 2 | ||||
-rw-r--r-- | drivers/mmc/core/mmc.c | 90 | ||||
-rw-r--r-- | drivers/mmc/core/sd.c | 95 | ||||
-rw-r--r-- | drivers/mmc/core/sdio.c | 2 | ||||
-rw-r--r-- | drivers/mmc/core/sysfs.c | 43 | ||||
-rw-r--r-- | drivers/mmc/core/sysfs.h | 26 | ||||
-rw-r--r-- | drivers/pnp/isapnp/core.c | 25 |
10 files changed, 113 insertions, 206 deletions
diff --git a/drivers/mmc/core/Makefile b/drivers/mmc/core/Makefile index 4985807257a8..19a1a254a0c5 100644 --- a/drivers/mmc/core/Makefile +++ b/drivers/mmc/core/Makefile | |||
@@ -7,7 +7,7 @@ ifeq ($(CONFIG_MMC_DEBUG),y) | |||
7 | endif | 7 | endif |
8 | 8 | ||
9 | obj-$(CONFIG_MMC) += mmc_core.o | 9 | obj-$(CONFIG_MMC) += mmc_core.o |
10 | mmc_core-y := core.o sysfs.o bus.o host.o \ | 10 | mmc_core-y := core.o bus.o host.o \ |
11 | mmc.o mmc_ops.o sd.o sd_ops.o \ | 11 | mmc.o mmc_ops.o sd.o sd_ops.o \ |
12 | sdio.o sdio_ops.o sdio_bus.o \ | 12 | sdio.o sdio_ops.o sdio_bus.o \ |
13 | sdio_cis.o sdio_io.o sdio_irq.o | 13 | sdio_cis.o sdio_io.o sdio_irq.o |
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index b0c22cad9423..fd95b18e988b 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/mmc/card.h> | 17 | #include <linux/mmc/card.h> |
18 | #include <linux/mmc/host.h> | 18 | #include <linux/mmc/host.h> |
19 | 19 | ||
20 | #include "sysfs.h" | ||
21 | #include "core.h" | 20 | #include "core.h" |
22 | #include "sdio_cis.h" | 21 | #include "sdio_cis.h" |
23 | #include "bus.h" | 22 | #include "bus.h" |
@@ -43,7 +42,7 @@ static ssize_t mmc_type_show(struct device *dev, | |||
43 | } | 42 | } |
44 | 43 | ||
45 | static struct device_attribute mmc_dev_attrs[] = { | 44 | static struct device_attribute mmc_dev_attrs[] = { |
46 | MMC_ATTR_RO(type), | 45 | __ATTR(type, S_IRUGO, mmc_type_show, NULL), |
47 | __ATTR_NULL, | 46 | __ATTR_NULL, |
48 | }; | 47 | }; |
49 | 48 | ||
@@ -189,7 +188,7 @@ static void mmc_release_card(struct device *dev) | |||
189 | /* | 188 | /* |
190 | * Allocate and initialise a new MMC card structure. | 189 | * Allocate and initialise a new MMC card structure. |
191 | */ | 190 | */ |
192 | struct mmc_card *mmc_alloc_card(struct mmc_host *host) | 191 | struct mmc_card *mmc_alloc_card(struct mmc_host *host, struct device_type *type) |
193 | { | 192 | { |
194 | struct mmc_card *card; | 193 | struct mmc_card *card; |
195 | 194 | ||
@@ -204,6 +203,7 @@ struct mmc_card *mmc_alloc_card(struct mmc_host *host) | |||
204 | card->dev.parent = mmc_classdev(host); | 203 | card->dev.parent = mmc_classdev(host); |
205 | card->dev.bus = &mmc_bus_type; | 204 | card->dev.bus = &mmc_bus_type; |
206 | card->dev.release = mmc_release_card; | 205 | card->dev.release = mmc_release_card; |
206 | card->dev.type = type; | ||
207 | 207 | ||
208 | return card; | 208 | return card; |
209 | } | 209 | } |
@@ -248,24 +248,10 @@ int mmc_add_card(struct mmc_card *card) | |||
248 | type, card->rca); | 248 | type, card->rca); |
249 | } | 249 | } |
250 | 250 | ||
251 | card->dev.uevent_suppress = 1; | ||
252 | |||
253 | ret = device_add(&card->dev); | 251 | ret = device_add(&card->dev); |
254 | if (ret) | 252 | if (ret) |
255 | return ret; | 253 | return ret; |
256 | 254 | ||
257 | if (card->host->bus_ops->sysfs_add) { | ||
258 | ret = card->host->bus_ops->sysfs_add(card->host, card); | ||
259 | if (ret) { | ||
260 | device_del(&card->dev); | ||
261 | return ret; | ||
262 | } | ||
263 | } | ||
264 | |||
265 | card->dev.uevent_suppress = 0; | ||
266 | |||
267 | kobject_uevent(&card->dev.kobj, KOBJ_ADD); | ||
268 | |||
269 | mmc_card_set_present(card); | 255 | mmc_card_set_present(card); |
270 | 256 | ||
271 | return 0; | 257 | return 0; |
@@ -285,9 +271,6 @@ void mmc_remove_card(struct mmc_card *card) | |||
285 | printk(KERN_INFO "%s: card %04x removed\n", | 271 | printk(KERN_INFO "%s: card %04x removed\n", |
286 | mmc_hostname(card->host), card->rca); | 272 | mmc_hostname(card->host), card->rca); |
287 | } | 273 | } |
288 | |||
289 | if (card->host->bus_ops->sysfs_remove) | ||
290 | card->host->bus_ops->sysfs_remove(card->host, card); | ||
291 | device_del(&card->dev); | 274 | device_del(&card->dev); |
292 | } | 275 | } |
293 | 276 | ||
diff --git a/drivers/mmc/core/bus.h b/drivers/mmc/core/bus.h index 4f35431116a8..18178766ab46 100644 --- a/drivers/mmc/core/bus.h +++ b/drivers/mmc/core/bus.h | |||
@@ -11,7 +11,16 @@ | |||
11 | #ifndef _MMC_CORE_BUS_H | 11 | #ifndef _MMC_CORE_BUS_H |
12 | #define _MMC_CORE_BUS_H | 12 | #define _MMC_CORE_BUS_H |
13 | 13 | ||
14 | struct mmc_card *mmc_alloc_card(struct mmc_host *host); | 14 | #define MMC_DEV_ATTR(name, fmt, args...) \ |
15 | static ssize_t mmc_##name##_show (struct device *dev, struct device_attribute *attr, char *buf) \ | ||
16 | { \ | ||
17 | struct mmc_card *card = container_of(dev, struct mmc_card, dev); \ | ||
18 | return sprintf(buf, fmt, args); \ | ||
19 | } \ | ||
20 | static DEVICE_ATTR(name, S_IRUGO, mmc_##name##_show, NULL) | ||
21 | |||
22 | struct mmc_card *mmc_alloc_card(struct mmc_host *host, | ||
23 | struct device_type *type); | ||
15 | int mmc_add_card(struct mmc_card *card); | 24 | int mmc_add_card(struct mmc_card *card); |
16 | void mmc_remove_card(struct mmc_card *card); | 25 | void mmc_remove_card(struct mmc_card *card); |
17 | 26 | ||
diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h index 39daf2fb5dc4..cfa8e15b5923 100644 --- a/drivers/mmc/core/core.h +++ b/drivers/mmc/core/core.h | |||
@@ -18,8 +18,6 @@ | |||
18 | struct mmc_bus_ops { | 18 | struct mmc_bus_ops { |
19 | void (*remove)(struct mmc_host *); | 19 | void (*remove)(struct mmc_host *); |
20 | void (*detect)(struct mmc_host *); | 20 | void (*detect)(struct mmc_host *); |
21 | int (*sysfs_add)(struct mmc_host *, struct mmc_card *card); | ||
22 | void (*sysfs_remove)(struct mmc_host *, struct mmc_card *card); | ||
23 | void (*suspend)(struct mmc_host *); | 21 | void (*suspend)(struct mmc_host *); |
24 | void (*resume)(struct mmc_host *); | 22 | void (*resume)(struct mmc_host *); |
25 | }; | 23 | }; |
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 68c0e3b2f0e8..3da29eef8f7d 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/mmc/mmc.h> | 17 | #include <linux/mmc/mmc.h> |
18 | 18 | ||
19 | #include "core.h" | 19 | #include "core.h" |
20 | #include "sysfs.h" | ||
21 | #include "bus.h" | 20 | #include "bus.h" |
22 | #include "mmc_ops.h" | 21 | #include "mmc_ops.h" |
23 | 22 | ||
@@ -248,6 +247,44 @@ out: | |||
248 | return err; | 247 | return err; |
249 | } | 248 | } |
250 | 249 | ||
250 | MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1], | ||
251 | card->raw_cid[2], card->raw_cid[3]); | ||
252 | MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1], | ||
253 | card->raw_csd[2], card->raw_csd[3]); | ||
254 | MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year); | ||
255 | MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev); | ||
256 | MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev); | ||
257 | MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid); | ||
258 | MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); | ||
259 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); | ||
260 | MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); | ||
261 | |||
262 | static struct attribute *mmc_std_attrs[] = { | ||
263 | &dev_attr_cid.attr, | ||
264 | &dev_attr_csd.attr, | ||
265 | &dev_attr_date.attr, | ||
266 | &dev_attr_fwrev.attr, | ||
267 | &dev_attr_hwrev.attr, | ||
268 | &dev_attr_manfid.attr, | ||
269 | &dev_attr_name.attr, | ||
270 | &dev_attr_oemid.attr, | ||
271 | &dev_attr_serial.attr, | ||
272 | NULL, | ||
273 | }; | ||
274 | |||
275 | static struct attribute_group mmc_std_attr_group = { | ||
276 | .attrs = mmc_std_attrs, | ||
277 | }; | ||
278 | |||
279 | static struct attribute_group *mmc_attr_groups[] = { | ||
280 | &mmc_std_attr_group, | ||
281 | NULL, | ||
282 | }; | ||
283 | |||
284 | static struct device_type mmc_type = { | ||
285 | .groups = mmc_attr_groups, | ||
286 | }; | ||
287 | |||
251 | /* | 288 | /* |
252 | * Handle the detection and initialisation of a card. | 289 | * Handle the detection and initialisation of a card. |
253 | * | 290 | * |
@@ -308,7 +345,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
308 | /* | 345 | /* |
309 | * Allocate card structure. | 346 | * Allocate card structure. |
310 | */ | 347 | */ |
311 | card = mmc_alloc_card(host); | 348 | card = mmc_alloc_card(host, &mmc_type); |
312 | if (IS_ERR(card)) { | 349 | if (IS_ERR(card)) { |
313 | err = PTR_ERR(card); | 350 | err = PTR_ERR(card); |
314 | goto err; | 351 | goto err; |
@@ -459,53 +496,6 @@ static void mmc_detect(struct mmc_host *host) | |||
459 | } | 496 | } |
460 | } | 497 | } |
461 | 498 | ||
462 | MMC_ATTR_FN(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1], | ||
463 | card->raw_cid[2], card->raw_cid[3]); | ||
464 | MMC_ATTR_FN(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1], | ||
465 | card->raw_csd[2], card->raw_csd[3]); | ||
466 | MMC_ATTR_FN(date, "%02d/%04d\n", card->cid.month, card->cid.year); | ||
467 | MMC_ATTR_FN(fwrev, "0x%x\n", card->cid.fwrev); | ||
468 | MMC_ATTR_FN(hwrev, "0x%x\n", card->cid.hwrev); | ||
469 | MMC_ATTR_FN(manfid, "0x%06x\n", card->cid.manfid); | ||
470 | MMC_ATTR_FN(name, "%s\n", card->cid.prod_name); | ||
471 | MMC_ATTR_FN(oemid, "0x%04x\n", card->cid.oemid); | ||
472 | MMC_ATTR_FN(serial, "0x%08x\n", card->cid.serial); | ||
473 | |||
474 | static struct device_attribute mmc_dev_attrs[] = { | ||
475 | MMC_ATTR_RO(cid), | ||
476 | MMC_ATTR_RO(csd), | ||
477 | MMC_ATTR_RO(date), | ||
478 | MMC_ATTR_RO(fwrev), | ||
479 | MMC_ATTR_RO(hwrev), | ||
480 | MMC_ATTR_RO(manfid), | ||
481 | MMC_ATTR_RO(name), | ||
482 | MMC_ATTR_RO(oemid), | ||
483 | MMC_ATTR_RO(serial), | ||
484 | __ATTR_NULL, | ||
485 | }; | ||
486 | |||
487 | /* | ||
488 | * Adds sysfs entries as relevant. | ||
489 | */ | ||
490 | static int mmc_sysfs_add(struct mmc_host *host, struct mmc_card *card) | ||
491 | { | ||
492 | int ret; | ||
493 | |||
494 | ret = mmc_add_attrs(card, mmc_dev_attrs); | ||
495 | if (ret < 0) | ||
496 | return ret; | ||
497 | |||
498 | return 0; | ||
499 | } | ||
500 | |||
501 | /* | ||
502 | * Removes the sysfs entries added by mmc_sysfs_add(). | ||
503 | */ | ||
504 | static void mmc_sysfs_remove(struct mmc_host *host, struct mmc_card *card) | ||
505 | { | ||
506 | mmc_remove_attrs(card, mmc_dev_attrs); | ||
507 | } | ||
508 | |||
509 | #ifdef CONFIG_MMC_UNSAFE_RESUME | 499 | #ifdef CONFIG_MMC_UNSAFE_RESUME |
510 | 500 | ||
511 | /* | 501 | /* |
@@ -560,8 +550,6 @@ static void mmc_resume(struct mmc_host *host) | |||
560 | static const struct mmc_bus_ops mmc_ops = { | 550 | static const struct mmc_bus_ops mmc_ops = { |
561 | .remove = mmc_remove, | 551 | .remove = mmc_remove, |
562 | .detect = mmc_detect, | 552 | .detect = mmc_detect, |
563 | .sysfs_add = mmc_sysfs_add, | ||
564 | .sysfs_remove = mmc_sysfs_remove, | ||
565 | .suspend = mmc_suspend, | 553 | .suspend = mmc_suspend, |
566 | .resume = mmc_resume, | 554 | .resume = mmc_resume, |
567 | }; | 555 | }; |
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index d1c1e0f592f1..7ef3b15c5e3d 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/mmc/sd.h> | 18 | #include <linux/mmc/sd.h> |
19 | 19 | ||
20 | #include "core.h" | 20 | #include "core.h" |
21 | #include "sysfs.h" | ||
22 | #include "bus.h" | 21 | #include "bus.h" |
23 | #include "mmc_ops.h" | 22 | #include "mmc_ops.h" |
24 | #include "sd_ops.h" | 23 | #include "sd_ops.h" |
@@ -283,6 +282,47 @@ out: | |||
283 | return err; | 282 | return err; |
284 | } | 283 | } |
285 | 284 | ||
285 | MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1], | ||
286 | card->raw_cid[2], card->raw_cid[3]); | ||
287 | MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1], | ||
288 | card->raw_csd[2], card->raw_csd[3]); | ||
289 | MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]); | ||
290 | MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year); | ||
291 | MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev); | ||
292 | MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev); | ||
293 | MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid); | ||
294 | MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); | ||
295 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); | ||
296 | MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); | ||
297 | |||
298 | |||
299 | static struct attribute *sd_std_attrs[] = { | ||
300 | &dev_attr_cid.attr, | ||
301 | &dev_attr_csd.attr, | ||
302 | &dev_attr_scr.attr, | ||
303 | &dev_attr_date.attr, | ||
304 | &dev_attr_fwrev.attr, | ||
305 | &dev_attr_hwrev.attr, | ||
306 | &dev_attr_manfid.attr, | ||
307 | &dev_attr_name.attr, | ||
308 | &dev_attr_oemid.attr, | ||
309 | &dev_attr_serial.attr, | ||
310 | NULL, | ||
311 | }; | ||
312 | |||
313 | static struct attribute_group sd_std_attr_group = { | ||
314 | .attrs = sd_std_attrs, | ||
315 | }; | ||
316 | |||
317 | static struct attribute_group *sd_attr_groups[] = { | ||
318 | &sd_std_attr_group, | ||
319 | NULL, | ||
320 | }; | ||
321 | |||
322 | static struct device_type sd_type = { | ||
323 | .groups = sd_attr_groups, | ||
324 | }; | ||
325 | |||
286 | /* | 326 | /* |
287 | * Handle the detection and initialisation of a card. | 327 | * Handle the detection and initialisation of a card. |
288 | * | 328 | * |
@@ -352,7 +392,7 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr, | |||
352 | /* | 392 | /* |
353 | * Allocate card structure. | 393 | * Allocate card structure. |
354 | */ | 394 | */ |
355 | card = mmc_alloc_card(host); | 395 | card = mmc_alloc_card(host, &sd_type); |
356 | if (IS_ERR(card)) { | 396 | if (IS_ERR(card)) { |
357 | err = PTR_ERR(card); | 397 | err = PTR_ERR(card); |
358 | goto err; | 398 | goto err; |
@@ -518,55 +558,6 @@ static void mmc_sd_detect(struct mmc_host *host) | |||
518 | } | 558 | } |
519 | } | 559 | } |
520 | 560 | ||
521 | MMC_ATTR_FN(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1], | ||
522 | card->raw_cid[2], card->raw_cid[3]); | ||
523 | MMC_ATTR_FN(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1], | ||
524 | card->raw_csd[2], card->raw_csd[3]); | ||
525 | MMC_ATTR_FN(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]); | ||
526 | MMC_ATTR_FN(date, "%02d/%04d\n", card->cid.month, card->cid.year); | ||
527 | MMC_ATTR_FN(fwrev, "0x%x\n", card->cid.fwrev); | ||
528 | MMC_ATTR_FN(hwrev, "0x%x\n", card->cid.hwrev); | ||
529 | MMC_ATTR_FN(manfid, "0x%06x\n", card->cid.manfid); | ||
530 | MMC_ATTR_FN(name, "%s\n", card->cid.prod_name); | ||
531 | MMC_ATTR_FN(oemid, "0x%04x\n", card->cid.oemid); | ||
532 | MMC_ATTR_FN(serial, "0x%08x\n", card->cid.serial); | ||
533 | |||
534 | static struct device_attribute mmc_sd_dev_attrs[] = { | ||
535 | MMC_ATTR_RO(cid), | ||
536 | MMC_ATTR_RO(csd), | ||
537 | MMC_ATTR_RO(scr), | ||
538 | MMC_ATTR_RO(date), | ||
539 | MMC_ATTR_RO(fwrev), | ||
540 | MMC_ATTR_RO(hwrev), | ||
541 | MMC_ATTR_RO(manfid), | ||
542 | MMC_ATTR_RO(name), | ||
543 | MMC_ATTR_RO(oemid), | ||
544 | MMC_ATTR_RO(serial), | ||
545 | __ATTR_NULL, | ||
546 | }; | ||
547 | |||
548 | /* | ||
549 | * Adds sysfs entries as relevant. | ||
550 | */ | ||
551 | static int mmc_sd_sysfs_add(struct mmc_host *host, struct mmc_card *card) | ||
552 | { | ||
553 | int ret; | ||
554 | |||
555 | ret = mmc_add_attrs(card, mmc_sd_dev_attrs); | ||
556 | if (ret < 0) | ||
557 | return ret; | ||
558 | |||
559 | return 0; | ||
560 | } | ||
561 | |||
562 | /* | ||
563 | * Removes the sysfs entries added by mmc_sysfs_add(). | ||
564 | */ | ||
565 | static void mmc_sd_sysfs_remove(struct mmc_host *host, struct mmc_card *card) | ||
566 | { | ||
567 | mmc_remove_attrs(card, mmc_sd_dev_attrs); | ||
568 | } | ||
569 | |||
570 | #ifdef CONFIG_MMC_UNSAFE_RESUME | 561 | #ifdef CONFIG_MMC_UNSAFE_RESUME |
571 | 562 | ||
572 | /* | 563 | /* |
@@ -621,8 +612,6 @@ static void mmc_sd_resume(struct mmc_host *host) | |||
621 | static const struct mmc_bus_ops mmc_sd_ops = { | 612 | static const struct mmc_bus_ops mmc_sd_ops = { |
622 | .remove = mmc_sd_remove, | 613 | .remove = mmc_sd_remove, |
623 | .detect = mmc_sd_detect, | 614 | .detect = mmc_sd_detect, |
624 | .sysfs_add = mmc_sd_sysfs_add, | ||
625 | .sysfs_remove = mmc_sd_sysfs_remove, | ||
626 | .suspend = mmc_sd_suspend, | 615 | .suspend = mmc_sd_suspend, |
627 | .resume = mmc_sd_resume, | 616 | .resume = mmc_sd_resume, |
628 | }; | 617 | }; |
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index 87a50f456efc..4eab79e09ccc 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c | |||
@@ -287,7 +287,7 @@ int mmc_attach_sdio(struct mmc_host *host, u32 ocr) | |||
287 | /* | 287 | /* |
288 | * Allocate card structure. | 288 | * Allocate card structure. |
289 | */ | 289 | */ |
290 | card = mmc_alloc_card(host); | 290 | card = mmc_alloc_card(host, NULL); |
291 | if (IS_ERR(card)) { | 291 | if (IS_ERR(card)) { |
292 | err = PTR_ERR(card); | 292 | err = PTR_ERR(card); |
293 | goto err; | 293 | goto err; |
diff --git a/drivers/mmc/core/sysfs.c b/drivers/mmc/core/sysfs.c deleted file mode 100644 index 00a97e70f914..000000000000 --- a/drivers/mmc/core/sysfs.c +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * linux/drivers/mmc/core/sysfs.c | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * Copyright 2007 Pierre Ossman | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * MMC sysfs/driver model support. | ||
12 | */ | ||
13 | #include <linux/device.h> | ||
14 | |||
15 | #include <linux/mmc/card.h> | ||
16 | |||
17 | #include "sysfs.h" | ||
18 | |||
19 | int mmc_add_attrs(struct mmc_card *card, struct device_attribute *attrs) | ||
20 | { | ||
21 | int error = 0; | ||
22 | int i; | ||
23 | |||
24 | for (i = 0; attr_name(attrs[i]); i++) { | ||
25 | error = device_create_file(&card->dev, &attrs[i]); | ||
26 | if (error) { | ||
27 | while (--i >= 0) | ||
28 | device_remove_file(&card->dev, &attrs[i]); | ||
29 | break; | ||
30 | } | ||
31 | } | ||
32 | |||
33 | return error; | ||
34 | } | ||
35 | |||
36 | void mmc_remove_attrs(struct mmc_card *card, struct device_attribute *attrs) | ||
37 | { | ||
38 | int i; | ||
39 | |||
40 | for (i = 0; attr_name(attrs[i]); i++) | ||
41 | device_remove_file(&card->dev, &attrs[i]); | ||
42 | } | ||
43 | |||
diff --git a/drivers/mmc/core/sysfs.h b/drivers/mmc/core/sysfs.h deleted file mode 100644 index 4b8f670bd10f..000000000000 --- a/drivers/mmc/core/sysfs.h +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* | ||
2 | * linux/drivers/mmc/core/sysfs.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * Copyright 2007 Pierre Ossman | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef _MMC_CORE_SYSFS_H | ||
12 | #define _MMC_CORE_SYSFS_H | ||
13 | |||
14 | #define MMC_ATTR_FN(name, fmt, args...) \ | ||
15 | static ssize_t mmc_##name##_show (struct device *dev, struct device_attribute *attr, char *buf) \ | ||
16 | { \ | ||
17 | struct mmc_card *card = container_of(dev, struct mmc_card, dev);\ | ||
18 | return sprintf(buf, fmt, args); \ | ||
19 | } | ||
20 | |||
21 | #define MMC_ATTR_RO(name) __ATTR(name, S_IRUGO, mmc_##name##_show, NULL) | ||
22 | |||
23 | int mmc_add_attrs(struct mmc_card *card, struct device_attribute *attrs); | ||
24 | void mmc_remove_attrs(struct mmc_card *card, struct device_attribute *attrs); | ||
25 | |||
26 | #endif | ||
diff --git a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c index 2c925b7cd93e..257f5d827d83 100644 --- a/drivers/pnp/isapnp/core.c +++ b/drivers/pnp/isapnp/core.c | |||
@@ -88,6 +88,15 @@ MODULE_LICENSE("GPL"); | |||
88 | #define _LTAG_MEM32RANGE 0x85 | 88 | #define _LTAG_MEM32RANGE 0x85 |
89 | #define _LTAG_FIXEDMEM32RANGE 0x86 | 89 | #define _LTAG_FIXEDMEM32RANGE 0x86 |
90 | 90 | ||
91 | /* | ||
92 | * Sizes of ISAPNP logical device configuration register sets. | ||
93 | * See PNP-ISA-v1.0a.pdf, Appendix A. | ||
94 | */ | ||
95 | #define ISAPNP_MAX_MEM 4 | ||
96 | #define ISAPNP_MAX_PORT 8 | ||
97 | #define ISAPNP_MAX_IRQ 2 | ||
98 | #define ISAPNP_MAX_DMA 2 | ||
99 | |||
91 | static unsigned char isapnp_checksum_value; | 100 | static unsigned char isapnp_checksum_value; |
92 | static DEFINE_MUTEX(isapnp_cfg_mutex); | 101 | static DEFINE_MUTEX(isapnp_cfg_mutex); |
93 | static int isapnp_csn_count; | 102 | static int isapnp_csn_count; |
@@ -945,14 +954,14 @@ static int isapnp_read_resources(struct pnp_dev *dev, | |||
945 | 954 | ||
946 | dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE); | 955 | dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE); |
947 | if (dev->active) { | 956 | if (dev->active) { |
948 | for (tmp = 0; tmp < PNP_MAX_PORT; tmp++) { | 957 | for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) { |
949 | ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1)); | 958 | ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1)); |
950 | if (!ret) | 959 | if (!ret) |
951 | continue; | 960 | continue; |
952 | res->port_resource[tmp].start = ret; | 961 | res->port_resource[tmp].start = ret; |
953 | res->port_resource[tmp].flags = IORESOURCE_IO; | 962 | res->port_resource[tmp].flags = IORESOURCE_IO; |
954 | } | 963 | } |
955 | for (tmp = 0; tmp < PNP_MAX_MEM; tmp++) { | 964 | for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) { |
956 | ret = | 965 | ret = |
957 | isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8; | 966 | isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8; |
958 | if (!ret) | 967 | if (!ret) |
@@ -960,7 +969,7 @@ static int isapnp_read_resources(struct pnp_dev *dev, | |||
960 | res->mem_resource[tmp].start = ret; | 969 | res->mem_resource[tmp].start = ret; |
961 | res->mem_resource[tmp].flags = IORESOURCE_MEM; | 970 | res->mem_resource[tmp].flags = IORESOURCE_MEM; |
962 | } | 971 | } |
963 | for (tmp = 0; tmp < PNP_MAX_IRQ; tmp++) { | 972 | for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) { |
964 | ret = | 973 | ret = |
965 | (isapnp_read_word(ISAPNP_CFG_IRQ + (tmp << 1)) >> | 974 | (isapnp_read_word(ISAPNP_CFG_IRQ + (tmp << 1)) >> |
966 | 8); | 975 | 8); |
@@ -970,7 +979,7 @@ static int isapnp_read_resources(struct pnp_dev *dev, | |||
970 | res->irq_resource[tmp].end = ret; | 979 | res->irq_resource[tmp].end = ret; |
971 | res->irq_resource[tmp].flags = IORESOURCE_IRQ; | 980 | res->irq_resource[tmp].flags = IORESOURCE_IRQ; |
972 | } | 981 | } |
973 | for (tmp = 0; tmp < PNP_MAX_DMA; tmp++) { | 982 | for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) { |
974 | ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp); | 983 | ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp); |
975 | if (ret == 4) | 984 | if (ret == 4) |
976 | continue; | 985 | continue; |
@@ -1002,14 +1011,14 @@ static int isapnp_set_resources(struct pnp_dev *dev, | |||
1002 | isapnp_cfg_begin(dev->card->number, dev->number); | 1011 | isapnp_cfg_begin(dev->card->number, dev->number); |
1003 | dev->active = 1; | 1012 | dev->active = 1; |
1004 | for (tmp = 0; | 1013 | for (tmp = 0; |
1005 | tmp < PNP_MAX_PORT | 1014 | tmp < ISAPNP_MAX_PORT |
1006 | && (res->port_resource[tmp]. | 1015 | && (res->port_resource[tmp]. |
1007 | flags & (IORESOURCE_IO | IORESOURCE_UNSET)) == IORESOURCE_IO; | 1016 | flags & (IORESOURCE_IO | IORESOURCE_UNSET)) == IORESOURCE_IO; |
1008 | tmp++) | 1017 | tmp++) |
1009 | isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1), | 1018 | isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1), |
1010 | res->port_resource[tmp].start); | 1019 | res->port_resource[tmp].start); |
1011 | for (tmp = 0; | 1020 | for (tmp = 0; |
1012 | tmp < PNP_MAX_IRQ | 1021 | tmp < ISAPNP_MAX_IRQ |
1013 | && (res->irq_resource[tmp]. | 1022 | && (res->irq_resource[tmp]. |
1014 | flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) == IORESOURCE_IRQ; | 1023 | flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) == IORESOURCE_IRQ; |
1015 | tmp++) { | 1024 | tmp++) { |
@@ -1019,14 +1028,14 @@ static int isapnp_set_resources(struct pnp_dev *dev, | |||
1019 | isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq); | 1028 | isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq); |
1020 | } | 1029 | } |
1021 | for (tmp = 0; | 1030 | for (tmp = 0; |
1022 | tmp < PNP_MAX_DMA | 1031 | tmp < ISAPNP_MAX_DMA |
1023 | && (res->dma_resource[tmp]. | 1032 | && (res->dma_resource[tmp]. |
1024 | flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) == IORESOURCE_DMA; | 1033 | flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) == IORESOURCE_DMA; |
1025 | tmp++) | 1034 | tmp++) |
1026 | isapnp_write_byte(ISAPNP_CFG_DMA + tmp, | 1035 | isapnp_write_byte(ISAPNP_CFG_DMA + tmp, |
1027 | res->dma_resource[tmp].start); | 1036 | res->dma_resource[tmp].start); |
1028 | for (tmp = 0; | 1037 | for (tmp = 0; |
1029 | tmp < PNP_MAX_MEM | 1038 | tmp < ISAPNP_MAX_MEM |
1030 | && (res->mem_resource[tmp]. | 1039 | && (res->mem_resource[tmp]. |
1031 | flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) == IORESOURCE_MEM; | 1040 | flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) == IORESOURCE_MEM; |
1032 | tmp++) | 1041 | tmp++) |