Lines Matching +full:ent +full:- +full:gpios
20 #include <linux/dma-mapping.h>
33 /* Temporary list of yet-to-be-attached buses */
62 if (bus->bustype == SSB_BUSTYPE_PCI && in ssb_pci_dev_to_bus()
63 bus->host_pci == pdev) in ssb_pci_dev_to_bus()
81 if (bus->bustype == SSB_BUSTYPE_PCMCIA && in ssb_pcmcia_dev_to_bus()
82 bus->host_pcmcia == pdev) in ssb_pcmcia_dev_to_bus()
109 return -ENODEV; in ssb_for_each_bus_call()
115 get_device(dev->dev); in ssb_device_get()
122 put_device(dev->dev); in ssb_device_put()
131 if (dev->driver) { in ssb_device_resume()
132 ssb_drv = drv_to_ssb_drv(dev->driver); in ssb_device_resume()
133 if (ssb_drv && ssb_drv->resume) in ssb_device_resume()
134 err = ssb_drv->resume(ssb_dev); in ssb_device_resume()
148 if (dev->driver) { in ssb_device_suspend()
149 ssb_drv = drv_to_ssb_drv(dev->driver); in ssb_device_suspend()
150 if (ssb_drv && ssb_drv->suspend) in ssb_device_suspend()
151 err = ssb_drv->suspend(ssb_dev, state); in ssb_device_suspend()
165 bus->mapped_device = NULL; in ssb_bus_resume()
167 bus->pcicore.setup_done = 0; in ssb_bus_resume()
178 ssb_chipco_resume(&bus->chipco); in ssb_bus_resume()
187 ssb_chipco_suspend(&bus->chipco); in ssb_bus_suspend()
195 /** ssb_devices_freeze - Freeze all devices on the bus.
211 ctx->bus = bus; in ssb_devices_freeze()
212 WARN_ON(bus->nr_devices > ARRAY_SIZE(ctx->device_frozen)); in ssb_devices_freeze()
214 for (i = 0; i < bus->nr_devices; i++) { in ssb_devices_freeze()
215 sdev = ssb_device_get(&bus->devices[i]); in ssb_devices_freeze()
217 if (!sdev->dev || !sdev->dev->driver || in ssb_devices_freeze()
218 !device_is_registered(sdev->dev)) { in ssb_devices_freeze()
222 sdrv = drv_to_ssb_drv(sdev->dev->driver); in ssb_devices_freeze()
223 if (WARN_ON(!sdrv->remove)) in ssb_devices_freeze()
225 sdrv->remove(sdev); in ssb_devices_freeze()
226 ctx->device_frozen[i] = 1; in ssb_devices_freeze()
232 /** ssb_devices_thaw - Unfreeze all devices on the bus.
234 * This will re-attach the device drivers and re-init the devices.
240 struct ssb_bus *bus = ctx->bus; in ssb_devices_thaw()
246 for (i = 0; i < bus->nr_devices; i++) { in ssb_devices_thaw()
247 if (!ctx->device_frozen[i]) in ssb_devices_thaw()
249 sdev = &bus->devices[i]; in ssb_devices_thaw()
251 if (WARN_ON(!sdev->dev || !sdev->dev->driver)) in ssb_devices_thaw()
253 sdrv = drv_to_ssb_drv(sdev->dev->driver); in ssb_devices_thaw()
254 if (WARN_ON(!sdrv || !sdrv->probe)) in ssb_devices_thaw()
257 err = sdrv->probe(sdev, &sdev->id); in ssb_devices_thaw()
259 dev_err(sdev->dev, in ssb_devices_thaw()
261 dev_name(sdev->dev)); in ssb_devices_thaw()
276 if (!dev->driver) in ssb_device_shutdown()
278 ssb_drv = drv_to_ssb_drv(dev->driver); in ssb_device_shutdown()
279 if (ssb_drv && ssb_drv->shutdown) in ssb_device_shutdown()
280 ssb_drv->shutdown(ssb_dev); in ssb_device_shutdown()
286 struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver); in ssb_device_remove()
288 if (ssb_drv && ssb_drv->remove) in ssb_device_remove()
289 ssb_drv->remove(ssb_dev); in ssb_device_remove()
298 struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver); in ssb_device_probe()
302 if (ssb_drv && ssb_drv->probe) in ssb_device_probe()
303 err = ssb_drv->probe(ssb_dev, &ssb_dev->id); in ssb_device_probe()
313 if ((tabid->vendor != devid->vendor) && in ssb_match_devid()
314 tabid->vendor != SSB_ANY_VENDOR) in ssb_match_devid()
316 if ((tabid->coreid != devid->coreid) && in ssb_match_devid()
317 tabid->coreid != SSB_ANY_ID) in ssb_match_devid()
319 if ((tabid->revision != devid->revision) && in ssb_match_devid()
320 tabid->revision != SSB_ANY_REV) in ssb_match_devid()
331 for (id = ssb_drv->id_table; in ssb_bus_match()
332 id->vendor || id->coreid || id->revision; in ssb_bus_match()
334 if (ssb_match_devid(id, &ssb_dev->id)) in ssb_bus_match()
346 return -ENODEV; in ssb_device_uevent()
350 ssb_dev->id.vendor, ssb_dev->id.coreid, in ssb_device_uevent()
351 ssb_dev->id.revision); in ssb_device_uevent()
358 return sprintf(buf, format_string, dev_to_ssb_dev(dev)->field); \
371 ssb_core_name(dev_to_ssb_dev(dev)->id.coreid)); in name_show()
417 for (i = bus->nr_devices - 1; i >= 0; i--) { in ssb_devices_unregister()
418 sdev = &(bus->devices[i]); in ssb_devices_unregister()
419 if (sdev->dev) in ssb_devices_unregister()
420 device_unregister(sdev->dev); in ssb_devices_unregister()
424 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_devices_unregister()
425 platform_device_unregister(bus->watchdog); in ssb_devices_unregister()
434 if (err == -EBUSY) in ssb_bus_unregister()
435 pr_debug("Some GPIOs are still in use\n"); in ssb_bus_unregister()
441 list_del(&bus->list); in ssb_bus_unregister()
466 for (i = 0; i < bus->nr_devices; i++) { in ssb_devices_register()
467 sdev = &(bus->devices[i]); in ssb_devices_register()
469 /* We don't register SSB-system devices to the kernel, in ssb_devices_register()
471 switch (sdev->id.coreid) { in ssb_devices_register()
484 err = -ENOMEM; in ssb_devices_register()
487 dev = &devwrap->dev; in ssb_devices_register()
488 devwrap->sdev = sdev; in ssb_devices_register()
490 dev->release = ssb_release_dev; in ssb_devices_register()
491 dev->bus = &ssb_bustype; in ssb_devices_register()
492 dev_set_name(dev, "ssb%u:%d", bus->busnumber, dev_idx); in ssb_devices_register()
494 switch (bus->bustype) { in ssb_devices_register()
497 sdev->irq = bus->host_pci->irq; in ssb_devices_register()
498 dev->parent = &bus->host_pci->dev; in ssb_devices_register()
499 sdev->dma_dev = dev->parent; in ssb_devices_register()
504 sdev->irq = bus->host_pcmcia->irq; in ssb_devices_register()
505 dev->parent = &bus->host_pcmcia->dev; in ssb_devices_register()
510 dev->parent = &bus->host_sdio->dev; in ssb_devices_register()
514 dev->dma_mask = &dev->coherent_dma_mask; in ssb_devices_register()
515 sdev->dma_dev = dev; in ssb_devices_register()
519 sdev->dev = dev; in ssb_devices_register()
525 sdev->dev = NULL; in ssb_devices_register()
533 if (bus->mipscore.pflash.present) { in ssb_devices_register()
541 if (bus->mipscore.sflash.present) { in ssb_devices_register()
564 list_del(&bus->list); in ssb_attach_queued_buses()
574 ssb_pcicore_init(&bus->pcicore); in ssb_attach_queued_buses()
575 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_attach_queued_buses()
579 if (err == -ENOTSUPP) in ssb_attach_queued_buses()
590 list_del(&bus->list); in ssb_attach_queued_buses()
593 list_move_tail(&bus->list, &buses); in ssb_attach_queued_buses()
609 memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo)); in ssb_fetch_invariants()
610 memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom)); in ssb_fetch_invariants()
611 bus->has_cardbus_slot = iv.has_cardbus_slot; in ssb_fetch_invariants()
623 spin_lock_init(&bus->bar_lock); in ssb_bus_register()
624 INIT_LIST_HEAD(&bus->list); in ssb_bus_register()
626 spin_lock_init(&bus->gpio_lock); in ssb_bus_register()
634 /* Init SDIO-host device (if any), before the scan */ in ssb_bus_register()
640 bus->busnumber = next_busnumber; in ssb_bus_register()
646 /* Init PCI-host device (if any) */ in ssb_bus_register()
650 /* Init PCMCIA-host device (if any) */ in ssb_bus_register()
659 ssb_chipcommon_init(&bus->chipco); in ssb_bus_register()
660 ssb_extif_init(&bus->extif); in ssb_bus_register()
661 ssb_mipscore_init(&bus->mipscore); in ssb_bus_register()
671 list_add_tail(&bus->list, &attach_queue); in ssb_bus_register()
685 list_del(&bus->list); in ssb_bus_register()
705 bus->bustype = SSB_BUSTYPE_PCI; in ssb_bus_pcibus_register()
706 bus->host_pci = host_pci; in ssb_bus_pcibus_register()
707 bus->ops = &ssb_pci_ops; in ssb_bus_pcibus_register()
711 dev_info(&host_pci->dev, in ssb_bus_pcibus_register()
713 dev_name(&host_pci->dev)); in ssb_bus_pcibus_register()
715 dev_err(&host_pci->dev, in ssb_bus_pcibus_register()
731 bus->bustype = SSB_BUSTYPE_PCMCIA; in ssb_bus_pcmciabus_register()
732 bus->host_pcmcia = pcmcia_dev; in ssb_bus_pcmciabus_register()
733 bus->ops = &ssb_pcmcia_ops; in ssb_bus_pcmciabus_register()
737 dev_info(&pcmcia_dev->dev, in ssb_bus_pcmciabus_register()
739 pcmcia_dev->devname); in ssb_bus_pcmciabus_register()
752 bus->bustype = SSB_BUSTYPE_SDIO; in ssb_bus_sdiobus_register()
753 bus->host_sdio = func; in ssb_bus_sdiobus_register()
754 bus->ops = &ssb_sdio_ops; in ssb_bus_sdiobus_register()
755 bus->quirks = quirks; in ssb_bus_sdiobus_register()
759 dev_info(&func->dev, in ssb_bus_sdiobus_register()
774 bus->bustype = SSB_BUSTYPE_SSB; in ssb_bus_host_soc_register()
775 bus->ops = &ssb_host_soc_ops; in ssb_bus_host_soc_register()
789 drv->drv.name = drv->name; in __ssb_driver_register()
790 drv->drv.bus = &ssb_bustype; in __ssb_driver_register()
791 drv->drv.owner = owner; in __ssb_driver_register()
793 return driver_register(&drv->drv); in __ssb_driver_register()
799 driver_unregister(&drv->drv); in ssb_driver_unregister()
805 struct ssb_bus *bus = dev->bus; in ssb_set_devtypedata()
806 struct ssb_device *ent; in ssb_set_devtypedata() local
809 for (i = 0; i < bus->nr_devices; i++) { in ssb_set_devtypedata()
810 ent = &(bus->devices[i]); in ssb_set_devtypedata()
811 if (ent->id.vendor != dev->id.vendor) in ssb_set_devtypedata()
813 if (ent->id.coreid != dev->id.coreid) in ssb_set_devtypedata()
816 ent->devtypedata = data; in ssb_set_devtypedata()
943 if (bus->chipco.capabilities & SSB_CHIPCO_CAP_PMU) in ssb_clockspeed()
944 return ssb_pmu_get_controlclock(&bus->chipco); in ssb_clockspeed()
946 if (ssb_extif_available(&bus->extif)) in ssb_clockspeed()
947 ssb_extif_get_clockcontrol(&bus->extif, &plltype, in ssb_clockspeed()
949 else if (bus->chipco.dev) in ssb_clockspeed()
950 ssb_chipco_get_clockcontrol(&bus->chipco, &plltype, in ssb_clockspeed()
955 if (bus->chip_id == 0x5365) { in ssb_clockspeed()
979 case SSB_IDLOW_SSBREV_25: /* TODO - find the proper REJECT bit */ in ssb_tmslow_reject_bitmask()
1047 * timeout is in units of ten-microseconds */
1065 dev_err(dev->dev, in ssb_wait_bits()
1069 return -ETIMEDOUT; in ssb_wait_bits()
1114 /* Some chipsets need routing known for PCIe and 64-bit DMA */
1117 u16 chip_id = dev->bus->chip_id; in ssb_dma_translation_special_bit()
1119 if (dev->id.coreid == SSB_DEV_80211) { in ssb_dma_translation_special_bit()
1129 switch (dev->bus->bustype) { in ssb_dma_translation()
1133 if (pci_is_pcie(dev->bus->host_pci) && in ssb_dma_translation()
1157 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_bus_may_powerdown()
1160 cc = &bus->chipco; in ssb_bus_may_powerdown()
1162 if (!cc->dev) in ssb_bus_may_powerdown()
1164 if (cc->dev->id.revision < 5) in ssb_bus_may_powerdown()
1172 bus->powered_up = 0; in ssb_bus_may_powerdown()
1189 bus->powered_up = 1; in ssb_bus_powerup()
1192 ssb_chipco_set_clockmode(&bus->chipco, mode); in ssb_bus_powerup()
1221 dev = bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev; in ssb_commit_settings()
1223 dev = bus->chipco.dev; in ssb_commit_settings()
1304 pr_err("Broadcom 43xx PCI-SSB-bridge initialization failed\n"); in ssb_modinit()