Lines Matching +full:primecell +full:- +full:periphid
22 #include <linux/clk/clk-conf.h>
34 while (table->mask) { in amba_lookup()
35 ret = (dev->periphid & table->mask) == table->id; in amba_lookup()
50 if (pcdev->driver_override) in amba_match()
51 return !strcmp(pcdev->driver_override, drv->name); in amba_match()
53 return amba_lookup(pcdrv->id_table, pcdev) != NULL; in amba_match()
61 retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid); in amba_uevent()
65 retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid); in amba_uevent()
76 len = sprintf(buf, "%s\n", dev->driver_override); in driver_override_show()
89 if (count >= (PAGE_SIZE - 1)) in driver_override_store()
90 return -EINVAL; in driver_override_store()
94 return -ENOMEM; in driver_override_store()
101 old = dev->driver_override; in driver_override_store()
103 dev->driver_override = driver_override; in driver_override_store()
106 dev->driver_override = NULL; in driver_override_store()
125 amba_attr_func(id, "%08x\n", dev->periphid);
126 amba_attr_func(irq0, "%u\n", dev->irq[0]);
127 amba_attr_func(irq1, "%u\n", dev->irq[1]);
129 (unsigned long long)dev->res.start, (unsigned long long)dev->res.end,
130 dev->res.flags);
151 if (ret == 0 && dev->driver) { in amba_pm_runtime_suspend()
153 clk_disable(pcdev->pclk); in amba_pm_runtime_suspend()
155 clk_disable_unprepare(pcdev->pclk); in amba_pm_runtime_suspend()
166 if (dev->driver) { in amba_pm_runtime_resume()
168 ret = clk_enable(pcdev->pclk); in amba_pm_runtime_resume()
170 ret = clk_prepare_enable(pcdev->pclk); in amba_pm_runtime_resume()
221 pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk"); in amba_get_enable_pclk()
222 if (IS_ERR(pcdev->pclk)) in amba_get_enable_pclk()
223 return PTR_ERR(pcdev->pclk); in amba_get_enable_pclk()
225 ret = clk_prepare_enable(pcdev->pclk); in amba_get_enable_pclk()
227 clk_put(pcdev->pclk); in amba_get_enable_pclk()
234 clk_disable_unprepare(pcdev->pclk); in amba_put_disable_pclk()
235 clk_put(pcdev->pclk); in amba_put_disable_pclk()
245 struct amba_driver *pcdrv = to_amba_driver(dev->driver); in amba_probe()
246 const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev); in amba_probe()
250 ret = of_clk_set_defaults(dev->of_node, false); in amba_probe()
268 ret = pcdrv->probe(pcdev, id); in amba_probe()
286 struct amba_driver *drv = to_amba_driver(dev->driver); in amba_remove()
290 ret = drv->remove(pcdev); in amba_remove()
306 struct amba_driver *drv = to_amba_driver(dev->driver); in amba_shutdown()
307 drv->shutdown(to_amba_device(dev)); in amba_shutdown()
311 * amba_driver_register - register an AMBA device driver
315 * core. If devices pre-exist, the drivers probe function will
320 drv->drv.bus = &amba_bustype; in amba_driver_register()
322 #define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn in amba_driver_register()
327 return driver_register(&drv->drv); in amba_driver_register()
331 * amba_driver_unregister - remove an AMBA device driver
340 driver_unregister(&drv->drv); in amba_driver_unregister()
348 if (d->res.parent) in amba_device_release()
349 release_resource(&d->res); in amba_device_release()
359 WARN_ON(dev->irq[0] == (unsigned int)-1); in amba_device_try_add()
360 WARN_ON(dev->irq[1] == (unsigned int)-1); in amba_device_try_add()
362 ret = request_resource(parent, &dev->res); in amba_device_try_add()
366 /* Hard-coded primecell ID instead of plug-n-play */ in amba_device_try_add()
367 if (dev->periphid != 0) in amba_device_try_add()
374 size = resource_size(&dev->res); in amba_device_try_add()
375 tmp = ioremap(dev->res.start, size); in amba_device_try_add()
377 ret = -ENOMEM; in amba_device_try_add()
381 ret = dev_pm_domain_attach(&dev->dev, true); in amba_device_try_add()
396 pid |= (readl(tmp + size - 0x20 + 4 * i) & 255) << in amba_device_try_add()
399 cid |= (readl(tmp + size - 0x10 + 4 * i) & 255) << in amba_device_try_add()
405 dev->periphid = pid; in amba_device_try_add()
407 if (!dev->periphid) in amba_device_try_add()
408 ret = -ENODEV; in amba_device_try_add()
412 dev_pm_domain_detach(&dev->dev, true); in amba_device_try_add()
418 ret = device_add(&dev->dev); in amba_device_try_add()
422 if (dev->irq[0]) in amba_device_try_add()
423 ret = device_create_file(&dev->dev, &dev_attr_irq0); in amba_device_try_add()
424 if (ret == 0 && dev->irq[1]) in amba_device_try_add()
425 ret = device_create_file(&dev->dev, &dev_attr_irq1); in amba_device_try_add()
429 device_unregister(&dev->dev); in amba_device_try_add()
432 release_resource(&dev->res); in amba_device_try_add()
467 int ret = amba_device_try_add(ddev->dev, ddev->parent); in amba_deferred_retry_func()
469 if (ret == -EPROBE_DEFER) in amba_deferred_retry_func()
472 list_del_init(&ddev->node); in amba_deferred_retry_func()
484 * amba_device_add - add a previously allocated AMBA device structure
496 if (ret == -EPROBE_DEFER) { in amba_device_add()
501 return -ENOMEM; in amba_device_add()
503 ddev->dev = dev; in amba_device_add()
504 ddev->parent = parent; in amba_device_add()
512 list_add_tail(&ddev->node, &deferred_devices); in amba_device_add()
523 void *pdata, unsigned int periphid, u64 dma_mask, in amba_aphb_device_add() argument
531 return ERR_PTR(-ENOMEM); in amba_aphb_device_add()
533 dev->dev.coherent_dma_mask = dma_mask; in amba_aphb_device_add()
534 dev->irq[0] = irq1; in amba_aphb_device_add()
535 dev->irq[1] = irq2; in amba_aphb_device_add()
536 dev->periphid = periphid; in amba_aphb_device_add()
537 dev->dev.platform_data = pdata; in amba_aphb_device_add()
538 dev->dev.parent = parent; in amba_aphb_device_add()
552 void *pdata, unsigned int periphid) in amba_apb_device_add() argument
555 periphid, 0, &iomem_resource); in amba_apb_device_add()
562 void *pdata, unsigned int periphid) in amba_ahb_device_add() argument
565 periphid, ~0ULL, &iomem_resource); in amba_ahb_device_add()
572 int irq2, void *pdata, unsigned int periphid, in amba_apb_device_add_res() argument
576 periphid, 0, resbase); in amba_apb_device_add_res()
583 int irq2, void *pdata, unsigned int periphid, in amba_ahb_device_add_res() argument
587 periphid, ~0ULL, resbase); in amba_ahb_device_add_res()
594 device_initialize(&dev->dev); in amba_device_initialize()
596 dev_set_name(&dev->dev, "%s", name); in amba_device_initialize()
597 dev->dev.release = amba_device_release; in amba_device_initialize()
598 dev->dev.bus = &amba_bustype; in amba_device_initialize()
599 dev->dev.dma_mask = &dev->dev.coherent_dma_mask; in amba_device_initialize()
600 dev->res.name = dev_name(&dev->dev); in amba_device_initialize()
604 * amba_device_alloc - allocate an AMBA device
620 dev->res.start = base; in amba_device_alloc()
621 dev->res.end = base + size - 1; in amba_device_alloc()
622 dev->res.flags = IORESOURCE_MEM; in amba_device_alloc()
630 * amba_device_register - register an AMBA device
640 amba_device_initialize(dev, dev->dev.init_name); in amba_device_register()
641 dev->dev.init_name = NULL; in amba_device_register()
647 * amba_device_put - put an AMBA device
652 put_device(&dev->dev); in amba_device_put()
657 * amba_device_unregister - unregister an AMBA device
669 device_unregister(&dev->dev); in amba_device_unregister()
687 r = (pcdev->periphid & d->mask) == d->id; in amba_find_match()
688 if (d->parent) in amba_find_match()
689 r &= d->parent == dev->parent; in amba_find_match()
690 if (d->busid) in amba_find_match()
691 r &= strcmp(dev_name(dev), d->busid) == 0; in amba_find_match()
695 d->dev = pcdev; in amba_find_match()
702 * amba_find_device - locate an AMBA device given a bus id
733 * amba_request_regions - request all mem regions associated with device
743 name = dev->dev.driver->name; in amba_request_regions()
745 size = resource_size(&dev->res); in amba_request_regions()
747 if (!request_mem_region(dev->res.start, size, name)) in amba_request_regions()
748 ret = -EBUSY; in amba_request_regions()
754 * amba_release_regions - release mem regions associated with device
763 size = resource_size(&dev->res); in amba_release_regions()
764 release_mem_region(dev->res.start, size); in amba_release_regions()