Lines Matching defs:tusb
72 static int tusb1210_ulpi_write(struct tusb1210 *tusb, u8 reg, u8 val)
76 ret = ulpi_write(tusb->ulpi, reg, val);
78 dev_err(&tusb->ulpi->dev, "error %d writing val 0x%02x to reg 0x%02x\n",
84 static int tusb1210_ulpi_read(struct tusb1210 *tusb, u8 reg, u8 *val)
88 ret = ulpi_read(tusb->ulpi, reg);
93 dev_err(&tusb->ulpi->dev, "error %d reading reg 0x%02x\n", ret, reg);
101 struct tusb1210 *tusb = phy_get_drvdata(phy);
103 gpiod_set_value_cansleep(tusb->gpio_reset, 1);
104 gpiod_set_value_cansleep(tusb->gpio_cs, 1);
109 tusb1210_ulpi_write(tusb, TUSB1210_VENDOR_SPECIFIC2, tusb->vendor_specific2);
116 struct tusb1210 *tusb = phy_get_drvdata(phy);
118 gpiod_set_value_cansleep(tusb->gpio_reset, 0);
119 gpiod_set_value_cansleep(tusb->gpio_cs, 0);
126 struct tusb1210 *tusb = phy_get_drvdata(phy);
130 ret = tusb1210_ulpi_read(tusb, ULPI_OTG_CTRL, ®);
140 tusb1210_ulpi_write(tusb, ULPI_OTG_CTRL, reg);
147 tusb1210_ulpi_write(tusb, ULPI_OTG_CTRL, reg);
155 tusb->otg_ctrl = reg;
156 return tusb1210_ulpi_write(tusb, ULPI_OTG_CTRL, reg);
171 static void tusb1210_reset(struct tusb1210 *tusb)
173 gpiod_set_value_cansleep(tusb->gpio_reset, 0);
175 gpiod_set_value_cansleep(tusb->gpio_reset, 1);
178 static void tusb1210_chg_det_set_type(struct tusb1210 *tusb,
181 dev_dbg(&tusb->ulpi->dev, "charger type: %d\n", type);
182 tusb->chg_type = type;
183 tusb->chg_det_retries = 0;
184 power_supply_changed(tusb->psy);
187 static void tusb1210_chg_det_set_state(struct tusb1210 *tusb,
192 dev_dbg(&tusb->ulpi->dev, "chg_det new state %s in %d ms\n",
195 tusb->chg_det_state = new_state;
196 mod_delayed_work(system_long_wq, &tusb->chg_det_work,
200 static void tusb1210_chg_det_handle_ulpi_error(struct tusb1210 *tusb)
202 tusb1210_reset(tusb);
203 if (tusb->chg_det_retries < TUSB1210_CHG_DET_MAX_RETRIES) {
204 tusb->chg_det_retries++;
205 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_START_DET,
208 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_FINISH_DET,
232 static bool tusb1210_get_online(struct tusb1210 *tusb)
237 for (i = 0; i < ARRAY_SIZE(tusb1210_chargers) && !tusb->charger; i++)
238 tusb->charger = power_supply_get_by_name(tusb1210_chargers[i]);
240 if (!tusb->charger)
243 if (power_supply_get_property(tusb->charger, POWER_SUPPLY_PROP_ONLINE, &val))
251 struct tusb1210 *tusb = container_of(work, struct tusb1210, chg_det_work.work);
252 bool vbus_present = tusb1210_get_online(tusb);
256 dev_dbg(&tusb->ulpi->dev, "chg_det state %s vbus_present %d\n",
257 tusb1210_chg_det_states[tusb->chg_det_state], vbus_present);
259 switch (tusb->chg_det_state) {
261 tusb->chg_type = POWER_SUPPLY_USB_TYPE_UNKNOWN;
262 tusb->chg_det_retries = 0;
264 ret = pm_runtime_resume_and_get(tusb->ulpi->dev.parent);
266 dev_err(&tusb->ulpi->dev, "error %d runtime-resuming\n", ret);
268 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_CONNECTED, 0);
271 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_START_DET, 0);
279 mutex_lock(&tusb->phy->mutex);
280 ret = tusb1210_ulpi_write(tusb, TUSB1211_VENDOR_SPECIFIC3_SET,
282 mutex_unlock(&tusb->phy->mutex);
284 tusb1210_chg_det_handle_ulpi_error(tusb);
289 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_READ_DET, 400);
292 mutex_lock(&tusb->phy->mutex);
293 ret = tusb1210_ulpi_read(tusb, TUSB1211_POWER_CONTROL, &val);
294 mutex_unlock(&tusb->phy->mutex);
296 tusb1210_chg_det_handle_ulpi_error(tusb);
301 tusb1210_chg_det_set_type(tusb, POWER_SUPPLY_USB_TYPE_DCP);
303 tusb1210_chg_det_set_type(tusb, POWER_SUPPLY_USB_TYPE_SDP);
305 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_FINISH_DET, 0);
308 mutex_lock(&tusb->phy->mutex);
311 ret = tusb1210_ulpi_write(tusb, TUSB1211_POWER_CONTROL_SET,
315 ret |= tusb1210_ulpi_write(tusb, TUSB1211_POWER_CONTROL_CLEAR,
319 ret |= tusb1210_ulpi_write(tusb, TUSB1211_VENDOR_SPECIFIC3_CLEAR,
324 tusb1210_reset(tusb);
329 tusb1210_ulpi_write(tusb, ULPI_OTG_CTRL, tusb->otg_ctrl);
330 tusb1210_ulpi_write(tusb, TUSB1210_VENDOR_SPECIFIC2,
331 tusb->vendor_specific2);
333 mutex_unlock(&tusb->phy->mutex);
335 pm_runtime_put(tusb->ulpi->dev.parent);
336 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_CONNECTED, 0);
340 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_DISCONNECTING, 0);
349 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_DISCONNECTING_DONE, 800);
356 tusb1210_reset(tusb);
357 tusb1210_chg_det_set_type(tusb, POWER_SUPPLY_USB_TYPE_UNKNOWN);
358 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_DISCONNECTED, 0);
362 tusb1210_chg_det_set_state(tusb, TUSB1210_CHG_DET_CONNECTING, 0);
370 struct tusb1210 *tusb = container_of(nb, struct tusb1210, psy_nb);
373 if (psy != tusb->psy && psy->desc->type == POWER_SUPPLY_TYPE_USB)
374 queue_delayed_work(system_long_wq, &tusb->chg_det_work, 0);
383 struct tusb1210 *tusb = power_supply_get_drvdata(psy);
387 val->intval = tusb1210_get_online(tusb);
390 val->intval = tusb->chg_type;
393 if (tusb->chg_type == POWER_SUPPLY_USB_TYPE_DCP)
428 static void tusb1210_probe_charger_detect(struct tusb1210 *tusb)
430 struct power_supply_config psy_cfg = { .drv_data = tusb };
431 struct device *dev = &tusb->ulpi->dev;
437 if (tusb->ulpi->id.product != 0x1508) {
442 ret = tusb1210_ulpi_read(tusb, ULPI_OTG_CTRL, &tusb->otg_ctrl);
446 tusb->psy = power_supply_register(dev, &tusb1210_psy_desc, &psy_cfg);
447 if (IS_ERR(tusb->psy))
454 tusb->chg_det_state = TUSB1210_CHG_DET_DISCONNECTED;
455 INIT_DELAYED_WORK(&tusb->chg_det_work, tusb1210_chg_det_work);
456 queue_delayed_work(system_long_wq, &tusb->chg_det_work, 2 * HZ);
458 tusb->psy_nb.notifier_call = tusb1210_psy_notifier;
459 power_supply_reg_notifier(&tusb->psy_nb);
462 static void tusb1210_remove_charger_detect(struct tusb1210 *tusb)
465 if (!IS_ERR_OR_NULL(tusb->psy)) {
466 power_supply_unreg_notifier(&tusb->psy_nb);
467 cancel_delayed_work_sync(&tusb->chg_det_work);
468 power_supply_unregister(tusb->psy);
471 if (tusb->charger)
472 power_supply_put(tusb->charger);
475 static void tusb1210_probe_charger_detect(struct tusb1210 *tusb) { }
476 static void tusb1210_remove_charger_detect(struct tusb1210 *tusb) { }
488 struct tusb1210 *tusb;
492 tusb = devm_kzalloc(&ulpi->dev, sizeof(*tusb), GFP_KERNEL);
493 if (!tusb)
496 tusb->ulpi = ulpi;
498 tusb->gpio_reset = devm_gpiod_get_optional(&ulpi->dev, "reset",
500 if (IS_ERR(tusb->gpio_reset))
501 return PTR_ERR(tusb->gpio_reset);
503 gpiod_set_value_cansleep(tusb->gpio_reset, 1);
505 tusb->gpio_cs = devm_gpiod_get_optional(&ulpi->dev, "cs",
507 if (IS_ERR(tusb->gpio_cs))
508 return PTR_ERR(tusb->gpio_cs);
510 gpiod_set_value_cansleep(tusb->gpio_cs, 1);
517 ret = tusb1210_ulpi_read(tusb, TUSB1210_VENDOR_SPECIFIC2, ®);
533 ret = tusb1210_ulpi_write(tusb, TUSB1210_VENDOR_SPECIFIC2, reg);
537 tusb->vendor_specific2 = reg;
539 tusb1210_probe_charger_detect(tusb);
541 tusb->phy = ulpi_phy_create(ulpi, &phy_ops);
542 if (IS_ERR(tusb->phy)) {
543 ret = PTR_ERR(tusb->phy);
547 phy_set_drvdata(tusb->phy, tusb);
548 ulpi_set_drvdata(ulpi, tusb);
552 tusb1210_remove_charger_detect(tusb);
558 struct tusb1210 *tusb = ulpi_get_drvdata(ulpi);
560 ulpi_phy_destroy(ulpi, tusb->phy);
561 tusb1210_remove_charger_detect(tusb);