mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-09 22:56:35 +00:00
i2c: add auto-generated bus/device map
This commit is contained in:
parent
4a2daa4810
commit
f4e499fed9
5 changed files with 159 additions and 3 deletions
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#error "Unknown board for ams::gpio::driver::"
|
#error "Unknown board for ams::i2c::driver::"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,46 @@
|
||||||
|
|
||||||
namespace ams::i2c {
|
namespace ams::i2c {
|
||||||
|
|
||||||
|
enum I2cBus {
|
||||||
|
I2cBus_I2c1 = 0,
|
||||||
|
I2cBus_I2c2 = 1,
|
||||||
|
I2cBus_I2c3 = 2,
|
||||||
|
I2cBus_I2c4 = 3,
|
||||||
|
I2cBus_I2c5 = 4,
|
||||||
|
I2cBus_I2c6 = 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c1 = 0x02000001;
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c2 = 0x02000002;
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c3 = 0x02000003;
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c4 = 0x02000004;
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c5 = 0x02000005;
|
||||||
|
constexpr inline const DeviceCode DeviceCode_I2c6 = 0x02000006;
|
||||||
|
|
||||||
|
constexpr inline DeviceCode ConvertToDeviceCode(I2cBus bus) {
|
||||||
|
switch (bus) {
|
||||||
|
case I2cBus_I2c1: return DeviceCode_I2c1;
|
||||||
|
case I2cBus_I2c2: return DeviceCode_I2c2;
|
||||||
|
case I2cBus_I2c3: return DeviceCode_I2c3;
|
||||||
|
case I2cBus_I2c4: return DeviceCode_I2c4;
|
||||||
|
case I2cBus_I2c5: return DeviceCode_I2c5;
|
||||||
|
case I2cBus_I2c6: return DeviceCode_I2c6;
|
||||||
|
AMS_UNREACHABLE_DEFAULT_CASE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr inline DeviceCode ConvertToI2cBus(DeviceCode dc) {
|
||||||
|
switch (dc.GetInternalValue()) {
|
||||||
|
case DeviceCode_I2c1.GetInternalValue(): return I2cBus_I2c1;
|
||||||
|
case DeviceCode_I2c2.GetInternalValue(): return I2cBus_I2c2;
|
||||||
|
case DeviceCode_I2c3.GetInternalValue(): return I2cBus_I2c3;
|
||||||
|
case DeviceCode_I2c4.GetInternalValue(): return I2cBus_I2c4;
|
||||||
|
case DeviceCode_I2c5.GetInternalValue(): return I2cBus_I2c5;
|
||||||
|
case DeviceCode_I2c6.GetInternalValue(): return I2cBus_I2c6;
|
||||||
|
AMS_UNREACHABLE_DEFAULT_CASE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum I2cDevice : u32 {
|
enum I2cDevice : u32 {
|
||||||
I2cDevice_ClassicController = 0,
|
I2cDevice_ClassicController = 0,
|
||||||
I2cDevice_Ftm3bd56 = 1,
|
I2cDevice_Ftm3bd56 = 1,
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace ams::i2c {
|
||||||
|
|
||||||
enum TransactionOption : u32 {
|
enum TransactionOption : u32 {
|
||||||
TransactionOption_StartCondition = (1u << 0),
|
TransactionOption_StartCondition = (1u << 0),
|
||||||
TransactionOption_TopCondition = (1u << 1),
|
TransactionOption_StopCondition = (1u << 1),
|
||||||
TransactionOption_MaxBits = (1u << 30),
|
TransactionOption_MaxBits = (1u << 30),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace ams::i2c {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpeedMode : u32 {
|
enum SpeedMode : u32 {
|
||||||
SpeedMode_Normal = 100000,
|
SpeedMode_Standard = 100000,
|
||||||
SpeedMode_Fast = 400000,
|
SpeedMode_Fast = 400000,
|
||||||
SpeedMode_FastPlus = 1000000,
|
SpeedMode_FastPlus = 1000000,
|
||||||
SpeedMode_HighSpeed = 3400000,
|
SpeedMode_HighSpeed = 3400000,
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* NOTE: This file is auto-generated by i2cgen.py, do not edit manually. */
|
||||||
|
|
||||||
|
constexpr inline const I2cDeviceDefinition I2c1DeviceList[] = {
|
||||||
|
{ DeviceCode_ClassicController, 0x52 },
|
||||||
|
{ DeviceCode_Nct72, 0x4C },
|
||||||
|
{ DeviceCode_Alc5639, 0x1C },
|
||||||
|
{ DeviceCode_Bq24193, 0x6B },
|
||||||
|
{ DeviceCode_Max17050, 0x36 },
|
||||||
|
{ DeviceCode_Bm92t30mwv, 0x18 },
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const I2cDeviceDefinition I2c2DeviceList[] = {
|
||||||
|
{ DeviceCode_Ina226Vdd15v0Hb, 0x40 },
|
||||||
|
{ DeviceCode_Ina226VsysCpuDs, 0x41 },
|
||||||
|
{ DeviceCode_Ina226VsysGpuDs, 0x44 },
|
||||||
|
{ DeviceCode_Ina226VsysDdrDs, 0x45 },
|
||||||
|
{ DeviceCode_Ina226VsysAp, 0x46 },
|
||||||
|
{ DeviceCode_Ina226VsysBlDs, 0x47 },
|
||||||
|
{ DeviceCode_Bh1730, 0x29 },
|
||||||
|
{ DeviceCode_Ina226VsysCore, 0x48 },
|
||||||
|
{ DeviceCode_Ina226Soc1V8, 0x49 },
|
||||||
|
{ DeviceCode_Ina226Lpddr1V8, 0x4A },
|
||||||
|
{ DeviceCode_Ina226Reg1V32, 0x4B },
|
||||||
|
{ DeviceCode_Ina226Vdd3V3Sys, 0x4D },
|
||||||
|
{ DeviceCode_Ina226VddDdr0V6, 0x4E },
|
||||||
|
{ DeviceCode_HoagNfcIc, 0x08 },
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const I2cDeviceDefinition I2c3DeviceList[] = {
|
||||||
|
{ DeviceCode_Ftm3bd56, 0x49 },
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const I2cDeviceDefinition I2c4DeviceList[] = {
|
||||||
|
{ DeviceCode_HdmiDdc, 0x50 },
|
||||||
|
{ DeviceCode_HdmiScdc, 0x54 },
|
||||||
|
{ DeviceCode_HdmiHdcp, 0x3A },
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const I2cDeviceDefinition I2c5DeviceList[] = {
|
||||||
|
{ DeviceCode_Max77620Rtc, 0x68 },
|
||||||
|
{ DeviceCode_Max77620Pmic, 0x3C },
|
||||||
|
{ DeviceCode_Max77621Cpu, 0x1B },
|
||||||
|
{ DeviceCode_Max77621Gpu, 0x1C },
|
||||||
|
{ DeviceCode_Fan53528, 0x52 },
|
||||||
|
{ DeviceCode_Max77812_3, 0x31 },
|
||||||
|
{ DeviceCode_Max77812_2, 0x33 },
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr inline const I2cBusDefinition I2cBusList[] = {
|
||||||
|
{ DeviceCode_I2c1, 0x7000C000, 0x100, SpeedMode_Standard, 70, I2c1DeviceList, util::size(I2c1DeviceList) },
|
||||||
|
{ DeviceCode_I2c2, 0x7000C400, 0x100, SpeedMode_Fast, 116, I2c2DeviceList, util::size(I2c2DeviceList) },
|
||||||
|
{ DeviceCode_I2c3, 0x7000C500, 0x100, SpeedMode_Fast, 124, I2c3DeviceList, util::size(I2c3DeviceList) },
|
||||||
|
{ DeviceCode_I2c4, 0x7000C700, 0x100, SpeedMode_Standard, 152, I2c4DeviceList, util::size(I2c4DeviceList) },
|
||||||
|
{ DeviceCode_I2c5, 0x7000D000, 0x100, SpeedMode_Fast, 85, I2c5DeviceList, util::size(I2c5DeviceList) },
|
||||||
|
};
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
#include <stratosphere.hpp>
|
||||||
|
|
||||||
|
namespace ams::i2c::driver::board::nintendo_nx {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct I2cDeviceDefinition {
|
||||||
|
DeviceCode device_code;
|
||||||
|
u8 slave_address;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct I2cBusDefinition {
|
||||||
|
DeviceCode device_code;
|
||||||
|
dd::PhysicalAddress registers_phys_addr;
|
||||||
|
size_t registers_size;
|
||||||
|
SpeedMode speed_mode;
|
||||||
|
os::InterruptName interrupt_name;
|
||||||
|
const I2cDeviceDefinition *devices;
|
||||||
|
size_t num_devices;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "i2c_bus_device_map.inc"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Initialize() {
|
||||||
|
/* TODO */
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue