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