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>
This commit is contained in:
parent
11b295c8b2
commit
541ceb5b8b
2 changed files with 13 additions and 1 deletions
|
@ -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)
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
": 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 {
|
||||||
|
|
||||||
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 */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue