> -----Original Message----- > From: Daniel Lezcano [mailto:daniel.lezcano@xxxxxxxxxx] > Sent: Thursday, May 16, 2019 5:39 PM > To: Anson Huang <anson.huang@xxxxxxx>; robh+dt@xxxxxxxxxx; > mark.rutland@xxxxxxx; shawnguo@xxxxxxxxxx; s.hauer@xxxxxxxxxxxxxx; > kernel@xxxxxxxxxxxxxx; festevam@xxxxxxxxx; catalin.marinas@xxxxxxx; > will.deacon@xxxxxxx; rui.zhang@xxxxxxxxx; edubezval@xxxxxxxxx; > Aisheng Dong <aisheng.dong@xxxxxxx>; ulf.hansson@xxxxxxxxxx; Daniel > Baluta <daniel.baluta@xxxxxxx>; Peng Fan <peng.fan@xxxxxxx>; > heiko@xxxxxxxxx; horms+renesas@xxxxxxxxxxxx; agross@xxxxxxxxxx; > olof@xxxxxxxxx; bjorn.andersson@xxxxxxxxxx; jagan@xxxxxxxxxxxxxxxxxxxx; > enric.balletbo@xxxxxxxxxxxxx; marc.w.gonzalez@xxxxxxx; > devicetree@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linux-arm- > kernel@xxxxxxxxxxxxxxxxxxx; linux-pm@xxxxxxxxxxxxxxx > Cc: dl-linux-imx <linux-imx@xxxxxxx> > Subject: Re: [PATCH V12 2/5] thermal: of-thermal: add API for getting sensor > ID from DT > > On 16/04/2019 05:22, Anson Huang wrote: > > On some platforms like i.MX8QXP, the thermal driver needs a real HW > > sensor ID from DT thermal zone, the HW sensor ID is used to get > > temperature from SCU firmware, and the virtual sensor ID starting from > > 0 to N is NOT used at all, this patch adds new API > > thermal_zone_of_get_sensor_id() to provide the feature of getting > > sensor ID from DT thermal zone's node. > > > > Signed-off-by: Anson Huang <Anson.Huang@xxxxxxx> > > Eduardo? > > What do you think about this patch? I would like to hear Eduardo's opinion about this patch before sending out a new version for review, thanks. Anson. > > > --- > > New patch. > > --- > > drivers/thermal/of-thermal.c | 53 > ++++++++++++++++++++++++++++++++++---------- > > include/linux/thermal.h | 10 +++++++++ > > 2 files changed, 51 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/thermal/of-thermal.c > > b/drivers/thermal/of-thermal.c index 2df059c..2e4320c 100644 > > --- a/drivers/thermal/of-thermal.c > > +++ b/drivers/thermal/of-thermal.c > > @@ -446,6 +446,46 @@ thermal_zone_of_add_sensor(struct device_node > > *zone, } > > > > /** > > + * thermal_zone_of_get_sensor_id - get sensor ID from a DT thermal > > + zone > > + * @tz_np: a valid thermal zone device node. > > + * @sensor_specs: pointer to output arguments structure will be passed > back. > > + * @id: a sensor ID pointer will be passed back. > > + * > > + * This function will get sensor ID from a given thermal zone node, > > + use > > + * "thermal-sensors" as list name, and get sensor ID from first > > + phandle's > > + * argument. > > + * > > + * Return: 0 on success, proper error code otherwise. > > + */ > > + > > +int thermal_zone_of_get_sensor_id(struct device_node *tz_np, > > + struct of_phandle_args *sensor_specs, > > + u32 *id) > > +{ > > + int ret; > > + > > + ret = of_parse_phandle_with_args(tz_np, > > + "thermal-sensors", > > + "#thermal-sensor-cells", > > + 0, > > + sensor_specs); > > + if (ret) > > + return ret; > > + > > + if (sensor_specs->args_count >= 1) { > > + *id = sensor_specs->args[0]; > > + WARN(sensor_specs->args_count > 1, > > + "%pOFn: too many cells in sensor specifier %d\n", > > + sensor_specs->np, sensor_specs->args_count); > > + } else { > > + *id = 0; > > + } > > + > > + return 0; > > +} > > +EXPORT_SYMBOL_GPL(thermal_zone_of_get_sensor_id); > > + > > +/** > > * thermal_zone_of_sensor_register - registers a sensor to a DT thermal > zone > > * @dev: a valid struct device pointer of a sensor device. Must contain > > * a valid .of_node, for the sensor node. > > @@ -500,21 +540,10 @@ thermal_zone_of_sensor_register(struct device > *dev, int sensor_id, void *data, > > int ret, id; > > > > /* For now, thermal framework supports only 1 sensor per > zone */ > > - ret = of_parse_phandle_with_args(child, "thermal-sensors", > > - "#thermal-sensor-cells", > > - 0, &sensor_specs); > > + ret = thermal_zone_of_get_sensor_id(child, &sensor_specs, > &id); > > if (ret) > > continue; > > > > - if (sensor_specs.args_count >= 1) { > > - id = sensor_specs.args[0]; > > - WARN(sensor_specs.args_count > 1, > > - "%pOFn: too many cells in sensor specifier %d\n", > > - sensor_specs.np, sensor_specs.args_count); > > - } else { > > - id = 0; > > - } > > - > > if (sensor_specs.np == sensor_np && id == sensor_id) { > > tzd = thermal_zone_of_add_sensor(child, sensor_np, > > data, ops); > > diff --git a/include/linux/thermal.h b/include/linux/thermal.h index > > 5f4705f..970fb37 100644 > > --- a/include/linux/thermal.h > > +++ b/include/linux/thermal.h > > @@ -375,6 +375,9 @@ struct thermal_trip { > > > > /* Function declarations */ > > #ifdef CONFIG_THERMAL_OF > > +int thermal_zone_of_get_sensor_id(struct device_node *tz_np, > > + struct of_phandle_args *sensor_specs, > > + u32 *id); > > struct thermal_zone_device * > > thermal_zone_of_sensor_register(struct device *dev, int id, void *data, > > const struct thermal_zone_of_device_ops > *ops); @@ -386,6 +389,13 > > @@ struct thermal_zone_device > *devm_thermal_zone_of_sensor_register( > > void devm_thermal_zone_of_sensor_unregister(struct device *dev, > > struct thermal_zone_device *tz); > #else > > + > > +static int thermal_zone_of_get_sensor_id(struct device_node *tz_np, > > + struct of_phandle_args > *sensor_specs, > > + u32 *id) > > +{ > > + return -ENOENT; > > +} > > static inline struct thermal_zone_device * > > thermal_zone_of_sensor_register(struct device *dev, int id, void *data, > > const struct thermal_zone_of_device_ops > *ops) > > > > > -- > > <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww. > linaro.org%2F&data=02%7C01%7Canson.huang%40nxp.com%7Ca89b31 > e8690d4fba3e8b08d6d9e25488%7C686ea1d3bc2b4c6fa92cd99c5c301635%7 > C0%7C0%7C636935963439948138&sdata=gAYU5pi1Isj%2BhfREN8n6v03 > Lb%2F9eRzDzC2ocDdfe%2Bkc%3D&reserved=0> Linaro.org │ Open > source software for ARM SoCs > > Follow Linaro: > <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww. > facebook.com%2Fpages%2FLinaro&data=02%7C01%7Canson.huang%4 > 0nxp.com%7Ca89b31e8690d4fba3e8b08d6d9e25488%7C686ea1d3bc2b4c6fa > 92cd99c5c301635%7C0%7C0%7C636935963439948138&sdata=j%2Fo%2 > BFN8mALGBVhVQfKoYhijDw51FhcGjackCaUl%2BY%2FQ%3D&reserved= > 0> Facebook | > <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Ftwitte > r.com%2F%23!%2Flinaroorg&data=02%7C01%7Canson.huang%40nxp.c > om%7Ca89b31e8690d4fba3e8b08d6d9e25488%7C686ea1d3bc2b4c6fa92cd9 > 9c5c301635%7C0%7C0%7C636935963439948138&sdata=O%2Bry%2Fdk > UGuO22brYTMaz%2FCvGOUNt15WJF8uALLVgiwk%3D&reserved=0> > Twitter | > <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww. > linaro.org%2Flinaro- > blog%2F&data=02%7C01%7Canson.huang%40nxp.com%7Ca89b31e869 > 0d4fba3e8b08d6d9e25488%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7 > C0%7C636935963439948138&sdata=WLHahx%2BryvBprdoNUEvQ4kCnY > FmUuqgA14xqHjS7WHU%3D&reserved=0> Blog