Lines Matching defs:isp
98 static void enable_vbus_draw(struct isp1301 *isp, unsigned mA)
107 static void enable_vbus_draw(struct isp1301 *isp, unsigned mA)
117 static void enable_vbus_source(struct isp1301 *isp)
126 static inline void notresponding(struct isp1301 *isp)
139 isp1301_get_u8(struct isp1301 *isp, u8 reg)
141 return i2c_smbus_read_byte_data(isp->client, reg + 0);
145 isp1301_get_u16(struct isp1301 *isp, u8 reg)
147 return i2c_smbus_read_word_data(isp->client, reg);
151 isp1301_set_bits(struct isp1301 *isp, u8 reg, u8 bits)
153 return i2c_smbus_write_byte_data(isp->client, reg + 0, bits);
157 isp1301_clear_bits(struct isp1301 *isp, u8 reg, u8 bits)
159 return i2c_smbus_write_byte_data(isp->client, reg + 1, bits);
222 static inline const char *state_name(struct isp1301 *isp)
224 return usb_otg_state_string(isp->phy.otg->state);
237 static void power_down(struct isp1301 *isp)
239 isp->phy.otg->state = OTG_STATE_UNDEFINED;
241 // isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
242 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND);
244 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_ID_PULLDOWN);
245 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
248 static void __maybe_unused power_up(struct isp1301 *isp)
250 // isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
251 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND);
256 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
261 static int host_suspend(struct isp1301 *isp)
268 if (!isp->phy.otg->host)
274 dev = isp->phy.otg->host->controller;
279 static int host_resume(struct isp1301 *isp)
286 if (!isp->phy.otg->host)
289 dev = isp->phy.otg->host->controller;
294 static int gadget_suspend(struct isp1301 *isp)
296 isp->phy.otg->gadget->b_hnp_enable = 0;
297 isp->phy.otg->gadget->a_hnp_support = 0;
298 isp->phy.otg->gadget->a_alt_hnp_support = 0;
299 return usb_gadget_vbus_disconnect(isp->phy.otg->gadget);
311 static void isp1301_defer_work(struct isp1301 *isp, int work)
315 if (isp && !test_and_set_bit(work, &isp->todo)) {
316 (void) get_device(&isp->client->dev);
317 status = schedule_work(&isp->work);
318 if (!status && !isp->working)
319 dev_vdbg(&isp->client->dev,
325 static void a_idle(struct isp1301 *isp, const char *tag)
329 if (isp->phy.otg->state == OTG_STATE_A_IDLE)
332 isp->phy.otg->default_a = 1;
333 if (isp->phy.otg->host) {
334 isp->phy.otg->host->is_b_host = 0;
335 host_suspend(isp);
337 if (isp->phy.otg->gadget) {
338 isp->phy.otg->gadget->is_a_peripheral = 1;
339 gadget_suspend(isp);
341 isp->phy.otg->state = OTG_STATE_A_IDLE;
344 isp->last_otg_ctrl = l;
345 pr_debug(" --> %s/%s\n", state_name(isp), tag);
349 static void b_idle(struct isp1301 *isp, const char *tag)
353 if (isp->phy.otg->state == OTG_STATE_B_IDLE)
356 isp->phy.otg->default_a = 0;
357 if (isp->phy.otg->host) {
358 isp->phy.otg->host->is_b_host = 1;
359 host_suspend(isp);
361 if (isp->phy.otg->gadget) {
362 isp->phy.otg->gadget->is_a_peripheral = 0;
363 gadget_suspend(isp);
365 isp->phy.otg->state = OTG_STATE_B_IDLE;
368 isp->last_otg_ctrl = l;
369 pr_debug(" --> %s/%s\n", state_name(isp), tag);
373 dump_regs(struct isp1301 *isp, const char *label)
375 u8 ctrl = isp1301_get_u8(isp, ISP1301_OTG_CONTROL_1);
376 u8 status = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
377 u8 src = isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE);
380 omap_readl(OTG_CTRL), label, state_name(isp),
399 static void check_state(struct isp1301 *isp, const char *tag)
464 if (isp->phy.otg->state == state && !extra)
467 usb_otg_state_string(state), fsm, state_name(isp),
473 static inline void check_state(struct isp1301 *isp, const char *tag) { }
478 static void update_otg1(struct isp1301 *isp, u8 int_src)
488 else if (isp->phy.otg->state == OTG_STATE_A_WAIT_VFALL) {
489 a_idle(isp, "vfall");
495 if (isp->phy.otg->state == OTG_STATE_B_IDLE
496 || isp->phy.otg->state
498 a_idle(isp, "init");
503 if (isp->phy.otg->state == OTG_STATE_A_IDLE
504 || isp->phy.otg->state == OTG_STATE_UNDEFINED) {
505 b_idle(isp, "init");
513 static void update_otg2(struct isp1301 *isp, u8 otg_status)
528 static void otg_update_isp(struct isp1301 *isp)
534 otg_change = otg_ctrl ^ isp->last_otg_ctrl;
535 isp->last_otg_ctrl = otg_ctrl;
538 switch (isp->phy.otg->state) {
544 if (isp->phy.otg->gadget->b_hnp_enable) {
545 isp->phy.otg->state = OTG_STATE_B_WAIT_ACON;
572 if (!(isp->phy.otg->host))
575 switch (isp->phy.otg->state) {
582 notresponding(isp);
586 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
595 isp->phy.otg->state = OTG_STATE_A_WAIT_VRISE;
608 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, set);
609 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, clr);
615 switch (isp->phy.otg->state) {
619 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
625 isp->phy.otg->state = OTG_STATE_A_PERIPHERAL;
636 check_state(isp, __func__);
637 dump_regs(isp, "otg->isp1301");
645 struct isp1301 *isp = _isp;
646 struct usb_otg *otg = isp->phy.otg;
651 isp1301_defer_work(isp, WORK_UPDATE_ISP);
657 notresponding(isp);
663 if (isp->phy.otg->state == OTG_STATE_B_SRP_INIT)
664 b_idle(isp, "srp_timeout");
672 state_name(isp), omap_readl(OTG_CTRL));
673 notresponding(isp);
681 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
690 state_name(isp), omap_readl(OTG_CTRL));
692 isp1301_defer_work(isp, WORK_UPDATE_OTG);
693 switch (isp->phy.otg->state) {
697 isp1301_defer_work(isp, WORK_HOST_RESUME);
718 state_name(isp), otg_ctrl);
719 notresponding(isp);
724 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
733 state_name(isp), otg_irq, otg_ctrl);
738 isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
751 state_name(isp),
755 isp1301_defer_work(isp, WORK_UPDATE_ISP);
759 switch (isp->phy.otg->state) {
761 b_idle(isp, __func__);
766 isp1301_defer_work(isp, WORK_UPDATE_ISP);
776 switch (isp->phy.otg->state) {
778 isp->phy.otg->state = OTG_STATE_B_HOST;
783 isp->phy.otg->state = OTG_STATE_A_HOST;
787 isp->phy.otg->state = OTG_STATE_A_WAIT_BCON;
793 isp1301_defer_work(isp, WORK_HOST_RESUME);
804 check_state(isp, __func__);
810 static int isp1301_otg_init(struct isp1301 *isp)
817 dump_regs(isp, __func__);
832 update_otg1(isp, isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE));
833 update_otg2(isp, isp1301_get_u8(isp, ISP1301_OTG_STATUS));
835 check_state(isp, __func__);
837 state_name(isp), __func__, omap_readl(OTG_CTRL));
872 static int otg_bind(struct isp1301 *isp)
885 0, DRIVER_NAME, isp);
894 static void otg_unbind(struct isp1301 *isp)
898 free_irq(otg_dev->resource[1].start, isp);
909 static void b_peripheral(struct isp1301 *isp)
916 usb_gadget_vbus_connect(isp->phy.otg->gadget);
919 enable_vbus_draw(isp, 8);
920 otg_update_isp(isp);
922 enable_vbus_draw(isp, 100);
924 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLUP);
925 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLDOWN);
926 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
928 dump_regs(isp, "2periph");
932 static void isp_update_otg(struct isp1301 *isp, u8 stat)
934 struct usb_otg *otg = isp->phy.otg;
936 enum usb_otg_state state = isp->phy.otg->state;
939 pr_debug("OTG: BDIS_ACON, %s\n", state_name(isp));
942 isp_stat = isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE);
947 a_idle(isp, "idle");
950 enable_vbus_source(isp);
959 isp->phy.otg->state = OTG_STATE_A_HOST;
963 a_idle(isp, "vfell");
967 isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
970 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
982 a_idle(isp, "id");
984 isp1301_defer_work(isp, WORK_HOST_RESUME);
996 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
1006 host_suspend(isp);
1007 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1,
1009 isp->phy.otg->state = OTG_STATE_B_IDLE;
1018 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
1020 switch (isp->phy.otg->state) {
1026 enable_vbus_draw(isp, 0);
1029 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1,
1031 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1,
1033 dump_regs(isp, __func__);
1037 b_idle(isp, __func__);
1044 update_otg1(isp, isp_stat);
1045 update_otg2(isp, isp_bstat);
1047 b_peripheral(isp);
1055 state_name(isp));
1060 if (state != isp->phy.otg->state)
1061 pr_debug(" isp, %s -> %s\n",
1062 usb_otg_state_string(state), state_name(isp));
1068 update_otg1(isp, isp_stat);
1069 update_otg2(isp, isp_bstat);
1070 check_state(isp, __func__);
1073 dump_regs(isp, "isp1301->otg");
1078 static u8 isp1301_clear_latch(struct isp1301 *isp)
1080 u8 latch = isp1301_get_u8(isp, ISP1301_INTERRUPT_LATCH);
1081 isp1301_clear_bits(isp, ISP1301_INTERRUPT_LATCH, latch);
1088 struct isp1301 *isp = container_of(work, struct isp1301, work);
1092 isp->working = 1;
1094 stop = test_bit(WORK_STOP, &isp->todo);
1098 if (test_and_clear_bit(WORK_UPDATE_ISP, &isp->todo)) {
1099 otg_update_isp(isp);
1100 put_device(&isp->client->dev);
1104 if (test_and_clear_bit(WORK_UPDATE_OTG, &isp->todo)) {
1105 u8 stat = isp1301_clear_latch(isp);
1107 isp_update_otg(isp, stat);
1108 put_device(&isp->client->dev);
1111 if (test_and_clear_bit(WORK_HOST_RESUME, &isp->todo)) {
1118 switch (isp->phy.otg->state) {
1121 isp->phy.otg->state = OTG_STATE_A_HOST;
1130 isp->phy.otg->state = OTG_STATE_B_HOST;
1139 state_name(isp));
1141 host_resume(isp);
1143 put_device(&isp->client->dev);
1146 if (test_and_clear_bit(WORK_TIMER, &isp->todo)) {
1148 dump_regs(isp, "timer");
1150 mod_timer(&isp->timer, jiffies + TIMER_JIFFIES);
1152 put_device(&isp->client->dev);
1155 if (isp->todo)
1156 dev_vdbg(&isp->client->dev,
1158 isp->todo);
1160 dev_dbg(&isp->client->dev, "stop\n");
1163 } while (isp->todo);
1164 isp->working = 0;
1167 static irqreturn_t isp1301_irq(int irq, void *isp)
1169 isp1301_defer_work(isp, WORK_UPDATE_OTG);
1175 struct isp1301 *isp = from_timer(isp, t, timer);
1177 isp1301_defer_work(isp, WORK_TIMER);
1184 struct isp1301 *isp;
1186 isp = dev_get_drvdata(dev);
1191 if (isp->i2c_release)
1192 isp->i2c_release(dev);
1193 kfree(isp->phy.otg);
1194 kfree (isp);
1201 struct isp1301 *isp;
1203 isp = i2c_get_clientdata(i2c);
1205 isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0);
1206 isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0);
1207 free_irq(i2c->irq, isp);
1209 otg_unbind(isp);
1214 set_bit(WORK_STOP, &isp->todo);
1215 del_timer_sync(&isp->timer);
1216 flush_work(&isp->work);
1241 static int isp1301_otg_enable(struct isp1301 *isp)
1243 power_up(isp);
1244 isp1301_otg_init(isp);
1249 isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1251 isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1254 dev_info(&isp->client->dev, "ready for dual-role USB ...\n");
1265 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1267 if (isp != the_transceiver)
1272 power_down(isp);
1279 dev_dbg(&isp->client->dev, "registered host\n");
1280 host_suspend(isp);
1282 return isp1301_otg_enable(isp);
1289 power_up(isp);
1292 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
1294 dev_info(&isp->client->dev, "A-Host sessions ok\n");
1295 isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1297 isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1305 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_VBUS_DRV);
1307 dump_regs(isp, __func__);
1312 dev_dbg(&isp->client->dev, "host sessions not allowed\n");
1321 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1323 if (isp != the_transceiver)
1329 enable_vbus_draw(isp, 0);
1332 power_down(isp);
1338 dev_dbg(&isp->client->dev, "registered gadget\n");
1341 return isp1301_otg_enable(isp);
1357 power_up(isp);
1358 isp->phy.otg->state = OTG_STATE_B_IDLE;
1361 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
1363 isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1365 isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1367 dev_info(&isp->client->dev, "B-Peripheral sessions ok\n");
1368 dump_regs(isp, __func__);
1374 if (isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE) & INTR_VBUS_VLD)
1375 b_peripheral(isp);
1380 dev_dbg(&isp->client->dev, "peripheral sessions not allowed\n");
1401 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1404 if (isp != the_transceiver || isp->phy.otg->state != OTG_STATE_B_IDLE)
1414 isp->phy.otg->state = OTG_STATE_B_SRP_INIT;
1416 pr_debug("otg: SRP, %s ... %06x\n", state_name(isp),
1419 check_state(isp, __func__);
1428 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1431 if (isp != the_transceiver)
1442 switch (isp->phy.otg->state) {
1444 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
1450 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
1467 state_name(isp), omap_readl(OTG_CTRL));
1468 check_state(isp, __func__);
1482 struct isp1301 *isp;
1487 isp = kzalloc(sizeof *isp, GFP_KERNEL);
1488 if (!isp)
1491 isp->phy.otg = kzalloc(sizeof *isp->phy.otg, GFP_KERNEL);
1492 if (!isp->phy.otg) {
1493 kfree(isp);
1497 INIT_WORK(&isp->work, isp1301_work);
1498 timer_setup(&isp->timer, isp1301_timer, 0);
1500 i2c_set_clientdata(i2c, isp);
1501 isp->client = i2c;
1504 status = isp1301_get_u16(isp, ISP1301_VENDOR_ID);
1509 status = isp1301_get_u16(isp, ISP1301_PRODUCT_ID);
1514 isp->i2c_release = i2c->dev.release;
1523 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_MASK);
1525 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_BI_DI);
1526 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_2, ~MC2_BI_DI);
1528 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1,
1530 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1,
1533 isp1301_clear_bits(isp, ISP1301_INTERRUPT_LATCH, ~0);
1534 isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0);
1535 isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0);
1538 status = otg_bind(isp);
1547 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
1549 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2,
1556 isp->irq_type = IRQF_TRIGGER_FALLING;
1560 isp->irq_type, DRIVER_NAME, isp);
1567 isp->phy.dev = &i2c->dev;
1568 isp->phy.label = DRIVER_NAME;
1569 isp->phy.set_power = isp1301_set_power,
1571 isp->phy.otg->usb_phy = &isp->phy;
1572 isp->phy.otg->set_host = isp1301_set_host,
1573 isp->phy.otg->set_peripheral = isp1301_set_peripheral,
1574 isp->phy.otg->start_srp = isp1301_start_srp,
1575 isp->phy.otg->start_hnp = isp1301_start_hnp,
1577 enable_vbus_draw(isp, 0);
1578 power_down(isp);
1579 the_transceiver = isp;
1582 update_otg1(isp, isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE));
1583 update_otg2(isp, isp1301_get_u8(isp, ISP1301_OTG_STATUS));
1586 dump_regs(isp, __func__);
1589 mod_timer(&isp->timer, jiffies + TIMER_JIFFIES);
1593 status = usb_add_phy(&isp->phy, USB_PHY_TYPE_USB2);
1601 kfree(isp->phy.otg);
1602 kfree(isp);