diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index 42400c6aed61..0c7b776462a9 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -26,13 +26,6 @@ config THERMAL_NETLINK
 	  trip point crossed, cooling device update or governor
 	  change. It is recommended to enable the feature.
 
-config THERMAL_STATISTICS
-	bool "Thermal state transition statistics"
-	help
-	  Export thermal state transition statistics information through sysfs.
-
-	  If in doubt, say N.
-
 config THERMAL_DEBUGFS
 	bool "Thermal debugging file system"
 	depends on DEBUG_FS
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index a2d6eb0d0895..4851f2c7910f 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -949,7 +949,6 @@ __thermal_cooling_device_register(struct device_node *np,
 	return cdev;
 
 out_kfree_type:
-	thermal_cooling_device_destroy_sysfs(cdev);
 	kfree(cdev->type);
 	put_device(&cdev->device);
 	cdev = NULL;
@@ -1117,7 +1116,6 @@ void thermal_cooling_device_unregister(struct thermal_cooling_device *cdev)
 
 	ida_simple_remove(&thermal_cdev_ida, cdev->id);
 	device_del(&cdev->device);
-	thermal_cooling_device_destroy_sysfs(cdev);
 	kfree(cdev->type);
 	put_device(&cdev->device);
 }
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index 49331b8a5404..dcae52f20258 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -134,22 +134,12 @@ void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms);
 int thermal_zone_create_device_groups(struct thermal_zone_device *, int);
 void thermal_zone_destroy_device_groups(struct thermal_zone_device *);
 void thermal_cooling_device_setup_sysfs(struct thermal_cooling_device *);
-void thermal_cooling_device_destroy_sysfs(struct thermal_cooling_device *cdev);
 /* used only at binding time */
 ssize_t trip_point_show(struct device *, struct device_attribute *, char *);
 ssize_t weight_show(struct device *, struct device_attribute *, char *);
 ssize_t weight_store(struct device *, struct device_attribute *, const char *,
 		     size_t);
 
-#ifdef CONFIG_THERMAL_STATISTICS
-void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
-					 unsigned long new_state);
-#else
-static inline void
-thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
-				    unsigned long new_state) {}
-#endif /* CONFIG_THERMAL_STATISTICS */
-
 /* device tree support */
 #ifdef CONFIG_THERMAL_OF
 int of_parse_thermal_zones(void);
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
index 040d9e9b55e1..81185bb0d526 100644
--- a/drivers/thermal/thermal_helpers.c
+++ b/drivers/thermal/thermal_helpers.c
@@ -204,7 +204,6 @@ int thermal_cdev_set_state(struct thermal_cooling_device *cdev, int state)
 	ret = cdev->ops->set_cur_state(cdev, state);
 	if (!ret) {
 		thermal_notify_cdev_state_update(cdev->id, state);
-		thermal_cooling_device_stats_update(cdev, state);
 		thermal_debugfs_cdev_transition(cdev, state);
 	}
 
diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 935e79909121..e48c5ad26611 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -641,231 +641,14 @@ static const struct attribute_group cooling_device_attr_group = {
 
 static const struct attribute_group *cooling_device_attr_groups[] = {
 	&cooling_device_attr_group,
-	NULL, /* Space allocated for cooling_device_stats_attr_group */
 	NULL,
 };
 
-#ifdef CONFIG_THERMAL_STATISTICS
-struct cooling_dev_stats {
-	spinlock_t lock;
-	unsigned int total_trans;
-	unsigned long state;
-	unsigned long max_states;
-	ktime_t last_time;
-	ktime_t *time_in_state;
-	unsigned int *trans_table;
-};
-
-static void update_time_in_state(struct cooling_dev_stats *stats)
-{
-	ktime_t now = ktime_get(), delta;
-
-	delta = ktime_sub(now, stats->last_time);
-	stats->time_in_state[stats->state] =
-		ktime_add(stats->time_in_state[stats->state], delta);
-	stats->last_time = now;
-}
-
-void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
-					 unsigned long new_state)
-{
-	struct cooling_dev_stats *stats = cdev->stats;
-
-	if (!stats)
-		return;
-
-	spin_lock(&stats->lock);
-
-	if (stats->state == new_state)
-		goto unlock;
-
-	update_time_in_state(stats);
-	stats->trans_table[stats->state * stats->max_states + new_state]++;
-	stats->state = new_state;
-	stats->total_trans++;
-
-unlock:
-	spin_unlock(&stats->lock);
-}
-
-static ssize_t total_trans_show(struct device *dev,
-				struct device_attribute *attr, char *buf)
-{
-	struct thermal_cooling_device *cdev = to_cooling_device(dev);
-	struct cooling_dev_stats *stats = cdev->stats;
-	int ret;
-
-	spin_lock(&stats->lock);
-	ret = sprintf(buf, "%u\n", stats->total_trans);
-	spin_unlock(&stats->lock);
-
-	return ret;
-}
-
-static ssize_t
-time_in_state_ms_show(struct device *dev, struct device_attribute *attr,
-		      char *buf)
-{
-	struct thermal_cooling_device *cdev = to_cooling_device(dev);
-	struct cooling_dev_stats *stats = cdev->stats;
-	ssize_t len = 0;
-	int i;
-
-	spin_lock(&stats->lock);
-	update_time_in_state(stats);
-
-	for (i = 0; i < stats->max_states; i++) {
-		len += sprintf(buf + len, "state%u\t%llu\n", i,
-			       ktime_to_ms(stats->time_in_state[i]));
-	}
-	spin_unlock(&stats->lock);
-
-	return len;
-}
-
-static ssize_t
-reset_store(struct device *dev, struct device_attribute *attr, const char *buf,
-	    size_t count)
-{
-	struct thermal_cooling_device *cdev = to_cooling_device(dev);
-	struct cooling_dev_stats *stats = cdev->stats;
-	int i, states = stats->max_states;
-
-	spin_lock(&stats->lock);
-
-	stats->total_trans = 0;
-	stats->last_time = ktime_get();
-	memset(stats->trans_table, 0,
-	       states * states * sizeof(*stats->trans_table));
-
-	for (i = 0; i < stats->max_states; i++)
-		stats->time_in_state[i] = ktime_set(0, 0);
-
-	spin_unlock(&stats->lock);
-
-	return count;
-}
-
-static ssize_t trans_table_show(struct device *dev,
-				struct device_attribute *attr, char *buf)
-{
-	struct thermal_cooling_device *cdev = to_cooling_device(dev);
-	struct cooling_dev_stats *stats = cdev->stats;
-	ssize_t len = 0;
-	int i, j;
-
-	len += snprintf(buf + len, PAGE_SIZE - len, " From  :    To\n");
-	len += snprintf(buf + len, PAGE_SIZE - len, "       : ");
-	for (i = 0; i < stats->max_states; i++) {
-		if (len >= PAGE_SIZE)
-			break;
-		len += snprintf(buf + len, PAGE_SIZE - len, "state%2u  ", i);
-	}
-	if (len >= PAGE_SIZE)
-		return PAGE_SIZE;
-
-	len += snprintf(buf + len, PAGE_SIZE - len, "\n");
-
-	for (i = 0; i < stats->max_states; i++) {
-		if (len >= PAGE_SIZE)
-			break;
-
-		len += snprintf(buf + len, PAGE_SIZE - len, "state%2u:", i);
-
-		for (j = 0; j < stats->max_states; j++) {
-			if (len >= PAGE_SIZE)
-				break;
-			len += snprintf(buf + len, PAGE_SIZE - len, "%8u ",
-				stats->trans_table[i * stats->max_states + j]);
-		}
-		if (len >= PAGE_SIZE)
-			break;
-		len += snprintf(buf + len, PAGE_SIZE - len, "\n");
-	}
-
-	if (len >= PAGE_SIZE) {
-		pr_warn_once("Thermal transition table exceeds PAGE_SIZE. Disabling\n");
-		return -EFBIG;
-	}
-	return len;
-}
-
-static DEVICE_ATTR_RO(total_trans);
-static DEVICE_ATTR_RO(time_in_state_ms);
-static DEVICE_ATTR_WO(reset);
-static DEVICE_ATTR_RO(trans_table);
-
-static struct attribute *cooling_device_stats_attrs[] = {
-	&dev_attr_total_trans.attr,
-	&dev_attr_time_in_state_ms.attr,
-	&dev_attr_reset.attr,
-	&dev_attr_trans_table.attr,
-	NULL
-};
-
-static const struct attribute_group cooling_device_stats_attr_group = {
-	.attrs = cooling_device_stats_attrs,
-	.name = "stats"
-};
-
-static void cooling_device_stats_setup(struct thermal_cooling_device *cdev)
-{
-	struct cooling_dev_stats *stats;
-	unsigned long states;
-	int var;
-
-	if (cdev->ops->get_max_state(cdev, &states))
-		return;
-
-	states++; /* Total number of states is highest state + 1 */
-
-	var = sizeof(*stats);
-	var += sizeof(*stats->time_in_state) * states;
-	var += sizeof(*stats->trans_table) * states * states;
-
-	stats = kzalloc(var, GFP_KERNEL);
-	if (!stats)
-		return;
-
-	stats->time_in_state = (ktime_t *)(stats + 1);
-	stats->trans_table = (unsigned int *)(stats->time_in_state + states);
-	cdev->stats = stats;
-	stats->last_time = ktime_get();
-	stats->max_states = states;
-
-	spin_lock_init(&stats->lock);
-
-	/* Fill the empty slot left in cooling_device_attr_groups */
-	var = ARRAY_SIZE(cooling_device_attr_groups) - 2;
-	cooling_device_attr_groups[var] = &cooling_device_stats_attr_group;
-}
-
-static void cooling_device_stats_destroy(struct thermal_cooling_device *cdev)
-{
-	kfree(cdev->stats);
-	cdev->stats = NULL;
-}
-
-#else
-
-static inline void
-cooling_device_stats_setup(struct thermal_cooling_device *cdev) {}
-static inline void
-cooling_device_stats_destroy(struct thermal_cooling_device *cdev) {}
-
-#endif /* CONFIG_THERMAL_STATISTICS */
-
 void thermal_cooling_device_setup_sysfs(struct thermal_cooling_device *cdev)
 {
-	cooling_device_stats_setup(cdev);
 	cdev->device.groups = cooling_device_attr_groups;
 }
 
-void thermal_cooling_device_destroy_sysfs(struct thermal_cooling_device *cdev)
-{
-	cooling_device_stats_destroy(cdev);
-}
-
 /* these helper will be used only at the time of bindig */
 ssize_t
 trip_point_show(struct device *dev, struct device_attribute *attr, char *buf)
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index 4a69e8a6868e..522c9180a08d 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -96,7 +96,6 @@ struct thermal_cooling_device {
 	struct device device;
 	struct device_node *np;
 	void *devdata;
-	void *stats;
 	const struct thermal_cooling_device_ops *ops;
 	bool updated; /* true if the cooling device does not need update */
 	struct mutex lock; /* protect thermal_instances list */
