18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * PM domain driver for Keystone2 devices
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright 2013 Texas Instruments, Inc.
68c2ecf20Sopenharmony_ci *	Santosh Shilimkar <santosh.shillimkar@ti.com>
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * Based on Kevins work on DAVINCI SOCs
98c2ecf20Sopenharmony_ci *	Kevin Hilman <khilman@linaro.org>
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/init.h>
138c2ecf20Sopenharmony_ci#include <linux/pm_runtime.h>
148c2ecf20Sopenharmony_ci#include <linux/pm_clock.h>
158c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
168c2ecf20Sopenharmony_ci#include <linux/of.h>
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#include "keystone.h"
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic struct dev_pm_domain keystone_pm_domain = {
218c2ecf20Sopenharmony_ci	.ops = {
228c2ecf20Sopenharmony_ci		USE_PM_CLK_RUNTIME_OPS
238c2ecf20Sopenharmony_ci		USE_PLATFORM_PM_SLEEP_OPS
248c2ecf20Sopenharmony_ci	},
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistatic struct pm_clk_notifier_block platform_domain_notifier = {
288c2ecf20Sopenharmony_ci	.pm_domain = &keystone_pm_domain,
298c2ecf20Sopenharmony_ci	.con_ids = { NULL },
308c2ecf20Sopenharmony_ci};
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistatic const struct of_device_id of_keystone_table[] = {
338c2ecf20Sopenharmony_ci	{.compatible = "ti,k2hk"},
348c2ecf20Sopenharmony_ci	{.compatible = "ti,k2e"},
358c2ecf20Sopenharmony_ci	{.compatible = "ti,k2l"},
368c2ecf20Sopenharmony_ci	{ /* end of list */ },
378c2ecf20Sopenharmony_ci};
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ciint __init keystone_pm_runtime_init(void)
408c2ecf20Sopenharmony_ci{
418c2ecf20Sopenharmony_ci	struct device_node *np;
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci	np = of_find_matching_node(NULL, of_keystone_table);
448c2ecf20Sopenharmony_ci	if (!np)
458c2ecf20Sopenharmony_ci		return 0;
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci	pm_clk_add_notifier(&platform_bus_type, &platform_domain_notifier);
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci	return 0;
508c2ecf20Sopenharmony_ci}
51