Lines Matching refs:hub
69 static int usb3503_reset(struct usb3503 *hub, int state) in usb3503_reset() argument
71 if (!state && gpio_is_valid(hub->gpio_connect)) in usb3503_reset()
72 gpio_set_value_cansleep(hub->gpio_connect, 0); in usb3503_reset()
74 if (gpio_is_valid(hub->gpio_reset)) in usb3503_reset()
75 gpio_set_value_cansleep(hub->gpio_reset, state); in usb3503_reset()
84 static int usb3503_connect(struct usb3503 *hub) in usb3503_connect() argument
86 struct device *dev = hub->dev; in usb3503_connect()
89 usb3503_reset(hub, 1); in usb3503_connect()
91 if (hub->regmap) { in usb3503_connect()
93 err = regmap_write(hub->regmap, USB3503_SP_ILOCK, in usb3503_connect()
102 if (hub->port_off_mask) { in usb3503_connect()
103 err = regmap_update_bits(hub->regmap, USB3503_PDS, in usb3503_connect()
104 hub->port_off_mask, in usb3503_connect()
105 hub->port_off_mask); in usb3503_connect()
113 err = regmap_update_bits(hub->regmap, USB3503_CFG1, in usb3503_connect()
122 err = regmap_update_bits(hub->regmap, USB3503_SP_ILOCK, in usb3503_connect()
131 if (gpio_is_valid(hub->gpio_connect)) in usb3503_connect()
132 gpio_set_value_cansleep(hub->gpio_connect, 1); in usb3503_connect()
134 hub->mode = USB3503_MODE_HUB; in usb3503_connect()
140 static int usb3503_switch_mode(struct usb3503 *hub, enum usb3503_mode mode) in usb3503_switch_mode() argument
142 struct device *dev = hub->dev; in usb3503_switch_mode()
147 err = usb3503_connect(hub); in usb3503_switch_mode()
151 usb3503_reset(hub, 0); in usb3503_switch_mode()
171 static int usb3503_probe(struct usb3503 *hub) in usb3503_probe() argument
173 struct device *dev = hub->dev; in usb3503_probe()
182 hub->port_off_mask = pdata->port_off_mask; in usb3503_probe()
183 hub->gpio_intn = pdata->gpio_intn; in usb3503_probe()
184 hub->gpio_connect = pdata->gpio_connect; in usb3503_probe()
185 hub->gpio_reset = pdata->gpio_reset; in usb3503_probe()
186 hub->mode = pdata->initial_mode; in usb3503_probe()
190 hub->port_off_mask = 0; in usb3503_probe()
198 hub->secondary_ref_clk = 0; in usb3503_probe()
204 hub->secondary_ref_clk = 1; in usb3503_probe()
222 hub->clk = clk; in usb3503_probe()
225 err = clk_set_rate(hub->clk, rate); in usb3503_probe()
234 err = clk_prepare_enable(hub->clk); in usb3503_probe()
248 hub->port_off_mask |= (1 << port); in usb3503_probe()
252 hub->gpio_intn = of_get_named_gpio(np, "intn-gpios", 0); in usb3503_probe()
253 if (hub->gpio_intn == -EPROBE_DEFER) in usb3503_probe()
255 hub->gpio_connect = of_get_named_gpio(np, "connect-gpios", 0); in usb3503_probe()
256 if (hub->gpio_connect == -EPROBE_DEFER) in usb3503_probe()
258 hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0); in usb3503_probe()
259 if (hub->gpio_reset == -EPROBE_DEFER) in usb3503_probe()
262 hub->mode = mode; in usb3503_probe()
265 if (hub->port_off_mask && !hub->regmap) in usb3503_probe()
268 if (gpio_is_valid(hub->gpio_intn)) { in usb3503_probe()
269 int val = hub->secondary_ref_clk ? GPIOF_OUT_INIT_LOW : in usb3503_probe()
271 err = devm_gpio_request_one(dev, hub->gpio_intn, val, in usb3503_probe()
276 hub->gpio_intn, err); in usb3503_probe()
281 if (gpio_is_valid(hub->gpio_connect)) { in usb3503_probe()
282 err = devm_gpio_request_one(dev, hub->gpio_connect, in usb3503_probe()
287 hub->gpio_connect, err); in usb3503_probe()
292 if (gpio_is_valid(hub->gpio_reset)) { in usb3503_probe()
293 err = devm_gpio_request_one(dev, hub->gpio_reset, in usb3503_probe()
298 hub->gpio_reset, err); in usb3503_probe()
303 usb3503_switch_mode(hub, hub->mode); in usb3503_probe()
306 (hub->mode == USB3503_MODE_HUB) ? "hub" : "standby"); in usb3503_probe()
314 struct usb3503 *hub; in usb3503_i2c_probe() local
317 hub = devm_kzalloc(&i2c->dev, sizeof(struct usb3503), GFP_KERNEL); in usb3503_i2c_probe()
318 if (!hub) in usb3503_i2c_probe()
321 i2c_set_clientdata(i2c, hub); in usb3503_i2c_probe()
322 hub->regmap = devm_regmap_init_i2c(i2c, &usb3503_regmap_config); in usb3503_i2c_probe()
323 if (IS_ERR(hub->regmap)) { in usb3503_i2c_probe()
324 err = PTR_ERR(hub->regmap); in usb3503_i2c_probe()
328 hub->dev = &i2c->dev; in usb3503_i2c_probe()
330 return usb3503_probe(hub); in usb3503_i2c_probe()
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()
342 return usb3503_probe(hub); in usb3503_platform_probe()
349 struct usb3503 *hub = i2c_get_clientdata(client); in usb3503_i2c_suspend() local
351 usb3503_switch_mode(hub, USB3503_MODE_STANDBY); in usb3503_i2c_suspend()
353 if (hub->clk) in usb3503_i2c_suspend()
354 clk_disable_unprepare(hub->clk); in usb3503_i2c_suspend()
362 struct usb3503 *hub = i2c_get_clientdata(client); in usb3503_i2c_resume() local
364 if (hub->clk) in usb3503_i2c_resume()
365 clk_prepare_enable(hub->clk); in usb3503_i2c_resume()
367 usb3503_switch_mode(hub, hub->mode); in usb3503_i2c_resume()