Lines Matching refs:fhci
39 static void fhci_gpio_set_value(struct fhci_hcd *fhci, int gpio_nr, bool on) in fhci_gpio_set_value() argument
41 struct gpio_desc *gpiod = fhci->gpiods[gpio_nr]; in fhci_gpio_set_value()
50 void fhci_config_transceiver(struct fhci_hcd *fhci, in fhci_config_transceiver() argument
53 fhci_dbg(fhci, "-> %s: %d\n", __func__, status); in fhci_config_transceiver()
57 fhci_gpio_set_value(fhci, GPIO_POWER, false); in fhci_config_transceiver()
61 fhci_gpio_set_value(fhci, GPIO_POWER, true); in fhci_config_transceiver()
64 fhci_gpio_set_value(fhci, GPIO_SPEED, false); in fhci_config_transceiver()
67 fhci_gpio_set_value(fhci, GPIO_SPEED, true); in fhci_config_transceiver()
74 fhci_dbg(fhci, "<- %s: %d\n", __func__, status); in fhci_config_transceiver()
78 void fhci_port_disable(struct fhci_hcd *fhci) in fhci_port_disable() argument
80 struct fhci_usb *usb = (struct fhci_usb *)fhci->usb_lld; in fhci_port_disable()
83 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_port_disable()
85 fhci_stop_sof_timer(fhci); in fhci_port_disable()
89 fhci_usb_disable_interrupt((struct fhci_usb *)fhci->usb_lld); in fhci_port_disable()
95 out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk); in fhci_port_disable()
99 fhci_device_connected_interrupt(fhci); in fhci_port_disable()
102 fhci_usb_enable_interrupt((struct fhci_usb *)fhci->usb_lld); in fhci_port_disable()
104 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_port_disable()
111 struct fhci_hcd *fhci = usb->fhci; in fhci_port_enable() local
113 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_port_enable()
115 fhci_config_transceiver(fhci, usb->port_status); in fhci_port_enable()
119 fhci_start_sof_timer(fhci); in fhci_port_enable()
124 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_port_enable()
127 void fhci_io_port_generate_reset(struct fhci_hcd *fhci) in fhci_io_port_generate_reset() argument
129 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_io_port_generate_reset()
131 gpiod_direction_output(fhci->gpiods[GPIO_USBOE], 0); in fhci_io_port_generate_reset()
132 gpiod_direction_output(fhci->gpiods[GPIO_USBTP], 0); in fhci_io_port_generate_reset()
133 gpiod_direction_output(fhci->gpiods[GPIO_USBTN], 0); in fhci_io_port_generate_reset()
137 qe_pin_set_dedicated(fhci->pins[PIN_USBOE]); in fhci_io_port_generate_reset()
138 qe_pin_set_dedicated(fhci->pins[PIN_USBTP]); in fhci_io_port_generate_reset()
139 qe_pin_set_dedicated(fhci->pins[PIN_USBTN]); in fhci_io_port_generate_reset()
141 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_io_port_generate_reset()
148 struct fhci_hcd *fhci = usb->fhci; in fhci_port_reset() local
152 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_port_reset()
154 fhci_stop_sof_timer(fhci); in fhci_port_reset()
156 mode = in_8(&fhci->regs->usb_usmod); in fhci_port_reset()
157 out_8(&fhci->regs->usb_usmod, mode & (~USB_MODE_EN)); in fhci_port_reset()
160 mask = in_be16(&fhci->regs->usb_usbmr); in fhci_port_reset()
161 out_be16(&fhci->regs->usb_usbmr, mask & (~USB_E_IDLE_MASK)); in fhci_port_reset()
163 fhci_io_port_generate_reset(fhci); in fhci_port_reset()
166 out_be16(&fhci->regs->usb_usbmr, mask); in fhci_port_reset()
169 mode = in_8(&fhci->regs->usb_usmod); in fhci_port_reset()
170 out_8(&fhci->regs->usb_usmod, mode | USB_MODE_EN); in fhci_port_reset()
171 fhci_start_sof_timer(fhci); in fhci_port_reset()
173 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_port_reset()
178 struct fhci_hcd *fhci = hcd_to_fhci(hcd); in fhci_hub_status_data() local
182 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_hub_status_data()
184 spin_lock_irqsave(&fhci->lock, flags); in fhci_hub_status_data()
186 if (fhci->vroot_hub->port.wPortChange & (USB_PORT_STAT_C_CONNECTION | in fhci_hub_status_data()
191 fhci_dbg(fhci, "-- %s\n", __func__); in fhci_hub_status_data()
194 spin_unlock_irqrestore(&fhci->lock, flags); in fhci_hub_status_data()
196 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_hub_status_data()
204 struct fhci_hcd *fhci = hcd_to_fhci(hcd); in fhci_hub_control() local
210 spin_lock_irqsave(&fhci->lock, flags); in fhci_hub_control()
212 fhci_dbg(fhci, "-> %s\n", __func__); in fhci_hub_control()
225 fhci->vroot_hub->feature &= (1 << wValue); in fhci_hub_control()
229 fhci->vroot_hub->port.wPortStatus &= in fhci_hub_control()
231 fhci_port_disable(fhci); in fhci_hub_control()
234 fhci->vroot_hub->port.wPortChange &= in fhci_hub_control()
238 fhci->vroot_hub->port.wPortStatus &= in fhci_hub_control()
240 fhci_stop_sof_timer(fhci); in fhci_hub_control()
243 fhci->vroot_hub->port.wPortChange &= in fhci_hub_control()
247 fhci->vroot_hub->port.wPortStatus &= in fhci_hub_control()
249 fhci_config_transceiver(fhci, FHCI_PORT_POWER_OFF); in fhci_hub_control()
252 fhci->vroot_hub->port.wPortChange &= in fhci_hub_control()
256 fhci->vroot_hub->port.wPortChange &= in fhci_hub_control()
260 fhci->vroot_hub->port.wPortChange &= in fhci_hub_control()
273 cpu_to_le16(fhci->vroot_hub->hub.wHubStatus); in fhci_hub_control()
275 cpu_to_le16(fhci->vroot_hub->hub.wHubChange); in fhci_hub_control()
280 cpu_to_le16(fhci->vroot_hub->port.wPortStatus); in fhci_hub_control()
282 cpu_to_le16(fhci->vroot_hub->port.wPortChange); in fhci_hub_control()
294 fhci->vroot_hub->feature |= (1 << wValue); in fhci_hub_control()
298 fhci->vroot_hub->port.wPortStatus |= in fhci_hub_control()
300 fhci_port_enable(fhci->usb_lld); in fhci_hub_control()
303 fhci->vroot_hub->port.wPortStatus |= in fhci_hub_control()
305 fhci_stop_sof_timer(fhci); in fhci_hub_control()
308 fhci->vroot_hub->port.wPortStatus |= in fhci_hub_control()
310 fhci_port_reset(fhci->usb_lld); in fhci_hub_control()
311 fhci->vroot_hub->port.wPortStatus |= in fhci_hub_control()
313 fhci->vroot_hub->port.wPortStatus &= in fhci_hub_control()
317 fhci->vroot_hub->port.wPortStatus |= in fhci_hub_control()
319 fhci_config_transceiver(fhci, FHCI_PORT_WAITING); in fhci_hub_control()
330 fhci_dbg(fhci, "<- %s\n", __func__); in fhci_hub_control()
332 spin_unlock_irqrestore(&fhci->lock, flags); in fhci_hub_control()