Commit 6f0764b5 authored by Ray Chi's avatar Ray Chi Committed by Greg Kroah-Hartman
Browse files

usb: dwc3: add a power supply for current control



Currently, VBUS draw callback does no action when the
generic PHYs are used. This patch adds an additional
path to control charging current through power supply
interface.

Signed-off-by: default avatarRay Chi <raychi@google.com>
Link: https://lore.kernel.org/r/20210222115149.3606776-2-raychi@google.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a38fd874
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1238,6 +1238,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
	u8			rx_max_burst_prd;
	u8			tx_thr_num_pkt_prd;
	u8			tx_max_burst_prd;
	const char		*usb_psy_name;
	int			ret;

	/* default to highest possible threshold */
	lpm_nyet_threshold = 0xf;
@@ -1263,6 +1265,13 @@ static void dwc3_get_properties(struct dwc3 *dwc)
	else
		dwc->sysdev = dwc->dev;

	ret = device_property_read_string(dev, "usb-psy-name", &usb_psy_name);
	if (ret >= 0) {
		dwc->usb_psy = power_supply_get_by_name(usb_psy_name);
		if (!dwc->usb_psy)
			dev_err(dev, "couldn't get usb power supply\n");
	}

	dwc->has_lpm_erratum = device_property_read_bool(dev,
				"snps,has-lpm-erratum");
	device_property_read_u8(dev, "snps,lpm-nyet-threshold",
@@ -1619,6 +1628,9 @@ static int dwc3_probe(struct platform_device *pdev)
assert_reset:
	reset_control_assert(dwc->reset);

	if (!dwc->usb_psy)
		power_supply_put(dwc->usb_psy);

	return ret;
}

@@ -1641,6 +1653,9 @@ static int dwc3_remove(struct platform_device *pdev)
	dwc3_free_event_buffers(dwc);
	dwc3_free_scratch_buffers(dwc);

	if (!dwc->usb_psy)
		power_supply_put(dwc->usb_psy);

	return 0;
}

+4 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@

#include <linux/phy/phy.h>

#include <linux/power_supply.h>

#define DWC3_MSG_MAX	500

/* Global constants */
@@ -1125,6 +1127,8 @@ struct dwc3 {
	struct usb_role_switch	*role_sw;
	enum usb_dr_mode	role_switch_default_mode;

	struct power_supply	*usb_psy;

	u32			fladj;
	u32			irq_gadget;
	u32			otg_irq;