18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Intel Low Power Subsystem clocks.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2013, Intel Corporation
68c2ecf20Sopenharmony_ci * Authors: Mika Westerberg <mika.westerberg@linux.intel.com>
78c2ecf20Sopenharmony_ci *	    Heikki Krogerus <heikki.krogerus@linux.intel.com>
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/clk-provider.h>
118c2ecf20Sopenharmony_ci#include <linux/err.h>
128c2ecf20Sopenharmony_ci#include <linux/module.h>
138c2ecf20Sopenharmony_ci#include <linux/platform_data/x86/clk-lpss.h>
148c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic int lpt_clk_probe(struct platform_device *pdev)
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	struct lpss_clk_data *drvdata;
198c2ecf20Sopenharmony_ci	struct clk *clk;
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
228c2ecf20Sopenharmony_ci	if (!drvdata)
238c2ecf20Sopenharmony_ci		return -ENOMEM;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	/* LPSS free running clock */
268c2ecf20Sopenharmony_ci	drvdata->name = "lpss_clk";
278c2ecf20Sopenharmony_ci	clk = clk_register_fixed_rate(&pdev->dev, drvdata->name, NULL,
288c2ecf20Sopenharmony_ci				      0, 100000000);
298c2ecf20Sopenharmony_ci	if (IS_ERR(clk))
308c2ecf20Sopenharmony_ci		return PTR_ERR(clk);
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	drvdata->clk = clk;
338c2ecf20Sopenharmony_ci	platform_set_drvdata(pdev, drvdata);
348c2ecf20Sopenharmony_ci	return 0;
358c2ecf20Sopenharmony_ci}
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistatic struct platform_driver lpt_clk_driver = {
388c2ecf20Sopenharmony_ci	.driver = {
398c2ecf20Sopenharmony_ci		.name = "clk-lpt",
408c2ecf20Sopenharmony_ci	},
418c2ecf20Sopenharmony_ci	.probe = lpt_clk_probe,
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciint __init lpt_clk_init(void)
458c2ecf20Sopenharmony_ci{
468c2ecf20Sopenharmony_ci	return platform_driver_register(&lpt_clk_driver);
478c2ecf20Sopenharmony_ci}
48