[PATCH v4 0/1] platform/x86: serial-multi-instantiate: ACPI example code
The tas2781-hda supports multi-projects, In some projects, GpioInt() was dropped due to no IRQ connection. See the example code below:
But in smi_i2c_probe(), smi_spi_probe() (serial-multi-instantiate.c), if looking for IRQ by smi_get_irq() fails, it will return an error, will not add new device, and cause smi_probe() to fail: [ 2.356546] Serial bus multi instantiate pseudo device driver TXNW2781:00: error -ENXIO: IRQ index 0 not found [ 2.356561] Serial bus multi instantiate pseudo device driver TXNW2781:00: error -ENXIO: Error requesting irq at index 0
So need to add an exception case for these situations. BTW, this patch will take effect on both I2C and SPI devices.
Device (SPKR) { Name (_ADR, One) Name (_HID, "TXNW2781") Method (_CRS, 0, NotSerialized) { Name (RBUF, ResourceTemplate () { I2cSerialBusV2 (0x0038, ...) I2cSerialBusV2 (0x0039, ...) // GpioInt (Edge, ...) { 0x0000 } //"GpioInt (...) {}" was commented out due to no IRQ connection. }) Return (RBUF) } }
Baojun Xu (1): platform/x86: serial-multi-instantiate: Add IRQ_RESOURCE_OPT for IRQ missing projects
drivers/platform/x86/serial-multi-instantiate.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
The tas2781-hda supports multi-projects. In some projects, GpioInt() was dropped due to no IRQ connection. See the example code in the cover letter. But in smi_i2c_probe(), smi_spi_probe() (serial-multi-instantiate.c), if looking for IRQ by smi_get_irq() fails, it will return an error, will not add new device, and cause smi_probe() to fail. So, we need to add an exception case for these situations. BTW, this patch will take effect on both I2C and SPI devices.
Signed-off-by: Baojun Xu baojun.xu@ti.com --- v4: - Change the description for this patch. v3: - Add IRQ_RESOURCE_OPT for IRQ missing cases. v2: - Remove error ignore, change to AUTO compatible with NONE. --- drivers/platform/x86/serial-multi-instantiate.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/serial-multi-instantiate.c b/drivers/platform/x86/serial-multi-instantiate.c index db030b0f176a..1a369334f9cb 100644 --- a/drivers/platform/x86/serial-multi-instantiate.c +++ b/drivers/platform/x86/serial-multi-instantiate.c @@ -22,6 +22,7 @@ #define IRQ_RESOURCE_GPIO 1 #define IRQ_RESOURCE_APIC 2 #define IRQ_RESOURCE_AUTO 3 +#define IRQ_RESOURCE_OPT BIT(2)
enum smi_bus_type { SMI_I2C, @@ -64,6 +65,10 @@ static int smi_get_irq(struct platform_device *pdev, struct acpi_device *adev, dev_dbg(&pdev->dev, "Using platform irq\n"); break; } + if (inst->flags & IRQ_RESOURCE_OPT) { + dev_dbg(&pdev->dev, "No irq\n"); + return 0; + } break; case IRQ_RESOURCE_GPIO: ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx); @@ -386,10 +391,10 @@ static const struct smi_node cs35l57_hda = {
static const struct smi_node tas2781_hda = { .instances = { - { "tas2781-hda", IRQ_RESOURCE_AUTO, 0 }, - { "tas2781-hda", IRQ_RESOURCE_AUTO, 0 }, - { "tas2781-hda", IRQ_RESOURCE_AUTO, 0 }, - { "tas2781-hda", IRQ_RESOURCE_AUTO, 0 }, + { "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 }, + { "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 }, + { "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 }, + { "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 }, {} }, .bus_type = SMI_AUTO_DETECT,
Hi,
On 26-Nov-25 1:19 PM, Baojun Xu wrote:
The tas2781-hda supports multi-projects. In some projects, GpioInt() was dropped due to no IRQ connection.
See the example code in the cover letter.
Please don't do this, the example code is not that big, people should not need to go and hunt down the example code, please just add it to the commit message.
Also please use longer lines (wrap at 75 chars) for the commit msg and please use empty lines between paragraphs to clearly separate the paragraphs.
Regards,
Hans
But in smi_i2c_probe(), smi_spi_probe() (serial-multi-instantiate.c), if looking for IRQ by smi_get_irq() fails, it will return an error, will not add new device, and cause smi_probe() to fail. So, we need to add an exception case for these situations. BTW, this patch will take effect on both I2C and SPI devices.
Signed-off-by: Baojun Xu baojun.xu@ti.com
v4:
- Change the description for this patch.
v3:
- Add IRQ_RESOURCE_OPT for IRQ missing cases.
v2:
- Remove error ignore, change to AUTO compatible with NONE.
drivers/platform/x86/serial-multi-instantiate.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/serial-multi-instantiate.c b/drivers/platform/x86/serial-multi-instantiate.c index db030b0f176a..1a369334f9cb 100644 --- a/drivers/platform/x86/serial-multi-instantiate.c +++ b/drivers/platform/x86/serial-multi-instantiate.c @@ -22,6 +22,7 @@ #define IRQ_RESOURCE_GPIO 1 #define IRQ_RESOURCE_APIC 2 #define IRQ_RESOURCE_AUTO 3 +#define IRQ_RESOURCE_OPT BIT(2)
enum smi_bus_type { SMI_I2C, @@ -64,6 +65,10 @@ static int smi_get_irq(struct platform_device *pdev, struct acpi_device *adev, dev_dbg(&pdev->dev, "Using platform irq\n"); break; }
if (inst->flags & IRQ_RESOURCE_OPT) {dev_dbg(&pdev->dev, "No irq\n");return 0; break; case IRQ_RESOURCE_GPIO: ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx);}@@ -386,10 +391,10 @@ static const struct smi_node cs35l57_hda = {
static const struct smi_node tas2781_hda = { .instances = {
{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },
{ "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 },{ "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 },{ "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 }, {} }, .bus_type = SMI_AUTO_DETECT,{ "tas2781-hda", IRQ_RESOURCE_AUTO | IRQ_RESOURCE_OPT, 0 },
participants (2)
-
Baojun Xu -
Hans de Goede