xref: /openbmc/linux/drivers/hid/amd-sfh-hid/amd_sfh_common.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  /*
3   * AMD MP2 common macros and structures
4   *
5   * Copyright (c) 2022, Advanced Micro Devices, Inc.
6   * All Rights Reserved.
7   *
8   * Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
9   */
10  #ifndef AMD_SFH_COMMON_H
11  #define AMD_SFH_COMMON_H
12  
13  #include <linux/pci.h>
14  #include "amd_sfh_hid.h"
15  
16  #define PCI_DEVICE_ID_AMD_MP2		0x15E4
17  #define PCI_DEVICE_ID_AMD_MP2_1_1	0x164A
18  
19  #define AMD_C2P_MSG(regno) (0x10500 + ((regno) * 4))
20  #define AMD_P2C_MSG(regno) (0x10680 + ((regno) * 4))
21  
22  #define SENSOR_ENABLED			4
23  #define SENSOR_DISABLED			5
24  
25  #define AMD_SFH_IDLE_LOOP		200
26  
27  enum cmd_id {
28  	NO_OP,
29  	ENABLE_SENSOR,
30  	DISABLE_SENSOR,
31  	STOP_ALL_SENSORS = 8,
32  };
33  
34  struct amd_mp2_sensor_info {
35  	u8 sensor_idx;
36  	u32 period;
37  	dma_addr_t dma_address;
38  };
39  
40  struct amd_mp2_dev {
41  	struct pci_dev *pdev;
42  	struct amdtp_cl_data *cl_data;
43  	void __iomem *mmio;
44  	void __iomem *vsbase;
45  	const struct amd_sfh1_1_ops *sfh1_1_ops;
46  	struct amd_mp2_ops *mp2_ops;
47  	struct amd_input_data in_data;
48  	/* mp2 active control status */
49  	u32 mp2_acs;
50  };
51  
52  struct amd_mp2_ops {
53  	void (*start)(struct amd_mp2_dev *privdata, struct amd_mp2_sensor_info info);
54  	void (*stop)(struct amd_mp2_dev *privdata, u16 sensor_idx);
55  	void (*stop_all)(struct amd_mp2_dev *privdata);
56  	int (*response)(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_sts);
57  	void (*clear_intr)(struct amd_mp2_dev *privdata);
58  	int (*init_intr)(struct amd_mp2_dev *privdata);
59  	int (*discovery_status)(struct amd_mp2_dev *privdata);
60  	void (*suspend)(struct amd_mp2_dev *mp2);
61  	void (*resume)(struct amd_mp2_dev *mp2);
62  	void (*remove)(void *privdata);
63  	int (*get_rep_desc)(int sensor_idx, u8 rep_desc[]);
64  	u32 (*get_desc_sz)(int sensor_idx, int descriptor_name);
65  	u8 (*get_feat_rep)(int sensor_idx, int report_id, u8 *feature_report);
66  	u8 (*get_in_rep)(u8 current_index, int sensor_idx, int report_id,
67  			 struct amd_input_data *in_data);
68  };
69  
70  void amd_sfh_work(struct work_struct *work);
71  void amd_sfh_work_buffer(struct work_struct *work);
72  void amd_sfh_clear_intr_v2(struct amd_mp2_dev *privdata);
73  int amd_sfh_irq_init_v2(struct amd_mp2_dev *privdata);
74  void amd_sfh_clear_intr(struct amd_mp2_dev *privdata);
75  int amd_sfh_irq_init(struct amd_mp2_dev *privdata);
76  #endif
77