[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260211002255.4090440-6-jekhor@gmail.com>
Date: Wed, 11 Feb 2026 02:18:37 +0200
From: Yauhen Kharuzhy <jekhor@...il.com>
To: Oder Chiou <oder_chiou@...ltek.com>,
Liam Girdwood <lgirdwood@...il.com>,
Mark Brown <broonie@...nel.org>
Cc: Jaroslav Kysela <perex@...ex.cz>,
Takashi Iwai <tiwai@...e.com>,
linux-sound@...r.kernel.org,
linux-kernel@...r.kernel.org,
Hans de Goede <hansg@...nel.org>,
Yauhen Kharuzhy <jekhor@...il.com>
Subject: [PATCH 5/7] ASoC: rt5677: Set up ACPI GPIO pins mapping table
To get GPIO configuration from ACPI, define an ACPI GPIO mapping table,
linking GPIO names with CRS entries.
The only known device that has an ACPI entry for the RT5677 codec is
the Lenovo Yoga Book YB1-X91, and it uses this entry to describe the
entire sound system configuration: codec connections and jack detection
chip connections.
This ACPI definition looks YogaBook-specific, but codec GPIOs may be
recognized as generic, so add this lookup table for all devices.
Details about the YogaBook RT5677 ACPI entry are provided below.
CRS resources:
I2C devices:
0: rt5677 codec
1: ts3a227e jack detection IC
GPIOs:
0: rt5677 codec reset
1: rt5677 codec pow-ldo2
2: speaker enable
INTs:
0: rt5677 codec
1: ts3a227e jack detection IC
SPI device:
0: rt5677 codec SPI connection
ACPI decompiled dump fragment:
Device (RTEK)
{
Name (_ADR, Zero) // _ADR: Address
Name (_HID, "10EC5677") // _HID: Hardware ID
Name (_CID, "10EC5677") // _CID: Compatible ID
Name (_DDN, "Realtek IIS Audio Codec") // _DDN: DOS Device Name
Name (_SUB, "17AA7005") // _SUB: Subsystem ID
Name (_UID, One) // _UID: Unique ID
Name (_PR0, Package (0x01) // _PR0: Power Resources for D0
{
CLK3
})
Name (CHAN, Package (0x02)
{
One,
0x0124F800
})
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (SBUF, ResourceTemplate ()
{
I2cSerialBusV2 (0x002C, ControllerInitiated, 0x000186A0,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
I2cSerialBusV2 (0x003B, ControllerInitiated, 0x000186A0,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"\\_SB.GPO3", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0019
}
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"\\_SB.GPO3", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0012
}
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"\\_SB.GPO3", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0030
}
GpioInt (Edge, ActiveLow, Exclusive, PullNone, 0x0000,
"\\_SB.GPO0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x005B
}
GpioInt (Edge, ActiveLow, Exclusive, PullNone, 0x0000,
"\\_SB.GPO0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x004D
}
SpiSerialBusV2 (0x0001, PolarityLow, FourWireMode, 0x08,
ControllerInitiated, 0x003D0900, ClockPolarityHigh,
ClockPhaseSecond, "\\_SB.PCI0.SPI1",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (SBUF) /* \_SB_.PCI0.I2C1.RTEK._CRS.SBUF */
}
}
Signed-off-by: Yauhen Kharuzhy <jekhor@...il.com>
---
sound/soc/codecs/rt5677.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 845385c1fb88..f56ac267f53b 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -5536,6 +5536,15 @@ static int rt5677_init_irq(struct i2c_client *i2c)
return ret;
}
+static const struct acpi_gpio_params rt5677_acpi_reset_gpios = {0, 0, true};
+static const struct acpi_gpio_params rt5677_acpi_ldo2_gpios = {1, 0, false};
+
+static const struct acpi_gpio_mapping rt5677_acpi_gpios[] = {
+ { "realtek,reset-gpios", &rt5677_acpi_reset_gpios, 1 },
+ { "realtek,pow-ldo2-gpios", &rt5677_acpi_ldo2_gpios, 1 },
+ {},
+};
+
static int rt5677_i2c_probe(struct i2c_client *i2c)
{
struct rt5677_priv *rt5677;
@@ -5556,6 +5565,9 @@ static int rt5677_i2c_probe(struct i2c_client *i2c)
if (rt5677->type == 0)
return -EINVAL;
+ if (devm_acpi_dev_add_driver_gpios(rt5677->dev, rt5677_acpi_gpios))
+ dev_warn(rt5677->dev, "Unable to add GPIO mapping table\n");
+
rt5677_read_device_properties(rt5677, &i2c->dev);
/* pow-ldo2 and reset are optional. The codec pins may be statically
--
2.51.0
Powered by blists - more mailing lists