Path: blob/master/drivers/hid/amd-sfh-hid/amd_sfh_common.h
26282 views
/* SPDX-License-Identifier: GPL-2.0-or-later */1/*2* AMD MP2 common macros and structures3*4* Copyright (c) 2022, Advanced Micro Devices, Inc.5* All Rights Reserved.6*7* Author: Basavaraj Natikar <[email protected]>8*/9#ifndef AMD_SFH_COMMON_H10#define AMD_SFH_COMMON_H1112#include <linux/pci.h>13#include "amd_sfh_hid.h"1415#define PCI_DEVICE_ID_AMD_MP2 0x15E416#define PCI_DEVICE_ID_AMD_MP2_1_1 0x164A1718#define AMD_C2P_MSG(regno) (0x10500 + ((regno) * 4))19#define AMD_P2C_MSG(regno) (0x10680 + ((regno) * 4))2021#define AMD_C2P_MSG_V1(regno) (0x10900 + ((regno) * 4))22#define AMD_P2C_MSG_V1(regno) (0x10500 + ((regno) * 4))2324#define SENSOR_ENABLED 425#define SENSOR_DISABLED 52627#define AMD_SFH_IDLE_LOOP 2002829enum cmd_id {30NO_OP,31ENABLE_SENSOR,32DISABLE_SENSOR,33STOP_ALL_SENSORS = 8,34};3536struct amd_mp2_sensor_info {37u8 sensor_idx;38u32 period;39dma_addr_t dma_address;40};4142struct sfh_dev_status {43bool is_hpd_present;44bool is_hpd_enabled;45bool is_als_present;46bool is_sra_present;47};4849struct amd_mp2_dev {50struct pci_dev *pdev;51struct amdtp_cl_data *cl_data;52void __iomem *mmio;53void __iomem *vsbase;54const struct amd_sfh1_1_ops *sfh1_1_ops;55struct amd_mp2_ops *mp2_ops;56struct amd_input_data in_data;57/* mp2 active control status */58u32 mp2_acs;59struct sfh_dev_status dev_en;60struct work_struct work;61u8 init_done;62u8 rver;63};6465struct amd_mp2_ops {66void (*start)(struct amd_mp2_dev *privdata, struct amd_mp2_sensor_info info);67void (*stop)(struct amd_mp2_dev *privdata, u16 sensor_idx);68void (*stop_all)(struct amd_mp2_dev *privdata);69int (*response)(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_sts);70void (*clear_intr)(struct amd_mp2_dev *privdata);71int (*init_intr)(struct amd_mp2_dev *privdata);72int (*discovery_status)(struct amd_mp2_dev *privdata);73void (*suspend)(struct amd_mp2_dev *mp2);74void (*resume)(struct amd_mp2_dev *mp2);75void (*remove)(void *privdata);76int (*get_rep_desc)(int sensor_idx, u8 rep_desc[]);77u32 (*get_desc_sz)(int sensor_idx, int descriptor_name);78u8 (*get_feat_rep)(int sensor_idx, int report_id, u8 *feature_report);79u8 (*get_in_rep)(u8 current_index, int sensor_idx, int report_id,80struct amd_input_data *in_data);81};8283void amd_sfh_work(struct work_struct *work);84void amd_sfh_work_buffer(struct work_struct *work);85void amd_sfh_clear_intr_v2(struct amd_mp2_dev *privdata);86int amd_sfh_irq_init_v2(struct amd_mp2_dev *privdata);87void amd_sfh_clear_intr(struct amd_mp2_dev *privdata);88int amd_sfh_irq_init(struct amd_mp2_dev *privdata);8990static inline u64 amd_get_c2p_val(struct amd_mp2_dev *mp2, u32 idx)91{92return mp2->rver == 1 ? AMD_C2P_MSG_V1(idx) : AMD_C2P_MSG(idx);93}9495static inline u64 amd_get_p2c_val(struct amd_mp2_dev *mp2, u32 idx)96{97return mp2->rver == 1 ? AMD_P2C_MSG_V1(idx) : AMD_P2C_MSG(idx);98}99#endif100101102