162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * AMD MP2 common macros and structures 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2022, Advanced Micro Devices, Inc. 662306a36Sopenharmony_ci * All Rights Reserved. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#ifndef AMD_SFH_COMMON_H 1162306a36Sopenharmony_ci#define AMD_SFH_COMMON_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/pci.h> 1462306a36Sopenharmony_ci#include "amd_sfh_hid.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define PCI_DEVICE_ID_AMD_MP2 0x15E4 1762306a36Sopenharmony_ci#define PCI_DEVICE_ID_AMD_MP2_1_1 0x164A 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define AMD_C2P_MSG(regno) (0x10500 + ((regno) * 4)) 2062306a36Sopenharmony_ci#define AMD_P2C_MSG(regno) (0x10680 + ((regno) * 4)) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define SENSOR_ENABLED 4 2362306a36Sopenharmony_ci#define SENSOR_DISABLED 5 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define AMD_SFH_IDLE_LOOP 200 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cienum cmd_id { 2862306a36Sopenharmony_ci NO_OP, 2962306a36Sopenharmony_ci ENABLE_SENSOR, 3062306a36Sopenharmony_ci DISABLE_SENSOR, 3162306a36Sopenharmony_ci STOP_ALL_SENSORS = 8, 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct amd_mp2_sensor_info { 3562306a36Sopenharmony_ci u8 sensor_idx; 3662306a36Sopenharmony_ci u32 period; 3762306a36Sopenharmony_ci dma_addr_t dma_address; 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct amd_mp2_dev { 4162306a36Sopenharmony_ci struct pci_dev *pdev; 4262306a36Sopenharmony_ci struct amdtp_cl_data *cl_data; 4362306a36Sopenharmony_ci void __iomem *mmio; 4462306a36Sopenharmony_ci void __iomem *vsbase; 4562306a36Sopenharmony_ci const struct amd_sfh1_1_ops *sfh1_1_ops; 4662306a36Sopenharmony_ci struct amd_mp2_ops *mp2_ops; 4762306a36Sopenharmony_ci struct amd_input_data in_data; 4862306a36Sopenharmony_ci /* mp2 active control status */ 4962306a36Sopenharmony_ci u32 mp2_acs; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistruct amd_mp2_ops { 5362306a36Sopenharmony_ci void (*start)(struct amd_mp2_dev *privdata, struct amd_mp2_sensor_info info); 5462306a36Sopenharmony_ci void (*stop)(struct amd_mp2_dev *privdata, u16 sensor_idx); 5562306a36Sopenharmony_ci void (*stop_all)(struct amd_mp2_dev *privdata); 5662306a36Sopenharmony_ci int (*response)(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_sts); 5762306a36Sopenharmony_ci void (*clear_intr)(struct amd_mp2_dev *privdata); 5862306a36Sopenharmony_ci int (*init_intr)(struct amd_mp2_dev *privdata); 5962306a36Sopenharmony_ci int (*discovery_status)(struct amd_mp2_dev *privdata); 6062306a36Sopenharmony_ci void (*suspend)(struct amd_mp2_dev *mp2); 6162306a36Sopenharmony_ci void (*resume)(struct amd_mp2_dev *mp2); 6262306a36Sopenharmony_ci void (*remove)(void *privdata); 6362306a36Sopenharmony_ci int (*get_rep_desc)(int sensor_idx, u8 rep_desc[]); 6462306a36Sopenharmony_ci u32 (*get_desc_sz)(int sensor_idx, int descriptor_name); 6562306a36Sopenharmony_ci u8 (*get_feat_rep)(int sensor_idx, int report_id, u8 *feature_report); 6662306a36Sopenharmony_ci u8 (*get_in_rep)(u8 current_index, int sensor_idx, int report_id, 6762306a36Sopenharmony_ci struct amd_input_data *in_data); 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_civoid amd_sfh_work(struct work_struct *work); 7162306a36Sopenharmony_civoid amd_sfh_work_buffer(struct work_struct *work); 7262306a36Sopenharmony_civoid amd_sfh_clear_intr_v2(struct amd_mp2_dev *privdata); 7362306a36Sopenharmony_ciint amd_sfh_irq_init_v2(struct amd_mp2_dev *privdata); 7462306a36Sopenharmony_civoid amd_sfh_clear_intr(struct amd_mp2_dev *privdata); 7562306a36Sopenharmony_ciint amd_sfh_irq_init(struct amd_mp2_dev *privdata); 7662306a36Sopenharmony_ci#endif 77