1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * isst_tpmi.c: SST TPMI interface
4 *
5 * Copyright (c) 2023, Intel Corporation.
6 * All Rights Reserved.
7 *
8 */
9
10#include <linux/auxiliary_bus.h>
11#include <linux/module.h>
12#include <linux/intel_tpmi.h>
13
14#include "isst_tpmi_core.h"
15
16static int intel_sst_probe(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id)
17{
18	int ret;
19
20	ret = tpmi_sst_init();
21	if (ret)
22		return ret;
23
24	ret = tpmi_sst_dev_add(auxdev);
25	if (ret)
26		tpmi_sst_exit();
27
28	return ret;
29}
30
31static void intel_sst_remove(struct auxiliary_device *auxdev)
32{
33	tpmi_sst_dev_remove(auxdev);
34	tpmi_sst_exit();
35}
36
37static int intel_sst_suspend(struct device *dev)
38{
39	tpmi_sst_dev_suspend(to_auxiliary_dev(dev));
40
41	return 0;
42}
43
44static int intel_sst_resume(struct device *dev)
45{
46	tpmi_sst_dev_resume(to_auxiliary_dev(dev));
47
48	return 0;
49}
50
51static DEFINE_SIMPLE_DEV_PM_OPS(intel_sst_pm, intel_sst_suspend, intel_sst_resume);
52
53static const struct auxiliary_device_id intel_sst_id_table[] = {
54	{ .name = "intel_vsec.tpmi-sst" },
55	{}
56};
57MODULE_DEVICE_TABLE(auxiliary, intel_sst_id_table);
58
59static struct auxiliary_driver intel_sst_aux_driver = {
60	.id_table       = intel_sst_id_table,
61	.remove         = intel_sst_remove,
62	.probe          = intel_sst_probe,
63	.driver = {
64		.pm = pm_sleep_ptr(&intel_sst_pm),
65	},
66};
67
68module_auxiliary_driver(intel_sst_aux_driver);
69
70MODULE_IMPORT_NS(INTEL_TPMI_SST);
71MODULE_DESCRIPTION("Intel TPMI SST Driver");
72MODULE_LICENSE("GPL");
73