blob: aa4d6d8db7e8678488571494abc562a30b11fedb [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.hardware.i2c.businfo;
const MAX_I2C_CHANNEL uint32 = 128; // Enough for every address to be used in 7-bit mode.
/// Used to inform the i2c driver about an attached i2c device.
type I2CChannel = table {
/// ID of the bus that this device is on.
1: bus_id uint32;
/// Address of the device.
2: address uint16;
/// Class of the device.
/// TODO(fxbug.dev/78198): remove this once x86 uses ACPI properly.
3: i2c_class uint32;
/// Vendor ID. Used when binding via platform bus device IDs.
4: vid uint32;
/// Product ID. Used when binding via platform bus device IDs.
5: pid uint32;
/// Device ID. Used when binding via platform bus device IDs.
6: did uint32;
// Bus configuration.
/// Are we in charge of the bus?
7: is_bus_controller bool;
/// Is this device using 10-bit addressing mode (if false, use 7-bit).
8: is_ten_bit bool;
/// Speed of the bus.
9: bus_speed uint32;
};
/// Passed to the i2c driver in metadata as DEVICE_METADATA_I2C_CHANNELS.
type I2CBusMetadata = table {
1: channels vector<I2CChannel>:MAX_I2C_CHANNEL;
};