Lines Matching +full:wakeup +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0+
24 #define FOTG210_RR_ID BIT(21) /* 1 = B-device, 0 = A-device */
28 * Gemini-specific initialization function, only executed on the
31 * The gemini USB blocks are connected to either Mini-A (host mode) or
32 * Mini-B (peripheral mode) plugs. There is no role switch support on the
33 * Gemini SoC, just either-or.
44 enum usb_dr_mode mode) in fotg210_gemini_init() argument
46 struct device *dev = fotg->dev; in fotg210_gemini_init()
47 struct device_node *np = dev->of_node; in fotg210_gemini_init()
49 bool wakeup; in fotg210_gemini_init() local
56 fotg->map = map; in fotg210_gemini_init()
57 wakeup = of_property_read_bool(np, "wakeup-source"); in fotg210_gemini_init()
64 if (res->start == 0x69000000) { in fotg210_gemini_init()
65 fotg->port = GEMINI_PORT_1; in fotg210_gemini_init()
68 if (mode == USB_DR_MODE_HOST) in fotg210_gemini_init()
72 if (wakeup) in fotg210_gemini_init()
75 fotg->port = GEMINI_PORT_0; in fotg210_gemini_init()
78 if (mode == USB_DR_MODE_HOST) in fotg210_gemini_init()
82 if (wakeup) in fotg210_gemini_init()
92 dev_info(dev, "initialized Gemini PHY in %s mode\n", in fotg210_gemini_init()
93 (mode == USB_DR_MODE_HOST) ? "host" : "gadget"); in fotg210_gemini_init()
98 * fotg210_vbus() - Called by gadget driver to enable/disable VBUS
108 switch (fotg->port) { in fotg210_vbus()
120 ret = regmap_update_bits(fotg->map, GEMINI_GLOBAL_MISC_CTRL, mask, val); in fotg210_vbus()
122 dev_err(fotg->dev, "failed to %s VBUS\n", in fotg210_vbus()
124 dev_info(fotg->dev, "%s: %s VBUS\n", __func__, str_enable_disable(enable)); in fotg210_vbus()
129 struct device *dev = &pdev->dev; in fotg210_probe()
130 enum usb_dr_mode mode; in fotg210_probe() local
137 return -ENOMEM; in fotg210_probe()
138 fotg->dev = dev; in fotg210_probe()
140 fotg->base = devm_platform_get_and_ioremap_resource(pdev, 0, &fotg->res); in fotg210_probe()
141 if (IS_ERR(fotg->base)) in fotg210_probe()
142 return PTR_ERR(fotg->base); in fotg210_probe()
144 fotg->pclk = devm_clk_get_optional_enabled(dev, "PCLK"); in fotg210_probe()
145 if (IS_ERR(fotg->pclk)) in fotg210_probe()
146 return PTR_ERR(fotg->pclk); in fotg210_probe()
148 mode = usb_get_dr_mode(dev); in fotg210_probe()
150 if (of_device_is_compatible(dev->of_node, "cortina,gemini-usb")) { in fotg210_probe()
151 ret = fotg210_gemini_init(fotg, fotg->res, mode); in fotg210_probe()
156 val = readl(fotg->base + FOTG210_RR); in fotg210_probe()
157 if (mode == USB_DR_MODE_PERIPHERAL) { in fotg210_probe()
172 struct device *dev = &pdev->dev; in fotg210_remove()
173 enum usb_dr_mode mode; in fotg210_remove() local
175 mode = usb_get_dr_mode(dev); in fotg210_remove()
177 if (mode == USB_DR_MODE_PERIPHERAL) in fotg210_remove()
218 MODULE_AUTHOR("Yuan-Hsin Chen, Feng-Hsin Chiang");