diff options
author | Feng Tang <feng.tang@intel.com> | 2008-01-07 14:29:02 +0800 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2008-02-08 09:02:47 +0100 |
commit | 541ceb5b8b4a90f7862ef24e4058fce520247827 (patch) | |
tree | 4c2c2d391ef570fc9705e014a37dbc35f4c51a1d /drivers/mmc | |
parent | 11b295c8b2934e1a9275961418e2c4f46ee674ac (diff) |
sdhci: add num index for multi controllers case
Some devices have several controllers; need add the index info to
device slot name host->slot_desc[]
Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 13 | ||||
-rw-r--r-- | drivers/mmc/host/sdhci.h | 1 |
2 files changed, 13 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 785bbdcf4a5..4b673aa2dc3 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -30,6 +30,10 @@ static unsigned int debug_quirks = 0; +/* For multi controllers in one platform case */ +static u16 chip_index = 0; +static spinlock_t index_lock; + /* * Different quirks to handle when the hardware deviates from a strict * interpretation of the SDHCI specification. @@ -1320,7 +1324,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) DBG("slot %d at 0x%08lx, irq %d\n", slot, host->addr, host->irq); - snprintf(host->slot_descr, 20, "sdhci:slot%d", slot); + snprintf(host->slot_descr, 20, "sdhc%d:slot%d", chip->index, slot); ret = pci_request_region(pdev, host->bar, host->slot_descr); if (ret) @@ -1585,6 +1589,11 @@ static int __devinit sdhci_probe(struct pci_dev *pdev, chip->num_slots = slots; pci_set_drvdata(pdev, chip); + /* Add for multi controller case */ + spin_lock(&index_lock); + chip->index = chip_index++; + spin_unlock(&index_lock); + for (i = 0;i < slots;i++) { ret = sdhci_probe_slot(pdev, i); if (ret) { @@ -1645,6 +1654,8 @@ static int __init sdhci_drv_init(void) ": Secure Digital Host Controller Interface driver\n"); printk(KERN_INFO DRIVER_NAME ": Copyright(c) Pierre Ossman\n"); + spin_lock_init(&index_lock); + return pci_register_driver(&sdhci_driver); } diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index e4d77b038bf..d5a38f1b755 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -208,6 +208,7 @@ struct sdhci_chip { unsigned long quirks; + int index; /* Index for chip0, chip1 ...*/ int num_slots; /* Slots on controller */ struct sdhci_host *hosts[0]; /* Pointers to hosts */ }; |