Lines Matching refs:dev
32 amba_cs_uci_id_match(const struct amba_id *table, struct amba_device *dev)
44 ret = (dev->uci.devtype == uci->devtype) &&
45 ((dev->uci.devarch & uci->devarch_mask) == uci->devarch);
50 amba_lookup(const struct amba_id *table, struct amba_device *dev)
53 if (((dev->periphid & table->mask) == table->id) &&
54 ((dev->cid != CORESIGHT_CID) ||
55 (amba_cs_uci_id_match(table, dev))))
66 pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
87 struct amba_device *dev = to_amba_device(_dev);
91 len = sprintf(buf, "%s\n", dev->driver_override);
100 struct amba_device *dev = to_amba_device(_dev);
103 ret = driver_set_override(_dev, &dev->driver_override, buf, count);
115 struct amba_device *dev = to_amba_device(_dev); \
120 amba_attr_func(id, "%08x\n", dev->periphid);
122 (unsigned long long)dev->res.start, (unsigned long long)dev->res.end,
123 dev->res.flags);
133 static int amba_read_periphid(struct amba_device *dev)
140 ret = dev_pm_domain_attach(&dev->dev, true);
142 dev_dbg(&dev->dev, "can't get PM domain: %d\n", ret);
146 ret = amba_get_enable_pclk(dev);
148 dev_dbg(&dev->dev, "can't get pclk: %d\n", ret);
155 rstc = of_reset_control_array_get_optional_shared(dev->dev.of_node);
159 dev_err(&dev->dev, "can't get reset: %d\n", ret);
165 size = resource_size(&dev->res);
166 tmp = ioremap(dev->res.start, size);
185 dev->uci.devarch = readl(csbase + UCI_REG_DEVARCH_OFFSET);
186 dev->uci.devtype = readl(csbase + UCI_REG_DEVTYPE_OFFSET) & 0xff;
190 dev->periphid = pid;
191 dev->cid = cid;
194 if (!dev->periphid)
200 amba_put_disable_pclk(dev);
202 dev_pm_domain_detach(&dev->dev, true);
207 static int amba_match(struct device *dev, struct device_driver *drv)
209 struct amba_device *pcdev = to_amba_device(dev);
226 dev_set_uevent_suppress(dev, false);
227 kobject_uevent(&dev->kobj, KOBJ_ADD);
238 static int amba_uevent(const struct device *dev, struct kobj_uevent_env *env)
240 const struct amba_device *pcdev = to_amba_device(dev);
251 static int of_amba_device_decode_irq(struct amba_device *dev)
253 struct device_node *node = dev->dev.of_node;
266 dev->irq[i] = irq;
277 static int amba_probe(struct device *dev)
279 struct amba_device *pcdev = to_amba_device(dev);
280 struct amba_driver *pcdrv = to_amba_driver(dev->driver);
289 ret = of_clk_set_defaults(dev->of_node, false);
293 ret = dev_pm_domain_attach(dev, true);
299 dev_pm_domain_detach(dev, true);
303 pm_runtime_get_noresume(dev);
304 pm_runtime_set_active(dev);
305 pm_runtime_enable(dev);
311 pm_runtime_disable(dev);
312 pm_runtime_set_suspended(dev);
313 pm_runtime_put_noidle(dev);
316 dev_pm_domain_detach(dev, true);
322 static void amba_remove(struct device *dev)
324 struct amba_device *pcdev = to_amba_device(dev);
325 struct amba_driver *drv = to_amba_driver(dev->driver);
327 pm_runtime_get_sync(dev);
330 pm_runtime_put_noidle(dev);
333 pm_runtime_disable(dev);
334 pm_runtime_set_suspended(dev);
335 pm_runtime_put_noidle(dev);
338 dev_pm_domain_detach(dev, true);
341 static void amba_shutdown(struct device *dev)
345 if (!dev->driver)
348 drv = to_amba_driver(dev->driver);
350 drv->shutdown(to_amba_device(dev));
353 static int amba_dma_configure(struct device *dev)
355 struct amba_driver *drv = to_amba_driver(dev->driver);
359 if (dev->of_node) {
360 ret = of_dma_configure(dev, dev->of_node, true);
361 } else if (has_acpi_companion(dev)) {
362 attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode));
363 ret = acpi_dma_configure(dev, attr);
367 ret = iommu_device_use_default_domain(dev);
369 arch_teardown_dma_ops(dev);
375 static void amba_dma_cleanup(struct device *dev)
377 struct amba_driver *drv = to_amba_driver(dev->driver);
380 iommu_device_unuse_default_domain(dev);
389 static int amba_pm_runtime_suspend(struct device *dev)
391 struct amba_device *pcdev = to_amba_device(dev);
392 int ret = pm_generic_runtime_suspend(dev);
394 if (ret == 0 && dev->driver) {
395 if (pm_runtime_is_irq_safe(dev))
404 static int amba_pm_runtime_resume(struct device *dev)
406 struct amba_device *pcdev = to_amba_device(dev);
409 if (dev->driver) {
410 if (pm_runtime_is_irq_safe(dev))
419 return pm_generic_runtime_resume(dev);
527 static void amba_device_release(struct device *dev)
529 struct amba_device *d = to_amba_device(dev);
531 of_node_put(d->dev.of_node);
540 * @dev: AMBA device allocated by amba_device_alloc
547 int amba_device_add(struct amba_device *dev, struct resource *parent)
551 ret = request_resource(parent, &dev->res);
556 if (!dev->periphid) {
565 if (amba_read_periphid(dev))
566 dev_set_uevent_suppress(&dev->dev, true);
569 ret = device_add(&dev->dev);
571 release_resource(&dev->res);
577 static void amba_device_initialize(struct amba_device *dev, const char *name)
579 device_initialize(&dev->dev);
581 dev_set_name(&dev->dev, "%s", name);
582 dev->dev.release = amba_device_release;
583 dev->dev.bus = &amba_bustype;
584 dev->dev.dma_mask = &dev->dev.coherent_dma_mask;
585 dev->dev.dma_parms = &dev->dma_parms;
586 dev->res.name = dev_name(&dev->dev);
587 mutex_init(&dev->periphid_lock);
602 struct amba_device *dev;
604 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
605 if (dev) {
606 amba_device_initialize(dev, name);
607 dev->res.start = base;
608 dev->res.end = base + size - 1;
609 dev->res.flags = IORESOURCE_MEM;
612 return dev;
618 * @dev: AMBA device to register
625 int amba_device_register(struct amba_device *dev, struct resource *parent)
627 amba_device_initialize(dev, dev->dev.init_name);
628 dev->dev.init_name = NULL;
630 return amba_device_add(dev, parent);
636 * @dev: AMBA device to put
638 void amba_device_put(struct amba_device *dev)
640 put_device(&dev->dev);
646 * @dev: AMBA device to remove
655 void amba_device_unregister(struct amba_device *dev)
657 device_unregister(&dev->dev);
663 * @dev: amba_device structure for device
666 int amba_request_regions(struct amba_device *dev, const char *name)
672 name = dev->dev.driver->name;
674 size = resource_size(&dev->res);
676 if (!request_mem_region(dev->res.start, size, name))
685 * @dev: amba_device structure for device
689 void amba_release_regions(struct amba_device *dev)
693 size = resource_size(&dev->res);
694 release_mem_region(dev->res.start, size);