Currently there is no way for a board model's Kconfig stanza to
say "I have an i2c bus which the user can plug an i2c device into,
build all the free-standing i2c devices". The Kconfig mechanism
for this is the "device group". Add an I2C_DEVICES group along
the same lines as the existing PCI_DEVICES. Simple free-standing
i2c devices which a user might plausibly want to be able to
plug in on the QEMU commandline should have
default y if I2C_DEVICES
and board models which have an i2c bus that is user-accessible
should use
imply I2C_DEVICES
to cause those pluggable devices to be built.
In this commit we mark only a fairly conservative set of i2c devices
as belonging to the I2C_DEVICES group: the simple sensors and RTCs
(not including PMBus devices or devices which need GPIO lines to be
connected).
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Feel free to suggest other i2c devices that should be marked
as in the group; as I say, I erred on the side of not putting
devices in the group.
---
docs/devel/kconfig.rst | 8 ++++++--
hw/i2c/Kconfig | 5 +++++
hw/rtc/Kconfig | 2 ++
hw/sensor/Kconfig | 5 +++++
4 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/docs/devel/kconfig.rst b/docs/devel/kconfig.rst
index a1cdbec7512..aa5042f1569 100644
--- a/docs/devel/kconfig.rst
+++ b/docs/devel/kconfig.rst
@@ -192,11 +192,15 @@ declares its dependencies in different ways:
no directive and are not used in the Makefile either; they only appear
as conditions for ``default y`` directives.
- QEMU currently has two device groups, ``PCI_DEVICES`` and
- ``TEST_DEVICES``. PCI devices usually have a ``default y if
+ QEMU currently has three device groups, ``PCI_DEVICES``, ``I2C_DEVICES``,
+ and ``TEST_DEVICES``. PCI devices usually have a ``default y if
PCI_DEVICES`` directive rather than just ``default y``. This lets
some boards (notably s390) easily support a subset of PCI devices,
for example only VFIO (passthrough) and virtio-pci devices.
+ ``I2C_DEVICES`` is similar to ``PCI_DEVICES``. It contains i2c devices
+ that users might reasonably want to plug in to an i2c bus on any
+ board (and not ones which are very board-specific or that need
+ to be wired up in a way that can't be done on the command line).
``TEST_DEVICES`` instead is used for devices that are rarely used on
production virtual machines, but provide useful hooks to test QEMU
or KVM.
diff --git a/hw/i2c/Kconfig b/hw/i2c/Kconfig
index 8217cb50411..9bb8870517f 100644
--- a/hw/i2c/Kconfig
+++ b/hw/i2c/Kconfig
@@ -1,6 +1,11 @@
config I2C
bool
+config I2C_DEVICES
+ # Device group for i2c devices which can reasonably be user-plugged
+ # to any board's i2c bus
+ bool
+
config SMBUS
bool
select I2C
diff --git a/hw/rtc/Kconfig b/hw/rtc/Kconfig
index f06e133b8a2..730c272bc54 100644
--- a/hw/rtc/Kconfig
+++ b/hw/rtc/Kconfig
@@ -1,10 +1,12 @@
config DS1338
bool
depends on I2C
+ default y if I2C_DEVICES
config M41T80
bool
depends on I2C
+ default y if I2C_DEVICES
config M48T59
bool
diff --git a/hw/sensor/Kconfig b/hw/sensor/Kconfig
index b317f91b7b4..215944decc7 100644
--- a/hw/sensor/Kconfig
+++ b/hw/sensor/Kconfig
@@ -1,18 +1,22 @@
config TMP105
bool
depends on I2C
+ default y if I2C_DEVICES
config TMP421
bool
depends on I2C
+ default y if I2C_DEVICES
config DPS310
bool
depends on I2C
+ default y if I2C_DEVICES
config EMC141X
bool
depends on I2C
+ default y if I2C_DEVICES
config ADM1272
bool
@@ -25,3 +29,4 @@ config MAX34451
config LSM303DLHC_MAG
bool
depends on I2C
+ default y if I2C_DEVICES
--
2.25.1
On Tue, Feb 8, 2022 at 9:55 AM Peter Maydell <peter.maydell@linaro.org> wrote: > Currently there is no way for a board model's Kconfig stanza to > say "I have an i2c bus which the user can plug an i2c device into, > build all the free-standing i2c devices". The Kconfig mechanism > for this is the "device group". Add an I2C_DEVICES group along > the same lines as the existing PCI_DEVICES. Simple free-standing > i2c devices which a user might plausibly want to be able to > plug in on the QEMU commandline should have > default y if I2C_DEVICES > and board models which have an i2c bus that is user-accessible > should use > imply I2C_DEVICES > to cause those pluggable devices to be built. > > In this commit we mark only a fairly conservative set of i2c devices > as belonging to the I2C_DEVICES group: the simple sensors and RTCs > (not including PMBus devices or devices which need GPIO lines to be > connected). > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > Reviewed-by: Hao Wu <wuhaotsh@google.com> > --- > Feel free to suggest other i2c devices that should be marked > as in the group; as I say, I erred on the side of not putting > devices in the group. > --- > docs/devel/kconfig.rst | 8 ++++++-- > hw/i2c/Kconfig | 5 +++++ > hw/rtc/Kconfig | 2 ++ > hw/sensor/Kconfig | 5 +++++ > 4 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/docs/devel/kconfig.rst b/docs/devel/kconfig.rst > index a1cdbec7512..aa5042f1569 100644 > --- a/docs/devel/kconfig.rst > +++ b/docs/devel/kconfig.rst > @@ -192,11 +192,15 @@ declares its dependencies in different ways: > no directive and are not used in the Makefile either; they only appear > as conditions for ``default y`` directives. > > - QEMU currently has two device groups, ``PCI_DEVICES`` and > - ``TEST_DEVICES``. PCI devices usually have a ``default y if > + QEMU currently has three device groups, ``PCI_DEVICES``, > ``I2C_DEVICES``, > + and ``TEST_DEVICES``. PCI devices usually have a ``default y if > PCI_DEVICES`` directive rather than just ``default y``. This lets > some boards (notably s390) easily support a subset of PCI devices, > for example only VFIO (passthrough) and virtio-pci devices. > + ``I2C_DEVICES`` is similar to ``PCI_DEVICES``. It contains i2c devices > + that users might reasonably want to plug in to an i2c bus on any > + board (and not ones which are very board-specific or that need > + to be wired up in a way that can't be done on the command line). > ``TEST_DEVICES`` instead is used for devices that are rarely used on > production virtual machines, but provide useful hooks to test QEMU > or KVM. > diff --git a/hw/i2c/Kconfig b/hw/i2c/Kconfig > index 8217cb50411..9bb8870517f 100644 > --- a/hw/i2c/Kconfig > +++ b/hw/i2c/Kconfig > @@ -1,6 +1,11 @@ > config I2C > bool > > +config I2C_DEVICES > + # Device group for i2c devices which can reasonably be user-plugged > + # to any board's i2c bus > + bool > + > config SMBUS > bool > select I2C > diff --git a/hw/rtc/Kconfig b/hw/rtc/Kconfig > index f06e133b8a2..730c272bc54 100644 > --- a/hw/rtc/Kconfig > +++ b/hw/rtc/Kconfig > @@ -1,10 +1,12 @@ > config DS1338 > bool > depends on I2C > + default y if I2C_DEVICES > > config M41T80 > bool > depends on I2C > + default y if I2C_DEVICES > > config M48T59 > bool > diff --git a/hw/sensor/Kconfig b/hw/sensor/Kconfig > index b317f91b7b4..215944decc7 100644 > --- a/hw/sensor/Kconfig > +++ b/hw/sensor/Kconfig > @@ -1,18 +1,22 @@ > config TMP105 > bool > depends on I2C > + default y if I2C_DEVICES > > config TMP421 > bool > depends on I2C > + default y if I2C_DEVICES > > config DPS310 > bool > depends on I2C > + default y if I2C_DEVICES > > config EMC141X > bool > depends on I2C > + default y if I2C_DEVICES > > config ADM1272 > bool > @@ -25,3 +29,4 @@ config MAX34451 > config LSM303DLHC_MAG > bool > depends on I2C > + default y if I2C_DEVICES > -- > 2.25.1 > > >
© 2016 - 2026 Red Hat, Inc.