Lines Matching refs:hub

3  * Driver for SMSC USB3503 USB 2.0 hub controller driver
56 static int usb3503_connect(struct usb3503 *hub)
58 struct device *dev = hub->dev;
61 if (hub->regmap) {
63 err = regmap_write(hub->regmap, USB3503_SP_ILOCK,
72 if (hub->port_off_mask) {
73 err = regmap_update_bits(hub->regmap, USB3503_PDS,
74 hub->port_off_mask,
75 hub->port_off_mask);
83 err = regmap_update_bits(hub->regmap, USB3503_CFG1,
91 /* SP_LOCK: clear connect_n, config_n for hub connect */
92 err = regmap_update_bits(hub->regmap, USB3503_SP_ILOCK,
101 if (hub->connect)
102 gpiod_set_value_cansleep(hub->connect, 1);
104 hub->mode = USB3503_MODE_HUB;
110 static int usb3503_switch_mode(struct usb3503 *hub, enum usb3503_mode mode)
112 struct device *dev = hub->dev;
137 if (!conn && hub->connect)
138 gpiod_set_value_cansleep(hub->connect, 0);
140 if (hub->reset)
141 gpiod_set_value_cansleep(hub->reset, rst);
143 if (hub->bypass)
144 gpiod_set_value_cansleep(hub->bypass, bypass);
147 /* Wait T_HUBINIT == 4ms for hub logic to stabilize */
149 return usb3503_connect(hub);
162 static int usb3503_probe(struct usb3503 *hub)
164 struct device *dev = hub->dev;
175 hub->port_off_mask = pdata->port_off_mask;
176 hub->mode = pdata->initial_mode;
179 hub->port_off_mask = 0;
187 hub->secondary_ref_clk = 0;
193 hub->secondary_ref_clk = 1;
203 hub->clk = devm_clk_get_optional(dev, "refclk");
204 if (IS_ERR(hub->clk)) {
206 PTR_ERR(hub->clk));
207 return PTR_ERR(hub->clk);
211 err = clk_set_rate(hub->clk, rate);
220 err = clk_prepare_enable(hub->clk);
233 hub->port_off_mask |= (1 << port);
238 hub->mode = mode;
241 if (hub->secondary_ref_clk)
245 hub->intn = devm_gpiod_get_optional(dev, "intn", flags);
246 if (IS_ERR(hub->intn)) {
247 err = PTR_ERR(hub->intn);
250 if (hub->intn)
251 gpiod_set_consumer_name(hub->intn, "usb3503 intn");
253 hub->connect = devm_gpiod_get_optional(dev, "connect", GPIOD_OUT_LOW);
254 if (IS_ERR(hub->connect)) {
255 err = PTR_ERR(hub->connect);
258 if (hub->connect)
259 gpiod_set_consumer_name(hub->connect, "usb3503 connect");
261 hub->bypass = devm_gpiod_get_optional(dev, "bypass", GPIOD_OUT_HIGH);
262 if (IS_ERR(hub->bypass)) {
263 err = PTR_ERR(hub->bypass);
266 if (hub->bypass)
267 gpiod_set_consumer_name(hub->bypass, "usb3503 bypass");
269 hub->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
270 if (IS_ERR(hub->reset)) {
271 err = PTR_ERR(hub->reset);
274 if (hub->reset) {
277 gpiod_set_consumer_name(hub->reset, "usb3503 reset");
280 if (hub->port_off_mask && !hub->regmap)
283 usb3503_switch_mode(hub, hub->mode);
286 (hub->mode == USB3503_MODE_HUB) ? "hub" : "standby");
292 clk_disable_unprepare(hub->clk);
298 struct usb3503 *hub;
301 hub = devm_kzalloc(&i2c->dev, sizeof(struct usb3503), GFP_KERNEL);
302 if (!hub)
305 i2c_set_clientdata(i2c, hub);
306 hub->regmap = devm_regmap_init_i2c(i2c, &usb3503_regmap_config);
307 if (IS_ERR(hub->regmap)) {
308 err = PTR_ERR(hub->regmap);
312 hub->dev = &i2c->dev;
314 return usb3503_probe(hub);
319 struct usb3503 *hub;
321 hub = i2c_get_clientdata(i2c);
322 clk_disable_unprepare(hub->clk);
327 struct usb3503 *hub;
329 hub = devm_kzalloc(&pdev->dev, sizeof(struct usb3503), GFP_KERNEL);
330 if (!hub)
332 hub->dev = &pdev->dev;
333 platform_set_drvdata(pdev, hub);
335 return usb3503_probe(hub);
340 struct usb3503 *hub;
342 hub = platform_get_drvdata(pdev);
343 clk_disable_unprepare(hub->clk);
346 static int __maybe_unused usb3503_suspend(struct usb3503 *hub)
348 usb3503_switch_mode(hub, USB3503_MODE_STANDBY);
349 clk_disable_unprepare(hub->clk);
354 static int __maybe_unused usb3503_resume(struct usb3503 *hub)
356 clk_prepare_enable(hub->clk);
357 usb3503_switch_mode(hub, hub->mode);