18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2009 Lemote Inc.
48c2ecf20Sopenharmony_ci * Author: Wu Zhangjin, wuzhangjin@gmail.com
58c2ecf20Sopenharmony_ci *         Xiang Yu, xiangy@lemote.com
68c2ecf20Sopenharmony_ci *         Chen Huacai, chenhc@lemote.com
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/err.h>
108c2ecf20Sopenharmony_ci#include <linux/slab.h>
118c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
128c2ecf20Sopenharmony_ci#include <asm/bootinfo.h>
138c2ecf20Sopenharmony_ci#include <boot_param.h>
148c2ecf20Sopenharmony_ci#include <loongson_hwmon.h>
158c2ecf20Sopenharmony_ci#include <workarounds.h>
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistatic int __init loongson3_platform_init(void)
188c2ecf20Sopenharmony_ci{
198c2ecf20Sopenharmony_ci	int i;
208c2ecf20Sopenharmony_ci	struct platform_device *pdev;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	if (loongson_sysconf.ecname[0] != '\0')
238c2ecf20Sopenharmony_ci		platform_device_register_simple(loongson_sysconf.ecname, -1, NULL, 0);
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	for (i = 0; i < loongson_sysconf.nr_sensors; i++) {
268c2ecf20Sopenharmony_ci		if (loongson_sysconf.sensors[i].type > SENSOR_FAN)
278c2ecf20Sopenharmony_ci			continue;
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci		pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL);
308c2ecf20Sopenharmony_ci		if (!pdev)
318c2ecf20Sopenharmony_ci			return -ENOMEM;
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci		pdev->name = loongson_sysconf.sensors[i].name;
348c2ecf20Sopenharmony_ci		pdev->id = loongson_sysconf.sensors[i].id;
358c2ecf20Sopenharmony_ci		pdev->dev.platform_data = &loongson_sysconf.sensors[i];
368c2ecf20Sopenharmony_ci		platform_device_register(pdev);
378c2ecf20Sopenharmony_ci	}
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	return 0;
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciarch_initcall(loongson3_platform_init);
43