Skip to content

Commit

Permalink
Merge tag 'thermal-v6.1-rc1-2' of https://git.kernel.org/pub/scm/linu…
Browse files Browse the repository at this point in the history
…x/kernel/git/thermal/linux

Pull thermal control fixes for 6.1-rc1 from Daniel Lezcano:

"- Used the platform data to get the sensor id instead of parsing the
   device in the driver and remove the dedicated OF function (Daniel
   Lezcano)

 - Fixed Kconfig dependency for the QCom tsens driver (Jonathan Cameron)

 - Fixed missing const annotation for the RCar ops driver and removed a
   duplicate parameter check (Lad Prabhakar)

 - Fixed a NULL pointer dereference when calling set_trip_temp() (Lad
   Prabhakar)

 - Fixed the fourth hardware id in the QCom tsens driver (Vincent
   Knecht)"

* tag 'thermal-v6.1-rc1-2' of https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux:
  thermal/drivers/qcom/tsens-v0_1: Fix MSM8939 fourth sensor hw_id
  thermal/core: Add a check before calling set_trip_temp()
  thermal/core: Drop valid pointer check for type
  thermal/drivers/rcar_thermal: Constify static thermal_zone_device_ops
  thermal/drivers/qcom: Drop false build dependency of all QCOM drivers on QCOM_TSENS
  thermal/of: Remove the thermal_zone_of_get_sensor_id() function
  thermal/drivers/imx_sc: Rely on the platform data to get the resource id
  • Loading branch information
Rafael J. Wysocki committed Oct 4, 2022
2 parents a5088ee + b0c883e commit e021563
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 96 deletions.
2 changes: 1 addition & 1 deletion drivers/thermal/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ obj-$(CONFIG_DA9062_THERMAL) += da9062-thermal.o
obj-y += intel/
obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/
obj-y += st/
obj-$(CONFIG_QCOM_TSENS) += qcom/
obj-y += qcom/
obj-y += tegra/
obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
obj-$(CONFIG_MTK_THERMAL) += mtk_thermal.o
Expand Down
68 changes: 33 additions & 35 deletions drivers/thermal/imx_sc_thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,68 +76,66 @@ static const struct thermal_zone_device_ops imx_sc_thermal_ops = {

static int imx_sc_thermal_probe(struct platform_device *pdev)
{
struct device_node *np, *child, *sensor_np;
struct imx_sc_sensor *sensor;
int ret;
const int *resource_id;
int i, ret;

ret = imx_scu_get_handle(&thermal_ipc_handle);
if (ret)
return ret;

np = of_find_node_by_name(NULL, "thermal-zones");
if (!np)
return -ENODEV;
resource_id = of_device_get_match_data(&pdev->dev);
if (!resource_id)
return -EINVAL;

sensor_np = of_node_get(pdev->dev.of_node);
for (i = 0; resource_id[i] > 0; i++) {

for_each_available_child_of_node(np, child) {
sensor = devm_kzalloc(&pdev->dev, sizeof(*sensor), GFP_KERNEL);
if (!sensor) {
of_node_put(child);
ret = -ENOMEM;
goto put_node;
}
if (!sensor)
return -ENOMEM;

ret = thermal_zone_of_get_sensor_id(child,
sensor_np,
&sensor->resource_id);
if (ret < 0) {
dev_err(&pdev->dev,
"failed to get valid sensor resource id: %d\n",
ret);
of_node_put(child);
break;
}
sensor->resource_id = resource_id[i];

sensor->tzd = devm_thermal_of_zone_register(&pdev->dev,
sensor->resource_id,
sensor,
&imx_sc_thermal_ops);
sensor->tzd = devm_thermal_of_zone_register(&pdev->dev, sensor->resource_id,
sensor, &imx_sc_thermal_ops);
if (IS_ERR(sensor->tzd)) {
dev_err(&pdev->dev, "failed to register thermal zone\n");
/*
* Save the error value before freeing the
* sensor pointer, otherwise we endup with a
* use-after-free error
*/
ret = PTR_ERR(sensor->tzd);
of_node_put(child);
break;

devm_kfree(&pdev->dev, sensor);

/*
* The thermal framework notifies us there is
* no thermal zone description for such a
* sensor id
*/
if (ret == -ENODEV)
continue;

dev_err(&pdev->dev, "failed to register thermal zone\n");
return ret;
}

if (devm_thermal_add_hwmon_sysfs(sensor->tzd))
dev_warn(&pdev->dev, "failed to add hwmon sysfs attributes\n");
}

put_node:
of_node_put(sensor_np);
of_node_put(np);

return ret;
return 0;
}

static int imx_sc_thermal_remove(struct platform_device *pdev)
{
return 0;
}

static int imx_sc_sensors[] = { IMX_SC_R_SYSTEM, IMX_SC_R_PMIC_0, -1 };

static const struct of_device_id imx_sc_thermal_table[] = {
{ .compatible = "fsl,imx-sc-thermal", },
{ .compatible = "fsl,imx-sc-thermal", .data = imx_sc_sensors },
{}
};
MODULE_DEVICE_TABLE(of, imx_sc_thermal_table);
Expand Down
2 changes: 1 addition & 1 deletion drivers/thermal/qcom/tsens-v0_1.c
Original file line number Diff line number Diff line change
Expand Up @@ -604,7 +604,7 @@ static const struct tsens_ops ops_8939 = {
struct tsens_plat_data data_8939 = {
.num_sensors = 10,
.ops = &ops_8939,
.hw_ids = (unsigned int []){ 0, 1, 2, 4, 5, 6, 7, 8, 9, 10 },
.hw_ids = (unsigned int []){ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10 },

.feat = &tsens_v0_1_feat,
.fields = tsens_v0_1_regfields,
Expand Down
2 changes: 1 addition & 1 deletion drivers/thermal/rcar_thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ static int rcar_thermal_get_trip_temp(struct thermal_zone_device *zone,
return 0;
}

static struct thermal_zone_device_ops rcar_thermal_zone_of_ops = {
static const struct thermal_zone_device_ops rcar_thermal_zone_of_ops = {
.get_temp = rcar_thermal_get_temp,
};

Expand Down
2 changes: 1 addition & 1 deletion drivers/thermal/thermal_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1186,7 +1186,7 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t
return ERR_PTR(-EINVAL);
}

if (type && strlen(type) >= THERMAL_NAME_LENGTH) {
if (strlen(type) >= THERMAL_NAME_LENGTH) {
pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
type, THERMAL_NAME_LENGTH);
return ERR_PTR(-EINVAL);
Expand Down
44 changes: 0 additions & 44 deletions drivers/thermal/thermal_of.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,50 +130,6 @@ static int of_thermal_get_crit_temp(struct thermal_zone_device *tz,
return -EINVAL;
}

/**
* thermal_zone_of_get_sensor_id - get sensor ID from a DT thermal zone
* @tz_np: a valid thermal zone device node.
* @sensor_np: a sensor node of a valid sensor device.
* @id: the sensor ID returned if success.
*
* This function will get sensor ID from a given thermal zone node and
* the sensor node must match the temperature provider @sensor_np.
*
* Return: 0 on success, proper error code otherwise.
*/

int thermal_zone_of_get_sensor_id(struct device_node *tz_np,
struct device_node *sensor_np,
u32 *id)
{
struct of_phandle_args sensor_specs;
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.np != sensor_np) {
of_node_put(sensor_specs.np);
return -ENODEV;
}

if (sensor_specs.args_count > 1)
pr_warn("%pOFn: too many cells in sensor specifier %d\n",
sensor_specs.np, sensor_specs.args_count);

*id = sensor_specs.args_count ? sensor_specs.args[0] : 0;

of_node_put(sensor_specs.np);

return 0;
}
EXPORT_SYMBOL_GPL(thermal_zone_of_get_sensor_id);

/*** functions parsing device tree nodes ***/

static int of_find_trip_id(struct device_node *np, struct device_node *trip)
Expand Down
8 changes: 5 additions & 3 deletions drivers/thermal/thermal_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,11 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr,
if (kstrtoint(buf, 10, &temperature))
return -EINVAL;

ret = tz->ops->set_trip_temp(tz, trip, temperature);
if (ret)
return ret;
if (tz->ops->set_trip_temp) {
ret = tz->ops->set_trip_temp(tz, trip, temperature);
if (ret)
return ret;
}

if (tz->trips)
tz->trips[trip].temperature = temperature;
Expand Down
10 changes: 0 additions & 10 deletions include/linux/thermal.h
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,6 @@ void devm_thermal_of_zone_unregister(struct device *dev, struct thermal_zone_dev

void thermal_of_zone_unregister(struct thermal_zone_device *tz);

int thermal_zone_of_get_sensor_id(struct device_node *tz_np,
struct device_node *sensor_np,
u32 *id);
#else
static inline
struct thermal_zone_device *thermal_of_zone_register(struct device_node *sensor, int id, void *data,
Expand All @@ -334,13 +331,6 @@ static inline void devm_thermal_of_zone_unregister(struct device *dev,
struct thermal_zone_device *tz)
{
}

static inline int thermal_zone_of_get_sensor_id(struct device_node *tz_np,
struct device_node *sensor_np,
u32 *id)
{
return -ENOENT;
}
#endif

#ifdef CONFIG_THERMAL
Expand Down

0 comments on commit e021563

Please sign in to comment.