bdk: bm92t: do not parse non fixed pdos

This commit is contained in:
CTCaer
2026-02-12 21:56:39 +02:00
parent e6984a149b
commit ca8717d4a7
2 changed files with 19 additions and 7 deletions

View File

@@ -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;
}
}

View File

@@ -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