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