]>
git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/usb/host/ehci-generic.c
4444988e36fcace0566c8d99529cabf6b4969f1c
2 * Copyright (C) 2015 Alexey Brodkin <abrodkin@synopsys.com>
4 * SPDX-License-Identifier: GPL-2.0+
14 * Even though here we don't explicitly use "struct ehci_ctrl"
15 * ehci_register() expects it to be the first thing that resides in
16 * device's private data.
19 struct ehci_ctrl ctrl
;
22 static int ehci_usb_probe(struct udevice
*dev
)
24 struct ehci_hccr
*hccr
;
25 struct ehci_hcor
*hcor
;
29 struct udevice
*clk_dev
;
32 clk_id
= clk_get_by_index(dev
, i
, &clk_dev
);
35 if (clk_enable(clk_dev
, clk_id
))
36 printf("failed to enable clock (dev=%s, id=%d)\n",
37 clk_dev
->name
, clk_id
);
40 hccr
= map_physmem(dev_get_addr(dev
), 0x100, MAP_NOCACHE
);
41 hcor
= (struct ehci_hcor
*)((uintptr_t)hccr
+
42 HC_LENGTH(ehci_readl(&hccr
->cr_capbase
)));
44 return ehci_register(dev
, hccr
, hcor
, NULL
, 0, USB_INIT_HOST
);
47 static int ehci_usb_remove(struct udevice
*dev
)
49 return ehci_deregister(dev
);
52 static const struct udevice_id ehci_usb_ids
[] = {
53 { .compatible
= "generic-ehci" },
57 U_BOOT_DRIVER(ehci_generic
) = {
58 .name
= "ehci_generic",
60 .of_match
= ehci_usb_ids
,
61 .probe
= ehci_usb_probe
,
62 .remove
= ehci_usb_remove
,
64 .priv_auto_alloc_size
= sizeof(struct generic_ehci
),
65 .flags
= DM_FLAG_ALLOC_PRIV_DMA
,