xref: /linux/drivers/clk/x86/clk-lpss-atom.c (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1*cf0a9565SAndy Shevchenko // SPDX-License-Identifier: GPL-2.0-only
2*cf0a9565SAndy Shevchenko /*
3*cf0a9565SAndy Shevchenko  * Intel Low Power Subsystem clocks.
4*cf0a9565SAndy Shevchenko  *
5*cf0a9565SAndy Shevchenko  * Copyright (C) 2013, Intel Corporation
6*cf0a9565SAndy Shevchenko  * Authors: Mika Westerberg <mika.westerberg@linux.intel.com>
7*cf0a9565SAndy Shevchenko  *	    Heikki Krogerus <heikki.krogerus@linux.intel.com>
8*cf0a9565SAndy Shevchenko  */
9*cf0a9565SAndy Shevchenko 
10*cf0a9565SAndy Shevchenko #include <linux/clk-provider.h>
11*cf0a9565SAndy Shevchenko #include <linux/err.h>
12*cf0a9565SAndy Shevchenko #include <linux/module.h>
13*cf0a9565SAndy Shevchenko #include <linux/platform_data/x86/clk-lpss.h>
14*cf0a9565SAndy Shevchenko #include <linux/platform_device.h>
15*cf0a9565SAndy Shevchenko 
lpss_atom_clk_probe(struct platform_device * pdev)16*cf0a9565SAndy Shevchenko static int lpss_atom_clk_probe(struct platform_device *pdev)
17*cf0a9565SAndy Shevchenko {
18*cf0a9565SAndy Shevchenko 	struct lpss_clk_data *drvdata;
19*cf0a9565SAndy Shevchenko 	struct clk *clk;
20*cf0a9565SAndy Shevchenko 
21*cf0a9565SAndy Shevchenko 	drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
22*cf0a9565SAndy Shevchenko 	if (!drvdata)
23*cf0a9565SAndy Shevchenko 		return -ENOMEM;
24*cf0a9565SAndy Shevchenko 
25*cf0a9565SAndy Shevchenko 	/* LPSS free running clock */
26*cf0a9565SAndy Shevchenko 	drvdata->name = "lpss_clk";
27*cf0a9565SAndy Shevchenko 	clk = clk_register_fixed_rate(&pdev->dev, drvdata->name, NULL,
28*cf0a9565SAndy Shevchenko 				      0, 100000000);
29*cf0a9565SAndy Shevchenko 	if (IS_ERR(clk))
30*cf0a9565SAndy Shevchenko 		return PTR_ERR(clk);
31*cf0a9565SAndy Shevchenko 
32*cf0a9565SAndy Shevchenko 	drvdata->clk = clk;
33*cf0a9565SAndy Shevchenko 	platform_set_drvdata(pdev, drvdata);
34*cf0a9565SAndy Shevchenko 	return 0;
35*cf0a9565SAndy Shevchenko }
36*cf0a9565SAndy Shevchenko 
37*cf0a9565SAndy Shevchenko static struct platform_driver lpss_atom_clk_driver = {
38*cf0a9565SAndy Shevchenko 	.driver = {
39*cf0a9565SAndy Shevchenko 		.name = "clk-lpss-atom",
40*cf0a9565SAndy Shevchenko 	},
41*cf0a9565SAndy Shevchenko 	.probe = lpss_atom_clk_probe,
42*cf0a9565SAndy Shevchenko };
43*cf0a9565SAndy Shevchenko 
lpss_atom_clk_init(void)44*cf0a9565SAndy Shevchenko int __init lpss_atom_clk_init(void)
45*cf0a9565SAndy Shevchenko {
46*cf0a9565SAndy Shevchenko 	return platform_driver_register(&lpss_atom_clk_driver);
47*cf0a9565SAndy Shevchenko }
48