summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python
diff options
context:
space:
mode:
authorHerman van Hazendonk <github.com@herrie.org>2026-06-05 11:18:13 +0200
committerSebastian Reichel <sebastian.reichel@collabora.com>2026-07-22 01:55:44 +0200
commit828414660052b629378764e5d5c1f07e60716a48 (patch)
treed97be3e0c00c2440fcf3faf3b998501f7d8bae17 /tools/perf/scripts/python
parent353438b3107d56e36a642f117c2b4accc963abbd (diff)
power: supply: max8903: add DC and USB input current-limit GPIO controls
Add two optional current-limit knobs surfaced through POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, selected by which input source is currently online: - DC (DOK / TA-IN): a "dc-current-limit-gpios" array drives the GPIOs of an external resistor mux connected to the MAX8903 IDC pin (DC Current-Limit Set Input, pin 11). The IDC pin programs the step-down DC input current limit from 0.5 A to 2 A via R_IDC when the DCM mode pin is logic-high. The DT property "dc-current-limit-mapping" describes the (current_ua, gpio_value) pairs the board can program; the driver picks the largest entry whose limit is <= the requested limit. A 0 uA entry, used to stop drawing DC current, is selectable by issuing a 0 uA request (the selection uses a -1 "not found" sentinel rather than tracking best_limit > 0, so the all-zero entry can win). - USB (UOK / USB-IN): a single "usb-current-limit-gpio" drives the MAX8903 IUSB pin (USB Current-Limit Set Input, pin 7). The IUSB pin is silicon-fixed per the MAX8903 datasheet Pin Description: logic-low selects 100 mA, logic-high selects 500 mA. The two values are encoded as MAX8903_USB_CURRENT_LIMIT_{LOW,HIGH}_UA #defines with the datasheet quote in a header comment. The requested limit picks HIGH if it can absorb 500 mA, else LOW, else returns -EINVAL rather than silently programming a higher current that would violate the system power budget. Mirroring the DC-priority policy in the get path: when ta_in is asserted the part draws from DC regardless of USB state, so the set path only routes to USB when DC is not online. The dispatch in max8903_set_property() to the DC vs USB path needs to match the active source flag set by the corresponding *_ok GPIO IRQ handler; both update sites take a new struct mutex source_lock so the check and the resulting hardware write cannot be torn by a concurrent IRQ flipping the source-online flag mid-decision. The DOK/UOK IRQ handlers hold source_lock across the full read-modify-evaluate block (line sampling, ta_in/usb_in update, dcm/cen GPIO writes, psy type update) so the cen enable calculation reads a stable other-source flag rather than racing with the peer IRQ. The IRQs are requested with IRQF_ONESHOT (threaded), so a sleepable lock is the right primitive in both contexts. max8903_get_property() also takes source_lock briefly to snapshot the source flags and current-limit values so userspace never observes a torn pair of (source-online flag, current-limit ua). dc-current-limit-mapping gpio_value entries are validated at parse against the GPIO array width so a malformed DT value is rejected instead of being silently truncated by gpiod_set_array_value() and selecting the wrong mux level. ndescs is also bounded to < BITS_PER_TYPE(u32) to keep BIT(ndescs) well-defined on 32-bit. The mapping is additionally required to contain a gpio_value=0 entry: devm_gpiod_get_array_optional() asks for GPIOD_OUT_LOW, so the hardware mux starts at gpio_value 0, and the driver seeds dc_current_limit_ua from the matching map entry. A DT lacking the all-zero entry is rejected with -EINVAL because otherwise the reported INPUT_CURRENT_LIMIT could disagree with the mux state until a set_property write picks a real value. Negative INPUT_CURRENT_LIMIT requests are rejected at the set_property entry: val->intval is signed, the set_*_current_limit() helpers take a u32, and a negative cast would silently widen to a huge unsigned value, bypass the upper-bound guard and program the maximum permitted current. Signed-off-by: Herman van Hazendonk <github.com@herrie.org> Link: https://patch.msgid.link/20260605-submit-power-max8903-dc-limit-v2-2-0c5396e98f14@herrie.org Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions