diff mbox

thermal: int340x: check for sensor when PTYP is missing

Message ID 1496790041-104500-1-git-send-email-srinivas.pandruvada@linux.intel.com (mailing list archive)
State Accepted, archived
Delegated to: Zhang Rui
Headers show

Commit Message

Srinivas Pandruvada June 6, 2017, 11 p.m. UTC
For INT3403 sensor PTYP field is mandatory. But some platforms didn't
have this field for sensors. This cause load failure for int3403 driver.

This change checks for the presence of _TMP method and if present, then
treats this device as a sensor.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
 drivers/thermal/int340x_thermal/int3403_thermal.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Andy Shevchenko June 7, 2017, 10:55 a.m. UTC | #1
On Wed, Jun 7, 2017 at 2:00 AM, Srinivas Pandruvada
<srinivas.pandruvada@linux.intel.com> wrote:
> For INT3403 sensor PTYP field is mandatory. But some platforms didn't
> have this field for sensors. This cause load failure for int3403 driver.
>
> This change checks for the presence of _TMP method and if present, then
> treats this device as a sensor.

>         status = acpi_evaluate_integer(priv->adev->handle, "PTYP",
>                                        NULL, &priv->type);
>         if (ACPI_FAILURE(status)) {
> -               result = -EINVAL;
> -               goto err;

> +               unsigned long long tmp;

You may use &priv->type as temporary variable, though I would go other
way around:
declare tmp for function, then

    unsigned long long tmp;
...
    status = acpi_evaluate_integer(priv->adev->handle, "PTYP",  NULL, &tmp);
    if (ACPI_FAILURE(status)) {
        status = acpi_evaluate_integer(priv->adev->handle, "_TMP", NULL, &tmp);
        if (ACPI_FAILURE(status)) {
            result = -EINVAL;
            goto err;
        }
        tmp = INT3403_TYPE_SENSOR;
    }
    priv->type = tmp;

> +               } else {

This is redundant.

> +                       priv->type = INT3403_TYPE_SENSOR;
> +               }
>         }
Srinivas Pandruvada June 9, 2017, 10:23 p.m. UTC | #2
On Wed, 2017-06-07 at 13:55 +0300, Andy Shevchenko wrote:
> On Wed, Jun 7, 2017 at 2:00 AM, Srinivas Pandruvada
> <srinivas.pandruvada@linux.intel.com> wrote:
> > 
> > For INT3403 sensor PTYP field is mandatory. But some platforms
> > didn't
> > have this field for sensors. This cause load failure for int3403
> > driver.
> > 
> > This change checks for the presence of _TMP method and if present,
> > then
> > treats this device as a sensor.
> > 
> >         status = acpi_evaluate_integer(priv->adev->handle, "PTYP",
> >                                        NULL, &priv->type);
> >         if (ACPI_FAILURE(status)) {
> > -               result = -EINVAL;
> > -               goto err;
> > 
> > +               unsigned long long tmp;
> You may use &priv->type as temporary variable, though I would go
> other
> way around:
> declare tmp for function, then
> 
>     unsigned long long tmp;
> ...
>     status = acpi_evaluate_integer(priv->adev->handle, "PTYP",  NULL,
> &tmp);
>     if (ACPI_FAILURE(status)) {
>         status = acpi_evaluate_integer(priv->adev->handle, "_TMP",
> NULL, &tmp);
>         if (ACPI_FAILURE(status)) {
>             result = -EINVAL;
>             goto err;
>         }
>         tmp = INT3403_TYPE_SENSOR;
>     }
>     priv->type = tmp;
> 
So what are we saving by doing this way?

Thanks,
Srinivas

> > 
> > +               } else {
> This is redundant.
> 
> > 
> > +                       priv->type = INT3403_TYPE_SENSOR;
> > +               }
> >         }
Andy Shevchenko June 9, 2017, 10:36 p.m. UTC | #3
On Sat, Jun 10, 2017 at 1:23 AM, Srinivas Pandruvada
<srinivas.pandruvada@linux.intel.com> wrote:
> On Wed, 2017-06-07 at 13:55 +0300, Andy Shevchenko wrote:
>> On Wed, Jun 7, 2017 at 2:00 AM, Srinivas Pandruvada
>> <srinivas.pandruvada@linux.intel.com> wrote:

>> > This change checks for the presence of _TMP method and if present,
>> > then
>> > treats this device as a sensor.
>> >
>> >         status = acpi_evaluate_integer(priv->adev->handle, "PTYP",
>> >                                        NULL, &priv->type);
>> >         if (ACPI_FAILURE(status)) {
>> > -               result = -EINVAL;
>> > -               goto err;
>> >
>> > +               unsigned long long tmp;
>> You may use &priv->type as temporary variable, though I would go
>> other
>> way around:
>> declare tmp for function, then
>>
>>     unsigned long long tmp;
>> ...
>>     status = acpi_evaluate_integer(priv->adev->handle, "PTYP",  NULL,
>> &tmp);
>>     if (ACPI_FAILURE(status)) {
>>         status = acpi_evaluate_integer(priv->adev->handle, "_TMP",
>> NULL, &tmp);
>>         if (ACPI_FAILURE(status)) {
>>             result = -EINVAL;
>>             goto err;
>>         }
>>         tmp = INT3403_TYPE_SENSOR;
>>     }
>>     priv->type = tmp;
>>
> So what are we saving by doing this way?

We make priv->type assignment in one place.

That's the difference.

So, you may choose your way of course. It's not a big deal.
diff mbox

Patch

diff --git a/drivers/thermal/int340x_thermal/int3403_thermal.c b/drivers/thermal/int340x_thermal/int3403_thermal.c
index c4890c9..8a7f24d 100644
--- a/drivers/thermal/int340x_thermal/int3403_thermal.c
+++ b/drivers/thermal/int340x_thermal/int3403_thermal.c
@@ -238,8 +238,16 @@  static int int3403_add(struct platform_device *pdev)
 	status = acpi_evaluate_integer(priv->adev->handle, "PTYP",
 				       NULL, &priv->type);
 	if (ACPI_FAILURE(status)) {
-		result = -EINVAL;
-		goto err;
+		unsigned long long tmp;
+
+		status = acpi_evaluate_integer(priv->adev->handle, "_TMP",
+					       NULL, &tmp);
+		if (ACPI_FAILURE(status)) {
+			result = -EINVAL;
+			goto err;
+		} else {
+			priv->type = INT3403_TYPE_SENSOR;
+		}
 	}
 
 	platform_set_drvdata(pdev, priv);