From ca8717d4a74aa4fa9a65e5fcf8ebc9c5316cfcdf Mon Sep 17 00:00:00 2001 From: CTCaer Date: Thu, 12 Feb 2026 21:56:39 +0200 Subject: [PATCH] bdk: bm92t: do not parse non fixed pdos --- bdk/power/bm92t36.c | 24 ++++++++++++++++++------ bdk/power/bm92t36.h | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/bdk/power/bm92t36.c b/bdk/power/bm92t36.c index a95730bb..eda7db06 100644 --- a/bdk/power/bm92t36.c +++ b/bdk/power/bm92t36.c @@ -1,7 +1,7 @@ /* * USB-PD driver for Nintendo Switch's TI BM92T36 * - * Copyright (c) 2020-2025 CTCaer + * Copyright (c) 2020-2026 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -58,6 +58,11 @@ #define MAX_ROHM 0x4B5 #define DEV_BM92T 0x3B0 +#define PDO_TYPE_FIXED 0 +#define PDO_TYPE_BATT 1 +#define PDO_TYPE_VAR 2 +#define PDO_TYPE_APDO 3 + typedef struct _pd_object_t { unsigned int amp:10; unsigned int volt:10; @@ -90,7 +95,7 @@ int bm92t36_get_version(u32 *value) return -1; } -void bm92t36_get_sink_info(bool *inserted, usb_pd_objects_t *usb_pd) +void bm92t36_get_source_info(bool *inserted, usb_pd_objects_t *usb_pd) { u8 buf[32]; pd_object_t pdos[7]; @@ -112,15 +117,22 @@ void bm92t36_get_sink_info(bool *inserted, usb_pd_objects_t *usb_pd) if (usb_pd->pdo_no > 7) usb_pd->pdo_no = 7; + u32 idx = 0; for (u32 i = 0; i < usb_pd->pdo_no; i++) { - usb_pd->pdos[i].amperage = pdos[i].amp * 10; - usb_pd->pdos[i].voltage = (pdos[i].volt * 50) / 1000; + // Parse fixed type pdos only. + if (pdos[i].type != PDO_TYPE_FIXED) + continue; + + usb_pd->pdos[idx].amperage = pdos[i].amp * 10; + usb_pd->pdos[idx].voltage = (pdos[i].volt * 50) / 1000; + idx++; } + usb_pd->pdo_no = idx; _bm92t36_read_reg(buf, 5, CURRENT_PDO_REG); memcpy(pdos, &buf[1], 4); - usb_pd->selected_pdo.amperage = pdos[0].amp * 10; - usb_pd->selected_pdo.voltage = (pdos[0].volt * 50) / 1000; + usb_pd->selected_pdo.amperage = pdos[0].amp * 10; + usb_pd->selected_pdo.voltage = (pdos[0].volt * 50) / 1000; } } diff --git a/bdk/power/bm92t36.h b/bdk/power/bm92t36.h index c288a6fc..4ff0791e 100644 --- a/bdk/power/bm92t36.h +++ b/bdk/power/bm92t36.h @@ -37,6 +37,6 @@ typedef struct _usb_pd_objects_t } usb_pd_objects_t; int bm92t36_get_version(u32 *value); -void bm92t36_get_sink_info(bool *inserted, usb_pd_objects_t *usb_pd); +void bm92t36_get_source_info(bool *inserted, usb_pd_objects_t *usb_pd); #endif