drivers/usb/typec/tcpm/maxim_contaminant.c

Source file repositories/reference/linux-study-clean/drivers/usb/typec/tcpm/maxim_contaminant.c

File Facts

System
Linux kernel
Corpus path
drivers/usb/typec/tcpm/maxim_contaminant.c
Extension
.c
Size
12227 bytes
Lines
451
Domain
Driver Families
Bucket
drivers/usb
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (IS_CC_OPEN(cc_status)) {
			u8 role_ctrl, role_ctrl_backup;

			ret = max_tcpci_read8(chip, TCPC_ROLE_CTRL, &role_ctrl);
			if (ret < 0)
				return false;

			role_ctrl_backup = role_ctrl;
			role_ctrl |= 0x0F;
			role_ctrl &= ~(TCPC_ROLE_CTRL_DRP);
			ret = max_tcpci_write8(chip, TCPC_ROLE_CTRL, role_ctrl);
			if (ret < 0)
				return false;

			chip->contaminant_state = max_contaminant_detect_contaminant(chip);

			ret = max_tcpci_write8(chip, TCPC_ROLE_CTRL, role_ctrl_backup);
			if (ret < 0)
				return false;

			if (chip->contaminant_state == DETECTED) {
				max_contaminant_enable_dry_detection(chip);
				return true;
			}

			ret = max_contaminant_enable_toggling(chip);
			if (ret)
				dev_err(chip->dev,
					"Failed to enable toggling, ret=%d",
					ret);
		}
	} else if (chip->contaminant_state == DETECTED) {
		if (!(cc_status & TCPC_CC_STATUS_TOGGLING)) {
			chip->contaminant_state = max_contaminant_detect_contaminant(chip);
			if (chip->contaminant_state == DETECTED) {
				max_contaminant_enable_dry_detection(chip);
				return true;
			} else {
				ret = max_contaminant_enable_toggling(chip);
				if (ret) {
					dev_err(chip->dev,
						"Failed to enable toggling, ret=%d",
						ret);
					return true;
				}
			}
		}
	}

	*cc_handled = false;
	return false;
}

MODULE_DESCRIPTION("MAXIM TCPC CONTAMINANT Module");
MODULE_AUTHOR("Badhri Jagan Sridharan <badhri@google.com>");
MODULE_LICENSE("GPL");

Annotation

Implementation Notes