if (chip->role == ROLE_MODE_NONE) { dev_warn(chip->dev, "Can't get property of role, set role to default DRP\n"); chip->role = ROLE_MODE_DRP; string[0] = "ROLE_MODE_DRP"; }
if (!of_property_read_string(chip->dev->of_node, "fusb302,try_role", (constchar **)&string[1])) { if (!strcmp(string[1], "ROLE_MODE_DFP")) chip->try_role = ROLE_MODE_DFP; elseif (!strcmp(string[1], "ROLE_MODE_UFP")) chip->try_role = ROLE_MODE_UFP; }
if (chip->try_role == ROLE_MODE_NONE) string[1] = "ROLE_MODE_NONE";
tcpc_alert(chip, &evt); mux_alert(chip, &evt); if (!evt) goto BACK;
if (chip->notify.is_cc_connected) if (evt & (EVENT_CC | EVENT_DELAY_CC)) fusb_try_detach(chip);
if (evt & EVENT_RX) { tcpm_get_message(chip); if (PACKET_IS_CONTROL_MSG(chip->rec_head, CMT_SOFTRESET)) { if (chip->notify.power_role) set_state(chip, policy_src_softrst); else set_state(chip, policy_snk_softrst); } }
if (evt & EVENT_TX) { if (chip->tx_state == tx_success) chip->msg_id++; } switch (chip->conn_state) { case disabled: fusb_state_disabled(chip, evt); break; case error_recovery: set_state_unattached(chip); break; case unattached: fusb_state_unattached(chip, evt); break; case attach_wait_sink: fusb_state_attach_wait_sink(chip, evt); break; case attach_wait_source: fusb_state_attach_wait_source(chip, evt); break; case attached_source: fusb_state_attached_source(chip, evt); break; case attached_sink: fusb_state_attached_sink(chip, evt); break; case attach_try_src: fusb_state_try_attach(chip, evt, ROLE_MODE_DFP); break; case attach_try_snk: fusb_state_try_attach(chip, evt, ROLE_MODE_UFP); break; case attach_wait_audio_acc: fusb_state_attach_wait_audio_acc(chip, evt); break; case attached_audio_acc: fusb_state_attached_audio_acc(chip, evt); break;
/* POWER DELIVERY */ /* case policy_src_startup: fusb_state_src_startup(chip, evt); break; case policy_src_discovery: fusb_state_src_discovery(chip, evt); break; case policy_src_send_caps: fusb_state_src_send_caps(chip, evt); if (chip->conn_state != policy_src_negotiate_cap) break; case policy_src_negotiate_cap: fusb_state_src_negotiate_cap(chip, evt); case policy_src_transition_supply: fusb_state_src_transition_supply(chip, evt); break; case policy_src_cap_response: fusb_state_src_cap_response(chip, evt); break; case policy_src_transition_default: fusb_state_src_transition_default(chip, evt); break; case policy_src_ready: fusb_state_src_ready(chip, evt); break; case policy_src_get_sink_caps: fusb_state_src_get_sink_cap(chip, evt); break; case policy_src_send_hardrst: fusb_state_src_send_hardreset(chip, evt); break; case policy_src_send_softrst: fusb_state_src_send_softreset(chip, evt); break; case policy_src_softrst: fusb_state_src_softreset(chip); break; */
/* UFP */ /* case policy_snk_startup: fusb_state_snk_startup(chip, evt); break; case policy_snk_discovery: fusb_state_snk_discovery(chip, evt); break; case policy_snk_wait_caps: fusb_state_snk_wait_caps(chip, evt); break; case policy_snk_evaluate_caps: fusb_state_snk_evaluate_caps(chip, evt); /* without break */ /* case policy_snk_select_cap: fusb_state_snk_select_cap(chip, evt); break; case policy_snk_transition_sink: fusb_state_snk_transition_sink(chip, evt); break; case policy_snk_transition_default: fusb_state_snk_transition_default(chip, evt); break; case policy_snk_ready: fusb_state_snk_ready(chip, evt); break; case policy_snk_send_hardrst: fusb_state_snk_send_hardreset(chip, evt); break; case policy_snk_send_softrst: fusb_state_snk_send_softreset(chip, evt); break; case policy_snk_softrst: fusb_state_snk_softreset(chip); break; /* * PD Spec 1.0: PR SWAP: chap 8.3.3.6.3.1/2 * VC SWAP: chap 8.3.3.7.1/2 */ /* case policy_src_prs_evaluate: case policy_snk_prs_evaluate: fusb_state_prs_evaluate(chip, evt); break; case policy_snk_prs_accept: case policy_src_prs_accept: fusb_state_prs_accept(chip, evt); break; case policy_snk_prs_reject: case policy_src_prs_reject: case policy_vcs_ufp_reject: case policy_drs_dfp_reject: case policy_drs_ufp_reject: fusb_state_prs_reject(chip, evt); break; case policy_src_prs_transition_to_off: fusb_state_src_prs_transition_to_off(chip, evt); break; case policy_src_prs_assert_rd: fusb_state_src_prs_assert_rd(chip, evt); break; case policy_src_prs_source_off: fusb_state_src_prs_source_off(chip, evt); break; case policy_snk_prs_send_swap: case policy_src_prs_send_swap: fusb_state_send_swap(chip, evt, CMT_PR_SWAP); break; case policy_snk_prs_transition_to_off: fusb_state_snk_prs_transition_to_off(chip, evt); break; case policy_snk_prs_assert_rp: fusb_state_snk_prs_assert_rp(chip, evt); break; case policy_snk_prs_source_on: fusb_state_snk_prs_source_on(chip, evt); break; case policy_vcs_ufp_evaluate_swap: fusb_state_vcs_ufp_evaluate_swap(chip, evt); break; case policy_vcs_ufp_accept: fusb_state_vcs_ufp_accept(chip, evt); break; case policy_vcs_ufp_wait_for_dfp_vconn: case policy_vcs_dfp_wait_for_ufp_vconn: fusb_state_vcs_wait_for_vconn(chip, evt); break; case policy_vcs_ufp_turn_off_vconn: case policy_vcs_dfp_turn_off_vconn: fusb_state_vcs_set_vconn(chip, evt, false); break; case policy_vcs_ufp_turn_on_vconn: case policy_vcs_dfp_turn_on_vconn: fusb_state_vcs_set_vconn(chip, evt, true); break; case policy_vcs_ufp_send_ps_rdy: case policy_vcs_dfp_send_ps_rdy: fusb_state_vcs_send_ps_rdy(chip, evt); break; case policy_vcs_dfp_send_swap: fusb_state_send_swap(chip, evt, CMT_VCONN_SWAP); break; case policy_drs_ufp_evaluate: case policy_drs_dfp_evaluate: fusb_state_drs_evaluate(chip, evt); break; case policy_drs_dfp_accept: case policy_drs_ufp_accept: fusb_state_drs_send_accept(chip, evt); break; case policy_drs_dfp_change: case policy_drs_ufp_change: fusb_state_drs_role_change(chip, evt); break; case policy_drs_ufp_send_swap: case policy_drs_dfp_send_swap: fusb_state_send_swap(chip, evt, CMT_DR_SWAP); break; default: break; } BACK: if (chip->work_continue) { queue_work(chip->fusb30x_wq, &chip->work); return; } if (!platform_get_device_irq_state(chip)) fusb_irq_enable(chip); else queue_work(chip->fusb30x_wq, &chip->work); } */