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