ET7303 device tree has 3 parts.
Main body is for ET7303 hardware. "pd-data" for charging power data configuration, inculde source power data and sink power data. "dpm caps" for Device Policy Manager.
compatible = "etek,et7303"; reg = <0x4e>; rt-tcpc,name = "type_c_port0"; /* tcpc_device's name */ et7303,irq_pin = <&gpio1 RK_PB2 IRQ_TYPE_LEVEL_LOW>; rt-tcpc,role_def = <4>; /* 0: SNK Only, 1: SRC Only, 2: DRP, 3: Try.SRC, 4: Try.SNK */ rt-tcpc,rp_level = <0>; /* 0: Default, 1: 1.5, 2: 3.0 */ rt-tcpc,vconn_supply = <0>; /* 0: Never, 1: Always, 2: EMarkOnly, 3: StartOnly */ rt-tcpc,notifier_supply_num = <1>; /* the number of notifier supply */ rt-dual,supported_modes = <0>; /* 0: dfp/ufp, 1: dfp, 2: ufp */
notifier_supply_num: the power drivers can register callback func to PD notifier chain, and this value to told PD probe process to enable et7303 irq after all power drivers initialization.
supported_modes: export properties to tcpc, more details in drivers/usb/pd/tcpci_dual_role.c
pd,charging_policy = <0x31>; pd,source-pdo-size = <1>; pd,source-pdo-data = <0x00019032>; pd,sink-pdo-size = <2>; pd,sink-pdo-data = <0x001912c 0x0002d0c8>; pd,id-vdo-size = <3>; pd,id-vdo-data = <0xd8006dcf 0x0 0x00010000>;
pd,charging_policy = <0x31>: this value has 2 parts, policydpm_select_pdo_from_max_power
. 2 for custom policy, this for custom define, and now, it return with VSAFE5V. We can fill the dpm_select_pdo_from_custom
.
local_dr_power; local_dr_data; pr_check = <0>; dr_check = <0>;
local_dr_power/data: local can accept power/data swap cmd. pr/dr_check: local can send pr/dr swap for prefer role. 0: disable, 1: prefer_ufp, 2: prefer_dfp
This part show a simple power drivers for PD. custom should re-write it depends on hardware.