Commit 541ceb5b authored by Feng Tang's avatar Feng Tang Committed by Pierre Ossman

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: default avatarFeng Tang <feng.tang@intel.com>
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 11b295c8
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
static unsigned int debug_quirks = 0; 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 * Different quirks to handle when the hardware deviates from a strict
* interpretation of the SDHCI specification. * interpretation of the SDHCI specification.
...@@ -1320,7 +1324,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) ...@@ -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); 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); ret = pci_request_region(pdev, host->bar, host->slot_descr);
if (ret) if (ret)
...@@ -1585,6 +1589,11 @@ static int __devinit sdhci_probe(struct pci_dev *pdev, ...@@ -1585,6 +1589,11 @@ static int __devinit sdhci_probe(struct pci_dev *pdev,
chip->num_slots = slots; chip->num_slots = slots;
pci_set_drvdata(pdev, chip); 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++) { for (i = 0;i < slots;i++) {
ret = sdhci_probe_slot(pdev, i); ret = sdhci_probe_slot(pdev, i);
if (ret) { if (ret) {
...@@ -1645,6 +1654,8 @@ static int __init sdhci_drv_init(void) ...@@ -1645,6 +1654,8 @@ static int __init sdhci_drv_init(void)
": Secure Digital Host Controller Interface driver\n"); ": Secure Digital Host Controller Interface driver\n");
printk(KERN_INFO DRIVER_NAME ": Copyright(c) Pierre Ossman\n"); printk(KERN_INFO DRIVER_NAME ": Copyright(c) Pierre Ossman\n");
spin_lock_init(&index_lock);
return pci_register_driver(&sdhci_driver); return pci_register_driver(&sdhci_driver);
} }
......
...@@ -208,6 +208,7 @@ struct sdhci_chip { ...@@ -208,6 +208,7 @@ struct sdhci_chip {
unsigned long quirks; unsigned long quirks;
int index; /* Index for chip0, chip1 ...*/
int num_slots; /* Slots on controller */ int num_slots; /* Slots on controller */
struct sdhci_host *hosts[0]; /* Pointers to hosts */ struct sdhci_host *hosts[0]; /* Pointers to hosts */
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment