__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright 2015-2017 Google, Inc
 */

#ifndef __LINUX_USB_TCPM_H
#define __LINUX_USB_TCPM_H

#include <linux/bitops.h>
#include <linux/usb/typec.h>
#include "pd.h"

enum typec_cc_status {
	TYPEC_CC_OPEN,
	TYPEC_CC_RA,
	TYPEC_CC_RD,
	TYPEC_CC_RP_DEF,
	TYPEC_CC_RP_1_5,
	TYPEC_CC_RP_3_0,
};

/* Collision Avoidance */
#define SINK_TX_NG	TYPEC_CC_RP_1_5
#define SINK_TX_OK	TYPEC_CC_RP_3_0

enum typec_cc_polarity {
	TYPEC_POLARITY_CC1,
	TYPEC_POLARITY_CC2,
};

/* Time to wait for TCPC to complete transmit */
#define PD_T_TCPC_TX_TIMEOUT	100		/* in ms	*/
#define PD_ROLE_SWAP_TIMEOUT	(MSEC_PER_SEC * 10)
#define PD_PPS_CTRL_TIMEOUT	(MSEC_PER_SEC * 10)

enum tcpm_transmit_status {
	TCPC_TX_SUCCESS = 0,
	TCPC_TX_DISCARDED = 1,
	TCPC_TX_FAILED = 2,
};

enum tcpm_transmit_type {
	TCPC_TX_SOP = 0,
	TCPC_TX_SOP_PRIME = 1,
	TCPC_TX_SOP_PRIME_PRIME = 2,
	TCPC_TX_SOP_DEBUG_PRIME = 3,
	TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4,
	TCPC_TX_HARD_RESET = 5,
	TCPC_TX_CABLE_RESET = 6,
	TCPC_TX_BIST_MODE_2 = 7
};

/* Mux state attributes */
#define TCPC_MUX_USB_ENABLED		BIT(0)	/* USB enabled */
#define TCPC_MUX_DP_ENABLED		BIT(1)	/* DP enabled */
#define TCPC_MUX_POLARITY_INVERTED	BIT(2)	/* Polarity inverted */

/**
 * struct tcpc_dev - Port configuration and callback functions
 * @fwnode:	Pointer to port fwnode
 * @get_vbus:	Called to read current VBUS state
 * @get_current_limit:
 *		Optional; called by the tcpm core when configured as a snk
 *		and cc=Rp-def. This allows the tcpm to provide a fallback
 *		current-limit detection method for the cc=Rp-def case.
 *		For example, some tcpcs may include BC1.2 charger detection
 *		and use that in this case.
 * @set_cc:	Called to set value of CC pins
 * @apply_rc:	Optional; Needed to move TCPCI based chipset to APPLY_RC state
 *		as stated by the TCPCI specification.
 * @get_cc:	Called to read current CC pin values
 * @set_polarity:
 *		Called to set polarity
 * @set_vconn:	Called to enable or disable VCONN
 * @set_vbus:	Called to enable or disable VBUS
 * @set_current_limit:
 *		Optional; called to set current limit as negotiated
 *		with partner.
 * @set_pd_rx:	Called to enable or disable reception of PD messages
 * @set_roles:	Called to set power and data roles
 * @start_toggling:
 *		Optional; if supported by hardware, called to start dual-role
 *		toggling or single-role connection detection. Toggling stops
 *		automatically if a connection is established.
 * @try_role:	Optional; called to set a preferred role
 * @pd_transmit:Called to transmit PD message
 * @set_bist_data: Turn on/off bist data mode for compliance testing
 * @enable_frs:
 *		Optional; Called to enable/disable PD 3.0 fast role swap.
 *		Enabling frs is accessory dependent as not all PD3.0
 *		accessories support fast role swap.
 * @frs_sourcing_vbus:
 *		Optional; Called to notify that vbus is now being sourced.
 *		Low level drivers can perform chip specific operations, if any.
 * @enable_auto_vbus_discharge:
 *		Optional; TCPCI spec based TCPC implementations can optionally
 *		support hardware to autonomously dischrge vbus upon disconnecting
 *		as sink or source. TCPM signals TCPC to enable the mechanism upon
 *		entering connected state and signals disabling upon disconnect.
 * @set_auto_vbus_discharge_threshold:
 *		Mandatory when enable_auto_vbus_discharge is implemented. TCPM
 *		calls this function to allow lower levels drivers to program the
 *		vbus threshold voltage below which the vbus discharge circuit
 *		will be turned on. requested_vbus_voltage is set to 0 when vbus
 *		is going to disappear knowingly i.e. during PR_SWAP and
 *		HARD_RESET etc.
 * @is_vbus_vsafe0v:
 *		Optional; TCPCI spec based TCPC implementations are expected to
 *		detect VSAFE0V voltage level at vbus. When detection of VSAFE0V
 *		is supported by TCPC, set this callback for TCPM to query
 *		whether vbus is at VSAFE0V when needed.
 *		Returns true when vbus is at VSAFE0V, false otherwise.
 * @set_partner_usb_comm_capable:
 *              Optional; The USB Communications Capable bit indicates if port
 *              partner is capable of communication over the USB data lines
 *              (e.g. D+/- or SS Tx/Rx). Called to notify the status of the bit.
 * @check_contaminant:
 *		Optional; The callback is called when CC pins report open status
 *		at the end of the deboumce period or when the port is still
 *		toggling. Chip level drivers are expected to check for contaminant
 *		and call tcpm_clean_port when the port is clean.
 * @cable_comm_capable
 *		Optional; Returns whether cable communication over SOP' is supported
 *		by the tcpc
 * @attempt_vconn_swap_discovery:
 *		Optional; The callback is called by the TCPM when the result of
 *		a Discover Identity request indicates that the port partner is
 *		a receptacle capable of modal operation. Chip level TCPCI drivers
 *		can implement their own policy to determine if and when a Vconn
 *		swap following Discover Identity on SOP' occurs.
 *		Return true when the TCPM is allowed to request a Vconn swap
 *		after Discovery Identity on SOP.
 */
struct tcpc_dev {
	struct fwnode_handle *fwnode;

	int (*init)(struct tcpc_dev *dev);
	int (*get_vbus)(struct tcpc_dev *dev);
	int (*get_current_limit)(struct tcpc_dev *dev);
	int (*set_cc)(struct tcpc_dev *dev, enum typec_cc_status cc);
	int (*apply_rc)(struct tcpc_dev *dev, enum typec_cc_status cc,
			enum typec_cc_polarity polarity);
	int (*get_cc)(struct tcpc_dev *dev, enum typec_cc_status *cc1,
		      enum typec_cc_status *cc2);
	int (*set_polarity)(struct tcpc_dev *dev,
			    enum typec_cc_polarity polarity);
	int (*set_orientation)(struct tcpc_dev *dev,
			       enum typec_orientation orientation);
	int (*set_vconn)(struct tcpc_dev *dev, bool on);
	int (*set_vbus)(struct tcpc_dev *dev, bool on, bool charge);
	int (*set_current_limit)(struct tcpc_dev *dev, u32 max_ma, u32 mv);
	int (*set_pd_rx)(struct tcpc_dev *dev, bool on);
	int (*set_roles)(struct tcpc_dev *dev, bool attached,
			 enum typec_role role, enum typec_data_role data);
	int (*start_toggling)(struct tcpc_dev *dev,
			      enum typec_port_type port_type,
			      enum typec_cc_status cc);
	int (*try_role)(struct tcpc_dev *dev, int role);
	int (*pd_transmit)(struct tcpc_dev *dev, enum tcpm_transmit_type type,
			   const struct pd_message *msg, unsigned int negotiated_rev);
	int (*set_bist_data)(struct tcpc_dev *dev, bool on);
	int (*enable_frs)(struct tcpc_dev *dev, bool enable);
	void (*frs_sourcing_vbus)(struct tcpc_dev *dev);
	int (*enable_auto_vbus_discharge)(struct tcpc_dev *dev, bool enable);
	int (*set_auto_vbus_discharge_threshold)(struct tcpc_dev *dev, enum typec_pwr_opmode mode,
						 bool pps_active, u32 requested_vbus_voltage,
						 u32 pps_apdo_min_voltage);
	bool (*is_vbus_vsafe0v)(struct tcpc_dev *dev);
	void (*set_partner_usb_comm_capable)(struct tcpc_dev *dev, bool enable);
	void (*check_contaminant)(struct tcpc_dev *dev);
	bool (*cable_comm_capable)(struct tcpc_dev *dev);
	bool (*attempt_vconn_swap_discovery)(struct tcpc_dev *dev);
};

struct tcpm_port;

struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc);
void tcpm_unregister_port(struct tcpm_port *port);

void tcpm_vbus_change(struct tcpm_port *port);
void tcpm_cc_change(struct tcpm_port *port);
void tcpm_sink_frs(struct tcpm_port *port);
void tcpm_sourcing_vbus(struct tcpm_port *port);
void tcpm_pd_receive(struct tcpm_port *port,
		     const struct pd_message *msg,
		     enum tcpm_transmit_type rx_sop_type);
void tcpm_pd_transmit_complete(struct tcpm_port *port,
			       enum tcpm_transmit_status status);
void tcpm_pd_hard_reset(struct tcpm_port *port);
void tcpm_tcpc_reset(struct tcpm_port *port);
void tcpm_port_clean(struct tcpm_port *port);
bool tcpm_port_is_toggling(struct tcpm_port *port);
void tcpm_port_error_recovery(struct tcpm_port *port);

#endif /* __LINUX_USB_TCPM_H */

Filemanager

Name Type Size Permission Actions
audio-v2.h File 13.87 KB 0644
audio-v3.h File 13.94 KB 0644
audio.h File 1.08 KB 0644
c67x00.h File 1.12 KB 0644
ccid.h File 787 B 0644
cdc-wdm.h File 511 B 0644
cdc.h File 1.3 KB 0644
cdc_ncm.h File 5.84 KB 0644
ch9.h File 2.13 KB 0644
chipidea.h File 3.61 KB 0644
composite.h File 24.61 KB 0644
ehci-dbgp.h File 2.05 KB 0644
ehci_def.h File 7.4 KB 0644
ehci_pdriver.h File 1.66 KB 0644
ezusb.h File 286 B 0644
func_utils.h File 2.65 KB 0644
functionfs.h File 151 B 0644
g_hid.h File 442 B 0644
gadget.h File 36.8 KB 0644
gadget_configfs.h File 2.87 KB 0644
hcd.h File 27.41 KB 0644
input.h File 526 B 0644
iowarrior.h File 1.34 KB 0644
irda.h File 3.76 KB 0644
isp116x.h File 1.13 KB 0644
isp1301.h File 1.93 KB 0644
isp1362.h File 1.59 KB 0644
ljca.h File 4.2 KB 0644
m66592.h File 773 B 0644
midi-v2.h File 3.55 KB 0644
musb-ux500.h File 395 B 0644
musb.h File 3.16 KB 0644
net2280.h File 22.86 KB 0644
of.h File 2.03 KB 0644
ohci_pdriver.h File 1.02 KB 0644
onboard_dev.h File 584 B 0644
otg-fsm.h File 7.93 KB 0644
otg.h File 3.08 KB 0644
pd.h File 16.7 KB 0644
pd_ado.h File 1.16 KB 0644
pd_bdo.h File 556 B 0644
pd_ext_sdb.h File 698 B 0644
pd_vdo.h File 16.51 KB 0644
phy.h File 8.09 KB 0644
phy_companion.h File 693 B 0644
quirks.h File 2.44 KB 0644
r8152.h File 1.04 KB 0644
r8a66597.h File 16.99 KB 0644
renesas_usbhs.h File 3.62 KB 0644
rndis_host.h File 5.32 KB 0644
role.h File 3.58 KB 0644
rzv2m_usb3drd.h File 450 B 0644
serial.h File 17.17 KB 0644
sl811.h File 838 B 0644
storage.h File 2.77 KB 0644
tcpci.h File 8.49 KB 0644
tcpm.h File 7.73 KB 0644
tegra_usb_phy.h File 2.23 KB 0644
typec.h File 12.61 KB 0644
typec_altmode.h File 7.71 KB 0644
typec_dp.h File 4.69 KB 0644
typec_mux.h File 2.77 KB 0644
typec_retimer.h File 1.17 KB 0644
typec_tbt.h File 1.82 KB 0644
uas.h File 2.07 KB 0644
ulpi.h File 2.1 KB 0644
usb338x.h File 7.29 KB 0644
usb_phy_generic.h File 582 B 0644
usbnet.h File 10.07 KB 0644
uvc.h File 6.46 KB 0644
webusb.h File 2.4 KB 0644
xhci-dbgp.h File 651 B 0644
Filemanager