Commit 6fc2e1a5 authored by Daniel Lezcano's avatar Daniel Lezcano Committed by Daniel Lezcano
Browse files

thermal/drivers/tegra: Switch to new of API



The thermal OF code has a new API allowing to migrate the OF
initialization to a simpler approach. The ops are no longer device
tree specific and are the generic ones provided by the core code.

Convert the ops to the thermal_zone_device_ops format and use the new
API to register the thermal zone with these generic ops.

Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linexp.org>
Link: https://lore.kernel.org/r/20220804224349.1926752-8-daniel.lezcano@linexp.org


Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent 44b5554d
Loading
Loading
Loading
Loading
+10 −11
Original line number Original line Diff line number Diff line
@@ -421,9 +421,9 @@ static int translate_temp(u16 val)
	return t;
	return t;
}
}


static int tegra_thermctl_get_temp(void *data, int *out_temp)
static int tegra_thermctl_get_temp(struct thermal_zone_device *tz, int *out_temp)
{
{
	struct tegra_thermctl_zone *zone = data;
	struct tegra_thermctl_zone *zone = tz->devdata;
	u32 val;
	u32 val;


	val = readl(zone->reg);
	val = readl(zone->reg);
@@ -582,10 +582,9 @@ static int tsensor_group_thermtrip_get(struct tegra_soctherm *ts, int id)
	return temp;
	return temp;
}
}


static int tegra_thermctl_set_trip_temp(void *data, int trip, int temp)
static int tegra_thermctl_set_trip_temp(struct thermal_zone_device *tz, int trip, int temp)
{
{
	struct tegra_thermctl_zone *zone = data;
	struct tegra_thermctl_zone *zone = tz->devdata;
	struct thermal_zone_device *tz = zone->tz;
	struct tegra_soctherm *ts = zone->ts;
	struct tegra_soctherm *ts = zone->ts;
	const struct tegra_tsensor_group *sg = zone->sg;
	const struct tegra_tsensor_group *sg = zone->sg;
	struct device *dev = zone->dev;
	struct device *dev = zone->dev;
@@ -657,9 +656,9 @@ static void thermal_irq_disable(struct tegra_thermctl_zone *zn)
	mutex_unlock(&zn->ts->thermctl_lock);
	mutex_unlock(&zn->ts->thermctl_lock);
}
}


static int tegra_thermctl_set_trips(void *data, int lo, int hi)
static int tegra_thermctl_set_trips(struct thermal_zone_device *tz, int lo, int hi)
{
{
	struct tegra_thermctl_zone *zone = data;
	struct tegra_thermctl_zone *zone = tz->devdata;
	u32 r;
	u32 r;


	thermal_irq_disable(zone);
	thermal_irq_disable(zone);
@@ -682,7 +681,7 @@ static int tegra_thermctl_set_trips(void *data, int lo, int hi)
	return 0;
	return 0;
}
}


static const struct thermal_zone_of_device_ops tegra_of_thermal_ops = {
static const struct thermal_zone_device_ops tegra_of_thermal_ops = {
	.get_temp = tegra_thermctl_get_temp,
	.get_temp = tegra_thermctl_get_temp,
	.set_trip_temp = tegra_thermctl_set_trip_temp,
	.set_trip_temp = tegra_thermctl_set_trip_temp,
	.set_trips = tegra_thermctl_set_trips,
	.set_trips = tegra_thermctl_set_trips,
@@ -2194,7 +2193,7 @@ static int tegra_soctherm_probe(struct platform_device *pdev)
		zone->sg = soc->ttgs[i];
		zone->sg = soc->ttgs[i];
		zone->ts = tegra;
		zone->ts = tegra;


		z = devm_thermal_zone_of_sensor_register(&pdev->dev,
		z = devm_thermal_of_zone_register(&pdev->dev,
						  soc->ttgs[i]->id, zone,
						  soc->ttgs[i]->id, zone,
						  &tegra_of_thermal_ops);
						  &tegra_of_thermal_ops);
		if (IS_ERR(z)) {
		if (IS_ERR(z)) {
+12 −7
Original line number Original line Diff line number Diff line
@@ -30,9 +30,9 @@ struct tegra_bpmp_thermal {
	struct tegra_bpmp_thermal_zone **zones;
	struct tegra_bpmp_thermal_zone **zones;
};
};


static int tegra_bpmp_thermal_get_temp(void *data, int *out_temp)
static int __tegra_bpmp_thermal_get_temp(struct tegra_bpmp_thermal_zone *zone,
					 int *out_temp)
{
{
	struct tegra_bpmp_thermal_zone *zone = data;
	struct mrq_thermal_host_to_bpmp_request req;
	struct mrq_thermal_host_to_bpmp_request req;
	union mrq_thermal_bpmp_to_host_response reply;
	union mrq_thermal_bpmp_to_host_response reply;
	struct tegra_bpmp_message msg;
	struct tegra_bpmp_message msg;
@@ -60,9 +60,14 @@ static int tegra_bpmp_thermal_get_temp(void *data, int *out_temp)
	return 0;
	return 0;
}
}


static int tegra_bpmp_thermal_set_trips(void *data, int low, int high)
static int tegra_bpmp_thermal_get_temp(struct thermal_zone_device *tz, int *out_temp)
{
{
	struct tegra_bpmp_thermal_zone *zone = data;
	return __tegra_bpmp_thermal_get_temp(tz->devdata, out_temp);
}

static int tegra_bpmp_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
{
	struct tegra_bpmp_thermal_zone *zone = tz->devdata;
	struct mrq_thermal_host_to_bpmp_request req;
	struct mrq_thermal_host_to_bpmp_request req;
	struct tegra_bpmp_message msg;
	struct tegra_bpmp_message msg;
	int err;
	int err;
@@ -157,7 +162,7 @@ static int tegra_bpmp_thermal_get_num_zones(struct tegra_bpmp *bpmp,
	return 0;
	return 0;
}
}


static const struct thermal_zone_of_device_ops tegra_bpmp_of_thermal_ops = {
static const struct thermal_zone_device_ops tegra_bpmp_of_thermal_ops = {
	.get_temp = tegra_bpmp_thermal_get_temp,
	.get_temp = tegra_bpmp_thermal_get_temp,
	.set_trips = tegra_bpmp_thermal_set_trips,
	.set_trips = tegra_bpmp_thermal_set_trips,
};
};
@@ -200,13 +205,13 @@ static int tegra_bpmp_thermal_probe(struct platform_device *pdev)
		zone->idx = i;
		zone->idx = i;
		zone->tegra = tegra;
		zone->tegra = tegra;


		err = tegra_bpmp_thermal_get_temp(zone, &temp);
		err = __tegra_bpmp_thermal_get_temp(zone, &temp);
		if (err < 0) {
		if (err < 0) {
			devm_kfree(&pdev->dev, zone);
			devm_kfree(&pdev->dev, zone);
			continue;
			continue;
		}
		}


		tzd = devm_thermal_zone_of_sensor_register(
		tzd = devm_thermal_of_zone_register(
			&pdev->dev, i, zone, &tegra_bpmp_of_thermal_ops);
			&pdev->dev, i, zone, &tegra_bpmp_of_thermal_ops);
		if (IS_ERR(tzd)) {
		if (IS_ERR(tzd)) {
			if (PTR_ERR(tzd) == -EPROBE_DEFER)
			if (PTR_ERR(tzd) == -EPROBE_DEFER)
+6 −6
Original line number Original line Diff line number Diff line
@@ -159,9 +159,9 @@ static void devm_tegra_tsensor_hw_disable(void *data)
	tegra_tsensor_hw_disable(ts);
	tegra_tsensor_hw_disable(ts);
}
}


static int tegra_tsensor_get_temp(void *data, int *temp)
static int tegra_tsensor_get_temp(struct thermal_zone_device *tz, int *temp)
{
{
	const struct tegra_tsensor_channel *tsc = data;
	const struct tegra_tsensor_channel *tsc = tz->devdata;
	const struct tegra_tsensor *ts = tsc->ts;
	const struct tegra_tsensor *ts = tsc->ts;
	int err, c1, c2, c3, c4, counter;
	int err, c1, c2, c3, c4, counter;
	u32 val;
	u32 val;
@@ -217,9 +217,9 @@ static int tegra_tsensor_temp_to_counter(const struct tegra_tsensor *ts, int tem
	return DIV_ROUND_CLOSEST(c2 * 1000000 - ts->calib.b, ts->calib.a);
	return DIV_ROUND_CLOSEST(c2 * 1000000 - ts->calib.b, ts->calib.a);
}
}


static int tegra_tsensor_set_trips(void *data, int low, int high)
static int tegra_tsensor_set_trips(struct thermal_zone_device *tz, int low, int high)
{
{
	const struct tegra_tsensor_channel *tsc = data;
	const struct tegra_tsensor_channel *tsc = tz->devdata;
	const struct tegra_tsensor *ts = tsc->ts;
	const struct tegra_tsensor *ts = tsc->ts;
	u32 val;
	u32 val;


@@ -240,7 +240,7 @@ static int tegra_tsensor_set_trips(void *data, int low, int high)
	return 0;
	return 0;
}
}


static const struct thermal_zone_of_device_ops ops = {
static const struct thermal_zone_device_ops ops = {
	.get_temp = tegra_tsensor_get_temp,
	.get_temp = tegra_tsensor_get_temp,
	.set_trips = tegra_tsensor_set_trips,
	.set_trips = tegra_tsensor_set_trips,
};
};
@@ -516,7 +516,7 @@ static int tegra_tsensor_register_channel(struct tegra_tsensor *ts,
	tsc->id = id;
	tsc->id = id;
	tsc->regs = ts->regs + 0x40 * (hw_id + 1);
	tsc->regs = ts->regs + 0x40 * (hw_id + 1);


	tsc->tzd = devm_thermal_zone_of_sensor_register(ts->dev, id, tsc, &ops);
	tsc->tzd = devm_thermal_of_zone_register(ts->dev, id, tsc, &ops);
	if (IS_ERR(tsc->tzd)) {
	if (IS_ERR(tsc->tzd)) {
		if (PTR_ERR(tsc->tzd) != -ENODEV)
		if (PTR_ERR(tsc->tzd) != -ENODEV)
			return dev_err_probe(ts->dev, PTR_ERR(tsc->tzd),
			return dev_err_probe(ts->dev, PTR_ERR(tsc->tzd),