mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
bm92t30 Add USB-PD driver stub
TODO: This driver is a stub and relies on incorrect I2C requests. The I2C driver needs to be updated with proper multi-xfer support. For now it replies its whole register range, according to request size. That's because the IC does not support the classic single transfer request-response style.
This commit is contained in:
parent
8f7bdd45b1
commit
8b837dd81b
2 changed files with 105 additions and 0 deletions
65
bdk/power/bm92t30_stub.c
Normal file
65
bdk/power/bm92t30_stub.c
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* USB-PD driver for Nintendo Switch's TI BM92T30
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 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,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* This driver is a stub and relies on incorrect I2C requests.
|
||||||
|
* The I2C driver needs to be updated with proper multi-xfer support.
|
||||||
|
*
|
||||||
|
* For now it replies its whole register range, according to request
|
||||||
|
* size. That's because the IC does not support the classic single
|
||||||
|
* transfer request-response style.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "bm92t30_stub.h"
|
||||||
|
#include <soc/i2c.h>
|
||||||
|
#include <utils/util.h>
|
||||||
|
|
||||||
|
#define STATUS1_INSERT 0x80
|
||||||
|
|
||||||
|
typedef struct _pdo_t{
|
||||||
|
u32 amp:10;
|
||||||
|
u32 volt:10;
|
||||||
|
u32 info:10;
|
||||||
|
u32 type:2;
|
||||||
|
} pdo_t;
|
||||||
|
|
||||||
|
void bm92t30_get_charger_type(bool *inserted, usb_pd_objects_t *usb_pd)
|
||||||
|
{
|
||||||
|
u8 buf[32];
|
||||||
|
pdo_t pdos[7];
|
||||||
|
i2c_recv_buf_big(buf, 32, I2C_1, BM92T30_I2C_ADDR, 0);
|
||||||
|
|
||||||
|
if (inserted)
|
||||||
|
*inserted = buf[6] & STATUS1_INSERT ? true : false;
|
||||||
|
memcpy(pdos, &buf[17], 15); // We can only get max 4 objects.
|
||||||
|
|
||||||
|
if (usb_pd)
|
||||||
|
{
|
||||||
|
memset(usb_pd, 0, sizeof(usb_pd_objects_t));
|
||||||
|
usb_pd->pdo_no = MIN(buf[16] / sizeof(pdo_t), 4); // We can only get max 4 objects.
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
bdk/power/bm92t30_stub.h
Normal file
40
bdk/power/bm92t30_stub.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* USB-PD driver for Nintendo Switch's TI BM92T30
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 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,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BM92T30_H_
|
||||||
|
#define __BM92T30_H_
|
||||||
|
|
||||||
|
#include <utils/types.h>
|
||||||
|
|
||||||
|
#define BM92T30_I2C_ADDR 0x18
|
||||||
|
|
||||||
|
typedef struct _usb_pd_object_t
|
||||||
|
{
|
||||||
|
u32 amperage;
|
||||||
|
u32 voltage;
|
||||||
|
} usb_pd_object_t;
|
||||||
|
|
||||||
|
typedef struct _usb_pd_objects_t
|
||||||
|
{
|
||||||
|
u32 pdo_no;
|
||||||
|
usb_pd_object_t pdos[7];
|
||||||
|
} usb_pd_objects_t;
|
||||||
|
|
||||||
|
void bm92t30_get_charger_type(bool *inserted, usb_pd_objects_t *usb_pd);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue