|
21 | 21 | #define IRQ_RESOURCE_NONE 0
|
22 | 22 | #define IRQ_RESOURCE_GPIO 1
|
23 | 23 | #define IRQ_RESOURCE_APIC 2
|
| 24 | +#define IRQ_RESOURCE_AUTO 3 |
24 | 25 |
|
25 | 26 | enum smi_bus_type {
|
26 | 27 | SMI_I2C,
|
@@ -52,6 +53,18 @@ static int smi_get_irq(struct platform_device *pdev, struct acpi_device *adev,
|
52 | 53 | int ret;
|
53 | 54 |
|
54 | 55 | switch (inst->flags & IRQ_RESOURCE_TYPE) {
|
| 56 | + case IRQ_RESOURCE_AUTO: |
| 57 | + ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx); |
| 58 | + if (ret > 0) { |
| 59 | + dev_dbg(&pdev->dev, "Using gpio irq\n"); |
| 60 | + break; |
| 61 | + } |
| 62 | + ret = platform_get_irq(pdev, inst->irq_idx); |
| 63 | + if (ret > 0) { |
| 64 | + dev_dbg(&pdev->dev, "Using platform irq\n"); |
| 65 | + break; |
| 66 | + } |
| 67 | + break; |
55 | 68 | case IRQ_RESOURCE_GPIO:
|
56 | 69 | ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx);
|
57 | 70 | break;
|
@@ -308,10 +321,10 @@ static const struct smi_node int3515_data = {
|
308 | 321 |
|
309 | 322 | static const struct smi_node cs35l41_hda = {
|
310 | 323 | .instances = {
|
311 |
| - { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 }, |
312 |
| - { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 }, |
313 |
| - { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 }, |
314 |
| - { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 }, |
| 324 | + { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 }, |
| 325 | + { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 }, |
| 326 | + { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 }, |
| 327 | + { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 }, |
315 | 328 | {}
|
316 | 329 | },
|
317 | 330 | .bus_type = SMI_AUTO_DETECT,
|
|
0 commit comments