Message ID | 20220709211653.18938-1-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | [v2,1/6] platform/x86: serial-multi-instantiate: Improve autodetection | expand |
Hi, On 7/9/22 23:16, Andy Shevchenko wrote: > Instead of calling specific resource counter, let just probe each > of the type and see what it says. Return -ENOENT if no resources > found. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Thank you for your patch-series, I've applied the series to my review-hans branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans Note it will show up in my review-hans branch once I've pushed my local branch there, which might take a while. Once I've run some tests on this branch the patches there will be added to the platform-drivers-x86/for-next branch and eventually will be included in the pdx86 pull-request to Linus for the next merge-window. Regards, Hans > --- > v2: squashed patch 1, restored behaviour, added comment, dropped message (Hans) > .../platform/x86/serial-multi-instantiate.c | 23 ++++++++++++------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/drivers/platform/x86/serial-multi-instantiate.c b/drivers/platform/x86/serial-multi-instantiate.c > index 1e8063b7c169..366087a9fce2 100644 > --- a/drivers/platform/x86/serial-multi-instantiate.c > +++ b/drivers/platform/x86/serial-multi-instantiate.c > @@ -100,7 +100,7 @@ static int smi_spi_probe(struct platform_device *pdev, struct acpi_device *adev, > if (ret < 0) > return ret; > else if (!ret) > - return -ENODEV; > + return -ENOENT; > > count = ret; > > @@ -184,7 +184,7 @@ static int smi_i2c_probe(struct platform_device *pdev, struct acpi_device *adev, > if (ret < 0) > return ret; > else if (!ret) > - return -ENODEV; > + return -ENOENT; > > count = ret; > > @@ -232,6 +232,7 @@ static int smi_probe(struct platform_device *pdev) > const struct smi_node *node; > struct acpi_device *adev; > struct smi *smi; > + int ret; > > adev = ACPI_COMPANION(dev); > if (!adev) > @@ -255,15 +256,21 @@ static int smi_probe(struct platform_device *pdev) > case SMI_SPI: > return smi_spi_probe(pdev, adev, smi, node->instances); > case SMI_AUTO_DETECT: > - if (i2c_acpi_client_count(adev) > 0) > - return smi_i2c_probe(pdev, adev, smi, node->instances); > - else > - return smi_spi_probe(pdev, adev, smi, node->instances); > + /* > + * For backwards-compatibility with the existing nodes I2C > + * is checked first and if such entries are found ONLY I2C > + * devices are created. Since some existing nodes that were > + * already handled by this driver could also contain unrelated > + * SpiSerialBus nodes that were previously ignored, and this > + * preserves that behavior. > + */ > + ret = smi_i2c_probe(pdev, adev, smi, node->instances); > + if (ret != -ENOENT) > + return ret; > + return smi_spi_probe(pdev, adev, smi, node->instances); > default: > return -EINVAL; > } > - > - return 0; /* never reached */ > } > > static int smi_remove(struct platform_device *pdev)
diff --git a/drivers/platform/x86/serial-multi-instantiate.c b/drivers/platform/x86/serial-multi-instantiate.c index 1e8063b7c169..366087a9fce2 100644 --- a/drivers/platform/x86/serial-multi-instantiate.c +++ b/drivers/platform/x86/serial-multi-instantiate.c @@ -100,7 +100,7 @@ static int smi_spi_probe(struct platform_device *pdev, struct acpi_device *adev, if (ret < 0) return ret; else if (!ret) - return -ENODEV; + return -ENOENT; count = ret; @@ -184,7 +184,7 @@ static int smi_i2c_probe(struct platform_device *pdev, struct acpi_device *adev, if (ret < 0) return ret; else if (!ret) - return -ENODEV; + return -ENOENT; count = ret; @@ -232,6 +232,7 @@ static int smi_probe(struct platform_device *pdev) const struct smi_node *node; struct acpi_device *adev; struct smi *smi; + int ret; adev = ACPI_COMPANION(dev); if (!adev) @@ -255,15 +256,21 @@ static int smi_probe(struct platform_device *pdev) case SMI_SPI: return smi_spi_probe(pdev, adev, smi, node->instances); case SMI_AUTO_DETECT: - if (i2c_acpi_client_count(adev) > 0) - return smi_i2c_probe(pdev, adev, smi, node->instances); - else - return smi_spi_probe(pdev, adev, smi, node->instances); + /* + * For backwards-compatibility with the existing nodes I2C + * is checked first and if such entries are found ONLY I2C + * devices are created. Since some existing nodes that were + * already handled by this driver could also contain unrelated + * SpiSerialBus nodes that were previously ignored, and this + * preserves that behavior. + */ + ret = smi_i2c_probe(pdev, adev, smi, node->instances); + if (ret != -ENOENT) + return ret; + return smi_spi_probe(pdev, adev, smi, node->instances); default: return -EINVAL; } - - return 0; /* never reached */ } static int smi_remove(struct platform_device *pdev)
Instead of calling specific resource counter, let just probe each of the type and see what it says. Return -ENOENT if no resources found. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- v2: squashed patch 1, restored behaviour, added comment, dropped message (Hans) .../platform/x86/serial-multi-instantiate.c | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-)