• Home
  • Raw
  • Download

Lines Matching full:hub

3  * Driver for SMSC USB3503 USB 2.0 hub controller driver
56 static int usb3503_reset(struct usb3503 *hub, int state) in usb3503_reset() argument
58 if (!state && gpio_is_valid(hub->gpio_connect)) in usb3503_reset()
59 gpio_set_value_cansleep(hub->gpio_connect, 0); in usb3503_reset()
61 if (gpio_is_valid(hub->gpio_reset)) in usb3503_reset()
62 gpio_set_value_cansleep(hub->gpio_reset, state); in usb3503_reset()
64 /* Wait T_HUBINIT == 4ms for hub logic to stabilize */ in usb3503_reset()
71 static int usb3503_connect(struct usb3503 *hub) in usb3503_connect() argument
73 struct device *dev = hub->dev; in usb3503_connect()
76 usb3503_reset(hub, 1); in usb3503_connect()
78 if (hub->regmap) { in usb3503_connect()
80 err = regmap_write(hub->regmap, USB3503_SP_ILOCK, in usb3503_connect()
89 if (hub->port_off_mask) { in usb3503_connect()
90 err = regmap_update_bits(hub->regmap, USB3503_PDS, in usb3503_connect()
91 hub->port_off_mask, in usb3503_connect()
92 hub->port_off_mask); in usb3503_connect()
100 err = regmap_update_bits(hub->regmap, USB3503_CFG1, in usb3503_connect()
108 /* SP_LOCK: clear connect_n, config_n for hub connect */ in usb3503_connect()
109 err = regmap_update_bits(hub->regmap, USB3503_SP_ILOCK, in usb3503_connect()
118 if (gpio_is_valid(hub->gpio_connect)) in usb3503_connect()
119 gpio_set_value_cansleep(hub->gpio_connect, 1); in usb3503_connect()
121 hub->mode = USB3503_MODE_HUB; in usb3503_connect()
122 dev_info(dev, "switched to HUB mode\n"); in usb3503_connect()
127 static int usb3503_switch_mode(struct usb3503 *hub, enum usb3503_mode mode) in usb3503_switch_mode() argument
129 struct device *dev = hub->dev; in usb3503_switch_mode()
134 err = usb3503_connect(hub); in usb3503_switch_mode()
138 usb3503_reset(hub, 0); in usb3503_switch_mode()
158 static int usb3503_probe(struct usb3503 *hub) in usb3503_probe() argument
160 struct device *dev = hub->dev; in usb3503_probe()
169 hub->port_off_mask = pdata->port_off_mask; in usb3503_probe()
170 hub->gpio_intn = pdata->gpio_intn; in usb3503_probe()
171 hub->gpio_connect = pdata->gpio_connect; in usb3503_probe()
172 hub->gpio_reset = pdata->gpio_reset; in usb3503_probe()
173 hub->mode = pdata->initial_mode; in usb3503_probe()
177 hub->port_off_mask = 0; in usb3503_probe()
185 hub->secondary_ref_clk = 0; in usb3503_probe()
191 hub->secondary_ref_clk = 1; in usb3503_probe()
209 hub->clk = clk; in usb3503_probe()
212 err = clk_set_rate(hub->clk, rate); in usb3503_probe()
221 err = clk_prepare_enable(hub->clk); in usb3503_probe()
235 hub->port_off_mask |= (1 << port); in usb3503_probe()
239 hub->gpio_intn = of_get_named_gpio(np, "intn-gpios", 0); in usb3503_probe()
240 if (hub->gpio_intn == -EPROBE_DEFER) in usb3503_probe()
242 hub->gpio_connect = of_get_named_gpio(np, "connect-gpios", 0); in usb3503_probe()
243 if (hub->gpio_connect == -EPROBE_DEFER) in usb3503_probe()
245 hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0); in usb3503_probe()
246 if (hub->gpio_reset == -EPROBE_DEFER) in usb3503_probe()
249 hub->mode = mode; in usb3503_probe()
252 if (hub->port_off_mask && !hub->regmap) in usb3503_probe()
255 if (gpio_is_valid(hub->gpio_intn)) { in usb3503_probe()
256 int val = hub->secondary_ref_clk ? GPIOF_OUT_INIT_LOW : in usb3503_probe()
258 err = devm_gpio_request_one(dev, hub->gpio_intn, val, in usb3503_probe()
263 hub->gpio_intn, err); in usb3503_probe()
268 if (gpio_is_valid(hub->gpio_connect)) { in usb3503_probe()
269 err = devm_gpio_request_one(dev, hub->gpio_connect, in usb3503_probe()
274 hub->gpio_connect, err); in usb3503_probe()
279 if (gpio_is_valid(hub->gpio_reset)) { in usb3503_probe()
280 err = devm_gpio_request_one(dev, hub->gpio_reset, in usb3503_probe()
287 hub->gpio_reset, err); in usb3503_probe()
292 usb3503_switch_mode(hub, hub->mode); in usb3503_probe()
295 (hub->mode == USB3503_MODE_HUB) ? "hub" : "standby"); in usb3503_probe()
303 struct usb3503 *hub; in usb3503_i2c_probe() local
306 hub = devm_kzalloc(&i2c->dev, sizeof(struct usb3503), GFP_KERNEL); in usb3503_i2c_probe()
307 if (!hub) in usb3503_i2c_probe()
310 i2c_set_clientdata(i2c, hub); in usb3503_i2c_probe()
311 hub->regmap = devm_regmap_init_i2c(i2c, &usb3503_regmap_config); in usb3503_i2c_probe()
312 if (IS_ERR(hub->regmap)) { in usb3503_i2c_probe()
313 err = PTR_ERR(hub->regmap); in usb3503_i2c_probe()
317 hub->dev = &i2c->dev; in usb3503_i2c_probe()
319 return usb3503_probe(hub); in usb3503_i2c_probe()
324 struct usb3503 *hub; in usb3503_i2c_remove() local
326 hub = i2c_get_clientdata(i2c); in usb3503_i2c_remove()
327 if (hub->clk) in usb3503_i2c_remove()
328 clk_disable_unprepare(hub->clk); in usb3503_i2c_remove()
335 struct usb3503 *hub; in usb3503_platform_probe() local
337 hub = devm_kzalloc(&pdev->dev, sizeof(struct usb3503), GFP_KERNEL); in usb3503_platform_probe()
338 if (!hub) in usb3503_platform_probe()
340 hub->dev = &pdev->dev; in usb3503_platform_probe()
341 platform_set_drvdata(pdev, hub); in usb3503_platform_probe()
343 return usb3503_probe(hub); in usb3503_platform_probe()
348 struct usb3503 *hub; in usb3503_platform_remove() local
350 hub = platform_get_drvdata(pdev); in usb3503_platform_remove()
351 if (hub->clk) in usb3503_platform_remove()
352 clk_disable_unprepare(hub->clk); in usb3503_platform_remove()
361 struct usb3503 *hub = i2c_get_clientdata(client); in usb3503_i2c_suspend() local
363 usb3503_switch_mode(hub, USB3503_MODE_STANDBY); in usb3503_i2c_suspend()
365 if (hub->clk) in usb3503_i2c_suspend()
366 clk_disable_unprepare(hub->clk); in usb3503_i2c_suspend()
374 struct usb3503 *hub = i2c_get_clientdata(client); in usb3503_i2c_resume() local
376 if (hub->clk) in usb3503_i2c_resume()
377 clk_prepare_enable(hub->clk); in usb3503_i2c_resume()
379 usb3503_switch_mode(hub, hub->mode); in usb3503_i2c_resume()
448 MODULE_DESCRIPTION("USB3503 USB HUB driver");